最近在写个程序,其中一个模块是要求快速得到进位,本打算用超前进位,但是发现他的速度很慢,不如直接用加法器得到的进位快 举例说明如下: 使用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编辑过] |