资源描述:
《四位全加器的VHDL与VerilogHDL实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、四位全加器的VHDL/VerilogHDL实现加法器的分类(一)半加器能对两个1位二进制数进行相加而求得和及进位的逻辑电路称为半加器。或:只考虑两个一位二进制数的相加,而不考虑来自低位进位数的运算电路,称为半加器。图1为半加器的方框图。图2为半加器原理图。其中:A、B分别为被加数与加数,作为电路的输入端;S为两数相加产生的本位和,它和两数相加产生的向高位的进位C一起作为电路的输出。根据二进制数相加的原则,得到半加器的真值表如表1所列。信号输入信号输出ABSC0000011010101101表1半加器的真值表由真值表可分别写出
2、和数S,进位数C的逻辑函数表达式为:(1)C=AB(2)由此可见,式(1)是一个异或逻辑关系,可用一个异或门来实现;式(2)可用一个与门实现。仿真结果如图3所示:图3半加器仿真图(二)全加器除本位两个数相加外,还要加上从低位来的进位数,称为全加器。图4为全加器的方框图。图5全加器原理图。被加数Ai、加数Bi从低位向本位进位Ci-1作为电路的输入,全加和Si与向高位的进位Ci作为电路的输出。能实现全加运算功能的电路称为全加电路。全加器的逻辑功能真值表如表2中所列。信号输入端信号输出端AiBiCiSiCi000000011001
3、0100110110010101011100111111表2全加器逻辑功能真值表多位全加器连接可以是逐位进位,也可以是超前进位。逐位进位也称串行进位,其逻辑电路简单,但速度也较低。五、加法器的VHDL实现(一)半加器VHDL语言描述语句为:6so<=axorb;co<=aandb程序设计:libraryieee;useieee.std_logic_1164.all;entityh_adderisport(a,b:instd_logic;so,co:outstd_logic);――定义输入、输出端口endh_adder;arc
4、hitecturebhofh_adderisbeginso<=axorb;――“异或”运算co<=aandb;――“与”运算endbh;(二)全加器1位全加器可由两个半加器组成,在半加器的基础上,采用元件调用和例化语句,将件连接起来,而实现全加器的VHDL编程和整体功能。全加器包含了两个半加器和一个或门。在此基础上可设计出四位全加器。六、四位全加器四位全加器VHDL程序代码如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;enti
5、tyaddisport(cin:instd_logic;a,b:instd_logic_vector(3downto0);s:outstd_logic_vector(3downto0);cout:outstd_logic);endadd4;architecturebehofadd4issignalsint:std_logic_vector(4downto0);signalaa,bb:std_logic_vector(4downto0);beginaa<='0'&a(3downto0);--4位加数矢量扩为5位,提供进位空间b
6、b<='0'&b(3downto0);sint<=aa+bb+cin;s(3downto0)<=sint(3downto0);cout<=sint(4);endbeh;四位全加器VerilogHDL程序代码如下:moduleadd(A,B,CI,CO,S);parameterN=4;6input[N:1]A,B;inputCI;outputCO;output[N:1]S;assign{CO,S}=A+B+CI;endmodule四位全加器常用三种编程方法:/*moduleadd(s,co,a,b,ci);//行为描述法out
7、put[3:0]s;outputco;input[3:0]a,b;inputci;regco;reg[3:0]s;always@(*)begin{co,s}=a+b+ci;endendmodule*/moduleadd(s,co,a,b,ci);//结构描述法output[3:0]s;outputco;input[3:0]a,b;inputci;full_add1f0(a[0],b[0],ci,s[0],ci1);full_add1f1(a[1],b[1],ci1,s[1],ci2);full_add1f2(a[2],b[2
8、],ci2,s[2],ci3);full_add1f3(a[3],b[3],ci3,s[3],co);endmodulemodulefull_add1(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;wires1,m1,m2,m3;and(m1,