tag 标签: vhdl实现并行8位加法

相关博文
  • 热度 12
    2012-3-21 17:53
    2420 次阅读|
    2 个评论
      要实现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;