VHDL:信号初始化

时间:2013-05-29 13:02:30

标签: initialization signals vhdl alu

我是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吗? =&GT; Q&lt; =“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;

非常感谢,

1 个答案:

答案 0 :(得分:2)

你需要在某处初始化它,否则你会得到一个锁存器。你的建议很好(尽管Q <= (others => '0')更具有前瞻性),你可以在case语句中有一个默认/其他分支,你给Q一个默认值。基本上,当你有这样的组合过程时,无论输入的值是什么,都要确保驱动器始终具有定义的值。如果没有,你就是在推断某种记忆。