我在确定我的代码为什么不能正常工作时遇到了一些困难。我正在尝试使用 3 位操作码创建 ALU。
除一种情况外,所有情况均无法正常工作;操作码 011 (SEQ)。它被定义为 if(a==b) z<='0' 和 output<='0'。a 和 b 是输入,z 是零标志。我希望通过以下 VHDL 代码获得此功能
....
BEGIN
result <= dummy_result;
PROCESS (a, b, op)
VARIABLE carry: STD_LOGIC:='0';
--DEFINE ALIAS TO SEPERATE ALU-OP SIGNAL
alias NEG_TSEL : STD_LOGIC IS op(2);
alias ALU_SELECT : STD_LOGIC_VECTOR(1 downto 0) IS op(1 downto 0);
BEGIN
if ALU_SELECT="11" THEN
if NEG_TSEL='0' THEN -- SEQ
if a = b THEN
dummy_result <="00000";
end if;
elsif NEG_TSEL='1' THEN --SCO
cout <= '1';
result <= "XXXXX";
end if;
elsif ALU_SELECT="00" THEN...
使用此代码,当 op = 011 时,结果始终设置为零。
当我将代码更改为:
.....
if a = b THEN
dummy_result <="00000";
else
dummy_result <= "10101";
end if;
.....
它工作正常,但结果不能改变,所以我将它改为“dummy_result <= dummy_result;”而不是“10101”向量 但这给了我与原始案例相同的结果。
有什么建议么?难道我做错了什么?