我不知道为什么会收到以下错误。
错误(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;
答案 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';
两个语句同时发生。
因此,如果您运行此代码,则A1
为1
,A2
为1
。
回到你的问题,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;