我对VHDL中的if语句有疑问,请参阅下面的示例;-)
signal SEQ : bit_vector(5 downto 0);
signal output: bit;
-------
if(SEQ = "000001") and (CNT_RESULT = "111111") then
output<= '1';
CNT_RESET <= '0';
else output<='0';
end if;
我得到:if语句是非法的,“输出”有多个来源。任何想法
答案 0 :(得分:5)
我认为if
语句不在进程中?您只能在流程中使用if
语句。对于流程外的类似功能,您可以使用when
:
output <= '1' when (SEQ = "000001") and (CNT_RESULT = "111111") else
'0';
CNT_RESET <= '0' when (SEQ = "000001") and (CNT_RESULT = "111111") else
'1';
答案 1 :(得分:3)
您可能在架构主体(这是一个并发区域)中使用IF语句。那是违法的。你需要在它周围放一个进程,以便它在一个顺序区域(代码没有经过测试!):
process(seq, CNT_RESULT)
if(SEQ = "000001") and (CNT_RESULT = "111111") then
output<= '1';
CNT_RESET <= '0';
else output<='0';
end if;
end process;