集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3317|回复: 6

设计一个 加/减法 器的过程中碰到了问题,请fpga大虾们赐教。

[复制链接]
encounter 发表于 2010-6-28 00:17:01 | 显示全部楼层 |阅读模式
本帖最后由 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; &nbspORT (<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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 21:58 , Processed in 0.064438 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表