第2章Verilog HDL门级建模

上传人:wkd****90 文档编号:241740607 上传时间:2024-07-20 格式:PPT 页数:57 大小:1.07MB
返回 下载 相关 举报
第2章Verilog HDL门级建模_第1页
第1页 / 共57页
第2章Verilog HDL门级建模_第2页
第2页 / 共57页
第2章Verilog HDL门级建模_第3页
第3页 / 共57页
点击查看更多>>
资源描述
第2章 Verilog HDL门级建模Verilog HDL数字系统设计及仿真Verilog HDL数字系统设计及仿真数字系统设计及仿真本章内容本章内容门级范例门级范例基本语法基本语法MOS开关开关UDP层次化设计层次化设计2Verilog HDL数字系统设计及仿真数字系统设计及仿真门级范例门级范例四选一选择器四选一选择器电路图电路图3Verilog HDL数字系统设计及仿真数字系统设计及仿真模块代码模块代码module MUX4x1(Y,A,B,C,D,S1,S0,En_);output Y;input A,B,C,D;input S1,S0;input En_;not(S1n,S1);not(S0n,S0);not(S1nn,S1n);not(S0nn,S0n);not(En_n,En_);and(and1,En_n,S1n,S0n,A);and(and2,En_n,S1n,S0nn,B);and(and3,En_n,S1nn,S0n,C);and(and4,En_n,S1nn,S0nn,D);or(Y,and1,and2,and3,and4);endmodule 门门级级语语句句4Verilog HDL数字系统设计及仿真数字系统设计及仿真等价代码等价代码module MUX4x1(Y,A,B,C,D,S1,S0,En_);output Y;input A,B,C,D;input S1,S0;input En_;not (S1n,S1),(S0n,S0),(S1nn,S1n),(S0nn,S0n),(En_n,En_);and (and1,En_n,S1n,S0n,A),(and2,En_n,S1n,S0nn,B),(and3,En_n,S1nn,S0n,C),(and4,En_n,S1nn,S0nn,D);or (Y,and1,and2,and3,and4);endmodule 5Verilog HDL数字系统设计及仿真数字系统设计及仿真门级建模结构门级建模结构模块定义模块定义端口声明端口声明内部连线声明内部连线声明门级调用门级调用6Verilog HDL数字系统设计及仿真数字系统设计及仿真模块定义模块定义语法要求语法要求 module 模块名(端口名模块名(端口名1,端口名,端口名2););endmodule 例如:例如:module MUX4x1(Y,A,B,C,D,S1,S0,En_);module abc(a,b,c);module adder(a,b,cin,sum,cout);module test;标识符,自己定义标识符,自己定义端口列表,只写名称端口列表,只写名称7Verilog HDL数字系统设计及仿真数字系统设计及仿真标识符的要求标识符的要求标识符由字母、数字、下划线(标识符由字母、数字、下划线(_)和)和美元符(美元符($)组成。)组成。标识符是区分大小写的。标识符是区分大小写的。标识符的第一个字符必须是字母或下标识符的第一个字符必须是字母或下划线,不能以数字或美元符开始。划线,不能以数字或美元符开始。还有一些还有一些Verilog HDL基本语法中使用基本语法中使用到的关键字作为保留字到的关键字作为保留字,不能作为标,不能作为标识符使用,例如识符使用,例如module 8Verilog HDL数字系统设计及仿真数字系统设计及仿真端口声明端口声明端口列表仅仅是列出了本模块具有哪端口列表仅仅是列出了本模块具有哪些端口,但这些端口是输入还是输出些端口,但这些端口是输入还是输出并没有定义,这就需要在模块中声明并没有定义,这就需要在模块中声明output Y;input A,B,C,D;input S1,S0;input En_;9Verilog HDL数字系统设计及仿真数字系统设计及仿真语法形式:语法形式:端口类型端口类型 端口位宽左界:端口位宽右界端口位宽左界:端口位宽右界 端口名;端口名;端口类型端口类型 输入输入input 输出输出output 双向双向inout 宽度宽度input 2:0 cin;output 0:4 cout;inout 4:7 fast;cin2、cin1、cin0cout0、cout1、cout2、cout3、cout4fast4、fast5、fast6、fast7 10Verilog HDL数字系统设计及仿真数字系统设计及仿真定义一个定义一个2位宽度的输入信号位宽度的输入信号a 建议形式建议形式input 1:0 a;input 0:1 a;input 3:4 a;input 2:1 a;端口类型端口类型 端口宽度端口宽度-1:0 端口名;端口名;11Verilog HDL数字系统设计及仿真数字系统设计及仿真端口连接规则端口连接规则输入输出必须遵循输入输出必须遵循12Verilog HDL数字系统设计及仿真数字系统设计及仿真门级调用门级调用语法形式语法形式 逻辑门类型逻辑门类型 (端口连接);(端口连接);例如例如not(S0nn,S0n);not(En_n,En_);and(and1,En_n,S1n,S0n,A);and(and2,En_n,S1n,S0nn,B);and(and3,En_n,S1nn,S0n,C);13Verilog HDL数字系统设计及仿真数字系统设计及仿真基本逻辑门基本逻辑门单输入逻辑门:缓冲器单输入逻辑门:缓冲器buf和非门和非门not buf 实例名称实例名称 (out1,out2,outn,in););not 实例名称实例名称 (out1,out2,outn,in););例:例:not n2(out1,out2,in);门级调用也称为实例化门级调用也称为实例化顺序一致!顺序一致!not n1(out1,in);实例名称可以没有,实例名称可以没有,但仿真器编译器时会但仿真器编译器时会自动分配自动分配14Verilog HDL数字系统设计及仿真数字系统设计及仿真多输入逻辑门:多输入逻辑门:与门与门and、与非门、与非门nand 或门或门or、或非门、或非门nor 异或门异或门xor和同或门和同或门xnor 范例范例and a1(out1,in1,in2,in3);or (out1,in1,in2);xor x1(out1,in1,in2);nand n3:0(Y,A,B);nand n3(Y3,A3,B3);nand n2(Y2,A2,B2);nand n1(Y1,A1,B1);nand n0(Y0,A0,B0);15Verilog HDL数字系统设计及仿真数字系统设计及仿真三态门三态门 bufif1、bufif0、notif1和和notif0 语法语法 三态门类型三态门类型 实例名称实例名称(输出信号,输入信号,控制信号输出信号,输入信号,控制信号);范例范例bufif1 b1(Y,A,ctrl);bufif0 b2(Y,A,ctrl);notif1 n1(Y,A,ctrl);notif0 n2(Y,A,ctrl);16Verilog HDL数字系统设计及仿真数字系统设计及仿真模块实例化模块实例化语法形式语法形式 模块名称模块名称 实例名称(端口连接);实例名称(端口连接);两种连接方式两种连接方式 按顺序连接按顺序连接 按名称连接按名称连接 17Verilog HDL数字系统设计及仿真数字系统设计及仿真按顺序连接按顺序连接欲调用此模块欲调用此模块module MUX4x1(Y,A,B,C,D,S1,S0,En_);output Y;input A,B,C,D;input S1,S0;input En_;/模块功能部分模块功能部分/省略省略endmodule module Test;reg a,b,c,d,en_;/连接输入端连接输入端reg s1,s0;wire y;/连接输出端连接输出端MUX4x1 mymux(y,a,b,c,d,s1,s0,en_);endmodule顺顺序序一一致致!18Verilog HDL数字系统设计及仿真数字系统设计及仿真实例化过程实例化过程19Verilog HDL数字系统设计及仿真数字系统设计及仿真按名称连接按名称连接语法形式语法形式 .原模块中端口名称(新模块中连接信号名称)原模块中端口名称(新模块中连接信号名称)范例范例module Test;reg a,b,c,d,e,f,g;wire y;MUX4x1 mymux(.Y(y),.A(a),.B(b),.C(c),.D(d),.En_(e),.S1(f),.S0(g);endmodule20Verilog HDL数字系统设计及仿真数字系统设计及仿真如果有端口悬空如果有端口悬空 MUX4x1 mymux(y,a,b,c,d,s1,en_);/两个逗号间表示没有连接的端口两个逗号间表示没有连接的端口 MUX4x1 mymux(.Y(y),.A(a),.B(b),.C(c),.D(d),.En_(e);/没有出现的端口就没有连接没有出现的端口就没有连接 21Verilog HDL数字系统设计及仿真数字系统设计及仿真内部连线声明内部连线声明语法形式语法形式 wire 线宽线宽-1:0 线名称线名称;范例范例 wire a;/定义一位线网定义一位线网a wire 3:0 b;/定义四位线网定义四位线网b 未声明而直接使用时,默认为未声明而直接使用时,默认为1位宽位宽22Verilog HDL数字系统设计及仿真数字系统设计及仿真MOS开关开关抽象程度更低抽象程度更低 nmos 实例名实例名(out,data,ctrl);pmos 实例名实例名(out,data,ctrl);源极(逻辑源极(逻辑1)和地极(逻辑)和地极(逻辑0)supply1 vdd;supply0 gnd;23Verilog HDL数字系统设计及仿真数字系统设计及仿真非门非门module mynot(Y,A);output Y;input A;supply1 vdd;supply0 gnd;nmos n1(Y,vdd,A);pmos p1(Y,gnd,A);endmodule24Verilog HDL数字系统设计及仿真数字系统设计及仿真与非门与非门module mynand(Y,A,B);output Y;input A,B;wire s;supply1 vdd;supply0 gnd;pmos n1(Y,vdd,A);pmos n2(Y,vdd,B);nmos p1(Y,s,A);nmos p2(s,gnd,B);endmodule25Verilog HDL数字系统设计及仿真数字系统设计及仿真测试模块测试模块module Test;reg a,b;wire y;mynand nand1(y,a,b);initialbegina=0;b=0;#10 a=0;b=1;#10 a=1;b=0;#10 a=1;b=1;endendmodule26Verilog HDL数字系统设计及仿真数字系统设计及仿真用户自定义原语用户自定义原语UDPand、or、not等逻辑门是等逻辑门是Verilog HDL自带的内建语法,对这些门的描自带的内建语法,对这些门的描述是以原语的形式在述是以原语的形式在Verilog HDL中定中定义的,即义的,即Verilog HDL的内置原语。的内置原语。在实际设计中,设计者有时需要使用在实际设计中,设计者有时需要使用自己编写的原语,自己编写的原语,Verilog HDL也支持也支持这种语法,这种原语就是用户自定义这种语法,这种原语就是用户自定义原语(原语(User-Defined Primitive,UDP)。)。27Verilog HDL数字系统设计及仿真数字系统设计及仿真UDP基本结构基本结构primitive UDP名称名称(输出端口输出端口,输入端口输入端口1,输入端口输入端口n);output 输出端口名输出端口名;input 输入端口名输入端口名;reg 寄存器名寄存器名;initial /初始化寄存器,这两行在时序初始化寄存器,这两行在时序UDP中使用中使用table /状态表信息状态表信息endtableendprimitive28Verilog HDL数字系统设计及仿真数字系统设计及仿真UDP基本规则基本规则1.UDP只能有一个只能有一个1位的输出端口,输出端口必须位的输出端口,输出端口必须在端口列表的第一个位置。不允许有多个输出端在端口列表的第一个位置。不允许有多个输出端口或多位输出端口。如下声明均是违法的:口或多位输出端口。如下声明均是违法的:output a,b;/多个输出违法多个输出违法 output 1:0 c;/多位输出违法多位输出违法2.UDP可以有多个输入端口,但每个输入端口仅可以有多个输入端口,但每个输入端口仅能有能有1位信号。位信号。input 3:0 d;/违法违法 input d3,d2,d1,d0;/合法合法3.输出端口声明为输出端口声明为output,输入端口声明为,输入端口声明为input29Verilog HDL数字系统设计及仿真数字系统设计及仿真UDP基本规则基本规则4.时序电路的时序电路的UDP需要保存状态,所以时序电路需要保存状态,所以时序电路UDP的输出端口要声明为的输出端口要声明为reg类型。类型。5.时序电路的时序电路的UDP中初始状态可以使用中初始状态可以使用initial语句语句初始化,该语句可选。初始化,该语句可选。6.UDP与与module同级别,所以模块内部不能定义同级别,所以模块内部不能定义UDP,但可以在模块内调用已定义的,但可以在模块内调用已定义的UDP,语法,语法与门级调用完全相同。与门级调用完全相同。7.UDP的状态表项可以处理的状态表项可以处理0、1、x值,不能处理值,不能处理z值。本身值。本身UDP不能输出不能输出z值,输入给值,输入给UDP的的z值值会被当做会被当做x值来处理。值来处理。8.UDP中不能使用中不能使用inout端口。端口。30Verilog HDL数字系统设计及仿真数字系统设计及仿真组合电路组合电路UDP二输入与非门二输入与非门primitive nand_udp(Y,A,B);output Y;input A,B;Table/A B :Y 0 0 :1;0 1 :1;1 0 :1;1 1 :0;endtableendprimitive/输入信号输入信号1 输入信号输入信号2 输入信号输入信号n :输出信号输出信号;31Verilog HDL数字系统设计及仿真数字系统设计及仿真注意事项注意事项1.输入信号的顺序一定要和输入信号的顺序一定要和UDP中端中端口列表中的输入信号顺序相同!口列表中的输入信号顺序相同!2.输入和输出之间以冒号输入和输出之间以冒号“:”隔开,隔开,每一行结束处以分号每一行结束处以分号“;”结束。结束。3.状态表中要包含所有有确定输出的输状态表中要包含所有有确定输出的输入情况,即最好做到每种可以得到确入情况,即最好做到每种可以得到确定输出值的输入都有对应的列表行与定输出值的输入都有对应的列表行与之相对应。之相对应。32Verilog HDL数字系统设计及仿真数字系统设计及仿真完整的二输入与非门完整的二输入与非门UDPprimitive nand_udp(Y,A,B);output Y;input A,B;table/A B :Y 0 0 :1;0 1 :1;1 0 :1;1 1 :0;x 0 :1;0 x :1;x x :x;endtableendprimitive这一行状态表的作用与这一行状态表的作用与不写一样,所以此行可以省略不写一样,所以此行可以省略 33Verilog HDL数字系统设计及仿真数字系统设计及仿真引入无关项引入无关项?primitive nand_udp(Y,A,B);output Y;input A,B;table/A B :Y 0?:1;?0 :1;1 1 :0;endtableendprimitive34Verilog HDL数字系统设计及仿真数字系统设计及仿真四选一选择器的四选一选择器的UDPprimitive MUX4x1_udp(Y,A,B,C,D,S1,S0,En_);output Yinput A,B,C,D,S1,S0,En_;table/A B C D S1 S0 En_ :Y?1 :0;0?0 0 0 :0;1?0 0 0 :1;?0?0 1 0 :0;?1?0 1 0 :1;?0?1 0 0 :0;?1?1 0 0 :1;?0 1 1 0 :0;?1 1 1 0 :1;endtable endprimitive35Verilog HDL数字系统设计及仿真数字系统设计及仿真UDP的实例化与门级一样的实例化与门级一样module Test;reg a,b,c,d,en_;reg s1,s0;wire y;/按顺序连接按顺序连接MUX4x1_udp mux_udp1(y,a,b,c,d,s1,s0,en_);/按名称连接,与门级建模完全一致按名称连接,与门级建模完全一致MUX4x1_udp mux_udp2(.Y(y),.A(a),.B(b),.C(c),.D(d),.S1(s1),.S0(s0),.En_(en_);endmodule36Verilog HDL数字系统设计及仿真数字系统设计及仿真时序电路时序电路UDP时序电路时序电路UDP的输出值必须声明为的输出值必须声明为reg类型。类型。时序电路时序电路UDP的输出可以使用的输出可以使用initial语句进语句进行初始化。行初始化。状态表项格式为状态表项格式为“输入信号输入信号:当前输出:当前输出:下一个输出下一个输出”。状态表的输入信号可以是电平值,也可以是状态表的输入信号可以是电平值,也可以是边沿信号。边沿信号。要列出所有可能的变化,防止工作中突然出要列出所有可能的变化,防止工作中突然出现现x值。值。37Verilog HDL数字系统设计及仿真数字系统设计及仿真电平敏感的电平敏感的D锁存器锁存器primitive latch_udp(q,d,clock);output q;input d,clock;reg q;initial q=0;table/d clock :q :q*?0 :?:-;0 1 :?:0 ;1 1 :?:1 ;endtableendprimitive 38Verilog HDL数字系统设计及仿真数字系统设计及仿真使用使用(xx)来表示信号的变化来表示信号的变化primitive dff_udp(q,d,clock);output q;input d,clock;reg q;/输出也可以不指定初始值输出也可以不指定初始值table/d clock :q :q*0 (01):?:0;/第一行,正常输出第一行,正常输出 1 (01):?:1;/第二行,正常输出第二行,正常输出?(1?):?:-;/第三行,屏蔽下降沿第三行,屏蔽下降沿?(x0):?:-;/第四行,屏蔽下降沿第四行,屏蔽下降沿 (?)?:?:-;/第五行,屏蔽第五行,屏蔽clock非边沿时非边沿时dendtableendprimitive39Verilog HDL数字系统设计及仿真数字系统设计及仿真缩写项缩写项缩 写写 形形 式式含含 义解解 释?0,1,x不能用于不能用于输出部分出部分b0,1不能用于不能用于输出部分出部分 维持原持原值不不变只能用在只能用在时序序UDP的的输出部分出部分r(01)信号的上升沿信号的上升沿f(10)信号的下降沿信号的下降沿p(01),(0 x)或或(x1)可能是信号的上升沿可能是信号的上升沿n(10),(1x)或或(x0)可能是信号的下降沿可能是信号的下降沿*(?)信号信号值的任意的任意变化化40Verilog HDL数字系统设计及仿真数字系统设计及仿真缩写后的缩写后的D触发器触发器primitive dff_udp(q,d,clock);output q;input d,clock;reg q;table /d clock :q :q*1 r :?:1;0 r :?:0;?n :?:-;?(0 x):?:-;?(x1):?:-;*?:?:-;endtableendprimitive41Verilog HDL数字系统设计及仿真数字系统设计及仿真层次化设计层次化设计Top-Down流程流程 42Verilog HDL数字系统设计及仿真数字系统设计及仿真四位全加器的门级建模四位全加器的门级建模 原理图原理图 四个四个一位全加器一位全加器 的拼接的拼接43Verilog HDL数字系统设计及仿真数字系统设计及仿真一位全加器一位全加器module fulladd(S,Cout,Cin,A,B);output S,Cout;input Cin,A,B;wire and1,and2,and3,and4;xor (S,Cin,A,B);and (and1,Cin,A);and (and2,A,B);and (and3,Cin,B);or (Cout,and1,and2,and3);endmodule 44Verilog HDL数字系统设计及仿真数字系统设计及仿真整体模块整体模块module add4(S3,S2,S1,S0,COUT,CIN,X3,X2,X1,X0,Y3,Y2,Y1,Y0);output COUT,S3,S2,S1,S0;input CIN,X3,X2,X1,X0,Y3,Y2,Y1,Y0;wire c0,c1,c2;fulladd add0(.S(S0),.Cout(c0),.Cin(CIN),.A(X0),.B(Y0);fulladd add1(.S(S1),.Cout(c1),.Cin(c0),.A(X1),.B(Y1);fulladd add2(.S(S2),.Cout(c2),.Cin(c1),.A(X2),.B(Y2);fulladd add3(.S(S3),.Cout(COUT),.Cin(c2),.A(X3),.B(Y3);endmodule45Verilog HDL数字系统设计及仿真数字系统设计及仿真合并线网后合并线网后module add4(S,COUT,CIN,X,Y);/四位全加器四位全加器output COUT;output 3:0 S;input CIN;input 3:0X,Y;wire c0,c1,c2;fulladd add0(.S(S0),.Cout(c0),.Cin(CIN),.A(X0),.B(Y0);fulladd add1(.S(S1),.Cout(c1),.Cin(c0),.A(X1),.B(Y1);fulladd add2(.S(S2),.Cout(c2),.Cin(c1),.A(X2),.B(Y2);fulladd add3(.S(S3),.Cout(COUT),.Cin(c2),.A(X3),.B(Y3);endmodule46Verilog HDL数字系统设计及仿真数字系统设计及仿真测试模块测试模块module tadd4;reg 3:0 x,y;reg cin;wire 3:0 s;wire cout;add4 myadd4(.S(s),.COUT(cout),.CIN(cin),.X(x),.Y(y);initial /此段代码用于生成输入的数据此段代码用于生成输入的数据begin cin=0;x=11;y=2;#10 cin=0;x=9;y=6;#10 cin=0;x=9;y=7;#10 cin=1;x=11;y=2;#10 cin=1;x=9;y=6;#10 cin=1;x=9;y=7;#10$stop;endendmodule47Verilog HDL数字系统设计及仿真数字系统设计及仿真层次化调用层次化调用以以.隔开层次隔开层次tadd4.stadd4.myadd4tadd4.myadd4.c0tadd4.myadd4.add0tadd4.myadd4.add0.and148Verilog HDL数字系统设计及仿真数字系统设计及仿真2-4译码器的门级建模译码器的门级建模 电路图电路图49Verilog HDL数字系统设计及仿真数字系统设计及仿真module DEC2x4(Z,A,B,Enable);output 3:0 Z;input A,B,Enable;wire Abar,Bbar;not not0(Abar,A),not1(Bbar,B);nand nand0(Z3,Enable,A,B),nand1(Z0,Enable,Abar,Bbar),nand2(Z1,Enable,Abar,B),nand3(Z2,Enable,A,Bbar);endmodule50Verilog HDL数字系统设计及仿真数字系统设计及仿真module tb_22;reg a,b,e;wire 3:0 z;initialbegin a=0;b=0;e=0;#10 a=0;b=0;e=1;#10 a=0;b=1;#10 a=1;b=0;#10 a=1;b=1;#10 a=1bx;b=1bx;#10$stop;endDEC2x4 my_dec2x4(z,a,b,e);/实例化实例化endmodule51Verilog HDL数字系统设计及仿真数字系统设计及仿真主从主从D触发器的门级建模触发器的门级建模 电路图电路图52Verilog HDL数字系统设计及仿真数字系统设计及仿真module MSDFF(Q,Qbar,D,C);output Q,Qbar;input D,C;not not1(NotD,D),not2(NotC,C),not3(NotY,Y);nand nand1(D1,D,C),nand2(D2,C,NotD),nand 3(Y,D1,Ybar),nand 4(Ybar,Y,D2),nand 5(Y1,Y,NotC),nand 6(Y2,NotY,NotC),nand 7(Q,Qbar,Y1),nand 8(Qbar,Y2,Q);endmodule53Verilog HDL数字系统设计及仿真数字系统设计及仿真仿真波形仿真波形54Verilog HDL数字系统设计及仿真数字系统设计及仿真1位比较器的门级建模位比较器的门级建模 电路图电路图55Verilog HDL数字系统设计及仿真数字系统设计及仿真设计模块设计模块module compare(AgtB,AeqB,AltB,A,B);output AgtB,AeqB,AltB;input A,B;nand(nand1,A,B);and(AgtB,A,nand1);and(AltB,B,nand1);xnor(AeqB,AgtB,AltB);endmodule 56Verilog HDL数字系统设计及仿真数字系统设计及仿真仿真波形仿真波形57
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 生活常识


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!