我是vhdl的新手,我有简单的代码来模拟slt操作;但是,我收到以下错误: 错误(10500):SetLessThan.vhd(14)处的文本“if”附近的VHDL语法错误;期待“结束”,或“(”或标识符(“if”是保留关键字)或并发声明
有人可以帮忙吗? (代码粘贴在下面) 我尝试将()放在< b但这给了我2个额外的错误。
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity SetLessThan is
port(
a : in std_logic_vector(7 downto 0);
b : in std_logic_vector(7 downto 0);
cout : out std_logic_vector(7 downto 0)
);
end SetLessThan;
architecture dataflow of SetLessThan is
begin
if a < b then
cout <= '00000001';
else
cout <= '00000000';
end if;
end dataflow;
答案 0 :(得分:1)
您正尝试在适合并发语句的位置使用顺序语句。
您可以在流程语句中移动if-then-else,也可以将其重写为条件波形(信号)赋值语句。
然后你会发现另外一类错误,字符串文字由一对双引号而不是单引号分隔。
演示两种形式,以及双引号:
architecture dataflow of SetLessThan is
begin
process (a,b)
begin
if a < b then
cout <= "00000001";
else
cout <= "00000000";
end if;
end process;
end dataflow;
architecture cond_waveform of SetLessThan is
begin
cout <= "00000001" when a < b else
"00000000";
end architecture;
条件信号分配
条件信号赋值表示一个过程语句,其中信号变换是if语句。
conditional_signal_assignment ::=
target <= options conditional_waveforms ;
conditional_waveforms ::=
{ waveform when condition else }
waveform [ when condition ]
(区别在于它是表示进程的并发语句)