2

私は VHDL の初心者で、信号を初期化する必要があるかどうかを判断するタイミングに問題があります...

例を次に示します。

            entity tatoo is 
            port (
            clk, reset : in std_logic;  
            opcode : in std_logic_vector(2 downto 0); 
            A, B : in std_logic_vector(3 downto 0);
            F : out std_logic_vector(3 downto 0)
            ); 

            architecture toota of tatoo is 
            signal Q : std_logic_vector(3 downto 0);

            begin

            process (clk, reset) -- register for F
            begin
                if(reset = '1')
                    then F <= "0000";
                elsif(Clk'event and Clk = '1')
                    then F <= Q;
                end if;
            end process;

            process(opcode, A, B) -- ALU
            begin 

ここで Q を初期化する必要がありますか? => Q <= "0000"; ?

                case opcode is 
                    when "00" =>
                        Q <= "0000";
                    when "01" =>
                        Q <= A-B;
                    when "10" => 
                        Q <= B-A;
                    when "11" =>
                        Q <= A xor B;
                end case;
            end process;

どうもありがとう、

4

1 に答える 1

2

どこかで初期化する必要があります。そうしないと、ラッチが発生します。あなたの提案は問題ありません (ただし、Q <= (others => '0')より将来性のあるものです)。case ステートメントに default/others ブランチを作成して、Q にデフォルト値を与えることができます。基本的に、このような組み合わせプロセスがある場合は、入力の値が何であれ、ドライブに常に定義された値があることを確認してください。そうでない場合は、何らかのメモリを推測しています。

于 2013-05-29T13:14:00.513 に答える