|
本帖最后由 fpgaw 于 2010-7-6 05:39 编辑
要求: (1) 输入端口分别为: a(N-1,0) ,b(N-1,0) 都是 N bit 的向量, sub: 1 bit 为一控制信号(sub=0 作加法,sub=1 做减法);
(2) 输入端口为:N bit 的一个输出向量 sum(N-1,0), 进/借位信号carry:1bit,
(做加法的时候是进位,减法的时候是借位);
(3) 先设计一个 1 bit 全加器,然后用全加器进行级联来实现此 adder/subtractor.
小弟的程序如下,但是compile的时候碰到了error,搞不明白,请大虾们赐教。
USE work.all;
ENTITY addsub IS
GENERIC (size: INTEGER);
PORT (
a: IN bit_vector(size-1 downto 0);
b: IN bit_vector(size-1 downto 0);
sub: IN bit; -- sub = 0 => addition; sub = 1 => subtraction
q: OUT bit_vector(size-1 downto 0);
carry: OUT bit);
END addsub;
ARCHITECTURE dataflow OF addsub IS
COMPONENT fulladder IS
PORT (
a: IN BIT;
b: IN BIT;
cin: IN BIT;
sum: OUT BIT;
carry: INOUT BIT-- INOUT or OUT ??
);
END COMPONENT;
SIGNAL C: BIT_VECTOR(size downto 0);
SIGNAL Y: BIT_VECTOR(size-1 downto 0);
BEGIN
C(0)<='0';
GEN: FOR I IN 0 TO size-1 GENERATE
C1: fulladder Port Map (a=>(a(I) XOR sub),b=>b(I),cin=>C(I),sum=>Y(I),carry=>C(I+1));
END GENERATE GEN;
carry <= C(size);
q <= Y;
END dataflow; |
|