Вы пытаетесь использовать оператор if
в параллельном контексте. Однако if
заявления должны быть в последовательном контексте - например, в process
заявление:
process(row, column)
begin
if(row = "0111") then
if(coloumn = "0111") then
sevenseg <= "00000110";
elsif(coloumn = "1011") then
sevenseg <= "01011011";
elsif(coloumn = "1101") then
sevenseg <= "01001111";
elsif(coloumn = "1110") then
sevenseg <= "01110001";
end if;
end if;
end process;
Однако - обратите внимание, что если вы синтезировать выше, скорее всего, в конечном итоге дает вам хороший набор фиксаторов (который вы обычно не хотите), так как вы не назначаете sevenseg
во всех возможных случаях (если row
отличается от 0111
, или если coloumn
не соответствует ни одному из заявлений if
).
Чтобы исправить это, либо 1) использовать с тактовой частотой process
, или 2) назначить sevenseg
значение по умолчанию, если row
и coloumn
не соответствует ни одному из указанных случаев. Например:
process(row, column)
begin
sevenseg <= (others => '0');
if(row = "0111") then
if(coloumn = "0111") then
sevenseg <= "00000110";
elsif(coloumn = "1011") then
sevenseg <= "01011011";
elsif(coloumn = "1101") then
sevenseg <= "01001111";
elsif(coloumn = "1110") then
sevenseg <= "01110001";
end if;
end if;
end process;
Я добавил sevenseg <= (others => '0');
, который сделает sevenseg
по умолчанию для всех 0
-х, если ни один из указанных случаев не пострадал - если они есть, они перекроют дополнительную линию и установить sevenseg
к соответствующему значению.
Еще лучше способ сделать это состоит в использовании case
заявления, так что, вероятно, лучше описывает то, что вы на самом деле хотите:
process(row, column)
begin
if(row = "0111") then
case coloumn is
when "0111" =>
sevenseg <= "00000110";
when "1011" =>
sevenseg <= "01011011";
when "1101" =>
sevenseg <= "01001111";
when "1110" =>
sevenseg <= "01110001";
when others =>
sevenseg <= (others => '0');
end case;
else
sevenseg <= (others => '0');
end if;
end process;
Чтения порта «OUT» является недействительным, если не указан VHDL-2008. –
И вам не разрешено принимать решения о значениях других сигналов на основе значения выхода -в -2008. Это функция, предназначенная для поддержки конструкций проверки. – user1155120
И где задано значение сигнала 'row'? – user1155120