Около "когда": синтаксическая ошибка в VHDL
Я пытаюсь написать код для симуляции схемы с двумя буферами с тремя состояниями и подтягивающим резистором в VHDL. Ниже мой код:
library ieee;
use ieee.std_logic_1164.all;
entity PullUpResistor is
port (
A, S, B, T : IN std_logic; -- select one of these four inputs
TriOut : OUT std_logic -- output (no ";" after last port)
);
end entity PullUpResistor;
architecture behavioral of PullUpResistor is
begin
process(A, S, B, T) is
when (S = '1') and (T = '0') => TriOut <= A;
when (S = '0') and (T = '1') => TriOut <= B;
when (S = '0') and (T = '0') => TriOut <= 'H';
when (S = '1') and (T = '1') => TriOut <= 'X';
end process;
end architecture behavioral;
Я получаю ошибку компилятора near "when": syntax error
на линии 14, которая является when (S = '1') and (T = '0') => TriOut <= A;
линия. Я не могу понять, в чем заключается синтаксическая ошибка.
Любая помощь будет принята с благодарностью.
Благодарю.
1 ответ
Две вещи. Здесь нет is
нужно после process
, И что более важно, when
не может быть использовано таким образом. Вы можете делать то, что хотите одновременно:
TriOut <=
A when S = '1' and T = '0' else
B when S = '0' and T = '1' else
...
или в процессе:
process (A, S, B, T)
begin
if S = '1' and T = '0' then
TriOut <= A;
elsif ...
(или с VHDL-2008, комбинация двух.)
Вы, кажется, используете when
как будто это в случае заявления. Имея это в виду, вы также можете сделать (в процессе):
sel <= S & T;
case sel is
when "10" =>
TriOut <= A;
when "01" =>
TriOut <= B;
...
То, что вы не можете сделать, это смешивать и сочетать.