encounter 发表于 2010-6-28 00:17:01

设计一个 加/减法 器的过程中碰到了问题,请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;

CTT 发表于 2010-6-28 00:57:23

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

VVC 发表于 2010-6-28 01:02:36

我没用过这种用法,感觉这种应该用FUNCTION的写法,不能用component的写法

ngtim 发表于 2010-6-28 01:43:18

哥们,把你的全加器也贴出来吧!方便验证!<br>
好象是你的生成语句不对!<br>
<br>
[ 本帖最后由 suiboruping 于 2006-9-5 10:31 编辑 ]

ATA 发表于 2010-6-28 03:23:04

ENTITY fulladder IS<br>
&nbsp; &nbsp;PORT (<br>
&nbsp; &nbsp;&nbsp; &nbsp;a: IN BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp;b: IN BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp;cin: IN BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp;sum: OUT BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp;carry: INOUT BIT<br>
&nbsp; &nbsp;&nbsp; &nbsp;);<br>
END fulladder;<br>
<br>
ARCHITECTURE dataflow OF fulladder IS<br>
<br>
BEGIN<br>
<br>
&nbsp; &nbsp;sum &lt;= a XOR b XOR cin;<br>
<br>
&nbsp; &nbsp;carry &lt;= (a AND b) OR (a AND cin) OR (b AND cin);<br>
<br>
END dataflow;

VVC 发表于 2010-6-28 05:11:48

我也刚刚接触vhdl<br>
是不是<br>
COMPONENT fulladder IS<br>
&nbsp; &nbsp;&nbsp; &nbsp; PORT (<br>
&nbsp; &nbsp;&nbsp; &nbsp; a: IN BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp; b: IN BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp; cin: IN BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp; sum: OUT BIT;<br>
&nbsp; &nbsp;&nbsp; &nbsp; carry: INOUT BIT&nbsp;&nbsp;-- INOUT or OUT ??<br>
&nbsp; &nbsp;&nbsp; &nbsp;);<br>
&nbsp; &nbsp;END COMPONENT;<br>
应用的位置不对?<br>
还请高手指教。

Sunlife 发表于 2015-5-14 09:52:02

你的生成语句不对!<br>
<br>
页: [1]
查看完整版本: 设计一个 加/减法 器的过程中碰到了问题,请fpga大虾们赐教。