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