Симулятор GHDL не поддерживает атрибуты vhdl без ошибок?

Я написал несколько vivado RTL, а затем добавил несколько атрибутов vhdl к портам объекта, чтобы определить интерфейс инструмента Xilinx Vivado следующим образом:

library ieee;
use     ieee.std_logic_1164.all;

entity vivado_rtl_island is

port(
    -- Clocks
    i_m50_clk                    :in   std_logic;
    i_m50_rst                    :in   std_logic;                                           

    -- APB Command Inteface
    s_paddr                  :in  std_logic_vector(31 downto 0);   
    s_psel                   :in  std_logic;                       
    s_penable                :in  std_logic;                       
    s_pwrite                 :in  std_logic;                       
    s_pwdata                 :in  std_logic_vector(31 downto 0);   
    s_pready                 :out std_logic;                       
    s_prdata                 :out std_logic_vector(31 downto 0);   
    s_pread                  :out std_logic;
    s_pslverr                :out std_logic
);

end entity;

architecture rtl of vivado_rtl_island is
  -- Define APB Interface for "Vivado IP Integrator"
  ATTRIBUTE X_INTERFACE_INFO:              STRING;
  ATTRIBUTE X_INTERFACE_INFO of s_paddr:   SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PADDR";
  ATTRIBUTE X_INTERFACE_INFO of s_psel:    SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PSEL";
  ATTRIBUTE X_INTERFACE_INFO of s_penable: SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PENABLE";
  ATTRIBUTE X_INTERFACE_INFO of s_pwrite:  SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PWRITE";
  ATTRIBUTE X_INTERFACE_INFO of s_pwdata:  SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PWDATA";
  ATTRIBUTE X_INTERFACE_INFO of s_pready:  SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PREADY";
  ATTRIBUTE X_INTERFACE_INFO of s_prdata:  SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PRDATA";
  ATTRIBUTE X_INTERFACE_INFO of s_pslverr: SIGNAL is "xilinx.com:interface:apb:1.0 APB_S PSLVERR";
begin

 end architecture;

Там я пытаюсь скомпилировать приведенный выше RTL с помощью GHDL следующим образом:

$ ghdl -a --std=08 --ieee=synopsys --work=work  vivado_rtl_island.vhd

GHDL выдает следующую ошибку:

vivado_rtl_island.vhd:28:33: no "s_paddr" for attribute specification
vivado_rtl_island.vhd:29:33: no "s_psel" for attribute specification
vivado_rtl_island.vhd:30:33: no "s_penable" for attribute specification
vivado_rtl_island.vhd:31:33: no "s_pwrite" for attribute specification
vivado_rtl_island.vhd:32:33: no "s_pwdata" for attribute specification
vivado_rtl_island.vhd:33:33: no "s_pready" for attribute specification
vivado_rtl_island.vhd:34:33: no "s_prdata" for attribute specification
vivado_rtl_island.vhd:35:33: no "s_pslverr" for attribute specification

Однако когда я компилирую это с помощью modelsim, это не вызывает ошибки.

Кто-нибудь знает, как обойти эту проблему в GHDL, чтобы я мог добавить эти атрибуты, и симулятор проигнорирует их, а не выдаст ошибку?


person pico    schedule 04.06.2019    source источник
comment
IEEE Std 1076-2008 7.2 Спецификация атрибутов, параграф 9 ... Аналогичным образом, спецификация атрибута для атрибута интерфейсного объекта единицы проектирования, подпрограммы, оператора блока или пакета должна немедленно появляться в декларативной части этой единицы проектирования, подпрограмма, оператор блока или пакет .... Modelsim неправильно "компилирует" ваши спецификации.   -  person    schedule 04.06.2019


Ответы (3)


См. IEEE Std 1076-2008 7.2 Спецификация атрибутов, параграф 9:

Спецификация атрибута для атрибута объявления объекта, архитектуры, конфигурации или пакета должна немедленно появиться в декларативной части этого объявления. Точно так же спецификация атрибута для атрибута интерфейсного объекта единицы дизайна, подпрограммы, оператора блока или пакета должна немедленно появиться в декларативной части этой единицы дизайна, подпрограмма, оператор блока или пакет. Точно так же спецификация атрибута для атрибута интерфейсного объекта единицы проектирования, подпрограммы, оператора блока или пакета должна немедленно появляться в декларативной части этой единицы дизайна, подпрограммы, оператора блока или пакета. ...

Единица дизайна - это объявление сущности (3.2 Объявления сущности), первичная единица (13.1 Единицы дизайна). Это семантическое ограничение присутствовало в каждой редакции IEEE Std 1076 (с -1987 по -2008, до -2008, найденной в спецификации атрибутов 5.2). Modelsim неправильно "компилирует" ваши спецификации.

Синтез Xilinx Vivado исторически использует преимущества поведения Modelsim. Что забавно, Вивадо непоследовательно придерживается семантических требований первого процитированного предложения п. 7.2 выше, которое также встречается в более ранних версиях, но не во втором. Вы можете объявить атрибут сущности в декларативной части сущности, в то время как Vivado, по крайней мере, исторически требовал указать атрибуты на портах в декларативной части архитектуры.

Еще не все потеряно при использовании ghdl. Существует аргумент командной строки, который можно передать во время анализа, чтобы смягчить различные правила, чтобы соответствовать поведению Modelsim, на которое полагаются сторонние инструменты.

