Симулятор GHDL не поддерживает атрибуты VHDL без ошибок? - PullRequest
1 голос
/ 04 июня 2019

Я написал несколько RTL vivado, а затем добавил некоторые атрибуты 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, чтобы я мог добавить эти атрибуты, и симулятор проигнорирует их, а не выдаст ошибку и ошибку?

Ответы [ 3 ]

3 голосов
/ 05 июня 2019

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

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

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

Синтез Vivado в Xilinx исторически использует в своих интересах поведение 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 запросил второе мнение о том, что этот ответ действителен.

1 голос
/ 04 июня 2019

Видимо, вы используете VHDL2008.

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

0 голосов
/ 12 июня 2019

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

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

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

...