关于带有if语句的语法的VHDL错误10500

时间:2013-12-15 04:48:08

标签: vhdl

我是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;

1 个答案:

答案 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 ]

(区别在于它是表示进程的并发语句)