ghdl -a --std=08 --ieee=synopsys -frelaxed-rules --work=work vivado_rtl_island.vhdl
vivado_rtl_island.vhdl:28:33:warning: attribute for port "s_paddr" must be specified in the entity [-Wspecs]
vivado_rtl_island.vhdl:29:33:warning: attribute for port "s_psel" must be specified in the entity [-Wspecs]
vivado_rtl_island.vhdl:30:33:warning: attribute for port "s_penable" must be specified in the entity [-Wspecs]
vivado_rtl_island.vhdl:31:33:warning: attribute for port "s_pwrite" must be specified in the entity [-Wspecs]
vivado_rtl_island.vhdl:32:33:warning: attribute for port "s_pwdata" must be specified in the entity [-Wspecs]
vivado_rtl_island.vhdl:33:33:warning: attribute for port "s_pready" must be specified in the entity [-Wspecs]
vivado_rtl_island.vhdl:34:33:warning: attribute for port "s_prdata" must be specified in the entity [-Wspecs]
vivado_rtl_island.vhdl:35:33:warning: attribute for port "s_pslverr" must be specified in the entity [-Wspecs]

Вы можете добавить флаг командной строки -frelaxed-rules, и ошибки будут преобразованы в предупреждения.

Поведение ghdl по умолчанию изменено для стандартной версии -2008. Следует отметить, что без указания --std=08 стандартное соответствие по умолчанию - --std=93c, которое включает -frelaxed-rules и в остальном совместимо с `--std = 93 (-1993). Не существует ревизии -2008 с включенными смягченными правилами.

Причина семантического ограничения проистекает из того, что ведущий (в то время -1987) поставщик не мог реализовать указание атрибута пользователя для порта без прямого доступа к объявлению порта. Хотя этот поставщик, скорее всего, больше не предоставляет продукты VHDL, ограничение остается.

Мы находим различные экземпляры Modelsim, которые эффективно пытаются управлять стандартом, влияя на долю рынка (у них есть -pendanticerrors аргумент командной строки, меняющий множество предупреждений на ошибки).

Разработка ghdl следует их примеру, за исключением того, что строгое соответствие стандарту является нормой (несмотря на --std=93c по умолчанию) с аргументами командной строки, включающими предупреждения вместо ошибок.

Причина этого заключается в том, что те, кто внедряет VHDL, обычно делают это исходя из стандарта, а не путем обратного проектирования поставщика с наибольшей долей рынка.

Описание -frelaxed-rules может быть неполным в документации ghdl. Упоминания можно найти в разделах стандартов VHDL, а также в других разделах. .

Xilinx было проинформировано об этой проблеме. Modelsim, несомненно, знает, чем они отличаются от стандарта, и в настоящее время поставщик не участвует в процессе пересмотра стандарта VHDL.

Просмотр дерева исходных текстов ghdl ghdl-0.35 был выпущен 14 декабря 2017 г., и ошибка 525 исправлено 7 февраля 2018 г. (см. src / vhdl / sem_specs. adb), чтобы добавить атрибуты порта в декларативную часть архитектуры с помощью -frelaxed-rules, чтобы обеспечить текущую функциональность независимо от --std=08 (во время цикла разработки ghdl-0.36).

Также см. Issue 838 Атрибуты поддержки Xilinx Vivado и Modelsim на портах, отличных от GHDL, на github при этом OP запросил второе мнение о том, что этот ответ действителен.

person Community    schedule 05.06.2019
comment
Куда мне добавить -frelaxed-rules, если моя командная строка GHDL выглядит так ?: .......... ghdl.exe -a --std = 08 --ieee = synopsys --work = work ./ testcase.vhd .............. ghdl.exe --elab-run --std = 08 --ieee = synopsys testbench --vcd = waves.vcd --ieee-asserts = disable - person pico; 12.06.2019
comment
Параметры анализа будет следовать за командой -a и предшествовать файлу проекта. То же самое верно и для - пробег, предшествующий основной единице проекта. - person ; 12.06.2019

Очевидно, вы используете VHDL2008.

В VHDL 2008 атрибуты порта объекта должны входить в определение объекта, т.е. вам нужно переместить свои атрибуты перед оператором end entity.

person mfro    schedule 04.06.2019
comment
IEEE Std 1076-2008 7.2 Спецификация атрибутов, параграф 9 ... Аналогичным образом, спецификация атрибута для атрибута интерфейсного объекта единицы проектирования, подпрограммы, оператора блока или пакета должна немедленно появляться в декларативной части этой единицы проектирования, подпрограмма, оператор блока или пакет .... Более ранние версии имеют те же семантические требования, например -1993 5.1 Пункт 9 спецификации атрибута, где должен заменять, должен и имеет то же значение. Не изменение -2008. Объявление и спецификации атрибута могут появиться в декларативной части сущности. - person ; 04.06.2019
comment
end entity не является оператором, это обязательный (end) и необязательный (entity) синтаксис для объявления сущности. VHDL не имеет конечных операторов, а объявления не содержат операторов. - person ; 04.06.2019
comment
@ user1155120 Я уверен, что вы правы (и придирчивый);) - person mfro; 05.06.2019

Скомпилируйте так с GHDL:

ghdl.exe -a -frelaxed-rules --std=08 --ieee=synopsys --work=work ./vivado_rtl_island.vhd

И переместите атрибуты порта в блок архитектуры ... тогда он будет работать согласованно как с Xilinx Vivado, так и с GHDL.

person pico    schedule 12.06.2019