第1章Verilog层次化设计.ppt

上传人:本田雅阁 文档编号:2070146 上传时间:2019-02-10 格式:PPT 页数:28 大小:1.18MB
返回 下载 相关 举报
第1章Verilog层次化设计.ppt_第1页
第1页 / 共28页
第1章Verilog层次化设计.ppt_第2页
第2页 / 共28页
第1章Verilog层次化设计.ppt_第3页
第3页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第1章Verilog层次化设计.ppt》由会员分享,可在线阅读,更多相关《第1章Verilog层次化设计.ppt(28页珍藏版)》请在三一文库上搜索。

1、Verilog HDL 数字系统设计及实践,第1章 Verilog层次化设计,学习指南,【知识目标】 (1) 了解Verilog设计中的模块的概念; (2) 了解层次化设计的概念; (3) 了解Testbench的概念。 【技能目标】 (1) 能够描述一个完整的简单模块; (2) 能够通过模块实例化完成层次化的设计。 【重点难点】 (1) 模块实例化的理解; (2) Testbench的概念。,1.1 一个简单的例子四位全加器的设计,【例1.1】利用Verilog HDL语言和层次化设计方法来设计一个四位全加器电路。,/ example_1_1: full adder / 四位的全加器由四个一

2、位的全加器构成。 module fadder_4 ( i_A, i_B, i_Cin, o_S, o_Cout ); input 3:0 i_A, i_B; / 输入端口i_A,i_B input i_Cin; / 输出端口i_Cin output 3:0 o_S; / 输出端口o_S output o_Cout; / 输出端口o_Cout wire Cout_1, Cout_2, Cout_3; / wire型数据Cout_1,Cout_2,Cout_3,1.1 一个简单的例子四位全加器的设计,/ 实例化四个1位的全加器 fadder_1 u_fadder_1_1 ( .i_A(i_A0),

3、 .i_B(i_B0), .i_Cin(i_Cin), .o_S(o_S0), .o_Cout(Cout_1) ); fadder_1 u_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_1 u_fadder_1_3 ( .i_A(i_A2), .i_B(i_B2), .i_Cin(Cout_2), .o_S(o_S2), .o_Cout(Cout_3) ); fadder_1 u_fadder_1_4 ( .i_A(i_

4、A3), .i_B(i_B3), .i_Cin(Cout_3), .o_S(o_S3), .o_Cout(o_Cout) ); endmodule,1.1 一个简单的例子四位全加器的设计,/ 定义一个一位的全加器 module fadder_1 ( i_A, i_B, i_Cin, o_S, o_Cout ); input i_A, i_B; /输入端口i_A,i_B input i_Cin; /输入端口i_Cin output o_S, o_Cout; /输出端口o_S,o_Cout / 计算结果值:o_S = i_Ai_Bi_Cin assign o_S = i_A i_B i_Cin;

5、/ 计算进位值:o_Cout=(i_Ai_B)i_Cin+(i_A)(i_B) assign o_Cout = (i_A i_B) endmodule,1.1 一个简单的例子四位全加器的设计,图1.1 四位全加器结构图,利用Verilog HDL进行层次化设计,其描述的电路结构与真实的电路结构很相近,因此通常可以直接画出电路的结构图。用结构图来表示这个四位全加器,如图1.1所示。,1.2 模块和端口,一个模块通常就是 一个电路单元器件,图1.2 模块和端口,一个模块的代码主要由下面几个部分构成: 模块名定义、端口描述和内部功能逻辑描述。,1.2 模块和端口,1.2.1模块定义 定义模块要使用关

6、键字“module”和“endmodule”,其语法格式为: module 模块名 (端口声明列表); 端口定义 endmodule,1.2.2端口定义 在Verilog中定义端口有两种风格:普通风格和ANSI C风格。 普通风格: 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 位

7、宽-1:0 端口名4; );,利用ANSI C风格,可以一次性的完成模块名和端口的定义, 使得代码更为紧凑,减少了出错的几率,因此推荐使用这种风格进行端口定义。 本书中给出的所有例子都采用ANSI C风格来定义端口。,module fadder_4 ( input 3:0 i_A, i_B; input i_Cin; output 3:0 o_S; output o_Cout; );,1.2 模块和端口,2.3模块实例化,图1.3 模块实例化示意图,1.2 模块和端口,对已定义好的模块进行实例化引用的语法格式如下: 模块名 实例名 (端口连接关系列表); 在实例化时可以用两种方式书写端口连接关

8、系列表。 第一种是命名端口连接方式,其语法格式为: 模块名 实例名 (端口名(连接线1), 端口名2(连接线2),);,2.3模块实例化,每个连接关系用一个点开头,端口名后面在括号中注定该端口需要连接到当前层次模块中的哪个信号,fadder_1 u_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_1 add1(i_A0,i_B0,i_Cin,o_S0

9、,o_Cout); module fadder_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自顶向下的设计,所谓自顶向下,也就是

