【发布时间】:2015-04-01 00:34:21
【问题描述】:
这是级联全加器的通用代码。
问题在于,fulladder 的结果出现一个事件延迟(我的意思是,当我更改输入 1 和输入 2 时,会出现先前输入的结果)。我知道如果我在没有进程的情况下编写代码,则不会发生这种延迟,但我需要编写一个通用的全加法器,并且没有进程和 for 循环就无法编写通用代码。
所以我问是否有人可以帮助我修复代码,以便输出立即显示结果!!!
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
entity adders is
generic(
numberOfInputs : Integer := 4
); port(
enable : in std_logic;
cin : in std_logic;
inputs1 : in std_logic_vector(numberOfInputs-1 downto 0);
inputs2 : in std_logic_vector(numberOfInputs-1 downto 0);
outputs : out std_logic_vector(numberOfInputs downto 0)
);
end entity adders;
architecture Generic_Adder of adders is
signal Couts:std_logic_vector(numberOfInputs downto 0);
signal temp1:std_logic_vector(numberOfInputs-1 downto 0);
signal temp2:std_logic_vector(numberOfInputs-1 downto 0);
signal temp3:std_logic_vector(numberOfInputs-1 downto 0);
begin
temp2<=inputs1;
temp3<=inputs2;
couts(0)<= cin;
Sum:process(temp2,temp3,cin,enable,Couts) is
begin
for count in 0 to numberOfInputs-1 loop
temp1(count) <= (temp2(count) xor temp3(count));
outputs(count) <= Couts(count) xor temp1(count);
Couts(count+1) <= (temp2(count) and temp3(count)) or(couts(count) and temp1(count));--cout(count) is the previuos cout becuase the first cout is cin
end loop;
end process;
outputs(numberOfInputs) <= Couts(numberOfInputs);
end Generic_Adder;
【问题讨论】: