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 回答