西安邮电大学Verilog 四位超前进位全加器
4bits超前加法进位器的全定制设计_微电子卓越班数字集成电路课程设计报告
数字集成电路课程设计题目:4 bits超前加法进位器地全定制设计姓名:席高照学号: 111000833学院:物理与信息工程学院专业:微电子(卓越班)年级: 2010级指导教师:陈群超(签名)2013 年 6 月 3 日目录第1章概述 01.1课程设计目地.......................................... 错误!未定义书签。
1.2课程设计地主要内容.................................... 错误!未定义书签。
1.2.1设计题目.......................................... 错误!未定义书签。
1.2.2设计内容.......................................... 错误!未定义书签。
第2章功能分析及逻辑分析 (2)2.1功能分析 (2)2.2推荐工作条件 (3)2.3电性能 (7)2.4真值表 ................................................ 错误!未定义书签。
2.5表达式 (6)2.6电路图...................................................................... 错误!未定义书签。
第3章电路设计与器件参数设计83.1性能指标: ............................................ 错误!未定义书签。
3.2模块划分 (7)3.2.1输出级电路设计 (7)3.2.2内部反相器 (9)3.2.3内部电路等效 (8)3.2.4输入级电路 (10)3.2.5输出缓冲级电路 (10)3.2.6输入、输出保护电路 (10)3.3本章小结 (10)第4章电路模拟与仿真................................................................................................... 错误!未定义书签。
用Verilog HDL语言编写的四位超前进位加法器
——Verilog HDL语言
四位超前进位加法器的进位是并 行同时产生的,能够极大的减 少加法器由进位引起的延时。 增加了逻辑器件,但有效的减 少的延迟。进位是由ALU部件超 前算出,本位是由四个不含进 位的加法器算出。
Verilog HDL代码如下: module jiafaqi_4(x,y,c0,c4,f); //四位超前进位加法器 input [4:1]x; //四位x值 input [4:1]y; //四位y值 output [4:1]f; //四位加和f input c0; //上一的级进位 output c4; //向下一级的进位 wire [3:1]c; //超前进位 wire [4:1]p; wire [4:1]g; wire [4:1]cd; assign p=x|y; assign g=x&y;
module jiafaqi_1(x,y,c0,f); //一位加法器模块 input x; input y; input c0; output f; assign f=(x^y)^c0; endmodule //该一位加法器只有本位输出,不含向下一级 的进位输出,进位输出是由顶层模块的并 行超前进位提供
// 在BASYS2开发板上的管脚配置 NET "c4" LOC = N5; NET "c0" LOC = A7; NET "x[1]" LOC = P11; NET "x[2]" LOC = L3; NET "x[3]" LOC = K3; NET "x[4]" LOC = B4; NET "y[1]" LOC = G3; NET "y[2]" LOC = F3; NET "y[3]" LOC = E2; NET "y[4]" LOC = N3; NET "f[1]" LOC = M5; NET "f[2]" LOC = M11; NET "f[3]" LOC = P7; NET "f[4]" LOC = P6;
设计一个 4 位超前进位加法器(数字逻辑课设)
c[2]=(p[2]&p[1]&p[0]&ci)|(p[2]&p[1]&g[0])|(p[2]&g[1])|g[2],
c[3]=(p[3]&p[2]&p[1]&p[0]&ci)|(p[3]&p[2]&p[1]&g[0])|(p[3]&p[2]&g[1])|(p[3]&g[2])|g[3];
代码如下: add.v
`timescale 1ns/1ps
module add(input [3:0]a,input [3:0]b,input ci,output [3:0]s,output co); //定义所需变量
wire [3:0] p, g; //进位传递函数p,进位产生函数g
wire [3:0] c; //进位函数
设计要求:在这个设计中,你需要使用 Verilog 代码设计一个 4 位的超前进位加法器。这个 4 位超前进位加法器可以完成对两个 4 位二进制数的相加。完成设计后,你还需要设计测试程序(test bench)来验证你的设计。你的测试程序需要考虑到所有可能的输入情况。
设计思路:
因为各进位的产生依赖于低位的进位,所以运算速度较慢。为了提高速度,必须设法使较低位的进位信号越过中间各级直接决定较高位的进位输出,设计Ai和Bi分别表示第i位的被加数和加 数,Ci-1为来自第i-1位全加器的进位,令Pi=Ai^Bi,Gi=Ai&Bi函数表达式为:
Co=PoCo+Go
C1=P1Co+G1
C2=p2C1+G2
4bits超前加法进位器的全定制设计微电子卓越班数字集成电路课程设计报告
数字集成电路课程设计题目:4 bits超前加法进位器的全定制设计姓名:席高照学号:111000833学院:物理与信息工程学院专业:微电子(卓越班)年级:2010级指导教师:群超(签名)2013 年 6 月 3 日目录第1章概述 (1)1.1课程设计目的 (1)1.2课程设计的主要容 (1)1.2.1设计题目 (1)1.2.2设计容 (1)第2章功能分析及逻辑分析 (2)2.1功能分析 (2)2.2推荐工作条件 (3)2.3电性能 (3)2.4真值表 (6)2.5表达式 (6)2.6电路图 (7)第3章电路设计与器件参数设计 (8)3.1性能指标: (8)3.2模块划分 (8)3.2.1输出级电路设计 (8)3.2.2部反相器 (9)3.2.3部电路等效 (9)3.2.4输入级电路 (10)3.2.5输出缓冲级电路 (10)3.2.6输入、输出保护电路 (10)3.3本章小结 (11)第4章电路模拟与仿真 (12)4.1电路搭建 (12)4.1.1建立新库 (12)4.1.2建立SCHEMATIC VIEW (13)4.1.3建立SYMBOL (14)4.1.4建立总体电路SCHEMATIC VIEW (14)4.1.5建立总体SYMBOL (15)4.1.6测试电路 (16)4.2功能仿真 (16)4.3功耗仿真 (18)4.4仿真结果分析 (18)4.5本章小结 (18)5.2反相器版图 (19)5.3输入级 (20)5.4输出级 (20)5.5输出缓冲 (20)5.6异或门 (21)5.7或非门 (23)5.8与非门 (24)5.9整体版图 (25)5.10本章小结 (25)心得 (26)参考文献 (27)附录 (28)附录174LS283中文资料 (28)第1章概述1.1 课程设计目的•综合应用已掌握的知识•熟悉集成电路设计流程•熟悉集成电路设计主流工具•强化学生的实际动手能力•培养学生的工程意识和系统观念•培养学生的团队协作能力1.2 课程设计的主要容1.2.1 设计题目4bits超前进位加法器全定制设计1.2.2 设计要求Vdd=1.8V,VoH=4.6V,Vol=0.4V可驱动10个LSTTL电路(相对于15pf电容负载)1.2.3 设计容•功能分析及逻辑分析•电路设计及器件参数设计•估算功耗与延时•电路模拟与仿真•版图设计•版图数据提交及考核,课程设计总结第2章功能分析及逻辑分析2.1功能分析74283为4为超前进位加法器,不同于普通串行进位加法器由低到高逐级进位,超前进位加法器所有位数的进位大多数情况下同时产生,运算速度快,电路结构复杂。
四位超前进位加法器
1.课程设计名称四位超前进位加法器2.课程设计内容设计一个四位加法器,要求要有超前进位,减小输出的延迟,采用0.13um工艺设计。
3.课程设计目的训练学生综合运用学过的数字集成电路的基本知识,独立设计相对复杂的数字集成电路的能力。
4.课程设计要求4.1、按设计指导书中要求的格式书写,所有的内容一律打印;4.2、报告内容包括设计过程、仿真的HSPICE网表,软件仿真的结果及分析、延时的手工计算;4.3、要有整体电路原理图,仿真的波形图;4.4、软件仿真必须要有必要的说明;要给出各个输入信号的具体波形和输出信号的测试结果。
4.5、写出对应的HSPICE设计网表,网表仿真结果符合设计要求。
把仿真图形附在报告上。
4.6、设输入端的电容为C,输出端的负载电容为5000C inv,从输入到输出任意找一通inv路,优化通路延时,手工计算确定通路中每个门对应的晶体管的尺寸。
每组三个同学选择不能为同一通路。
此部分的计算参数可采用书中第六章的参数。
4.7、各种器件的具体结构可参考阎石的《数字电子技术基础》一书。
不允许有完全一样的报告,对于报告完全相同者,记为不及格。
5.使用软件软件为HSPICE和COSMOS-SCOPE。
6.课程设计原理由全加器的真值表可得S i和C i的逻辑表达式:定义两个中间变量G i和P i:当A i=B i=1时,G i=1,由C i的表达式可得C i=1,即产生进位,所以G i 称为产生量变。
若P i=1,则A i·B i=0,C i=C i-1,即P i=1时,低位的进位能传送到高位的进位输出端,故P i称为传输变量,这两个变量都与进位信号无关。
将G i和P i代入S i和C i得:进而可得各位进位信号的逻辑表达如下:根据逻辑表达式做出电路图(如图):逻辑功能图中有2输入异或门,2输入与门,3输入与门,4输入与门,2输入或门,3输入或门,4输入或门,其转化成CMOS晶体管图如下:7.课程设计网表*xor 2.subckt xor2 a b c d fmxorpa 1 a vdd vdd pmos l=2 w=8 mxorpb f d 1 vdd pmos l=2 w=8 mxorpc 2 b vdd vdd pmos l=2 w=8 mxorpd f c 2 vdd pmos l=2 w=8 mxorna f a 3 0 nmos l=2 w=4 mxornb 3 b 0 0 nmos l=2 w=4 mxornc f c 4 0 nmos l=2 w=4 mxornd 4 d 0 0 nmos l=2 w=4.ends xor2*and2.subckt and2 a b fmandpa f a vdd vdd pmos l=2 w=4 mandpb f b vdd vdd pmos l=2 w=4mandna f a 1 0 nmos l=2 w=4 mandnb 1 b 0 0 nmos l=2 w=4.ends and2*and3.subckt and3 a b c fmandpa f a vdd vdd pmos l=2 w=4 mandpb f b vdd vdd pmos l=2 w=4 mandpc f c vdd vdd pmos l=2 w=4 mandna f a 1 0 nmos l=2 w=6 mandnb 1 b 2 0 nmos l=2 w=6 mandnc 2 c 0 0 nmos l=2 w=6.ends and3*and4.subckt and4 a b c d fmandpa f a vdd vdd pmos l=2 w=4 mandpb f b vdd vdd pmos l=2 w=4 mandpc f c vdd vdd pmos l=2 w=4 mandpd f d vdd vdd pmos l=2 w=4 mandna f a 1 0 nmos l=2 w=8 mandnb 1 b 2 0 nmos l=2 w=8 mandnc 2 c 3 0 nmos l=2 w=8 mandnd 3 d 0 0 nmos l=2 w=8.ends and4*or2.subckt or2 a b fmorpa 1 a vdd vdd pmos l=2 w=8 morpb f b 1 vdd pmos l=2 w=8 mna f a 0 0 nmos l=2 w=4mnb f b 0 0 nmos l=2 w=4.ends or2*or3.subckt or3 a b c fmorpa 1 a vdd vdd pmos l=2 w=12 morpb 2 b 1 vdd pmos l=2 w=12 morpc f c 2 vdd pmos l=2 w=12 mna f a 0 0 nmos l=2 w=4mnb f b 0 0 nmos l=2 w=4mnc f c 0 0 nmos l=2 w=4.ends or3*or4.subckt or4 a b c d fmorpa 1 a vdd vdd pmos l=2 w=16morpb 2 b 1 vdd pmos l=2 w=16morpc 3 c 2 vdd pmos l=2 w=16morpd f d 3 vdd pmos l=2 w=16mna f a 0 0 nmos l=2 w=4mnb f b 0 0 nmos l=2 w=4mnc f c 0 0 nmos l=2 w=4mnd f d 0 0 nmos l=2 w=4.ends or4*not.subckt not a fmnotpa f a vdd vdd pmos l=2 w=4 mnotna f a 0 0 nmos l=2 w=2.ends not *反相器*or21.subckt or21 a b fxor2 a b 1 or2xnot 1 f not.ends or21 *2输入或门*or31.subckt or31 a b c fxor3 a b c 1 or3xnot 1 f not.ends or31 *3输入或门*or41.subckt or41 a b c d fxor4 a b c d 1 or4xnot 1 f not.ends or41 *4输入或门*xor21.subckt xor21 a b fxm a A5 notxn b B5 notxxor a b A5 B5 f xor2.ends xor21 * 2输入异或门*and21.subckt and21 a b fxand2 a b 1 and2xnot 1 f not.ends and21 *2输入与门*and31.subckt and31 a b c fxand3 a b c 1 and3xnot 1 f not.ends and31 *3输入与门*and41.subckt and41 a b c d fxand4 a b c d 1 and4xnot 1 f not.ends and41 *4输入与门xxor211 a1 b1 p1 xor21xxor212 a2 b2 p2 xor21xxor213 a3 b3 p3 xor21xxor214 a4 b4 p4 xor21xand211 a1 b1 g1 and21xand212 a2 b2 g2 and21xand213 a3 b3 g3 and21xand214 p1 c0 m0 and21xor211 m0 g1 c1 or21 *进位C1xand311 p2 p1 c0 m1 and31xand215 p2 g1 m2 and21xor312 g2 m1 m2 c2 or31 *进位C2 xand411 p3 p2 p1 c0 m3 and41xand313 p3 p2 g1 m4 and31xand216 p3 g2 m5 and21xor412 m3 m4 m5 g3 c3 or41 *进位C3 xxor215 p1 c0 s1 xor21 *输出s1xxor216 p2 c1 s2 xor21 *输出s2xxor217 p3 c2 s3 xor21 *输出s3xxor218 p4 c3 s4 xor21 *输出s4.include "c:\lib\130nm_bulk.l"tt.opt scale=0.05u.global vdd gndvdd vdd 0 1.2va1 a1 0 pulse 1.2 1.2 20n 1f 1f 30n 100nva2 a2 0 pulse 0 0 20n 1f 1f 30n 100nva3 a3 0 pulse 0 0 20n 1f 1f 30n 100nva4 a4 0 pulse 0 0 20n 1f 1f 30n 100nvb1 b1 0 pulse 1.2 1.2 20n 1f 1f 30n 100n vb2 b2 0 pulse 1.2 1.2 20 1f 1f 30n 100nvb3 b3 0 pulse 0 0 20n 1f 1f 30n 100nvb4 b4 0 pulse 1.2 1.2 20n 1f 1f 30n 100nvc0 c0 0 pulse 0 0 4n 1f 1f 0n 100n.tran 1n 100n.plot tran v(s1).plot tran v(s2).plot tran v(s3).plot tran v(s4).end8.结果及分析由波形可知:当输入a1=1,b1=1,前一级进位c0=0时,s1=a1+b1+c0=0,下一级进位c1=1.由波形可知:当输入a2=0,b2=1,前一级进位c1=1时,s2=a2+b2+c1=0,下一级进位c2=1.由波形可知:当输入a3=0,b3=0,前一级进位c2=1时,s3=a3+b3+c2=1,下一级进位c3=0.由波形可知:当输入a4=0,b4=1,前一级进位c3=0时,s4=a4+b4+c2=1。
四位全加器实验Verilog
实验四四位全加器一、实验目的l. 用组合电路设计4位全加器。
2.了解Verilog HDL语言的行为描述的优点。
二、实验原理4位全加器工作原理1)全加器除本位两个数相加外,还要加上从低位来的进位数,称为全加器。
被加数Ai、加数Bi从低位向本位进位Ci-1作为电路的输入,全加和Si与向高位的进位Ci 作为电路的输出。
能实现全加运算功能的电路称为全加电路。
全加器的逻辑功能真值表如表中所列。
2)1位全加器一位全加器(FA)的逻辑表达式为:S=A⊕B⊕Cin;Co=AB+BCin+ACin 其中A,B为要相加的数,Cin为进位输入;S为和,Co是进位输出;这两幅图略微有差别,但最后的结果是一样的。
3)4位全加器4位全加器可看作4个1位全加器串行构成, 具体连接方法如下图所示:采用Verilog HDL语言设计该4位全加器,通过主模块调用子模块(1位全加器)的方法来实现。
三、实验步骤四、实验连线K1-K4:14-11K5-K8:18-15L5-L8:7-10VIJN:83L4:64KHZ:80五、心得体会首先,实现这一段全加器代码并不难,但是由于困惑给的三个时钟输入,没有太懂意思,所以只写了全加器控制LED灯的代码;后来问清楚后,运行全加器代码,有错误,原来是建文件时用的是verilog hdl,我建的是其他类型的;后来还有错,原来是把冒号打成分号;编译成功后,LED不亮,后来发现是硬件老化,换了箱子。
这一部分做好后,我准备把控制声音的加上去,本来准备再加一个模块,可是不能有两个顶层块,就对主模块做了补充,用case命令调用不同的状态,因为时间紧迫,所以代码写得比较简单,没有用经典的分频代码。
这里附一小段,是我在研究分频控制时看懂的网上的经典分频代码,适合乐曲自动播放等高级的实现,仅供分享assign preclk=(divider==16383)?1:0;//divider==16383,preclk=1always @(posedge clk) //基频上升沿触发beginif(preclk) //preclk=1divider=origin;elsedivider=divider+1;endalways @(posedge preclk) //调整占空比beginspeaker=~speaker; //2 分频产生方波信号end这部分实现了分频功能,其中origin+divider=16384=2^14,这个数根据自己的需要而定。
4位超前进位加法器
4位超前进位加法器详细设计姓名:魏可望(23)班级:微电子1102指导老师:杜慧敏日期:2014年4月29日1设计目标 (3)1.1功能定义 (3)1.2引脚描述 (3)1.2.1 4位超前进位加法器系统级信号 (3)1.2.2 4位超前进位加法器输入接口定义 (3)1.2.3 4位超前进位加法器的器输出接口定义 (3)2 模块设计 (3)3测试 (4)4设计开发环境 (4)5设计开发计划 (4)1设计目标1.1功能定义本文描述4位超前进位加法器的详细设计方案。
其功能是求出4位超前进位加法器功能,并在FPGA开发板上验证设计的正确性。
1.2引脚描述1.2.1 4位超前进位加法器单元系统级信号1.2.2 4位超前进位加法器输入接口定义1.2.3 4位超前进位加法器输出接口定义2 模块设计本设计按要求,用assign语句设计4位超前进位加法器。
3测试本单元电路控制逻辑采用systemverilog断言描述状态信息测试,数据通路部分用采用sysetemverilog随机验证的方法,并结合覆盖率检测,做到100%验证。
将本设计下载到Sparten 3E开发板上,将计数器的输出连接到LED灯上,以验证设计的正确性。
4设计开发环境语言级设计:Verilog综合工具:xilinx 14.7rFPGA设计和仿真工具:ISE13.2,synopsys VCS布局和布线工具:appllo ,模拟设计和仿真工具: modelsim寄生参数提取和仿真工具: star_sim RC5设计开发计划附录:4位超前进位加法器源代码:module add_ahead4(sum,cout,a,b,cin);input[3:0] a,b;input cin;output[3:0] sum;output cout;wire[3:0] G,P;wire[3:0] C,sum;assign G[0]=a[0]&b[0];assign P[0]=a[0]|b[o];assign C[0]=cin;assign sum[0]=G[0]^P[0]^C[0];assign G[1]=a[1]&b[1];assign P[1]=a[1]|b[1];assign C[1]=G[0]|(P[0]&cin); assign sum[1]=G[1]^P[1]^C[1]; assign G[2]=a[2]&b[2]; assign P[2]=a[2]|b[2];assign C[2]=G[1]|(P[1]&C[1]); ssign sum[2]=G[2]^P[2]^C[2]; assign G[3]=a[3]&b[3]; assign P[3]=a[3]|b[3];assign C[3]=G[2]|(P[2]&C[2]); assign sum[3]=G[3]^P[3]^C[3]; assign cout=G[3]|(P[3]&C[3]); endmodule。
Verilog实现的4位串行进位加法器精编版
Verilog实现的4位串行进位加法器精编版在数字电路中,加法器是最基本的电路之一、串行进位加法器是一种将两个二进制数相加的电路,通过逐位相加的方式实现。
本文将介绍如何使用Verilog语言实现一个4位串行进位加法器的精编版。
首先,我们需要定义输入和输出端口。
对于一个4位的串行进位加法器,我们需要4个输入端口A[3:0]和B[3:0],以及一个输出端口Sum[3:0]。
另外,还需要一个输入端口CarryIn和一个输出端口CarryOut,用于传递进位信号。
```module SerialCarryAdderinput [3:0] A,input [3:0] B,input CarryIn,output [3:0] Sum,output CarryOut```接下来,我们可以定义内部信号。
对于一个4位的串行进位加法器,我们需要4个内部信号,分别代表每一位的进位信号。
```wire C0, C1, C2, C3;```然后,我们可以开始实现每一位的加法逻辑。
首先,我们定义一个内部信号XOROut,用于存储每一位的异或结果。
然后,我们使用XOR门实现异或逻辑。
```wire XOROut;assign XOROut = A[0] ^ B[0];```接下来,我们定义一个内部信号ANDOut,用于存储每一位的与结果。
然后,我们使用AND门实现与逻辑。
```wire ANDOut;assign ANDOut = A[0] & B[0];```然后,我们定义一个内部信号Sum0,用于存储第一位的和结果。
然后,我们使用XOR门实现异或逻辑。
```wire Sum0;assign Sum0 = XOROut ^ CarryIn;```然后,我们定义一个内部信号Carry0,用于存储第一位的进位结果。
然后,我们使用OR门实现或逻辑。
```wire Carry0;assign Carry0 = ANDOut , (XOROut & CarryIn);```接下来,我们可以依次实现剩余3位的加法逻辑。
verilog四位BCD加法器实验报告
verilog四位BCD加法器实验报告1.实验目的⑴进一步熟悉modelsim仿真工具的使用方法。
⑵学会设计验证的方法和流程。
⑶编写一个4位BCD加法器,并且用modelsim对其仿真。
2.实验任务进一步熟悉modelsim仿真基本流程。
并完成一个4位BCD加法器,用modelsim对其仿真。
3.实验内容及步骤3.1 实验内容进一步熟悉modelsim仿真基本流程:①建一个工作库②编译设计文件③运行仿真④调试结果实验步骤:1.启动modelsim。
2.创建一个新工程:①在主菜单窗口的主菜单中选择“File→New→Project”。
②在项目名称域中输入工程名称(如adder_bcd),如下图所示。
③单击Browse按钮选择工程文件存储的目录。
④确认默认库名称为work,单击OK按钮。
3.创建新设计的文件:①单击OK按钮接受工程设置后,在主窗口的工作区将出现一个工程标签,同时弹出向工程添加项目的对话框。
单击“Create New File”,在新弹出的窗口中,输入文件名(如adder_1bit),特别需要注意的是,“Add file as type”里边要选择“verilog”类型。
②如果还需要写新的模块,在project对话框中点右键,选择“Add to Project→New File”。
在弹出的对话框中输入新的文件名(如adder_bcd_1bit;adder_bcd_4bit;test),同样注意“Add file as type”里边要选择“verilog”类型。
4.向工程输入有效的设计单元:把设计的源文件输入到工程里边。
5.在主窗口中选择“Compile→Compile All”完成工程的编译。
对于modelsim正确编译的设计文件,都打上“√”标志;对于编译失败的情况,打上“×”标志,此时可在右侧的脚本状态窗中查看出错信息,修正后再编译。
6.完成工程正确的编译后,在主窗口中单击Library标签,进入编译库页,打开work库,双击测试单元(如test),加载测试单元。
数字电路课程设计之超前进位加法器
reg
Cin;
wire[3:0] S;
wire
Cout;
carry_look_add CAL (.A(A),.B(B),.Cin(Cin),.Cout(Cout),.S(S)); initial begin
#10 A=4'd0;B=4'd0;Cin=0; #10 A=4'd11;B=4'd1;Cin=0; #10 A=4'd10;B=4'd12;Cin=0; #10 A=4'd11;B=4'd4;Cin=0; #100 $stop; end endmodule
Pi=Ai○+ Bi;
可以得到输出与进位表达
Gi=AiBi;
Si=Pi○+ Ci;
Ci+1=Gi+PiCi; Gi 为进位产生,不管输入进位 Ci 为什么,只要 Ai 与 Bi 为 1 时,它将产生进位。Pi 称为进位传输,因为它 与从 Ci 到 Ci+1 的进位传输有关
C0 = 输入进位
C1 = G0 + P0C0
Half_Add H3(.a(A[2]),.b(B[2]),.s(v6),.c(v5));
Half_Add H4(.a(A[3]),.b(B[3]),.s(v8),.c(v7));
carry_look
CL1(.C0(Cin),.P0(v2),.G0(v1),.P1(v4),.G1(v3),.P2(v6),.G2(v5),.P3(v8),.G3(v7),.C1(o1),.C2(o2),.C3(o3),.C4(Cout));
注意 C4 并不需要等待 C3,实际上 C4,C3,C2,C1 同时传输 超前进位产生的电路逻辑图
4位全加器verilog课程设计
4位全加器verilog课程设计一、课程目标知识目标:1. 理解4位全加器的原理和功能,掌握其Verilog硬件描述语言实现方法。
2. 学习并掌握数字电路中加法器的基本结构和工作原理。
3. 掌握Verilog模块化编程,能够实现并测试4位全加器的基本功能。
技能目标:1. 能够运用Verilog语言编写4位全加器的代码,并进行功能仿真。
2. 学会使用硬件描述语言进行数字电路的设计,提高实际问题解决能力。
3. 能够对4位全加器进行调试和优化,提升编程实践技能。
情感态度价值观目标:1. 培养学生的团队合作意识,提高学生在项目实践中的沟通与协作能力。
2. 增强学生对数字电路设计领域的兴趣,激发学生的创新精神。
3. 引导学生树立正确的价值观,认识到科技发展对社会进步的重要性。
课程性质:本课程为电子信息工程及相关专业高年级的数字电路设计课程,旨在通过4位全加器的Verilog实现,让学生掌握数字电路设计的基本方法和实践技能。
学生特点:学生已具备一定的数字电路基础和Verilog编程知识,具备分析问题和解决问题的能力。
教学要求:注重理论与实践相结合,鼓励学生积极参与课堂讨论,培养学生的动手能力和实际操作技能。
通过课程学习,使学生在知识、技能和情感态度价值观方面均取得明显进步。
二、教学内容本课程教学内容主要包括以下几部分:1. 数字加法器原理回顾:介绍加法器的基本原理,重点讲解4位全加器的工作流程和关键特性。
- 教材章节:数字电路基础,第3章第2节。
2. Verilog硬件描述语言基础:复习Verilog的基本语法,强调模块化编程方法。
- 教材章节:硬件描述语言Verilog,第4章。
3. 4位全加器的Verilog设计:- 设计原理:讲解4位全加器的设计思路和实现方法。
- 代码编写:引导学生编写4位全加器的Verilog代码,并进行模块化设计。
- 教材章节:数字电路设计,第5章第3节。
4. 功能仿真与调试:- 介绍仿真工具和仿真方法,指导学生进行4位全加器的功能仿真。
四位全加器的VHDL与VerilogHDL完成
use ieee.std_logic_1164.all;entity h_adder isport (a,b:in std_logic;so,co:out std_logic); ――定义输入、输出端口end h_adder;architecture bh of h_adder isbeginso<=a xor b; ――“异或”运算co<=a and b; ――“与”运算end bh;(二)全加器1位全加器可由两个半加器组成,在半加器的基础上,采用元件调用和例化语句,将件连接起来,而实现全加器的VHDL编程和整体功能。
全加器包含了两个半加器和一个或门。
在此基础上可设计出四位全加器。
六、四位全加器四位全加器VHDL程序代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add4 isport(cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end add4;architecture beh of add4 issignal sint:std_logic_vector(4 downto 0);signal aa,bb:std_logic_vector(4 downto 0);beginaa<='0' & a(3 downto 0); --4位加数矢量扩为5位,提供进位空间bb<='0' & b(3 downto 0);sint<=aa+bb+cin;s(3 downto 0)<=sint(3 downto 0);cout<=sint(4);end beh;四位全加器VerilogHDL程序代码如下:module add(A,B,CI,CO,S);parameter N=4;input [N:1] A,B;input CI;output CO;output [N:1] S;assign {CO,S}=A+B+CI;endmodule四位全加器常用三种编程方法:/*module add(s,co,a,b,ci);//行为描述法output[3:0] s;output co;input[3:0] a,b;input ci;reg co;reg[3:0] s;always@(*)begin{co,s}=a+b+ci;endendmodule*/module add(s,co,a,b,ci);//结构描述法output[3:0] s;output co;input[3:0] a,b;input ci;full_add1 f0(a[0],b[0],ci,s[0],ci1); full_add1 f1(a[1],b[1],ci1,s[1],ci2); full_add1 f2(a[2],b[2],ci2,s[2],ci3); full_add1 f3(a[3],b[3],ci3,s[3],co); endmodulemodule full_add1(a,b,cin,sum,cout); input a,b,cin;output sum,cout;wire s1,m1,m2,m3;and(m1,a,b),(m2,b,cin),(m3,a,cin);xor(s1,a,b),(sum,s1,cin);or(cout,m1,m2,m3);endmodule/*module add(co,s,a,b,ci);//数据流法output[3:0] s;output co;input[3:0] a,b;input ci;assign {co,s}=a+b+ci; endmodule*/。
Verilog实现的4位串行进位加法器
Verilog实现的4位串行进位加法器以下是一个使用Verilog语言实现的4位串行进位加法器的示例代码:```verilogmodule serial_carry_adder(input wire clk, reset, input wirea0, b0, a1, b1, a2, b2, a3, b3, input wire cin, output wire cout, output wire [3:0] sum);reg [3:0] s;reg c;if (reset)s<=4'b0;else begins<={s[2:0],a0^b0^c};c<=(a0&b0),(a0&c),(b0&c);endendassign sum = s;assign cout = c;endmodule```这个示例代码中,定义了一个名为`serial_carry_adder`的模块,包含了输入端口`clk`(时钟信号)、`reset`(复位信号)、`a0`、`b0`、`a1`、`b1`、`a2`、`b2`、`a3`、`b3`(4位加数和被加数的各位)、`cin`(进位输入)、以及输出端口`cout`(进位输出)和`sum`(和)。
在`always`块中,根据时钟信号和复位信号的边沿变化来更新和`s`和进位输出`c`的值。
当复位信号为高电平时,和`s`被清零;否则,和`s`的值是上一次和的低3位与当前的加法和(即`a0`、`b0`和进位`c`的异或结果)拼接而成,进位输出`c`的值则根据加法和的三个输入的与运算和或运算结果来决定。
最后,使用`assign`语句将和`s`和进位输出`c`分别赋值给输出端口`sum`和`cout`。
这个模块可以通过在顶层模块中实例化并连接适当的时钟、复位、输入和输出信号来使用。
四位超前进位加法器原理
超前进位加法器原理74283为4位超前进位加法器,不同于普通串行进位加法器由低到高逐级进位,超前进位加法器所有位数的进位大多数情况下同时产生,运算速度快,电路结构复杂。
其管脚如图1所示:图1 74283管脚图其真值表如下所示:表1 4位超前进位加法器真值表由全加器的真值表可得Si 和Ci的逻辑表达式:定义两个中间变量Gi 和Pi:当Ai =Bi=1时,Gi=1,由Ci的表达式可得Ci=1,即产生进位,所以Gi称为产生量变。
若Pi =1,则Ai·Bi=0,Ci=Ci-1,即Pi=1时,低位的进位能传送到高位的进位输出端,故Pi称为传输变量,这两个变量都与进位信号无关。
将Gi 和Pi代入Si和Ci得:进而可得各位进位信号的逻辑表达如下:根据逻辑表达式做出电路图如下:逻辑功能图中有2输入异或门,2输入与门,3输入与门,4输入与门,2输入或门,3输入或门,4输入或门,其转化成CMOS晶体管图如下:电路网表如下:*xor 2.subckt xor2 a b c d fmxorpa 1 a vdd vdd pmos l=2 w=8 mxorpb f d 1 vdd pmos l=2 w=8 mxorpc 2 b vdd vdd pmos l=2 w=8 mxorpd f c 2 vdd pmos l=2 w=8 mxorna f a 3 0 nmos l=2 w=4 mxornb 3 b 0 0 nmos l=2 w=4 mxornc f c 4 0 nmos l=2 w=4 mxornd 4 d 0 0 nmos l=2 w=4.ends xor2*and2.subckt and2 a b fmandpa f a vdd vdd pmos l=2 w=4 mandpb f b vdd vdd pmos l=2 w=4 mandna f a 1 0 nmos l=2 w=4 mandnb 1 b 0 0 nmos l=2 w=4.ends and2*and3.subckt and3 a b c fmandpa f a vdd vdd pmos l=2 w=4 mandpb f b vdd vdd pmos l=2 w=4 mandpc f c vdd vdd pmos l=2 w=4 mandna f a 1 0 nmos l=2 w=6 mandnb 1 b 2 0 nmos l=2 w=6 mandnc 2 c 0 0 nmos l=2 w=6.ends and3*and4.subckt and4 a b c d fmandpa f a vdd vdd pmos l=2 w=4 mandpb f b vdd vdd pmos l=2 w=4 mandpc f c vdd vdd pmos l=2 w=4 mandpd f d vdd vdd pmos l=2 w=4 mandna f a 1 0 nmos l=2 w=8 mandnb 1 b 2 0 nmos l=2 w=8 mandnc 2 c 3 0 nmos l=2 w=8 mandnd 3 d 0 0 nmos l=2 w=8.ends and4*or2.subckt or2 a b fmorpa 1 a vdd vdd pmos l=2 w=8 morpb f b 1 vdd pmos l=2 w=8mna f a 0 0 nmos l=2 w=4mnb f b 0 0 nmos l=2 w=4.ends or2*or3.subckt or3 a b c fmorpa 1 a vdd vdd pmos l=2 w=12 morpb 2 b 1 vdd pmos l=2 w=12 morpc f c 2 vdd pmos l=2 w=12mna f a 0 0 nmos l=2 w=4mnb f b 0 0 nmos l=2 w=4mnc f c 0 0 nmos l=2 w=4.ends or3*or4.subckt or4 a b c d fmorpa 1 a vdd vdd pmos l=2 w=16 morpb 2 b 1 vdd pmos l=2 w=16 morpc 3 c 2 vdd pmos l=2 w=16 morpd f d 3 vdd pmos l=2 w=16mna f a 0 0 nmos l=2 w=4mnb f b 0 0 nmos l=2 w=4mnc f c 0 0 nmos l=2 w=4mnd f d 0 0 nmos l=2 w=4.ends or4*not.subckt not a fmnotpa f a vdd vdd pmos l=2 w=4 mnotna f a 0 0 nmos l=2 w=2.ends not *反相器*or21.subckt or21 a b fxor2 a b 1 or2xnot 1 f not.ends or21 *2输入或门*or31.subckt or31 a b c fxor3 a b c 1 or3xnot 1 f not.ends or31 *3输入或门*or41.subckt or41 a b c d fxor4 a b c d 1 or4xnot 1 f not.ends or41 *4输入或门*xor21.subckt xor21 a b fxm a A5 notxn b B5 notxxor a b A5 B5 f xor2.ends xor21 * 2输入异或门*and21.subckt and21 a b fxand2 a b 1 and2xnot 1 f not.ends and21 *2输入与门*and31.subckt and31 a b c fxand3 a b c 1 and3xnot 1 f not.ends and31 *3输入与门*and41.subckt and41 a b c d fxand4 a b c d 1 and4xnot 1 f not.ends and41 *4输入与门xxor211 a1 b1 p1 xor21xxor212 a2 b2 p2 xor21xxor213 a3 b3 p3 xor21xxor214 a4 b4 p4 xor21xand211 a1 b1 g1 and21xand212 a2 b2 g2 and21xand213 a3 b3 g3 and21xand214 p1 c0 m0 and21xor211 m0 g1 c1 or21 *进位C1xand311 p2 p1 c0 m1 and31xand215 p2 g1 m2 and21xor312 g2 m1 m2 c2 or31 *进位C2xand411 p3 p2 p1 c0 m3 and41xand313 p3 p2 g1 m4 and31xand216 p3 g2 m5 and21xor412 m3 m4 m5 g3 c3 or41 *进位C3xxor215 p1 c0 s1 xor21 *输出s1xxor216 p2 c1 s2 xor21 *输出s2xxor217 p3 c2 s3 xor21 *输出s3xxor218 p4 c3 s4 xor21 *输出s4.include "c:\lib\130nm_bulk.l"tt.opt scale=0.05u.global vdd gndvdd vdd 0 1.2va1 a1 0 pulse 1.2 1.2 20n 1f 1f 30n 100nva2 a2 0 pulse 0 0 20n 1f 1f 30n 100nva3 a3 0 pulse 0 0 20n 1f 1f 30n 100nva4 a4 0 pulse 0 0 20n 1f 1f 30n 100nvb1 b1 0 pulse 1.2 1.2 20n 1f 1f 30n 100n vb2 b2 0 pulse 1.2 1.2 20 1f 1f 30n 100nvb3 b3 0 pulse 0 0 20n 1f 1f 30n 100nvb4 b4 0 pulse 1.2 1.2 20n 1f 1f 30n 100nvc0 c0 0 pulse 0 0 4n 1f 1f 0n 100n.tran 1n 100n.plot tran v(s1).plot tran v(s2).plot tran v(s3).plot tran v(s4).end。
[转]4位超前进位加法器代码及原理
[转]4位超前进位加法器代码及原理超前进位加法器module add4_head ( a, b, ci, s, pp, gg);input[3:0] a;input[3:0] b;input ci;output[3:0] s;output pp;output gg;wire[3:0] p;wire[3:0] g;wire[2:0] c;assign p[0] = a[0] ^ b[0];assign p[1] = a[1] ^ b[1];assign p[2] = a[2] ^ b[2];assign p[3] = a[3] ^ b[3];assign g[0] = a[0] & b[0];assign g[1] = a[1] & b[1];assign g[2] = a[2] & b[2];assign g[3] = a[3] & b[3];assign c[0] = (p[0] & ci) | g[0];assign c[1] = (p[1] & c[0]) | g[1];assign c[2] = (p[2] & c[1]) | g[2];assign pp = p[3] & p[2] & p[1] & p[0];assign gg = g[3] | (p[3] & (g[2] | p[2] & (g[1] | p[1] & g[0])));assign s[0] = p[0] ^ ci;assign s[1] = p[1] ^ c[0];assign s[2] = p[2] ^ c[1];assign s[3] = p[3] ^ c[2];endmodule⾸先要明确⼏个概念:p表⽰进位否决信号(pass),如果p为0就否决调前⼀级的进位输⼊。
否决的意思就是即使前⼀级有进位,本级也不会向后⼀级产⽣进位输出。
用verilog语言设计四位简单计算器
用verilog语言设计四位简单计算器module jsq(clk,keyin,keyout,leda,ledb,num3);input clk;input [3:0]keyin;output [3:0]keyout;reg [3:0]keyout;output [3:0]leda;reg [3:0]leda;output [3:0]ledb;reg [3:0]ledb;integer clk_klv;output [31:0]num3;always @(posedge clk) //分频clk_klv=clk_klv+1;reg [1:0]keyhang=0; //按键扫描reg [3:0]keynum=0; //最近按键的值reg keyen=0; //按键锁定作用,每次都必须重新按下才有效reg keysign=0; //当前按键的属性,0代表数字,1代表 +-*/=复位reg [7:0]delay=0; //按键消抖reg order2=0; //作用:延迟一个时钟,keyen跳变输出,确保keynum 被赋值always @(posedge clk_klv[10])beginif(order2==0)begincase({keyhang,keyin})6'b00_1110: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h0;order2=1;end endkeysign=0;keynum=4'h1;order2=1;end end6'b00_1011: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h2;order2=1;end end6'b00_0111: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h3;order2=1;end end6'b01_1110: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h4;order2=1;end end6'b01_1101: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h5;order2=1;end end6'b01_1011: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h6;order2=1;end end6'b01_0111: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h7;order2=1;end end6'b10_1110: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h8;order2=1;end end6'b10_1101: begin delay=0;if(keyen==0)begin keysign=0;keynum=4'h9;order2=1;end end6'b10_1011: begin delay=0;if(keyen==0)begin keysign=1;keynum=4'ha;order2=1;end endkeysign=1;keynum=4'hb;order2=1;end end6'b11_1110: begin delay=0;if(keyen==0)begin keysign=1;keynum=4'hc;order2=1;end end6'b11_1101: begin delay=0;if(keyen==0)begin keysign=1;keynum=4'hd;order2=1;end end6'b11_1011: begin delay=0;if(keyen==0)begin keysign=1;keynum=4'he;order2=1;end end6'b11_0111: begin delay=0;if(keyen==0)begin keysign=1;keynum=4'hf;order2=1;end enddefault: beginkeyhang=keyhang+1;delay=delay+1;if(delay>=100)keyen= 0;endendcasecase(keyhang)0:keyout=4'b1110;1:keyout=4'b1101;2:keyout=4'b1011;3:keyout=4'b0111;endcaseendelsebegin keyen=1;order2=0;endendreg [2:0]order=0; //当前状态integer num1=0,num2=0,num3=0; //第一个,第二个,结果reg [3:0]sign; //+-*/reg [7:0]lednum=100; //显示的数字reg [3:0]in_num=0; //限制显示的数字位,限制在2为:0~99 always @(posedge keyen)begincase(order)0: if(keysign) begin sign[3:0]=keynum[3:0];order=order+1; in_num=0;end //在没有按下+-*/之前会存储数字elseif(num1<10000)begin num1=num1*10+keynum;lednum=num1;in_num=in_num+1; end1: if(keysign) begincase(sign)//在没有按下=号之前会存储数字4'ha:num3=num1+num2;4'hb:num3=num1-num2;4'hc:num3=num1*num2;4'hd:num3=num1/num2;endcaselednum=num3+0;order=order+1;endelse if(num2<10000)begin num2=num2*10;num2=num2+keynum;lednum=num2;in_num=in_num+1; endendcaseif(keynum==4'hf)beginorder=0;num1=0;num2=0;num3=0;lednum=100;end //复位endalways @(*) //显示函数if(lednum<=99)beginleda=lednum/10;ledb=lednum%10;endelsebeginleda=15;ledb=15;endendmodule。
verilog HDL-四位超前进位加法器(免费)
一、实验课题:四位超前进位加法器二、Verilog程序:2.1 主程序module add_4(a,b,c_in,c_out,sum); input [3:0] a,b;input c_in;output [3:0] sum;output c_out;wire [2:0] c;wire [3:0] p;wire [3:0] g;wire [9:0] k;xor(p[0],a[0],b[0]);xor(p[1],a[1],b[1]);xor(p[2],a[2],b[2]);xor(p[3],a[3],b[3]);and(g[0],a[0],b[0]);and(g[1],a[1],b[1]);and(g[2],a[2],b[2]);and(g[3],a[3],b[3]);and(k[0],p[0],c_in);or(c[0],k[0],g[0]);and(k[1],p[1],g[0]);and(k[2],k[1],c_in);or(c[1],g[1],k[1],k[2]);and(k[3],p[2],g[1]);and(k[4],k[3],g[0]);and(k[5],k[4],c_in);or(c[2],g[2],k[3],k[4],k[5]);and(k[6],p[3],g[2]);and(k[7],k[6],g[1]);and(k[8],k[7],g[0]);and(k[9],k[8],c_in);or(c_out,g[3],k[6],k[7],k[8],k[9]);xor(sum[0],p[0],c_in);xor(sum[1],p[1],c[0]);xor(sum[2],p[2],c[1]);xor(sum[3],p[3],c[2]);endmodule2.2 激励module adder_th;reg [3:0] a,b;reg c_in;wire [3:0] sum;wire c_out;add_4 f0(.a(a),.b(b),.c_in(c_in),.sum(sum),.c_out(c_out)); always #5 c_in=~c_in;integer i,j;initialbegina=4'b0;b=4'b0;c_in=1'b0;i=0;j=0;endinitialbeginfor(i=0;i<16;i=i+1)for(j=0;j<16;j=j+1)begin#5 a=i;b=j;endendinitialbegin$monitor($time,"a=%d,b=%d,c_in=%b _ _ _ sum=%d,c_out=%b",a,b,c_in,sum,c_out);endendmodule三、实验波形图截图:四、波形分析及实验心得:4.1 波形分析当a=0时,对应的b从0到15;当a=1时,对应的b从0到15;……当a=15时,对应的b从0到15;给进位端c_in接一时钟;由波形可知,sum=a+b+c_in;进位则c_out=1;结果与已知关系式一样,说明波形正确。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安邮电大学Verilog HDL实验报告(二)
——带超前进位的四位全加器
学院名称:电子工程学院
班级:电子
学生姓名:
学号:
实验题目带超前进位的四位全加器
一、实验内容
设计的一个带超前进位的四位全加器。
二、实验步骤
1、在ModelSim软件中对激励模块和设计模块进行书写和编译;
2、对编译好的模块进行仿真。
三、源代码:
1、主程序
module fulladd4(sum, c_out, a, b, c_in);
output [3:0] sum;
output c_out;
input [3:0] a,b;
input c_in;
wire p0,g0,p1,g1,p2,g2,p3,g3;
wire c4,c3,c2,c1;
xor a1(p0,a[0],b[0]);
xor a2(p1,a[1],b[1]);
xor a3(p2,a[2],b[2]);
xor a4(p3,a[3],b[3]);
and b1(g0,a[0],b[0]);
and b2(g1,a[1],b[1]);
and b3(g2,a[2],b[2]);
and b4(g3,a[3],b[3]);
and d1(e1,p0,c_in);
or f1(c1,e1,g0);
and d2(e2,p1,g0);and d3(e3,p1,p0,c_in);or f2(c2,g1,e2,e3);
A nd d4(e4,p2,g1);and d5(e5,p2,p1,g0);and d6(e6,p2,p1,c_in);or f3(c3,g2,e4,e5,e6);
and d7(e7,p3,g2);and d8(e8,p3,p2,g1);and d9(e9,p3,p2,p1,g0);and d10(e10,p3,p2,p1,p0,c_in);or f4(c4,g3,e7,e8,e9,e10);
xor m0(sum[0],p0,c_in);
xor m1(sum[1],p1,c1);
xor m2(sum[2],p2,c2);
xor m3(sum[3],p3,c3);
and n1(c_out,c4,c4);
endmodule
2、激励程序
module fulladd4_tb;
reg [3:0] A,B;
reg C_IN;
wire [3:0] SUM;
wire C_OUT;
fulladd4 fulladd_4(.sum(SUM),.a(A),.b(B),.c_in(C_IN),.c_out(C_OUT));
initial
begin
A = 4'b0000;
B = 4'b0111;C_IN = 0;#100;
A = 4'b0001;
B = 4'b0011;C_IN = 0;#100;
A = 4'b0010;
B = 4'b1011;C_IN = 0;#100;
A = 4'b0011;
B = 4'b1001;C_IN = 1;#100;
A = 4'b1111;
B = 4'b1111;C_IN = 1;#100;
end
endmodule
四、仿真结果及分析
输出结果:
结果分析:
当A=0000,B=0111,C_IN=0时,SUM=0111;
当A=0001,B=0011,C_IN=0时,SUM=0100;
当A=0010,B=1011,C_IN=0时,SUM=1101;
当A=0011,B=1001,C_IN=1时,SUM=1101;
当A=1111,B=1111,C_IN=1时,SUM=1111;
根据结果,SUMi=A i•Bi^Ci
C i+1= Ai •B i+Ci•(Ai^Bi)
进位则C_OUT = 1。
五、实验总结:
在这次实验过程中,开始时程序一直都编译不出来,总是出现错误,认真修改后,总算是编译成功了。
经过这次的实验,深深的感觉到理论和实际还是很有差距的。
这次实验还是给我带来了相当大的帮助。
使我的理论与实际结合在一起。
更多信息↓↓↓。