10、从整个系统设计的顶层开始,往下一层将系统划分为若干个子模块,然后再将每一个子模块又向下一层划分为若干的子模块。通过这样将整个系统逐次向下分解,一个顶层设计最后可以细分为若干较小的基本 功能块,直到不能继续分解为止。,以例1.1的全加器为例。模块fadder_4是设计的顶层,4位全加器向下划分为4个较小的1位全加器子模块。模块fadder_1是设计的底层,实现了1位全加器的功能。 顶层模块通过实例化调用4个1位全加器,将其串联在一起构成最终的四位全加器电路。,另一种常见的设计方法是自底向上(Bottom-UP)的设计,它与自顶向下的设计相反。 首先对现有的底层功能模块进行分析和设计,然后使用这些

11、模块来搭建上一层的功能更丰富的模块,直至完成顶层模块的设计。,提示:Verilog HDL并行编程的思想 这是与C语言最本质的区别。即在同一仿真时间各个模块完成计算。,1.4 Testbench的概念,图1.5 testbench 结构,在设计数字电路系统时,通常将测试模块和功能模块分开设计,其中测试模块也称测试台(Testbench)。Testbench同样可以用Verilog来描述,这使得系统测试更容易。,Testbench是通过对设计部分施加激励,然后检查其输出正确与否来完成 其验证功能的。,1.4 Testbench的概念,【例1.3】为例1.1的全加器设计Testbench,以验证其

12、功能。 / example_1_3: 一个简单的Testbench module tb_fadder (); reg 3:0 A, B; reg Cin; wire 3:0 S; wire Cout; / 通过实例化在Testbench中调用被测对象fadder_4模块 fadder_4 u_fadder_4 ( .i_A(A), .i_B(B), .i_Cin(Cin), .o_S(S), .o_Cout(Cout) );,1.3 Testbench的概念,/ 添加激励 initial begin #0 A = 4b0000; / 激励信号i_A初始值0 B = 4b0000; / 激励信号

13、i_B初始值0 Cin = 1b0; / 激励信号i_Cin初始值0 #20 A = 4b1111; / 20ns后,i_A值变为15 #20 B = 4b0001; / 20ns后,i_B值变为1 #20 A = 4b1110; / 20ns后,i_A值变为14 #20 Cin = 1b1; / 20ns后,i_Cin值变为1 #10 $finish; / 结束仿真 end / 调用系统函数$monitor, 监视列表中的参数变化并显示 initial $monitor($time, “ A:%d B:%d Cin:%d , sum:%d , carry:%d “, A, B, Cin, S

14、, Cout); endmodule,1.4 Testbench的概念,图1.6 tb_fadder结构,而从系统函数$monitor中得到的仿真结果如下: 0 A: 0 B: 0 Cin:0 , sum: 0 , carry:0 20 A:15 B: 0 Cin:0 , sum:15 , carry:0 40 A:15 B: 1 Cin:0 , sum: 0 , carry:1 60 A:14 B: 1 Cin:0 , sum:15 , carry:0 80 A:14 B: 1 Cin:1 , sum: 0 , carry:1,1.4 Testbench的概念,图1.6 tb_fadder结

15、构,而从系统函数$monitor中得到的仿真结果如下: 0 A: 0 B: 0 Cin:0 , sum: 0 , carry:0 20 A:15 B: 0 Cin:0 , sum:15 , carry:0 40 A:15 B: 1 Cin:0 , sum: 0 , carry:1 60 A:14 B: 1 Cin:0 , sum:15 , carry:0 80 A:14 B: 1 Cin:1 , sum: 0 , carry:1,图1.7 Testbench产生的激励波形及其得到的输出,输出端口S,Cout的波形在图1.7中已显示,与系统函数$monitor打印出的结果也是一致的。,1.5 仿

16、真与综合,图1.8 综合与仿真示意图,仿真是指利用仿真工具,在 PC机上对Verilog代码所描述 的电路功能进行验证,综合是指将Verilog描述的代 码转换成实际的电路结构。 转换后的电路可以用于生产 并实现成为真正的芯片硬件电路。,本章小结 从层次化设计的角度出发,介绍Verilog HDL设计的基本方法和概念。 层次化设计方法:自顶向下,自底向上。 Testbench即电路设计的测试模块,思考与练习,模块一般由哪几个部分组成,内部功能描述一般又由哪几个部分组成,描述先后顺序 有何影响? 2. 模块内能否嵌套模块?如果模块内描述需要用到底层模块,何种方法实现? 3. 简述层次化设计的理解,何种方法可以创建层次化结构描述电路? 4. 对照图1.6和例1.2,分别找出在时刻20ns,40ns,60ns,80ns时与波形变化所对应的 测试代码段,并将其编号填入对应的括号中,20ns:( );40ns:( );60ns:( );80ns:( ),思考与练习,5. 一个模块的原理图如下:,请写出这个模块的定义(包括端口列表及定义),内部结构不需写。 6.请将下面右边的语句块分别与左边的空白部分连线,以组成一个完整的模块设计。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1