本科实验报告实验名称:数字集成电路实验课程名称:数字集成电路设计实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证█综合设计□自主创新学生姓名:学号/班级:组号:学院:信息与电子学院同组搭档:无专业:成绩:实验1门级电路的设计仿真一、实验内容在CMOS工艺下,利用Virtuoso工具设计非门、两输入、四输入的与非门和或非门,并对其性能进行仿真和分析。二、实验目的深入理解与非门、或非门、非门特性,掌握与非门、或非门、非门的设计方法和性能分析方法。三、实验要求设计符合下列要求的反相器,两输入的与非门、或非门,四输入的与非门和或非门。技术指标要求:负载电容为5pF,信号高电平为VDD(1.8V),低电平为GND(0V)。输入信号的上升时间、下降时间均为200ps,门电路时延1ns。四、实验结果1.两输入与非门1.1两输入与非门的电路图1.2MOS管子参数表PM0PM1NM0NM1w100u100u100u100ul180n180n180n180n1.3仿真结果及延时1.4改变nmos管和pmos管宽度的扫描仿真简单的设PMOS和NMOS的宽度为l,在不改变MOS管沟道长度的情况下,对MOS管的宽度进行扫描。参数l从1u到100u,步进频率为5u进行扫描,并对扫描出的宽度和延迟的曲线进行分析。其中,延迟曲线来源于上1.3仿真中的t1-1、t1-2。1.4.1扫描仿真结果1.4.2扫描结果分析从上图1中可以看出,随着管子宽度的增加,与非门的延时在减少。这是因为增加管子的尺寸可以增加管子的驱动能力,减小开启电阻,而逻辑门的延时与开启电阻一般是成正比的,所以可以通过增加管子尺寸来减小延时。但是这样做也会使逻辑门本身的电容增大,增加上一级的负载,而且本身电容增加,会使输入信号与输出信号产生耦合效应,影响输出电压。从上图2延迟曲线,可以看出,同样的管子宽度,t1-1比t1-2的延迟大。故对t1-1取点,使其延迟恰好等于要求的最大延迟1ns,可读出此时的管子宽度为14.15u。可近似得出结论,管子宽度大于15u时,可保证延迟小于1ns。2.两输入或非门2.1两输入或非门的电路图2.2MOS管子参数表PM0PM1NM0NM1W100u100u100u100uL180n180n180n180n2.3仿真结果及延时2.4改变nmos管和pmos管宽度的扫描仿真简单的设PMOS和NMOS的宽度为l,在不改变MOS管沟道长度的情况下,对MOS管的宽度进行扫描。参数l从1u到100u,步进频率为5u进行扫描,并对扫描出的宽度和延迟的曲线进行分析。其中,延迟曲线来源于上2.3仿真中的t2-1、t2-2。2.4.1扫描仿真结果2.4.2扫描结果分析管子宽度对门电路延迟的影响跟二输入与非门大致相同,即宽长比越大,延迟越小。但从图1还可以看出,MOS管的宽度变化,对输出波形上升沿的影响较大,对于输出的下降沿影响要小许多。从上图2延迟曲线,可以看出,t2-1和t2-2的延迟相近。故对t2-2取点,使其延迟恰好等于要求的最大延迟1ns,可读出此时的管子宽度为17.5u。可近似得出结论,管子宽度大于17.5u时,可保证延迟小于1ns。3.四输入或非门3.1四输入或非门的电路图3.2四输入或非门MOS管参数PM0PM1PM2PM3w100u100u100u100ul180n180n180n180nNM0NM1NM2NM3w100u100u100u100ul180n180n180n180n3.3仿真结果和延时3.4延迟结果分析由于四输入与非门的四个输入端造成的延时不同,但最大延时要么出现在离输出最近的端口,要么出现在离输出最远的端口,所以t3-1输入与t3-4输入都符合要求,则延时符合实验要求。t3-4的延迟明显大于其他三个输入端口的延迟。4四输入与非门4.1四输入与非门的电路图4.2MOS管子参数PM0PM1PM2PM3w100u100u100u100ul180n180n180n180nNM0NM1NM2NM3w100u100u100u100ul180n180n180n180n4.3仿真结果和延时4.4延迟结果分析由于四输入与非门的四个输入端造成的延时不同,但最大延时要么出现在离输出最近的端口,要么出现在离输出最远的端口,所以t4-1输入与t4-4输入都符合要求,则延时符合实验要求。五、讨论改变负载电容的扫描仿真改变负载电容的大小,观察不同负载条件下逻辑门延时的变化情况。晶体管自身参数以及负载变化对时序、功耗的影响。以二输入或非门为例,改变负载电容,仿真结果如下:扫描仿真结果扫描结果分析从上图中可以看出,随着负载电容的的减小,或非门的延时在减少。这是因为减小负载电容可以减小充放电时间来减小延时。从实验结果可发现电容越大,延时也越大,这是因为当输出负载增大时,时间常数RC也越大,所以充放电时间也随之增大,所以延时也变大。将晶体管管子放大可以减小延时时间,但功耗会变大。实验2平方根进位选择加法器仿真和综合一、实验内容使用VHDL语言设计一个平方根进位选择加法器,并进行功能仿真以验证VHDL代码的正确性。然后进行综合和网表仿真。二、实验目的深入理解VHDL语言和平方根进位选择加法器的原理,熟悉和掌握数字集成电路分析与设计的基本知识,了解和掌握数字集成电路设计的基本流程。三、实验要求设计符合下列要求的平方根进位选择加法器。技术指标要求:加法器的位宽不低于64位,综合时的最低时钟约束为100MHz,输出负载电容为1pF。四、实验原理平方根进位选择加法器是将输入分成几个子模块,每个子模块的位宽都不同,从低到高呈递增排列,每一模块都将进位为0和1分别提前相加好,待上一级的进位信号到来时选择正确的输出送入输出端。最后将子模块级联,就构成了平方根进位选择加法器。五、实验流程1.首先编写平方根进位选择加法器的代码,分为三个文件,分别是全加器,选择加法器的子模块,选择加法器的顶层文件。为了仿真还要编写一个测试文件。2.之后对代码进行仿真,仿真结果正确后编写一个脚本文件,对代码进行综合,并产生网表文件。3对网表文件进行后仿,验证结果是否正确。上图是网表文件反正的结果波形图之一,可以看到加法器最终输出和realresult结果是一致的。上图是用tb文件仿真的结果图,所有的测试用例都是right,证明加法器设计成功。六、实验总结和分析在后仿中,由于测试用例里将两组测试用例之间的刷新时间设置的太小,而在脚本文件中我设定的延时约束大于测试用例的时间,所以会有在加法器还未计算完的情况下就进行测试比对,所以会有许多wrong的测试用例。后来修改了测试用例的刷新时间,将时间改大,使加法器有充足的时间进行计算,最后结果也正确了。七、几种加法器结构的不同特性1.简单加法器链:由简单全加器级联而成,每一级都需要等进位信号到来才能计算,因此延时比较高,与进位位数成正比2.直接进位加法器:在简单加法器链上多了一条进位通路,就是当输入信号P(P=A+B)全为1时,输出的进位信号Cout等于输入的进位信号Cin,所以在计算前多一步判断,可以节省延时时间。延时与𝑁𝑀+2𝑀成正比(N为总位宽,M为每组的位宽)。这种加法器在N较大时性能优于简单加法器链。3.线性进位选择加法器:这种加法器是先将输入等分成子模块,每组子模块单独运算,模块之间用进位信号通信。每个子模块提前将上级进位为1和进位为0的结果都计算出来,待上一级进位信号到来的时候直接选择正确的结果即可,这样做可以有效节省延时。它的延时与𝑁𝑀+𝑀成正比。4.平方根进位进位选择加法器:这种加法器在线性进位选择加法器的基础上将分组分成不等分的模块,而是呈位宽数单调递增的分组,这样可以有效地将进位从低位传到高位的时间和宽位宽的计算时间匹配。不至于让子模块在计算结果后等待太长的时间才能等到上一级的进位信号。它的延时与N的平方根成正比,所以叫平方根进位选择加法器。5.提前进位加法器:这种加法器是每一级的计算都不依赖于前一级的进位输出,而是每一级都直接可以通过输入直接计算得出结果。八、实验感想通过两次实验,我学会了数字门电路的基本设计方法,了解门延时和管子参数的关系,加深了对静态逻辑门设计的理解。同时也学会了把硬件描述语言转换成网表并进行后仿的方法,并对延时约束有了更深刻的认识。整个实验收获颇丰。八、附录1.平方根进位选择加法器代码1.1子模块libraryieee;useieee.std_logic_1164.all;entitysquare_root_unitisgeneric(N:integer);port(a,b:instd_logic_vector(N-1downto0);sum0,sum1:outstd_logic_vector(N-1downto0);c0,c1:outstd_logic);endsquare_root_unit;architecturebehaveofsquare_root_unitissignalct0,ct1:std_logic_vector(Ndownto0);componentfauisport(a,b,cin:instd_logic;s,cout:outstd_logic);endcomponent;beginct0(0)='0';ct1(0)='1';G1:foriin0toN-1generateI1:fauportmap(a(i),b(i),ct0(i),sum0(i),ct0(i+1));I2:fauportmap(a(i),b(i),ct1(i),sum1(i),ct1(i+1));endgenerateG1;c0=ct0(N);c1=ct1(N);endbehave;1.2顶层文件libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;usework.all;entitysquare_root_adderisport(a,b:instd_logic_vector(63downto0);cin:instd_logic;sum:outstd_logic_vector(63downto0);cout:outstd_logic);endsquare_root_adder;architecturebehaveofsquare_root_adderissignalc:std_logic_vector(7downto0);signalsum0,sum1:std_logic_vector(63downto0);signalco0,co1:std_logic_vector(6downto0);signaln:natural;componentsquare_root_unitisgeneric(N:natural);port(a,b:instd_logic_vector(N-1downto0);sum0,sum1:outstd_logic_vector(N-1downto0);c0,c1:outstd_logic);endcomponent;beginG1:foriin0to6generatec(i+1)=co0(i)whenc(i)='0'elseco1(i);endgenerateG1;I0:square_root_unitgenericmap(2)portmap(a(1downto0),b(1downto0),sum0(1downto0),sum1(1downto0),co0(0),co1(0));sum(1downto0)=sum0(1downto0)whenc(0)='0'elsesum1(1downto0);I1:square_root_unitgenericmap(4)portmap(a(5downto2),b(5downto2),sum0(5downto2),sum1(5downto2),co0(1),co1(1));sum(5downto2)=su