ALUの結果がゼロであるかどうかをチェックしようとしました。テスト結果はゼロですが、シミュレーションではalu_zero
は '1'ではありません。誰かが私に理由を教えてもらえますか?VHDL:ゼロの結果のチェックが失敗しました
Library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY alu IS
PORT(
alu_operand_A,alu_operand_B:in std_logic_vector(31 downto 0);
alu_control:in std_logic_vector(1 downto 0);
alu_result:out std_logic_vector(31 downto 0);
alu_zero:out std_logic
);
END alu;
ARCHITECTURE behavioral OF alu IS
signal s_alu_result:std_logic_vector(31 downto 0);
BEGIN
PROCESS(alu_operand_A,alu_operand_B,alu_control)
BEGIN
CASE alu_control IS
WHEN "00"=>s_alu_result<=alu_operand_A + alu_operand_B;
alu_result<=alu_operand_A + alu_operand_B;
WHEN "01"=>s_alu_result<=alu_operand_A - alu_operand_B;
alu_result<=alu_operand_A - alu_operand_B;
WHEN "10"=>s_alu_result<=alu_operand_A and alu_operand_B;
alu_result<=alu_operand_A and alu_operand_B;
WHEN "11"=>s_alu_result<=alu_operand_A or alu_operand_B;
alu_result<=alu_operand_A or alu_operand_B;
WHEN OTHERS=>alu_result<=(others=>'X');
END CASE;
if s_alu_result="00000000000000000000000000000000" then
alu_zero<='1';
else
alu_zero<='0';
end if;
END PROCESS;
END behavioral;
プロセスセンシティビティリストにs_alu_resultを入れてみてくださいまたはプロセスでそれを割り当てるのではなくalu_zeroする同時の条件付き信号の割り当てを作成したり、プロセス変数を使用しますs_alu_resultの仲介変数として使用し、ゼロをテストします。 – user1155120