已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VerilogHDL数字系统设计及实践,第1章Verilog层次化设计,学习指南,【知识目标】(1)了解Verilog设计中的模块的概念;(2)了解层次化设计的概念;(3)了解Testbench的概念。【技能目标】(1)能够描述一个完整的简单模块;(2)能够通过模块实例化完成层次化的设计。【重点难点】(1)模块实例化的理解;(2)Testbench的概念。,1.1一个简单的例子四位全加器的设计,【例1.1】利用VerilogHDL语言和层次化设计方法来设计一个四位全加器电路。,/example_1_1:fulladder/四位的全加器由四个一位的全加器构成。modulefadder_4(i_A,i_B,i_Cin,o_S,o_Cout);input3:0i_A,i_B;/输入端口i_A,i_Binputi_Cin;/输出端口i_Cinoutput3:0o_S;/输出端口o_Soutputo_Cout;/输出端口o_CoutwireCout_1,Cout_2,Cout_3;/wire型数据Cout_1,Cout_2,Cout_3,1.1一个简单的例子四位全加器的设计,/实例化四个1位的全加器fadder_1u_fadder_1_1(.i_A(i_A0),.i_B(i_B0),.i_Cin(i_Cin),.o_S(o_S0),.o_Cout(Cout_1);fadder_1u_fadder_1_2(.i_A(i_A1),.i_B(i_B1),.i_Cin(Cout_1),.o_S(o_S1),.o_Cout(Cout_2);,1.1一个简单的例子四位全加器的设计,fadder_1u_fadder_1_3(.i_A(i_A2),.i_B(i_B2),.i_Cin(Cout_2),.o_S(o_S2),.o_Cout(Cout_3);fadder_1u_fadder_1_4(.i_A(i_A3),.i_B(i_B3),.i_Cin(Cout_3),.o_S(o_S3),.o_Cout(o_Cout);endmodule,1.1一个简单的例子四位全加器的设计,/定义一个一位的全加器modulefadder_1(i_A,i_B,i_Cin,o_S,o_Cout);inputi_A,i_B;/输入端口i_A,i_Binputi_Cin;/输入端口i_Cinoutputo_S,o_Cout;/输出端口o_S,o_Cout/计算结果值:o_S=i_Ai_Bi_Cinassigno_S=i_Ai_Bi_Cin;/计算进位值:o_Cout=(i_Ai_B)i_Cin+(i_A)(i_B)assigno_Cout=(i_Ai_B)endmodule,1.1一个简单的例子四位全加器的设计,图1.1四位全加器结构图,利用VerilogHDL进行层次化设计,其描述的电路结构与真实的电路结构很相近,因此通常可以直接画出电路的结构图。用结构图来表示这个四位全加器,如图1.1所示。,1.2模块和端口,一个模块通常就是一个电路单元器件,图1.2模块和端口,一个模块的代码主要由下面几个部分构成:模块名定义、端口描述和内部功能逻辑描述。,1.2模块和端口,1.2.1模块定义定义模块要使用关键字“module”和“endmodule”,其语法格式为:module模块名(端口声明列表);端口定义.endmodule,1.2.2端口定义在Verilog中定义端口有两种风格:普通风格和ANSIC风格。普通风格:Module模块名(端口名1,端口名2,.);然后接下来需要对输入输出端口进行定义,如:input位宽-1:0端口名1,端口名2;output位宽-1:0端口3;inout位宽-1:0端口名4;,1.2模块和端口,module模块名(input位宽-1:0端口名1,端口名2;output位宽-1:0端口3;inout位宽-1:0端口名4;);,利用ANSIC风格,可以一次性的完成模块名和端口的定义,使得代码更为紧凑,减少了出错的几率,因此推荐使用这种风格进行端口定义。本书中给出的所有例子都采用ANSIC风格来定义端口。,modulefadder_4(input3:0i_A,i_B;inputi_Cin;output3:0o_S;outputo_Cout;);,1.2模块和端口,2.3模块实例化,图1.3模块实例化示意图,1.2模块和端口,对已定义好的模块进行实例化引用的语法格式如下:模块名实例名(端口连接关系列表);在实例化时可以用两种方式书写端口连接关系列表。第一种是命名端口连接方式,其语法格式为:模块名实例名(.端口名(连接线1),.端口名2(连接线2),);,2.3模块实例化,每个连接关系用一个点开头,端口名后面在括号中注定该端口需要连接到当前层次模块中的哪个信号,fadder_1u_fadder_1_1(.i_A(i_A0),.i_B(i_B0),.i_Cin(i_Cin),.o_S(o_S0),.o_Cout(Cout_1);,各个端口在连接列表中的顺序可以随便交换,第二种是顺序接口连接方式模块名实例名(连接线名1,连接线名2,);fadder_1add1(i_A0,i_B0,i_Cin,o_S0,o_Cout);modulefadder_1(i_A,i_B,i_Cin,o_S,o_Cout);不能随意改变端口连接列表中信号的排列顺序,否则会导致错误的连接关系,注意:信号连接类型模块端口和与之连接的信号的数据类型必须遵循下面的规定:1输入端口在模块内部必须为wire型数据,在模块外部可以连接wire或者reg类型数据。2输出端口在模块内部可以为wire或reg型数据,在模块外部必须连接到wire型数据。3连接的两个端口位宽可以不同,但其仿真结果可能因Verilog仿真器而异,通常会有警告。,1.3层次化设计思想,图1.4自顶向下的设计,所谓自顶向下,也就是从整个系统设计的顶层开始,往下一层将系统划分为若干个子模块,然后再将每一个子模块又向下一层划分为若干的子模块。通过这样将整个系统逐次向下分解,一个顶层设计最后可以细分为若干较小的基本功能块,直到不能继续分解为止。,以例1.1的全加器为例。模块fadder_4是设计的顶层,4位全加器向下划分为4个较小的1位全加器子模块。模块fadder_1是设计的底层,实现了1位全加器的功能。顶层模块通过实例化调用4个1位全加器,将其串联在一起构成最终的四位全加器电路。,另一种常见的设计方法是自底向上(Bottom-UP)的设计,它与自顶向下的设计相反。首先对现有的底层功能模块进行分析和设计,然后使用这些模块来搭建上一层的功能更丰富的模块,直至完成顶层模块的设计。,提示:VerilogHDL并行编程的思想这是与C语言最本质的区别。即在同一仿真时间各个模块完成计算。,1.4Testbench的概念,图1.5testbench结构,在设计数字电路系统时,通常将测试模块和功能模块分开设计,其中测试模块也称测试台(Testbench)。Testbench同样可以用Verilog来描述,这使得系统测试更容易。,Testbench是通过对设计部分施加激励,然后检查其输出正确与否来完成其验证功能的。,1.4Testbench的概念,【例1.3】为例1.1的全加器设计Testbench,以验证其功能。/example_1_3:一个简单的Testbenchmoduletb_fadder();reg3:0A,B;regCin;wire3:0S;wireCout;/通过实例化在Testbench中调用被测对象fadder_4模块fadder_4u_fadder_4(.i_A(A),.i_B(B),.i_Cin(Cin),.o_S(S),.o_Cout(Cout);,1.3Testbench的概念,/添加激励initialbegin#0A=4b0000;/激励信号i_A初始值0B=4b0000;/激励信号i_B初始值0Cin=1b0;/激励信号i_Cin初始值0#20A=4b1111;/20ns后,i_A值变为15#20B=4b0001;/20ns后,i_B值变为1#20A=4b1110;/20ns后,i_A值变为14#20Cin=1b1;/20ns后,i_Cin值变为1#10$finish;/结束仿真end/调用系统函数$monitor,监视列表中的参数变化并显示initial$monitor($time,A:%dB:%dCin:%d,sum:%d,carry:%d,A,B,Cin,S,Cout);endmodule,1.4Testbench的概念,图1.6tb_fadder结构,而从系统函数$monitor中得到的仿真结果如下:0A:0B:0Cin:0,sum:0,carry:020A:15B:0Cin:0,sum:15,carry:040A:15B:1Cin:0,sum:0,carry:160A:14B:1Cin:0,sum:15,carry:080A:14B:1Cin:1,sum:0,carry:1,1.4Testbench的概念,图1.6tb_fadder结构,而从系统函数$monitor中得到的仿真结果如下:0A:0B:0Cin:0,sum:0,carry:020A:15B:0Cin:0,sum:15,carry:040A:15B:1Cin:0,sum:0,carry:160A:14B:1Cin:0,sum:15,carry:080A:14B:1Cin:1,sum:0,carry:1,图1.7Testbench产生的激励波形及其得到的输出,输出端口S,Cout的波形在图1.7中已显示,与系统函数$monitor打印出的结果也是一致的。,1.5仿真与综合,图1.8综合与仿真示意图,仿真是指利用仿真工具,在PC机上对Verilog代码所描述的电路功能进行验证,综合是指将Verilog描述的代码转换成实际的电路结构。转换后的电路可以用于生产并实现成为真正的芯片硬件电路。,本章小结从层次化设计的角度出发,介绍VerilogHDL设计的基本方法和概念。层次化设计方法:自顶向下,自底向上。Testbench即电路设计的测试模块,思考与练习,模块一般由哪几个部分组成,内部功能描述一般又由哪几个部分组成,描述先后顺序有何影响?2.模块内能否嵌套模块?如果模块内描述需要用到底层模块,何种方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年太原市第四人民医院医护人员招聘笔试参考试题及答案详解
- 2026年上海东方医院医护人员招聘考试备考试题及答案详解
- 2026年益阳市中心医院益阳市第一人民医院医护人员招聘笔试备考试题及答案详解
- 2026年芜湖市中医医院医护人员招聘考试参考试题及答案详解
- 2026年中国人民解放军第171医院医护人员招聘笔试参考题库及答案详解
- 2026年萍乡市妇女儿童医院医护人员招聘笔试参考题库及答案详解
- 2026年昆明市延安医院医护人员招聘考试备考试题及答案详解
- 2026年湖南中医药大学第二附属医院医护人员招聘考试备考试题及答案详解
- 2026年六安市人民医院东院区医护人员招聘笔试备考题库及答案详解
- (2026年)药品不良反应监测报告管理制度和流程
- 市场营销专业知识全套题库(含标准答案+详细解析)
- 2026年招标采购从业人员《招标采购专业实务(初级)》考试真题(附答案解析)
- 第22课 活动课:中国传统节日的起源教学设计初中历史与社会部编版七年级下册-部编版
- DB62-T 5205-2025 光伏电站运行与维护规范
- 临床护理病历书写中的常见错误分析
- 眼部刮痧培训
- 2024年福建省龙岩市新罗区小升初科学试卷(含解析)
- 2026年重庆高考数学考试卷附答案
- 药品生产管理规范实施指南(2025版)
- 地坪裂缝修补工程实施方案
- 泌尿系结石中西医结合治疗
评论
0/150
提交评论