near "when": VHDL 语法错误

near "when": syntax error in 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;

我在第 14 行(即 when (S = '1') and (T = '0') => TriOut <= A; 行)收到编译器错误 near "when": syntax error。我这辈子都搞不清楚语法错误是什么。

如有任何帮助,我们将不胜感激。

谢谢。

两件事。 process后不需要is。更重要的是,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,就好像它在 case 语句中一样。考虑到这一点,你也可以(在一个过程中):

sel <= S & T;

case sel is
  when "10" =>
    TriOut <= A;
  when "01" =>
    TriOut <= B;
  ...

你不能做的就是混搭。