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