1-)我很好奇ISE合成器是如何在Virtex中实现加法器的。我的意思是,最小的加法器块大小是多少?我在搜索Xilinx文档时,我想出了这个Virtex-4 FPGA User Guide
在204页,它说:“算术逻辑包括一个XOR门,它允许在一个片内实现一个2位全加器。”但是应该有超前进位的实现。因为关键路径与输入宽度成对数增加。
2-)另一个问题是,我想用VHDL实现长符号向量。为了达到更高的工作频率,我想要实现两级流水线加法器。例如:
signal a, b, c: signed(63 downto 0);常规方法
c <= a + b;我想实现的是
signal c_hi : signed(31 downto 0);
signal c_lo : signed(32 downto 0);
process(clk)
begin
if rising_edge (clk) then
--1st stage
c_lo <= ('0' & a(31 downto 0)) + ('0' & b(31 downto 0));
c_hi <= a(63 downto 32) + b(63 downto 32);
--2nd stage
c(63 downto 32) <= c_hi(31 downto 0) + (to_signed(0,31) & c_lo(32 downto 32));
c(31 downto 0) <= c_lo(31 downto 0);
end if;
end process;但这包括2x32位加法器+ 1x33bit加法器。所以,我问的是,我如何才能给出较低加法的进位,同时对较高的位求和?
3-)有没有办法在不增加宽度1的情况下获得进位/溢出位。
发布于 2015-02-01 07:45:40
这是一个流水线加法器:
signal a : signed(63 downto 0);
signal b : signed(63 downto 0);
signal c : signed(64 downto 0);
signal sum_stage1 : unsigned(32 downto 0);
process(clk)
begin
if rising_edge(clk) then
-- stage 1: add first 32 bits
sum_stage1 <= ('0' & a(31 downto 0)) + ('0' & b(31 downto 0));
-- stage 2: add next 32 bits (incl. C_in)
c(31 downto 0) <= sum_stage1(31 downto 0); -- optional: align intermediate sums
c(64 downto 32) <= (32 downto 1 => '0') & sum_stage1(sum_stage1'high) +
('0' & a(63 downto 32)) +
('0' & b(63 downto 32));
end if;
end process;第1步:添加32位(31.0)
第2步:添加32位(63..32) (包括步骤1中的C_in;C_in = C_out )
最小资源消耗:
https://stackoverflow.com/questions/28237939
复制相似问题