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;
...
你不能做的就是混搭。
我正在尝试编写一些代码来在 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;
...
你不能做的就是混搭。