Я не уверен, что версия ghdl-0.35 на игровой площадке EDA доходит до обработки --std=08
(-2008) для этой проблемы, не пытаясь ее решить. Недавняя версия ghdl-0.37-dev показывает, что она работает:
ghdl -a --std=08 instruction_processor.vhdl
ghdl -e --std=08 tb
instruction_processor.vhdl:68:8:error: for default port binding of component instance "uut":
instruction_processor.vhdl:68:8:error: type of signal interface "instruction" declared at line 56:9
instruction_processor.vhdl:68:8:error: not compatible with type of port "instruction" declared at line 9:9
instruction_processor.vhdl:68:8:error: signal interface "cycles" has no association in entity "instruction_processor"
ghdl:error: compilation error
, даже если testbench и / или заголовок сущности требуют немного работы. И INSTRUCTION_PROCESSOR, и TB находятся в одном и том же файле проекта, который использовался выше.
Редакция IEEE Std 1076-2008 изменила некоторые определения в 9.4.2 Локально stati c primaries
9.4 .2 Локально stati c primaries
Выражение называется локально stati c тогда и только тогда, когда каждый оператор в выражении обозначает неявно определенный оператор или оператор, определенный в одном из пакетов STD_LOGIC_1164, NUMERIC_BIT, NUMERIC_STD, NUMERIC_BIT_UNSIGNED или NUMERIC_STD_UNSIGNED в библиотеке IEEE, и если каждый первичный элемент в выражении является локально stati c первичным, где локально stati c первичный элемент определяется как один из следующих:
...
m) Совокупность записей, в которой все выражения в ассоциациях элементов являются локально c выражениями.
...
До -2008 a агрегат не может быть локально установлен c. Агрегат - это выражение, которое представляет собой «формулу, которая определяет вычисление значения», ранее всегда глобально stati c для выражения выражения постоянного значения.
Позволяет определенным выражениям быть локально stati c из усилий VHDL-200x, дающих ревизию -2008 (Fast Track Proposal FT-22 ). Идея состоит в том, чтобы выражения с локально установленными c основными цветами, которые производят значения из базовых c или предопределенных операций, в том числе найденных в перечисленных выше пакетах библиотек IEEE, реализованы как чистые функции и не зависят от разработки. Чтобы избежать путаницы, вызов процедуры - это утверждение.
Анализ вашего кода с помощью Alde c Riviera Pro использовала флаг -2008 в соответствии с сессией игровой площадки EDA из вашего комментария :
Если из-за ограничений цепочки инструментов требуется более ранняя версия стандарта, оператор case может быть заменен оператором if или параллельным оператором условного присваивания что подразумевает и если утверждение эквивалентно. С другой стороны, выбранный оператор присвоения сигнала подразумевает оператор case и соответствует той же семантике.