2016-01-06 3 views
0

Просто, что было бы неправильно с этой строкой?Назначение VHDL, когда ... else отображает синтаксическую ошибку

zero <= '1' when alu_out = "00000000" else '0'; 

Это в процессе. zero - std_logic и alu_out - std_logic_vector(7 downto 0). Оба определены в объекте, и назначение выполняется в архитектуре. Ошибка:

Error (10500): VHDL syntax error at alu.vhd(27) near text "when"; expecting ";" 

ответ

2

Похоже, используя VHDL-2002 пересмотр, где одновременно условный формат правопреемник сигнала не может быть использован в качестве оператора в процессе.

Попробуйте включить поддержку VHDL-2008, если инструмент позволяет, в противном случае используйте оператор if или напишите свою собственную тернарную функцию.

Также см. Это question and answer.

Для Altera Quartus Prime ver. 15.1 выбор входной версии VHDL показан на рисунке ниже.

enter image description here

+0

Спасибо! Я немного переписал код, чтобы я мог переместить назначение из процесса, и это работает. Использование Quartus II 13.0.1. Я не знаю, какие версии VHDL поддерживаются. Во всяком случае, ваше предложение звучит хорошо, и проблема решена, поэтому я приму этот ответ. – Johan

+0

Я думаю, что Altera Quartus II ver. 13 также имел некоторый уровень поддержки VHDL-2008, поэтому вы можете попытаться включить его. См. Добавленный показатель того, как включить его в Quartus Prime ver. 15.1, что аналогично доказательству вер. 13,1. –

Смежные вопросы