Недопустимый синтаксис для указания подтипа VHDL200X

Я пытаюсь создать «динамический» 2D-массив, который я могу установить с помощью дженериков в своей сущности.

Я следовал примеру в https://s3.amazonaws.com/verificationhorizons.verificationacademy.com/volume-8_issue-3/articles/stream/vhdl-2008-why-it-matters_vh-v8-i3.pdf на стр. 32.

Объявление моего типа в пакете (TypeDeclarations):

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

package TypeDeclarations is

-- Type BusArray -----------------------------------------------------
-- Can be used by: DArray((Y - 1) downto 0)((X - 1) downto 0);      --
                                                                    --
    type TArray is array (natural range <>) of std_logic_vector;    --
                                                                    --
----------------------------------------------------------------------
end package;

моя сущность:

-- Libraries
library ieee;
use ieee.std_logic_1164.all;

-- Own libraries
use work.TypeDeclarations.all;

entity DynamicRegisterSet is
    generic (
        INPUT_DATAWIDTH  : integer := 1;
        OUTPUT_DATAWIDTH : integer := 8;
        N_REGISTERS      : integer := 1);
    port (
        MCLK : in std_logic := '0';
        WE   : in std_logic := '0';

        -- input data
        DATA : in std_logic_vector((INPUT_DATAWIDTH-1) downto 0) := (others => '0');
        SEL  : in integer range 0 to (INPUT_DATAWIDTH-1) := 0;

        -- in/output data (register set)
        REGISTERSET : inout TArray((N_REGISTERS-1) downto 0)((OUTPUT_DATAWIDTH-1) downto 0) := (others => (others => '0')));
end DynamicRegisterSet;

Это первый раз, когда я использую обновленный компилятор (VHDL200X), я не думаю, что делаю это неправильно, но иначе я бы не получил это сообщение:

VHDL\CommonBlocks\DynamicRegisterSet\Sources\DynamicRegisterSet.vhd" Строка 25: недопустимый синтаксис для указания подтипа

У кого-нибудь есть предложения? Буду очень признателен, спасибо!


person MVT    schedule 02.05.2016    source источник
comment
Там не опубликовано 49 строк кода...   -  person user_1818839    schedule 02.05.2016
comment
строки до этого являются комментариями, он выдает ошибку в REGISTERSET: это строка 49   -  person MVT    schedule 02.05.2016
comment
Какой инструмент вы используете?   -  person Paebbels    schedule 02.05.2016
comment
Эта информация должна быть в вопросе, а не в комментарии. Еще лучше скомпилируйте то, что вы публикуете, чтобы ошибки соответствовали коду.   -  person user_1818839    schedule 02.05.2016
comment
@Paebbels Я использую xilinx ISE 14.7 (64 бит)   -  person MVT    schedule 02.05.2016
comment
@BrianDrummond Я обновил ошибку, чтобы она соответствовала коду, который я разместил   -  person MVT    schedule 02.05.2016
comment
@Paebbels приходят снова? у него есть возможность переключать компилятор, поддерживает ли он половину функций?   -  person MVT    schedule 02.05.2016


Ответы (2)


Xilinx ISE 14.7 не поддерживает VHDL-2008...

Они поддерживают множество функций VHDL-2002/2008, но элементы массива без ограничений не поддерживаются.

Vivado добавила поддержку VHDL-2008 в 2016.1 и установила ее по умолчанию. Но, насколько я понимаю, это не полная поддержка VHDL-2008.

Существует руководство пользователя синтеза Xilinx XST, в котором эти функции перечислены в разделе VHDL. (Извините, у меня нет номера UG на моем телефоне.)

person Paebbels    schedule 02.05.2016
comment
Все в порядке, спасибо за поддержку, я просто сбит с толку. Я думал, что это изменение было своего рода официальным и настолько небольшим, что я подумал, что оно было реализовано полностью, чтобы сохранить совместимость VHDL-проектов. Я думаю, что я был неправ :). Знаете ли вы, для каких-либо изменений, что это также относится к другим производителям FPGA? - person MVT; 02.05.2016
comment
Поддержка 2008 года в Altera Quartus Prime и Lattice Diamond лучше. У меня нет информации о Symplify, но я подозреваю, что он стал лучше. - person Paebbels; 02.05.2016
comment
Сейчас я использую решетку алмаза, но теперь я получаю ту же ошибку при попытке создать тестовый стенд: p это еще не конец - person MVT; 03.05.2016
comment
Вы включили VHDL-2008 для Diamond? Использование 2008 в синтезе (x) или тестовом стенде - это две совершенно разные вещи ... Вы моделируете с помощью Active-HDL? - person Paebbels; 03.05.2016
comment
Дважды щелкните активную стратегию дизайна, например. Область, перейдите в дереве Процесс к Синтезировать проект > LSE. Затем прокрутите вниз и установите для параметра VHDL 2008 значение True. (Моя версия Diamond 3.7) - person Paebbels; 03.05.2016
comment
Хм, сделал это для synplify pro и LSE, моя версия Diamond тоже 3.7, и я использую synplify pro. У меня все еще не работает, я также не могу генерировать схематические символы. Может быть, мне нужно сначала создать иерархию? Я видел, как кто-то делал это в учебнике по созданию и тестированию дизайна, хотя это было в более старой версии, и я не мог найти эту опцию. - person MVT; 04.05.2016

ИСЭ

ISE вообще не поддерживает VHDL-2008. Дополнительные сведения см. на форуме Xilinx или на Руководство по XST ISE12 ISE14

Поддерживаемые стандарты VHDL IEEE

XST поддерживает следующие стандарты VHDL IEEE:

  • Стандарт 1076-1987
  • Стандарт 1076-1993
  • Стандарт1076-2006

Примечание Стандарт 1076-2006 реализован лишь частично.

Вивадо

Vivado имеет набор синтезируемых конструкций VHDL-2008. Подробнее читайте в UG901 (Поддерживаемые функции VHDL-2008)

person betontalpfa    schedule 21.02.2019