版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 Verilog HDL门级建模,Verilog HDL数字系统设计及仿真,2,本章内容,门级范例 基本语法 MOS开关 UDP 层次化设计,3,门级范例四选一选择器,电路图,4,模块代码,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
2、,S1n,S0nn,B); and (and3,En_n,S1nn,S0n,C); and (and4,En_n,S1nn,S0nn,D); or (Y,and1,and2,and3,and4); endmodule,门级语句,5,等价代码,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,E
3、n_n,S1n,S0nn,B), (and3,En_n,S1nn,S0n,C), (and4,En_n,S1nn,S0nn,D); or (Y,and1,and2,and3,and4); endmodule,6,门级建模结构,模块定义 端口声明 内部连线声明 门级调用,7,模块定义,语法要求 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;,标识符,自己定义,端口列表,只写
4、名称,8,标识符的要求,标识符由字母、数字、下划线(_)和美元符($)组成。 标识符是区分大小写的。 标识符的第一个字符必须是字母或下划线,不能以数字或美元符开始。 还有一些Verilog HDL基本语法中使用到的关键字作为保留字 ,不能作为标识符使用,例如module,9,端口声明,端口列表仅仅是列出了本模块具有哪些端口,但这些端口是输入还是输出并没有定义,这就需要在模块中声明,output Y; input A,B,C,D; input S1,S0; input En_;,10,语法形式: 端口类型 端口位宽左界:端口位宽右界 端口名; 端口类型 输入input 输出output 双向in
5、out 宽度,input 2:0 cin; output 0:4 cout; inout 4:7 fast;,cin2、cin1、cin0 cout0、cout1、cout2、cout3、cout4 fast4、fast5、fast6、fast7,11,定义一个2位宽度的输入信号a 建议形式,input 1:0 a; input 0:1 a; input 3:4 a; input 2:1 a;,端口类型 端口宽度-1 : 0 端口名;,12,端口连接规则,输入输出必须遵循,13,门级调用,语法形式 逻辑门类型 (端口连接); 例如,not (S0nn,S0n); not (En_n,En_);
6、 and (and1,En_n,S1n,S0n,A); and (and2,En_n,S1n,S0nn,B); and (and3,En_n,S1nn,S0n,C);,14,基本逻辑门,单输入逻辑门:缓冲器buf和非门not buf 实例名称 (out1,out2,outn,in); not 实例名称 (out1,out2,outn,in); 例:not n2(out1,out2,in); 门级调用也称为实例化,顺序一致!,not n1(out1,in);,实例名称可以没有,但仿真器编译器时会自动分配,15,多输入逻辑门: 与门and、与非门nand 或门or、或非门nor 异或门xor和同或
7、门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);,16,三态门 bufif1、bufif0、notif1和notif0 语法 三态门类型 实例名称 (输出信号,输入信号,控制信号); 范例,bufif1 b1(Y,A,ctrl); bufif0 b2(Y,A,ctrl); notif1 n1(Y,A,ctr
8、l); notif0 n2(Y,A,ctrl);,17,模块实例化,语法形式 模块名称 实例名称(端口连接); 两种连接方式 按顺序连接 按名称连接,18,按顺序连接,欲调用此模块,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_); endm
9、odule,顺序一致!,19,实例化过程,20,按名称连接,语法形式 .原模块中端口名称(新模块中连接信号名称) 范例,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); endmodule,21,如果有端口悬空 MUX4x1 mymux(y,a,b,c,d,s1, ,en_); /两个逗号间表示没有连接的端口 MUX4x1 mymux(.Y(y), .A(a), .B(b), .C(c), .D(d), .En_(e);
10、 /没有出现的端口就没有连接,22,内部连线声明,语法形式 wire 线宽-1 : 0 线名称; 范例 wire a; /定义一位线网a wire 3:0 b;/定义四位线网b 未声明而直接使用时,默认为1位宽,23,MOS开关,抽象程度更低 nmos 实例名(out , data , ctrl); pmos 实例名(out , data , ctrl); 源极(逻辑1)和地极(逻辑0) supply1 vdd; supply0 gnd;,24,非门,module mynot(Y,A); output Y; input A; supply1 vdd; supply0 gnd; nmos n1(
11、Y,vdd,A); pmos p1(Y,gnd,A); endmodule,25,与非门,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); endmodule,26,测试模块,module Test; reg a,b; wire y; mynand nand1(y,a,b); initial begin a=0;b=0; #10 a=0;b=1; #10
12、 a=1;b=0; #10 a=1;b=1; end endmodule,27,用户自定义原语UDP,and、or、not等逻辑门是Verilog HDL自带的内建语法,对这些门的描述是以原语的形式在Verilog HDL中定义的,即Verilog HDL的内置原语。 在实际设计中,设计者有时需要使用自己编写的原语,Verilog HDL也支持这种语法,这种原语就是用户自定义原语(User- Defined Primitive,UDP)。,28,UDP基本结构,primitive UDP名称(输出端口,输入端口1,输入端口n); output 输出端口名; input 输入端口名; reg 寄
13、存器名; initial /初始化寄存器,这两行在时序UDP中使用 table /状态表信息 endtable endprimitive,29,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,输入端口声明为input,30,UDP基本规则,4.
14、时序电路的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端口。,31,组合电路UDP,二输入与非门,primitive nand_udp(Y,A,B); output Y; input A,B; Table / A B : Y
15、0 0 : 1; 0 1 : 1; 1 0 : 1; 1 1 : 0; endtable endprimitive,/输入信号1 输入信号2 输入信号n : 输出信号 ;,32,注意事项,1.输入信号的顺序一定要和UDP中端口列表中的输入信号顺序相同! 2.输入和输出之间以冒号“:”隔开,每一行结束处以分号“;”结束。 3.状态表中要包含所有有确定输出的输入情况,即最好做到每种可以得到确定输出值的输入都有对应的列表行与之相对应。,33,完整的二输入与非门UDP,primitive nand_udp(Y,A,B); output Y; input A,B; table / A B : Y 0 0
16、 : 1; 0 1 : 1; 1 0 : 1; 1 1 : 0; x 0 : 1; 0 x : 1; x x : x; endtable endprimitive,这一行状态表的作用与 不写一样,所以此行可以省略,34,引入无关项 ?,primitive nand_udp(Y,A,B); output Y; input A,B; table / A B : Y 0 ? : 1; ? 0 : 1; 1 1 : 0; endtable endprimitive,35,四选一选择器的UDP,primitive MUX4x1_udp(Y,A,B,C,D,S1,S0,En_); output Y inp
17、ut 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 endprimitive,36,UDP的实例化与门级一样,module Test; reg a,b,c,d,en_; reg s1,s0
18、; 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_); endmodule,37,时序电路UDP,时序电路UDP的输出值必须声明为reg类型。 时序电路UDP的输出可以使用initial语句进行初始化。 状态表项格式为“输入信号 :当前输出 :下一个输出 ”。 状态表的输入信号可以是电平值,也可以是边沿信号。 要列出所有可能的变化,防止工作中突然
19、出现x值。,38,电平敏感的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 ; endtable endprimitive,39,使用(xx)来表示信号的变化,primitive dff_udp(q,d,clock); output q; input d,clock; reg q; /输出也可以不指定初始值 table / d clock : q :
20、q* 0 (01) : ? : 0; /第一行,正常输出 1 (01) : ? : 1; /第二行,正常输出 ? (1?) : ? : - ; /第三行,屏蔽下降沿 ? (x0) : ? : - ; /第四行,屏蔽下降沿 (?) ? : ? : - ; /第五行,屏蔽clock非边沿时d endtable endprimitive,40,缩写项,41,缩写后的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; ?
21、 n : ? : -; ? (0 x) : ? : -; ? (x1) : ? : -; * ? : ? : -; endtable endprimitive,42,层次化设计,Top-Down流程,43,四位全加器的门级建模,原理图,四个 一位全加器 的拼接,44,一位全加器,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
22、(Cout,and1,and2,and3); endmodule,45,整体模块,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
23、 add2(.S(S2), .Cout(c2), .Cin(c1), .A(X2), .B(Y2); fulladd add3(.S(S3), .Cout(COUT), .Cin(c2), .A(X3), .B(Y3); endmodule,46,合并线网后,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 a
24、dd1(.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); endmodule,47,测试模块,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); ini
25、tial /此段代码用于生成输入的数据 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; end endmodule,48,层次化调用,以.隔开层次,tadd4.s tadd4.myadd4 tadd4.myadd4.c0 tadd4.myadd4.add0 tadd4.myadd4.add0.and1,49,2-4译码器的门级建模,电路图,50,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) , n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年网络安全法律法规宣传培训
- 2026年社区消防知识培训
- 老年人护理与康复医学应用
- 2025-2026学年人教版六年级下册数学应用题专项突破鸽巢问题(含答案)
- 护理服务中的用药安全宣教
- DB33-T 920-2023 红树林造林技术规程
- 牛鼻子技术护理经验交流
- 某麻纺厂档案管理细则
- 双J管留置患者的心理护理
- 妊娠期甲状腺疾病的护理实践
- 论文写作协议书
- 子女约定分摊协议书
- 2025年退休金一次性补偿协议
- 2025年腹腔穿刺术操作课件
- 《比较政治学》课程教学大纲
- 附件:财政业务基础数据规范(3.0版)
- (完整版)新概念英语第一册单词表(打印版)
- 锅炉设备检修技术规程
- 中国国航国际化战略分析
- 上海交通大学开题报告模板
- 汽车制造质量管理与控制
评论
0/150
提交评论