




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 初识Verilog HDL,2.1 Verilog HDL的设计方法 2.2 Verilog HDL中的模块及其描述方式 2.3 Verilog HDL设计流程,2.1 Verilog HDL的设计方法 Verilog HDL的设计方法归纳起来主要有两种:自下而上(Bottom-Up)的设计方法与自上而下(Top-Down)的设计方法。另外,还可根据实际情况,利用这两种方法的组合进行综合设计,即综合设计方法。 2.1.1 自下而上(Bottom-Up)的设计方法 方法的步骤自下而上的设计方法是一种传统的电子系统设计方法,其具体流程如图2.1所示。,图2.1 自下而上设计,首先根据系统要求编制技术规格书,并画出系统控制流程图;然后依照技术规格书和系统控制流程图,对系统的功能进行细化,合理划分功能模块,并画出系统的功能框图;接着进行各功能模块的细化和电路设计;当各功能模块电路设计、调试完成后,将各功能模块连接起来进行全系统的调试。,自下而上的设计方法常用于原理图设计中,它的优点是: (1) 设计人员对于用这种方法进行设计比较熟悉。 (2) 实现各个子块电路所需的时间较短。 但这种设计方法也有许多不足之处,具体表现为: (1) 一般来说,容易造成对系统的整体功能把握不足。 (2) 因为必须先完成各个小模块,所以系统的实现需要较长时间。 (3) 这种方法对设计人员之间相互进行协作有比较高的要求。,团队精神 与人交流的能力!,2.1.2 自上而下(Top-Down)的设计方法 随着硬件技术以及HDL语言的发展,电子系统的设计方法发生了巨大的变化,传统的自下而上的设计方法已经不能满足复杂度日益增长的系统的要求。目前在电子系统的设计中已经越来越多地采用自上而下的设计方法了。其具体流程如图2.2所示。,在这种新的设计方法中,由系统用户对整个系统进行方案设计和功能划分,把系统划分为基本单元,然后再把每个基本单元划分为下一层次的基本单元,直到可以直接用元件库中的元件来实现为止。,自上而下的设计方法一般采用HDL语言,具有以下一些优点: (1) 在设计周期开始就做好了系统分析。 (2) 能够在早期发现结构设计上的错误,避免设计工作的浪 费,减少了逻辑仿真的工作量。 (3) 可减少设计人员,避免不必要的重复设计,提高设计一次成功率。 自上而下的设计方法有以下缺点: (1) 因采用的综合工具不一样,得到的最小单元不标准。 (2) 制造成本高。,2.1.3 综合设计方法 复杂数字逻辑电路和系统的设计过程通常是以上两种设计方法的结合。复杂系统的设计需要考虑多个目标的综合平衡。 在高层系统采用自上而下的设计方法来实现,而在低层系统采用自下而上的方法从库元件或数据库中调用已有的单元设计。 综合设计方法兼有上述两种设计方法的优点,而且可以使用矢量测试库进行测试。,2.2 Verilog HDL中的模块及其描述方式 2.2.1 模块的概念及结构 模块(Module)是Verilog HDL语言的基本单元,它用于描述某个设计的功能或结构及其与其他模块通信的外部端口。每一个模块都有接口部分,用来描述与其它模块之间的连接,通常一个文件对应一个模块。 Verilog HDL中的各个模块是并行运行的,不过常用的做法是用一个包括测试数据和硬件描述的高层模块来定义一个封闭的系统,并在这一模块中调用其它模块的实例。,模块的基本语法如下: module () 端口说明(input,out,inout) 参数定义(可选) 数据类型定义 连续赋值语句 (assign) 过程块 (initial和 always) -行为描述语句 低层模块实例 任务和函数 延时说明块 endmodule,是模块唯一性的标识符;,是由模块各个输入、输出和双向端口组成的一张端口列表,这些端口用来与其它模块进行连接;,数据类型定义部分用来指定模块内用到的数据对象为寄存器型、存储器型或连线型;,过程块包括initial过程块和always过程块两种,行为描述语句只能出现在这两种过程块内;,延时说明块用来对模块各个输入和输出端口间的路径延时进行说明。,调用模块实例的一般形式如下: () 实例:以一个2选1选择器来说明模块。,图2.3 MUX2_1模块电路示意图,用Verilog HDL语言实现上述电路的模块如下: 【例2-1】一个2选1模块的例子。 module MUX2_1(out,a,b,sel);/ 端口定义 output out; input a,b,sel; / 输入输出列表 not(sel_,sel); and(a1,a,sel_); and(b1,b,sel); or(out,a1,b1); / 结构描述 endmodule,and、or、not是Verilog中预定义好的基本门级元件,可以在结构描述方式下直接使用,当要在其它模块中调用这一选择器模块时,只需使用其模块名和所定义的端口名,不需要知道其内部的具体实现。因为对一个模块的定义可以是行为级描述、门级结构描述或混合描述,而采用什么描述方式对调用它的高层模块来说是没有什么区别的,采用的描述方式对高层模块不产生任何影响。这种模块设计方法是自上而下设计方法的一个主要特征。,从上面的例子可以看出: - Verilog模块结构完全嵌在module和endmodule声明语句之间; - 每个Verilog程序包括四个主要部分:端口定义、I/O说明、内部信号声明、功能定义。,Verilog HDL程序的书写与C语言类似: 一行可以写多条语句,也可以一条语句分成多行书写, 每条语句以分号结束,endmodule语句后面不必写分号。 用“/*/”可以对多行程序进行注释, 用“/”可以对一行程序进行注释。,2.2.2 模块的描述方式 Verilog模块代表硬件上的逻辑实体,其范围可以从简单的门到整个电路系统。模块可以根据所采用的不同描述方法而分成 行为描述模块、结构描述模块两类(也有的文献将其分成三类:行为描述模块、数据流描述模块和结构描述模块),也可以采用以上几种描述方式的组合。下面分别介绍模块的这几种描述方式。,1. 数据流描述方式 数据流型描述主要用来描述组合功能,具体由“assign”连续赋值语句来实现。assign连续赋值语句可以分成“显式连续赋值语句”和“隐式连续赋值语句”两种类型。 显式连续赋值语句 连线型变量类型 连线型变量位宽 连线型变量名; assign #(延时量) 连线型变量名 = 赋值表达式; “显式连续赋值语句”包含了两条语句: 第一条语句是对连线型变量进行类型说明的说明语句; 第二条语句是对这个已得到声明的连线型变量进行连续赋值的赋值语句。, 隐式连续赋值语句 连线型变量类型 (赋值驱动强度) 连线型变量位宽 #(延时量) 连线型变量名= 赋值表达式; “隐式连续赋值语句”把连线型变量说明语句和连线型变量连续赋值语句结合在一条语句内。它可以在对连线型变量进行类型说明的同时进行连续赋值。 assign连续赋值语句的功能是:当赋值表达式中变量的值发生变化时,重新计算赋值表达式的值,并在指定的时延后将得到的结果赋给等式左端的连线型变量。时延定义了右边表达式操作数变化时刻与对左边变量进行赋值时刻之间的延迟时间,如果没有定义延时量,缺省时延为0。assign语句只能用来实现组合功能。,下面是一个NAND与非逻辑模块的数据流型描述,输出out是输入in1和in2相与后求反的结果。 【例2-2】数据流描述的例子。 /与非门的数据流型描述 module NAND(in1,in2,out); input in1,in2; output out; assign out=(in1&in2); /连续赋值语句 Endmodule,in1、in2和out端口都被定义为连线型。在程序中,一旦in1或者in2的值发生变化,assign连续赋值语句将立刻重新计算右端表达式并把得到的结果传给等式左端进行输出。assign连续赋值语句用来描述组合电路,一旦其输入发生变动,输出也随之而改变。,由于数据assign语句描述了连线型变量的取值逻辑,所以从本质上说它是对连线型变量的行为进行了描述,因此将这种数据流描述方式归类于行为描述方式。,2. 行为描述方式 行为描述是一种高级语言使用的方法。Verilog中的行为描述方式和软件编程语言的描述方式类似,具有很强的通用性和有效性。行为型描述是通过行为语句来实现的,行为功能可使用下述过程语句结构描述: (1) initial语句:此语句只执行一次。 (2) always语句:此语句循环执行。 只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的initial语句和always语句在0时刻并发执行。 下例所示为一个行为描述的1位加法器。,【例2-3】行为描述的例子。 module ADDER (A,B,Cin,Sum,Cout); input A,B,Cin; output Sum,Cout; reg Sum,Cout; reg T1,T2,T3; always ( A or B or Cin ) begin Sum = (A B) Cin; T1 = A & Cin; T2 = B & Cin; T3 = A & B; Cout = (T1| T2) | T3; end endmodule,其中Sum、Cout、T1、T2和T3要在always语句中被赋值,所以它们被定义为reg类型。always语句中包含一个或事件控制,以及相关联的顺序过程(begin-end对)。顺序过程执行完成后,程序指针返回到或事件控制语句,always语句再次等待A、B或Cin的值发生变化。,3. 结构描述方式 结构描述是通过实例进行描述的方法。它将Verilog中预定义的基本元件实例嵌入到语言中,监控实例的输入,一旦其中任何一个发生变化,便重新运算并输出。 在Verilog HDL中可使用如下结构描述部件: (1) 用户自己定义的模块。 (2) 用户自定义元件UDP。 (3) 内置门级元件。 (4) 内置开关级元件。,下例所示是一AND模块的结构型描述。这一模块是通过将一个NAND的输出连接到另一NAND的两个输入上得到的。 【例2-4】结构描述的例子。 /由两个NAND生成的与门的结构型描述 module AND(in1,in2,out); input in1,in2; output out; wire w1; NAND NAND1(in1,in2,w1); / NAND模块实例1 NAND NAND2(w1,w1,out); / NAND模块实例2 endmodule 这个模块含有NAND1和NAND2两个NAND模块实例,它们通过内部连线w1连接起来。,4. 混合型描述 在模块中,用户可以混合使用结构描述和行为描述方式,也就是说,模块中可以包含门的实例、模块实例语句、连续赋值语句、always语句和initial语句以及它们的混合语句,并且它们之间可以相互包含。,2.2.3 设计的仿真与测试 在编写完Verilog HDL程序之后,需要对它进行验证。 在这方面Verilog HDL语言提供对激励、控制、存储响应和设计验证的建模能力。验证中使用的激励和控制可用初始化语句产生,验证运行过程中的响应可以作为“变化时保存”或作为选通的数据存储。另外,还可以在初始化过程中写入相应的语句,把设计验证的结果与期望的响应值进行比较。 下面举一个高层模块测试的例子。我们通过在这一模块中设置测试数据对前面的NAND和AND两个模块中的变量进行监测。,【例2-5】测试模块的例子。 /测试以上两个模块的高层模块 module TEST_AND; reg a,b; wire out1,out2; initial begin /产生测试数据 a=0;b=0; #1 a=1; #1 b=1; #1 a=0; end,模块中前一个initial结构块中的语句是顺序执行的,并且都设定了延迟,#1表示一个仿真时间单位的延迟。always结构块与initial结构块功能相同,但它是无限循环的过程(直到仿真停止),而initial结构块只执行一次。initial和always结构多用来描述时序逻辑,即有限状态自动控制。,initial begin /设置监测功能 $monitor(“Time=%0 a=%b b=%b out1=%b out2=%b“,$time,a,b,out1,out2); end /模块AND和NAND实例调用 AND gate1(a,b,out2); NAND gate2(a,b,out1); endmodule,第二个initial结构块包含一条$monitor语句,它的功能是在参数表中指定的变量值发生变化时打印指定的字符串。,TEST_AND模块运行后的结果如下: Time=0 a=0 b=0 out1=1 out2=0 Time=1 a=1 b=0 out1=1 out2=0 Time=2 a=1 b=1 out1=0 out2=1 Time=3 a=0 b=1 out1=1 out2=0 此处无循环操作,所以仿真器执行所有的事件后自行停止,不需要指定仿真结束时间。,应注意的是,a和b都要被定义为reg类型,这是因为它们的值需要保持,而寄存器型变量可以存储过程赋值的最终结果。连线型变量则没有存储能力,它们需要被连续驱动,例如用连续赋值语句或由一个模块的输出进行驱动,若连线型输入的左端悬空,则其值为未知态“x”。,过程赋值与连续赋值区别,Verilog HDL语言中过程赋值和连续赋值之间区别很大。 连续赋值使用关键词“assign”,而过程赋值的形式是: =; 过程赋值只允许出现在initial和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林省长春市力旺实验初级中学2024-2025学年九年级下学期中考四模数学试题试卷(含部分答案)
- 计算地球流体力学大纲
- 湖北省天门市2023-2024学年七年级下学期7月期末考试语文试卷(含答案)
- 幼儿小班跳圈教案反思模板
- 2025年人教版七年级数学下册期末模拟试卷
- 部编版一年级上册第一单元《天地人》教案
- 部编版四年级上册第三单元《古诗三首(暮江吟等)》教案
- 建筑施工特种作业-建筑起重机械司机(塔式起重机)真题库-2
- 赛马会题目及答案
- 13《电磁感应与电磁波初步》-2025高中物理水平合格考备考知识清单+习题巩固
- 2025年湖北省高考政治试卷真题(含答案)
- 广东省深圳市宝安区2023-2024学年二年级下册期末测试数学试卷(含答案)
- 2025江苏扬州宝应县“乡村振兴青年人才”招聘67人笔试备考试题及参考答案详解
- 2025公基题库(附答案解析)
- 2025年宁夏银川灵武市选聘市属国有企业管理人员招聘笔试冲刺题(带答案解析)
- 三大监测培训试题及答案
- 两办意见宣贯考试题及答案
- 2025年汽车驾照考试科目一考试题库及参考答案
- 跨文化交际知识体系及其前沿动态
- 音响安装施工合同协议
- 日本签证个人信息处理同意书
评论
0/150
提交评论