原创 【博客大赛】VHDL实现并行8位加法

2012-3-21 17:53 2420 10 12 分类: FPGA/CPLD

  要实现8位加法,先要从1位开始。假设A,B,C_1分别为两个输入值和进位输入,S是和值,C为进位输出值,于是便有以下表达式:
  S=A xor B xor C_1;
  C=AB+BC_1+AC_1;
  也就是说,如果三个输入中有奇数个1,则和S为1;如果三个输入中至少有两个1,则一定有进位,即C=1。
  其中,上面第二式可以写成如下形式
  C=AB+(A xor B)C_1;
  我们把它改写一下:
  C=G+PC_1,其中G=AB,P=A xor B。


  于是,我们就有:
  C(0)=G(0)+P(0)C_1;
  C(1)=G(1)+P(1)C(0)
    =G(1)+P(1)(G(0)+P(0)C_1)
    =G(1)+P(1)G(0)+P(1)P(0)C_1;
  C(2)=G(2)+P(2)C(1)
    =G(2)+P(2)(G(1)+P(1)G(0)+P(1)P(0)C_1)
    =G(2)+P(2)G(1)+P(2)P(1)G(0)+P(2)P(1)P(0)C_1;
  ......
  其中,G(i)=A(i)B(i),P(i)=A(i) xor B(i)。
  对于求和,我们有S(i)=A(i) xor B(i) xor C(i-1)。
  从以上分析,我们知道,进位输出是输入进行一次逻辑运算得到,求和输出是两次逻辑运算得到,从而实现了并行。


下面为了节省资源,我们以3位加法为例,给出了VHDL的实现。
library ieee;
use ieee.std_logic_1164.all;

entity adder8 is
 port(
  A:in std_logic_vector(2 downto 0);
  B:in std_logic_vector(2 downto 0);
  C_1:in std_logic;
  S:out std_logic_vector(2 downto 0);
  C2:out std_logic
 );
end adder8;

architecture behavioral of adder8 is
 signal G,P,C:std_logic_vector(2 downto 0);
begin
 G(0)<=A(0) and B(0); P(0)<=A(0) xor B(0);
 G(1)<=A(1) and B(1); P(1)<=A(1) xor B(1);
 G(2)<=A(2) and B(2); P(2)<=A(2) xor B(2);
 
 C(0)<=G(0)or(P(0) and C_1);
 C(1)<=G(1)or(P(1) and G(0))or(P(1) and P(0) and C_1);
 C(2)<=G(2)or(P(2) and G(1))or(P(2) and P(1) and G(0))or(P(2) and P(1) and P(0) and C_1);
    
 S(0)<=A(0) xor B(0) xor C_1;
 S(1)<=A(1) xor B(1) xor C(0);
 S(2)<=A(2) xor B(2) xor C(1);
 C2<=C(2);
end behavioral;

文章评论2条评论)

登录后参与讨论

用户377235 2013-3-5 00:29

sb.....用个+号不就行了。。。还一位一位搞。。

用户1615602 2012-3-27 10:29

作为一个新手,还是倾向于图形化建模,比较方便,虽然说比较浪费资源
相关推荐阅读
Crystal_oscillator 2012-06-06 11:39
我的一些与研究生生涯的相关资料
如题。...
Crystal_oscillator 2012-06-02 19:42
EDA--IPCore的使用
很清晰地讲解了如何在EDA中使用IPCore,推荐在这里,如附件: ...
Crystal_oscillator 2012-05-21 14:12
c#与MySql连接
如附件:...
Crystal_oscillator 2012-04-01 20:41
关于搜索的一点思考
  现在的搜索引擎,仍然面对的一个现实就是:它依然找不到客户所需要的东西。   这里面有两个原因:   (1)现有的东西没有被归类,而是分散在浩如烟海的网络中,各种博客,微博等等。  ...
Crystal_oscillator 2012-04-01 12:00
有趣的加1电路
  在上一篇博客,我介绍了并行加法。在这里,我将带大家学习并行加一电路,并且,我们会发现结 论相当简单有趣。     我们知道对于一位加法电路,假设A,B是参与运算的两个位变量,C_1...
我要评论
2
10
关闭 站长推荐上一条 /2 下一条