设计一个 加/减法 器的过程中碰到了问题,请fpga大虾们赐教。
本帖最后由 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; Error: E:/2B1513/VHDL-codeLab1/VHDL-codeLab1/addSub.vhd(35): The actual for formal 'a' is not a globally static expression.<br>
** Error: E:/2B1513/VHDL-codeLab1/VHDL-codeLab1/addSub.vhd(49): VHDL Compiler exiting 我没用过这种用法,感觉这种应该用FUNCTION的写法,不能用component的写法 哥们,把你的全加器也贴出来吧!方便验证!<br>
好象是你的生成语句不对!<br>
<br>
[ 本帖最后由 suiboruping 于 2006-9-5 10:31 编辑 ] ENTITY fulladder IS<br>
PORT (<br>
a: IN BIT;<br>
b: IN BIT;<br>
cin: IN BIT;<br>
sum: OUT BIT;<br>
carry: INOUT BIT<br>
);<br>
END fulladder;<br>
<br>
ARCHITECTURE dataflow OF fulladder IS<br>
<br>
BEGIN<br>
<br>
sum <= a XOR b XOR cin;<br>
<br>
carry <= (a AND b) OR (a AND cin) OR (b AND cin);<br>
<br>
END dataflow; 我也刚刚接触vhdl<br>
是不是<br>
COMPONENT fulladder IS<br>
PORT (<br>
a: IN BIT;<br>
b: IN BIT;<br>
cin: IN BIT;<br>
sum: OUT BIT;<br>
carry: INOUT BIT -- INOUT or OUT ??<br>
);<br>
END COMPONENT;<br>
应用的位置不对?<br>
还请高手指教。 你的生成语句不对!<br>
<br>
页:
[1]