《门级与结构建模.ppt》由会员分享,可在线阅读,更多相关《门级与结构建模.ppt(40页珍藏版)》请在三一办公上搜索。
1、第 三讲 门级与结构建模,内容:结构建模分类Verilog内建基本门门级结构建模门延迟测试模块模块仿真入门,前言,Verilog模型可以是实际电路不同级别的抽象。这些抽象的级别和它们对应的模型类型共有以下五种:系统级(system)算法级(algorithmic)RTL级(RegisterTransferLevel):门级(gate-level):开关级(switch-level),我们将通过许多实际的Verilog HDL模块的设计来了解不同抽象级别模块的结构和可综合性的问题。对于数字系统的逻辑设计工程师而言,熟练地掌握门级、RTL级、算法级、系统级是非常重要的。而对于电路基本部件(如门、缓
2、冲器、驱动器等)库的设计者而言,则需要掌握用户自定义源语元件(UDP)和开关级的描述。,一个复杂电路的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。这些模块可以分别用不同抽象级别的Verilog HDL描述,在一个模块中也可以有多种级别的描述。利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计。,结构建模分类,结构建模分类,结构建模侧重反映模块内部的结构组成。门级建模 由基本逻辑门级元件互连而成的具有一定功能的电路模块。开关级建模(不讲)是构成VerilogHDL对硬件设计
3、最低层次的描述。通常的综合工具不支持开关级描述。用户定义原语建模(不讲)由用户定义基础元件互连而成的具有一定功能的电路模块。用户定义模块建模 由用户定义模块互连而成的具有一定功能的电路模块。,Verilog内建基本门,一个逻辑网络是由许多逻辑门和开关所组成,因此用逻辑门的模型来描述逻辑网络是最直观的。Verilog HDL提供了一些门类型的关键字,可以用于门级结构建模多输入门:and,nand,or,nor,xor,xnor多输出门:buf(缓冲门),not(非门)三态门:bufif0,bufif1,notif0,notif1。只有在控制端有效时才能传递数据,否则输出高阻抗z。上拉、下拉电阻:
4、pullup,pulldownMOS开关:cmos,nmos,pmos,rcmos,rnmos,rpmos双向开关:tran,tranif0,tranif1,rtran,rtranif0,rtranif1,多输入门,多输入门具有单个输出,2个或多个输入,如图:,多输入门实例语句语法:gate_type instance_name(output,input1,inputN);,门类型,实例名可选,单输出,多输入,内建多输入门,与门(and),与门真值表:,实例引用:and U1(out,in1,in2);and U2(out1,a,b,c,d);and(out,in1,in2),4个输入,与非门
5、(nand),与非门真值表:,实例引用:nand U3(out,in1,in2);nand U4(out1,a,b,c);,3个输入,或门(or),或门真值表:,实例引用:or U5(out,in1,in2),U6(out1,a,b,c);,同类门实例引用简化方式,或非门(nor),或非门真值表:,实例引用:nor U7(out,in1,in2);nor U8(out1,out,b,c);,U7输出out信号连接到U8的输入端口,异或门(xor),异或门真值表:,实例引用:xor U9(out,in1,in2);xor U10(out1,out,in1,c);,in1信号连接到U9、U10的输
6、入端口,异或非门(xnor),异或门真值表:,实例引用:xnor U11(out,in1,in2);xor(out1,out,b,c);,无实例名,多输出门,多输出门具有单个输入,1个或多个输出,如图:,多输出门实例语句语法:gate_type instance_name(output1,outputN,input);,多输入门,输出1,输出n,输入,门类型,实例名可选,多输出,单输入,内建多输出门,真值表:,实例引用:buf B1(F1,F2,F3,F4,CLK);not N1(A,B,ready);,内建三态门,三态门实例语句语法:gate_type instance_name(outpu
7、t,input,control);,内建三态门真值表,门级结构建模,真值表:,4选1多路选择器,4选1多路选择器的门级结构建模,module MUX4x1(Z,D0,D1,D2,D3,S0,S1);output Z;/端口说明 input D0,D1,D2,D3,S0,S1;/端口说明 wire T1,T2,T3,T4;/内部线网说明,缺省说明 S0bar,S1bar and(T0,D0,S0bar,S1bar),/4个与门(T1,D1,S0bar,S1),(T2,D2,S0,S1bar),(T3,D3,S0,S1);not(S0bar,S0),/2个非门(S1bar,S1);or(Z,T0,
8、T1,T2,T3);/1个或门endmodule,门延迟,在实际电路中任何一个逻辑门输入到输出都有延迟。门延迟由三类延迟值组成:1)下降延迟:1、x、z 0 2)上升延迟:1 0、x、z 3)截止延迟:输出从0、1、x 变化到 z 的延迟。带有延迟定义的门实例引用的语法如下:gate_type delay instance_name(terminal_ list);,带门延迟的实例引用,无延迟值:not N1(Qbar,Q);因为没有定义时延,门时延为0。1个延迟值:nand#6(Out,In1,In2);所有时延均为6,即上升时延和下降时延都是6。2个延迟值:and#(3,5)(Out,In
9、1,In2,In3);上升时延被定义为3,下降时延为5,转换到x的时延是3和5中间的最小值,即3。3个延迟值:notif1#(2,8,6)(Dout,Din1,Din2);上升时延为2,下降时延为8,截止时延为6,转换到x的时延是2、8和6中的最小值,即2。,(最小:典型:最大)延迟,实际电路中逻辑门不但有延迟,而且延迟受温度、电压等因素影响,是变化的。门延迟变化采用 min:typ:max 形式定义如下:minimum:typical:maximum最小值、典型值和最大值延迟实例引用:nand#(2:3:4,5:6:7)(Pout,Pin1,Pin2);选择使用哪种延迟通常作为模拟仿真中的一
10、个选项。延迟时间单位由 timescale 编译器指令设定。,带延迟的4选1多路选择器的门级结构建模,module MUX4x1_delay(Z,D0,D1,D2,D3,S0,S1);output Z;/端口说明 input D0,D1,D2,D3,S0,S1;/端口说明 wire T1,T2,T3,T4;/内部线网说明,缺省说明 S0bar,S1bar and#(2)U1(T0,D0,S0bar,S1bar),/4个与门,上升时延和下降时延都是2 U2(T1,D1,S0bar,S1),U3(T2,D2,S0,S1bar),U4(T3,D3,S0,S1);not U5(S0bar,S0),/2
11、个非门 U6(S1bar,S1);or#(2,1)U7(Z,T0,T1,T2,T3);/1个或门endmodule,用户模块结构建模,用MUX4x1用户模块设计16选1多路选择器:,16选1多路选择器设计,module MUX16x1(Z,D,S);output Z;/端口说明 input 15:0 D;/端口说明 input 3:0 S;/端口说明/用户模块建模 MUX4x1 U1(.Z(Z3_0),.D0(D0),.D1(D1),.D2(D2),.D3(D3),.S0(S0),.S1(S1),U2(.Z(Z7_4),.D0(D4),.D1(D5),.D2(D6),.D3(D7),.S0(S
12、0),.S1(S1),U3(.Z(Z11_8),.D0(D8),.D1(D9),.D2(D10),.D3(D11),.S0(S0),.S1(S1),U4(.Z(Z15_12),.D0(D12),.D1(D13),.D2(D14),.D3(D15),.S0(S0),.S1(S1),U5(.Z(Z),.D0(Z3_0),.D1(Z7_4),.D2(Z11_8),.D3(Z15_12),.S0(S3),.S1(S4);endmodule,模块仿真入门,如何编写测试文件对所做的设计进行测试和验证。modelsim仿真工具入门,Verilog设计的仿真步骤,注:虚线表示编译器能检查输入文件的可读性和是否
13、存在以及是否允许生成输出文件,仿真测试平台的组成,测试模块,为了对已设计的模块进行检验往往需要产生一系列信号作为输出,输入到已设计的模块,并检查已设计模块的输出,看它们是否符合设计要求。这就要求我们编写测试模块,也称作测试文件,常用带.tf扩展名的文件来描述测试模块。,4选1多路选择器测试模块1,module test_MUX4x1;/MUX4x1 模块测试平台,无输入输出端口reg 3:0 d;/测试平台内部激励信号说明reg 1:0 s;wire out;/模块输出信号MUX4x1 mymux(out,d0,d1,d2,d3,s0,s1);/调有被测模块initial/激励信号产生与结果输
14、出 begin d=4b1010;s=2b00;/加载输入信号d3:0$display($time,“d=%b,s1=%b,s0=%b,out=%b n”,d,s1,s0,out);/显示结果,#5 s=2b00;/加载选择信号s1:0$display($time,“d=%b,s1=%b,s0=%b,out=%b n”,d,s1,s0,out);/延时后显示结果#5 s=2b01;$display($time,“d=%b,s1=%b,s0=%b,out=%b n,d,s1,s0,out);#5 s=2b10;$display$time,(“d=%b,s1=%b,s0=%b,out=%b n,d
15、,s1,s0,out);#5 s=2b11;$display($time,“d=%b,s1=%b,s0=%b,out=%b n,d,s1,s0,out);endendmodule,4选1多路选择器测试模块1仿真结果,run-all#0 d=1010,s1=0,s0=0,out=x#5 d=1010,s1=0,s0=0,out=0#10 d=1010,s1=0,s0=1,out=0#15 d=1010,s1=1,s0=0,out=0#20 d=1010,s1=1,s0=1,out=1,4选1多路选择器测试模块2,module test_MUX4x1_delay;/MUX4x1 模块测试平台,无输
16、入输出端口reg 3:0 d;/测试平台内部激励信号说明reg 1:0 s;wire out;/模块输出信号MUX4x1_delay mymux(out,d0,d1,d2,d3,s0,s1);/调用被测模块,initial/激励信号产生与结果输出 begin$monitor($time,“d=%b,s1=%b,s0=%b,out=%b n”,d,s1,s0,out);/监视输出 d=4b1010;/加载输入信号d3:0 5 s=2b00;/加载选择信号s1:0 5 s=2b01;5 s=2b10;5 s=2b11;endendmodule,4选1多路选择器测试模块2仿真结果,run-all#0 d=1010,s1=0,s0=0,out=x#3 d=1010,s1=0,s0=0,out=0#10 d=1010,s1=0,s0=1,out=0#15 d=1010,s1=1,s0=0,out=0#19 d=1010,s1=1,s0=0,out=1#20 d=1010,s1=1,s0=1,out=1,Modelsim仿真工具入门,