VHDL错误10500

时间:2016-11-25 19:38:15

标签: vhdl

我不知道为什么会收到以下错误。

  

错误(10500):IR_REG.vhd(15)处文本附近的VHDL语法错误" if&#34 ;;期待"结束",或"("或标识符("如果"是保留关键字)或并发声明

这是我的代码任何帮助将不胜感激

architecture behavior of IR_REG is
    signal temp: std_logic_vector(1 downto 0);
    begin
    if IR_LD='1' then
        temp <= Input when clk = '1';
        IR <= temp when clk = '0';
    end if;
    end behavior;

1 个答案:

答案 0 :(得分:0)

if内不能有architecture声明。 architecture中的关键思想是所有语句的并行执行没有 order 的概念。例如,

architecture Struct of Counter
  signal A1: bit;
  signal A2: bit;
begin
  A1 <= A2 and '1';
  A2 <= '1';
end Struct;

如果这是一个顺序阻止,A1将输出0,因为A2最初采用其默认值0。但VHDL的算法巧妙地多次执行此块,给出效果,即A1 <= A2 and '1';A2 <= '1';两个语句同时发生。

因此,如果您运行此代码,则A11A21

回到你的问题,if是一个顺序语句,由于其顺序性,不能在进程内。但是,when可以直接使用多路复用器的效果。

查看您的代码,似乎您想要制作一个级别敏感的锁存器。这就是你如何做到的。

architecture behavior of IR_REG is
    signal temp: std_logic_vector(1 downto 0);
    begin
      process(IR_LD, Input, temp, clk)
      begin
        if IR_LD = '1' and clk = '1' then
          temp <= Input;
        end if;
        if IR_LD = '1' and clk = '0' then
          IR <= temp;
        end if;
      end process;
    end behavior;

此代码将提供多路复用器效果,但您似乎想要创建如上所示的锁存器。

architecture behavior of IR_REG is
    signal temp: std_logic_vector(1 downto 0);
    begin
      temp <= Input when clk = '1' and IR_LD = '1' else "00";
      IR <= temp when clk = '0' and IR_LD = '1' else "00";
    end behavior;