コードが正しく動作しない理由を判断するのに苦労しています。3 ビットのオペコードで ALU を作成しようとしています。
1 つを除くすべての条件が適切に機能しません。オペコード 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;
.....
正常に動作しますが、結果を変更してはならないため、「10101」ベクトルの代わりに「dummy_result <= dummy_result;」に変更します。しかし、元のケースと同じ結果が得られます。
助言がありますか?私は何か間違ったことをしていますか?