首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]如何快速得到进位

[求助]如何快速得到进位

最近在写个程序,其中一个模块是要求快速得到进位,本打算用超前进位,但是发现他的速度很慢,不如直接用加法器得到的进位快

举例说明如下:

使用ISE8.1i,xc2vp30-7ff896

1)直接用加法器

library ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_misc.ALL;
USE ieee.std_logic_unsigned.ALL;
USE ieee.std_logic_arith.ALL;

entity aaaa is
    port
    (
        a:in std_logic_vector(0 to 3);
        b:in std_logic_vector(0 to 3);
    signut std_logic
     );
 end aaaa;
 
 architecture beh of aaaa is
  signal temp:std_logic_Vector(0 to 4);
  
     begin
      temp<=('0'&a)+('0'&b);
      sign<=temp(0);  
end beh;   

 综合结果为 Maximum combinational path delay: 5.793ns 
 

2)用超前进位

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity newnew is
    Port ( a : in  STD_LOGIC_VECTOR (0 to 3);
           b : in  STD_LOGIC_VECTOR (0 to 3);
           c : out  STD_LOGIC
    );
end newnew;

architecture Behavioral of newnew is
signal c1,c2,c3:std_logic;
begin

c1<=(a(0) and b(0)) or ((a(0) or b(0))and '0');
c2<=(a(1) and b(1)) or ((a(1) or b(1))and c1);
c3<=(a(2) and b(2)) or ((a(2) or b(2))and c2);
c<=(a(3) and b(3)) or ((a(3) or b(3))and c3);

end Behavioral;

综合结果是 Maximum combinational path delay: 5.911ns

以上的综合都是Optimization Goal 为speed,并且将Optimization Effort设为high

以上仅仅是4位的加法产生的进位,如果位数增加到8,16,20,24,甚至更多超前进位会更慢

请教

1)这是为什么?是不是内置进位链的问题,如果是,什么样的编码风格可以直接使用这个进位链

2)有没有什么比较好的办法,可以不用adder就可以快速得到进位,尤其在位数比较多的情况下

[此贴子已经被作者于2007-8-1 11:15:09编辑过]

返回列表