verilog语法入门

上传人:s9****2 文档编号:578881748 上传时间:2024-08-25 格式:PPT 页数:62 大小:193.52KB
返回 下载 相关 举报
verilog语法入门_第1页
第1页 / 共62页
verilog语法入门_第2页
第2页 / 共62页
verilog语法入门_第3页
第3页 / 共62页
verilog语法入门_第4页
第4页 / 共62页
verilog语法入门_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《verilog语法入门》由会员分享,可在线阅读,更多相关《verilog语法入门(62页珍藏版)》请在金锄头文库上搜索。

1、Verilog HDL Verilog HDL Verilog HDL Verilog HDL 基础语法入门基础语法入门基础语法入门基础语法入门 第一讲第一讲 课程简介课程简介4目的:目的:4简单介绍Verilog HDL语言和仿真工具4介绍讲课计划4介绍如何不断地学习新的有关知识讲座中关于讲座中关于VerilogVerilog HDL HDL的主要内容的主要内容讲课内容主要包括:讲课内容主要包括:Verilog 的应用Verilog 语言的组成部件 结构级的建模与仿真行为级的建模与仿真延迟参数的表示Verilog 的测试平台:l怎样产生激励信号和控制信号l 输出响应的产生、记录和验证任务和函

2、数用户定义的元器件(primitives)可综合风格的Verilog 建模讲座中关于讲座中关于Verilog仿真工具的主要内容讲课内容主要包括:讲课内容主要包括:如何对所做的设计进行编译和仿真如何使用元器件库如何用Verilog-XL命令行界面调试代码如何用图形用户界面(GUI)延迟的计算和标记仿真性能建模循环多次仿真目的目的: :了解用了解用HDLHDL语言设计数字逻辑的优点语言设计数字逻辑的优点了解了解Verilog Verilog 主要应用领域主要应用领域了解了解Verilog Verilog 的发展历史的发展历史了解电路系统的不同层次的了解电路系统的不同层次的VerilogVerilo

3、g抽象抽象 第二讲:第二讲:Verilog Verilog 的应用的应用VerilogVerilog HDL HDL是一种用于数字逻辑电路设计的语言是一种用于数字逻辑电路设计的语言: :- 用用VerilogVerilog HDL HDL描述的电路设计就是该电路描述的电路设计就是该电路 的的 VerilogVerilog HDL HDL模型。模型。- - VerilogVerilog HDL HDL 既是一种行为描述的语言也既是一种行为描述的语言也 是一种结构描述的语言。是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的Verilog HD

4、L模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们对应的模型类型共有以下五种: VerilogVerilog 的应用的应用Verilog Verilog 的应用的应用系统级系统级( (system): system): 用高级语言结构实现设计模块的外用高级语言结构实现设计模块的外部性能的模部性能的模 算算法级法级( (algorithmic): algorithmic): 用高级语言结构实现设计算用高级语言结构实现设计算法的模型。法的模型。 RTLRTL级级( (Register Transfer Level): Register Transfer Level):

5、描述数据在寄存描述数据在寄存器之间流动和如何处理这些数据的模型。器之间流动和如何处理这些数据的模型。 门级门级( (gate-level): gate-level): 描述逻辑门以及逻辑门之间的连描述逻辑门以及逻辑门之间的连接的模型。接的模型。开关级开关级( (switch-level): switch-level): 描述器件中三极管和储存节描述器件中三极管和储存节点以及它们之间连接的模型。点以及它们之间连接的模型。 Verilog Verilog 的应用的应用 一个复杂电路的完整一个复杂电路的完整VerilogVerilog HDL HDL模型是由若模型是由若个个 VerilogVeril

6、og HDL HDL 模块构成的,每一个模块又模块构成的,每一个模块又可以由若干个子模块构成。可以由若干个子模块构成。 利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计。 VerilogVerilog HDL HDL行为描述语言作为一种结构化和行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级过程性的语言,其语法结构非常适合于算法级和和RTLRTL级的模型设计。这种行为描述语言具有级的模型设计。这种行为描述语言具有以下八项功能:以下八项功能: Verilog Verilog 的应用的应用可描述顺序执行或并行执行的程序

7、结构。可描述顺序执行或并行执行的程序结构。用延迟表达式或事件表达式来明确地控制过程的启动用延迟表达式或事件表达式来明确地控制过程的启动时间。时间。通过命名的事件来触发其它过程里的激活行为或停止通过命名的事件来触发其它过程里的激活行为或停止行为。行为。提供了条件、提供了条件、if-elseif-else、casecase、循环程序结构。、循环程序结构。提供了可带参数且非零延续时间的任务提供了可带参数且非零延续时间的任务(task)(task)程序结程序结构。构。提供了可定义新的操作符的函数结构提供了可定义新的操作符的函数结构(function)(function)。 Verilog Verilo

8、g 的应用的应用提供了用于建立表达式的算术运算符、逻辑运算符、提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。位运算符。 VerilogVerilog HDL HDL语言作为一种结构化的语言也非常适语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。合于门级和开关级的模型设计。 VerilogVerilog HDL HDL的构造性语句可以精确地建立信号的的构造性语句可以精确地建立信号的模型。这是因为在模型。这是因为在VerilogVerilog HDL HDL中,提供了延迟和输出中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值强度的原语来建立精确程度很高的信号

9、模型。信号值可以有不同的的强度,可以通过设定宽范围的模糊值可以有不同的的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。来降低不确定条件的影响。 Verilog Verilog 的应用的应用 VerilogVerilog HDL HDL作为一种高级的硬件描述编程语言,有着作为一种高级的硬件描述编程语言,有着类似类似C C语言的风格。其中有许多语句如:语言的风格。其中有许多语句如:ifif语句、语句、casecase语句等和语句等和C C语言中的对应语句十分相似。如果读者已经语言中的对应语句十分相似。如果读者已经掌握掌握C C语言编程的基础,那么学习语言编程的基础,那么学习 Verilo

10、gVerilog HDL HDL并不困并不困难,我们只要对难,我们只要对VerilogVerilog HDL HDL某些语句的特殊方面着重某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它,利用它的理解,并加强上机练习就能很好地掌握它,利用它的强大功能来设计复杂的数字逻辑电路。下面我们将对强大功能来设计复杂的数字逻辑电路。下面我们将对VerilogVerilog HDL HDL中的基本语法逐一加以介绍。中的基本语法逐一加以介绍。模块的抽象模块的抽象技术指标:技术指标:用文字表示用算法表示用高级行为的Verilog模块表示RTL/RTL/功能级:功能级:用可综合的Verilog模块表示门

11、级门级/ /结构级:结构级:用实例引用的Verilog模块表示版图布局版图布局/ /物理级:物理级:用几何形状来表示 行为综合逻辑综合综合前仿真综合后仿真布局布线第三讲第三讲. .简单的简单的 VerilogVerilog HDL HDL 模块模块目的目的: :通过简单的例子了解通过简单的例子了解VerilogVerilog模块的基本构成模块的基本构成了解了解VerilogVerilog模块的层次结构和行为模块模块的层次结构和行为模块了解了解VerilogVerilog模块的测试模块的测试 简单的简单的 VerilogVerilog HDL HDL 模块模块下面先介绍几个简单的下面先介绍几个简

12、单的VerilogVerilog HDL HDL程序程序, ,然后从中分析然后从中分析VerilogVerilog HDL HDL程序的特性。程序的特性。例例2.1.1:2.1.1: module adder ( count,sum,a,b,cin ); input 2:0 a,b; input cin; output count; output 2:0 sum; assign count,sum=a+b+cin; endmodule 这这个个例例子子描描述述了了一一个个三三位位的的加加法法器器。从从例例子子中中可可以以看看出出整整个个VerilogVerilog HDLHDL程程序序是是嵌嵌

13、套套在在modulemodule和和endmoduleendmodule声明语句里的。声明语句里的。简单的简单的 VerilogVerilog HDL HDL 模块模块例例2.1.22.1.2:module compare ( equal,a,b ); output equal; /声明输出信号equal input 1:0 a,b; /声明输入信号a,b assign equal=(a=b)?1:0; /*如果两个输入信号相等,输出为1。否则为0*/endmodule这这 个个 程程 序序 描描 述述 了了 一一 个个 比比 较较 器器 . .在在 这这 个个 程程 序序 中中,/*.*/,

14、/*.*/和和/./.表表示示注注释释部部分分, ,注注释释只只是为了方便程序员理解程序是为了方便程序员理解程序, ,对编译是不起作用的。对编译是不起作用的。简单的简单的 VerilogVerilog HDL HDL 模块模块例例2.1.32.1.3:module trist2(out,in,enable); output out; input in, enable; bufif1 mybuf(out,in,enable);endmodule这这个个程程序序描描述述了了一一个个三三态态驱驱动动器器。程程序序通通过过调调用用一一个个实实例元件例元件bufif1bufif1来实现其功能。来实现其功

15、能。简单的简单的 VerilogVerilog HDL HDL 模块模块例例2.1.42.1.4: module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable); endmodule module mytri(out,in,enable); output out; input in, enable; assign out = enable? In : bz; endmodule简单的简单的 VerilogVerilog HDL HDL 模块模块上述程序例子通过另一种方法描述了一

16、个三态上述程序例子通过另一种方法描述了一个三态门。门。在这个例子中存在着两个模块:模块在这个例子中存在着两个模块:模块trist1 trist1 调用模块调用模块 mytri mytri 的实例元件的实例元件 tri_insttri_inst。模块模块 trist1 trist1 是上层模块。模块是上层模块。模块 mytri mytri 则被称则被称为子模块。为子模块。通过这种结构性模块构造可构成特大型模块。通过这种结构性模块构造可构成特大型模块。简单的简单的 VerilogVerilog HDL HDL 模块模块通过上面的例子可以看到: Verilog HDL程序是由模块构成的。模块是可以进

17、行层次嵌套的。正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。 每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。 Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。 除了endmodule语句外,每个语句和数据定义的最后必须有分号 可以用/*.*/和/.对Verilog HDL程序的任何部分作注释。一个好的,有使用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。模块的模块的结构结构Verilog的基本设计单元是“模块”(block)。一个模块是由两

18、部分组成的:一)描述接口;二)描述逻辑功能,即定义输入是如何影响输出的。下面举例说明:模块模块的的结构结构从上面的例子可以看出:从上面的例子可以看出:- - VerilogVerilog模模块块结结构构完完全全嵌嵌在在modulemodule和和endmoduleendmodule声明语句之间;声明语句之间;- - 每每个个VerilogVerilog程程序序包包括括四四个个主主要要部部分分:端端口口定定义义、I/OI/O说说明明、内内部部信信号号声声明明、功能定义。功能定义。第四讲第四讲 模块模块的的测试测试 如何检查上述例子其功能是否正确?如何检查上述例子其功能是否正确? 需要有测试激励信

19、号输入到被测模块需要有测试激励信号输入到被测模块 需要记录被测模块的输出信号需要记录被测模块的输出信号 需要把用功能和行为描述的需要把用功能和行为描述的VerilogVerilog模块模块 转换为门级电路互连的电路结构(综合)。转换为门级电路互连的电路结构(综合)。 需要对已经转换为门级电路结构的逻辑需要对已经转换为门级电路结构的逻辑 进行测试(门级电路仿真)。进行测试(门级电路仿真)。 需要对布局布线后的电路结构进行测试。需要对布局布线后的电路结构进行测试。 (布局布线后仿真)。(布局布线后仿真)。模块模块的的测试测试 被测模块被测模块激激励励和和控控制信号制信号输输出出响响应应和验证和验证

20、模块模块的的测试测试测试模块常见的形式:测试模块常见的形式:module t;reg ; /被测模块输入/输出变量类型定义wire; /被测模块输入/输出变量类型定义initial begin ; ; ; end /产生测试信号always #delay begin ; end /产生测试信号Testedmd m(.in1(ina), .in2(inb), .out1(outa), .out2(outb) );/被测模块的实例引用initial begin .; .; . end /记录输出和响应endmodule模块模块的的测试测试测试模块中常用的过程块:测试模块中常用的过程块:initia

21、l initial always所有的过程块都所有的过程块都在在0 0时刻同时启时刻同时启动;它们是并行动;它们是并行的,在模块中不的,在模块中不分前后。分前后。 initial initial块块 只只执行一次。执行一次。 always always块块 只只要符合触发条件要符合触发条件可以循环执行。可以循环执行。模块模块的的测试测试如何描述激励信号:如何描述激励信号:module t;module t;reg a, b, sel;wire out;/引用多路器实例 mux2_m (out, a, b, sel);/加入激励信号initial begin a=0; b=1; sel=0; #

22、10 b=0; #10 b=1; sel=1; #10 a=1; #10 $stop; end模块模块的的测试测试如何观察被测模块的响应:如何观察被测模块的响应: 在initial 块中,用系统任务$time 和 $monitor $time 返回当前的仿真时刻 $monitor 只要在其变量列表中有某一个或某几个变 量值发生变化,便在仿真单位时间结束时显示其变 量列表中所有变量的值。例:例: initial begin $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); end模块模块的的测试测试如何把被测模块的输出变化记录到数据库文

23、件中?如何把被测模块的输出变化记录到数据库文件中?(文件格式为VCD,大多数的波形显示工具都能读取该格式)可用以下七个系统任务:可用以下七个系统任务:1)$dumpfile(“file.dump”); /打开记录数据变化的数据文件2)$dumpvars(); /选择需要记录的变量3)$dumpflush; /把记录在数据文件中的资料转送到硬盘保存4)$dumpoff; /停止记录数据变化5)$dumpon; /重新开始记录数据变化6)$dumplimit(); /规定数据文件的大小(字节)7)$dumpall; /记录所有指定信号的变化值到数据文件中模块模块的的测试测试如何把被测模块的响应变化

24、记录到数据库文件中?如何把被测模块的响应变化记录到数据库文件中?举例说明:举例说明:$ $dumpvarsdumpvars; ; /记录各层次模块中所有信号的变化$ $dumpvarsdumpvars(1,top); (1,top); /只记录模块top中所有信号的变化$ $dumpvarsdumpvars(2,top.u1); (2,top.u1); /记录top模块中实例u1和它以下一层子模块所有信号的变化$ $dumpvarsdumpvars(0,top.u2,top.u1.u13.q); (0,top.u2,top.u1.u13.q); /记录top模块中实例u2和它本层所有信号的变化

25、,还有top.u1.u13.q信号的变化。$ $dumpvarsdumpvars(3,top.u2,top.u1); (3,top.u2,top.u1); /记录top模块中u2和u1所有信号的变化(包括其两层以下子模块的信号变化)。模块模块的的测试测试如何把被测模块的响应变化记录到数据库文件中?如何把被测模块的响应变化记录到数据库文件中?举例说明:举例说明:下面的 Verilog 代码段可以代替测试文件中的系统任务$monitor initialinitial begin begin $ $dumpfiledumpfile(“(“vlogvlog.dump”.dump”);); $ $dum

26、pvarsdumpvars(0,top); (0,top); end end语法详细讲解第五讲第五讲. Verilog . Verilog 语法要点语法要点 目标目标: : 理解理解Verilog 语言的一些重要规定语言的一些重要规定. 学会认识一些有关的重要语言符号学会认识一些有关的重要语言符号. 掌握掌握Verilog 中如何规定时间单位中如何规定时间单位语法详细讲解Verilog Verilog 与与 C C 的主要不同点的主要不同点 Verilog Verilog 有许多语法规则与有许多语法规则与 C C 语言一致。语言一致。 但与但与 C 语言有根本的区别:语言有根本的区别:- 并行

27、性并行性- 块的含义:块的含义: initial 块块 和和 always块块- 两种赋值语句:两种赋值语句: 阻塞阻塞 赋值赋值 “ = ” 非阻塞赋值非阻塞赋值 “= ”语法详细讲解空格空格和注释和注释 Verilog 是一种格式很自由的语言。是一种格式很自由的语言。 空格在文本中起一个分离符的作用,空格在文本中起一个分离符的作用, 别的没有其他用处。别的没有其他用处。 单行注释符用单行注释符用 /* 与与C 语言一致语言一致 多行注释符用多行注释符用 /* - */ 与与C 语言一致语言一致语法详细讲解整数和实常数整数和实常数 Verilog 语言中常数可以是整数或实数:整数可以标明位数

28、也可以不标明位数,表示方法: 位数基数值 其中位数表明该数用二进制的几位来表示 基数可以是二(b)、八(O)、十(d)或 十六(h)进制 数值可以是所选基数的任何合法的值包括 不定值 x 位和高阻值 z。如:64hff01 8b1101_0001 h83a实常数可以用十进制表示也可以用科学浮点数表示,如:32e-4 (表示0.0032) 4.1E3( 表示 4100)语法详细讲解字符串字符串 Verilog Verilog 语语言言中中,字字符符串串常常常常用用于于表表示示命命令令内内需需要要显显示的信息。示的信息。 用用“ “ ”括括起起来来的的一一行行字字符符串串,换换新新一一行行用用 “

29、n” n” 字符字符, ,与与 C C 语言一致。语言一致。 在在字字符符串串中中可可以以用用 C C 语语言言中中的的各各种种格格式式控控制制符符,如如 t, ”, t, ”, 在在字字符符串串中中可可以以用用 C C 语语言言中中的的各各种种数数值值型型式式控控制制符符( (有些不同有些不同) ),如:,如: % %b(b(二二进进制制), ), % %o(o(八八进进制制) ), % %d(d(十十进进制制), ), % %h(h(十十六六进制进制), %), %t(t(时间类型时间类型) ),% %s (s (字符串类型字符串类型)语法详细讲解标识符标识符所所谓谓标标识识别别符符就就是

30、是用用户户为为程程序序描描述述中中的的Verilog Verilog 对对象象所起的名字。所起的名字。标标识识符符必必须须以以英英语语字字母母(a-z, a-z, A-ZA-Z)起起头头,或或者者用用下下横横线线符符( _ _ )起起头头。其其中中可可以以包包含含数数字字、$ $符符和和下下横横线符。线符。标识符最长可以达到标识符最长可以达到10231023个字符。个字符。模块名、端口名和实例名都是标识符。模块名、端口名和实例名都是标识符。VerilogVerilog语语言言是是大大小小写写敏敏感感的的,因因此此sel sel 和和 SEL SEL 是是两两个不同的标识符。个不同的标识符。语法

31、详细讲解合法和非法标识符合法和非法标识符 合法的:合法的:shift_shift_regreg_a _a busabusa_index_index bus263 bus263 非法的:非法的:34net 34net /不能用数字开头a*b_net a*b_net /不能含有非字母符号*n263 n263 /不能含有非字母符号Verilog Verilog 是是大大小小写写敏敏感感的的。所所有有的的Verilog Verilog 关键词都是小写的。关键词都是小写的。语法详细讲解特别的标识符特别的标识符 特别标识符是用特别标识符是用 “” “” 符开始,以空格符结束的标符开始,以空格符结束的标 识

32、符。它可以包含任何可打印的识符。它可以包含任何可打印的ASCIIASCII字符。字符。但但“”“”符和空格并不算是标识符的一部分。符和空格并不算是标识符的一部分。特别标识符往往是由特别标识符往往是由RTLRTL级源代码或电路图类型的级源代码或电路图类型的 设计输入经过综合器自动综合生成的网表结构型设计输入经过综合器自动综合生成的网表结构型 Verilog Verilog 语句中的标识符。语句中的标识符。举例说明:举例说明:#selsel , bus+index , A,B , , bus+index , A,B ,Top.3inst .net1 , Top.3inst .net1 , /在层次

33、模块中的标识名语法详细讲解系统任务和函数系统任务和函数 $ $ $ 符号表示符号表示 Verilog Verilog 的系统任务和函数的系统任务和函数常用的系统任务和函数有下面几种:常用的系统任务和函数有下面几种:1)$time /找到当前的仿真时间2)$display, $monitor /显示和监视信号值的变化3)$stop /暂停仿真4)$finish /结束仿真-例: initial $monitor($time,”a=%b, b=%b”, a, b); /每当a 或b值变化时该系统任务都显示当前的仿真时刻并分别用二进制和十六进制显示信号a和 b的值语法详细讲解特殊符号特殊符号 “#”

34、 “#”特殊符号特殊符号 “#” “#” 常用来表示延迟:常用来表示延迟:在过程赋值语句时表示延迟。在过程赋值语句时表示延迟。例:initial begin #10 rst=1; #50 rst=0; end在门级实例引用时表示延迟。在门级实例引用时表示延迟。例:not #1 not1(nsel, sel); and #2 and2(a1, a, nsel);在模块实例引用时表示参数传递在模块实例引用时表示参数传递 介绍参数类型变量时再讲。语法详细讲解编译引导语句编译引导语句编译引导语句用主键盘左上角小写键编译引导语句用主键盘左上角小写键 “ ” 起头起头用于指导仿真编译器在编译时采取一些特殊

35、处理用于指导仿真编译器在编译时采取一些特殊处理编译引导语句一直保持有效,直到被取消或重写编译引导语句一直保持有效,直到被取消或重写resetall 编编译译引引导导语语句句把把所所有有设设置置的的编编译译引引导导恢恢复复到到缺省状态缺省状态常用的编译引导有:常用的编译引导有:a) defineb) includec) timescaled) uselibe) resetall .语法详细讲解编译引导语句编译引导语句使用使用define 编译引导能提供简单的文本替代功能编译引导能提供简单的文本替代功能 define 在编译时会用宏文本来替代源代码中的宏名。合理地使用合理地使用definedefi

36、ne可以提高程序的可读性可以提高程序的可读性举例说明:举例说明:define on 1b1define on 1b1define off 1b0define off 1b0define and_delay #3define and_delay #3在程序中可以用有含义的文字来表示没有意思的数码提高了程序的可读性,在程序中可以用 on, off, and_delay 分别表示 1,0,和 #3 。语法详细讲解编译引导语句编译引导语句使使用用 include include 编编译译引引导导,在在编编译译时时能能把把其其指指定定的的整整个文件包括进来一起处理个文件包括进来一起处理举例说明:举例说明

37、:include “global.v”include “parts/counter.v”include “././library/mux.v”合合理理地地使使用用include 可可以以使使程程序序简简洁洁、清清晰晰、条条理理清清楚、易于查错。楚、易于查错。语法详细讲解编译引导语句编译引导语句 timescale 用于说明程序中的时间单位和仿真精度用于说明程序中的时间单位和仿真精度举例说明: timescale 1ns/100pstimescale 语句必须放在模块边界前面语句必须放在模块边界前面举例说明: timescale 1ns/100ps module MUX2_1(out,a,b,s

38、el); not #1 not1(nsel, sel); and #2 and1(a1, a, nsel); endmodule尽尽可可能能地地使使精精度度与与时时间间单单位位接接近近,只只要要满满足足设设计计的的实实际需要就行。际需要就行。举例说明:在上例中所有的时间单位都是1ns的整数倍语法详细讲解编译引导语句编译引导语句仿仿真真步步长长即即仿仿真真单单位位(STU) 是是所所有有参参加加仿仿真真模模块块中中由由timescale 指指定定的精度中最高(即时间最短)的那个决定的:的精度中最高(即时间最短)的那个决定的: (STU=100fs)举例: timescale 1ns/10ps m

39、odule M1(.); not #1.23 not1(nsel, sel); /1.23 ns中共有12300个STU(100fs) endmodule timescale 100ns/1ns module M2(.); not #1.23 not1(nsel, sel); /123 ns中共有1230000个STU(100fs) endmodule timescale 1ps/100fs module M3(.); not #1.23 not1(nsel, sel); /1.23 ps中共有12个STU(100fs) endmodule语法详细讲解编译引导语句编译引导语句时间单位时间单位

40、: fs (呼秒)femptoseconds: 1.0E-15 秒 ps (皮秒) picoseconds: 1.0E-12 秒 ns (纳秒) nonoseconds: 1.0E-9 秒 us (微秒) microseconds: 1.0E-6 秒 ms (毫秒) milliseconds: 1.0E-3 秒 s ( 秒) seconds: 1.0 秒语法详细讲解编译引导语句编译引导语句 uselib 编译引导语句:编译引导语句: 用于定义仿真器到哪里去找库元件用于定义仿真器到哪里去找库元件 如如果果该该引引导导语语句句启启动动的的话话,它它就就一一直直有有效效 直直到遇到另外一个到遇到另外

41、一个uselib的定义或的定义或resetall语句语句 比其他配置库搜索路径的命令选项作用大比其他配置库搜索路径的命令选项作用大 如果仿真器在uselib定义的地点找不到器件库,它不会转向由编译命令行-v 和-y选项指定的器件库去找。语法详细讲解编译引导语句编译引导语句使用使用 uselib 的语法:的语法: uselib 器件库1的地点 器件库2的地点 。上面的器件库地点可用以下两种方法表示:1) file = 库文件名的路径2) dir = 库目录名的路径 libext = .文件扩展例如例如:uselib dir =/lib/FAST_lib/uselib dir =/lib/TTL_

42、lib/ libext=.v file = /libs/TTL_U/udp.lib语法详细讲解第六讲第六讲 Verilog Verilog 的数据类型和逻辑值的数据类型和逻辑值目的:目的:掌握掌握Verilog不同逻辑值的含义不同逻辑值的含义学习学习Verilog不同的数据类型不同的数据类型理解如何使用和在什么场合下使用不同的数据类型理解如何使用和在什么场合下使用不同的数据类型学习声明数据类型的语法学习声明数据类型的语法语法详细讲解Verilog Verilog 的的四种逻辑值四种逻辑值0 0、低、伪、逻辑低、地、低、伪、逻辑低、地、VSS、负插入、负插入01XZ0bufbufbufbufif

43、11 1、高、真、逻辑高、电源、高、真、逻辑高、电源、VDD、正插入、正插入X X、不确定:逻辑冲突无法确定其逻辑值、不确定:逻辑冲突无法确定其逻辑值HiZHiZ、高阻抗、三态、无驱动源高阻抗、三态、无驱动源 语法详细讲解主要的数据类型主要的数据类型Verilog 有三种主要的数据类型:有三种主要的数据类型: Nets 表示器件之间的物理连接, 称为网络连接类型Register 表示抽象的储存单元,称为寄存器/变量类型Parameter 表示运行时的常数,称为参数类型语法详细讲解主要的数据类型主要的数据类型Nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例

44、如:右图上,selb的改变,会自动地立刻影响或门的输出。 netsabslselbselanslout语法详细讲解主要的数据类型主要的数据类型连接(连接(Nets) 类型变量的种类:类型变量的种类:在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。 类型 功能 wire, tri 对应于标准的互连线(缺省) supply1, supply2 对应于电源线或接地线 wor, trior 对应于有多个驱动源的线或逻辑连接 wand, triand 对应于有多个驱动源的线与逻辑连接 trireg 对应于有电容存在能暂时存储电平的连接

45、 tri1, tri0 对应于需要上拉或下拉的连接如果不明确地说明连接是何种类型,应该是指 wire 类型。语法详细讲解主要的数据类型主要的数据类型 寄存器(寄存器(register)类型变量类型变量 register 型变量能保持其值,直到它被赋于新的值。register 型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。abslselbselansloutreg_areg_selreg_b语法详细讲解主要的数据类型主要的数据类型 寄存器(寄存器(register)类型变量的数据类型类型变量的数据类型 寄存器类型变量共有四种数据类型: 类型 功能 . reg

46、 无符号整数变量,可以选择不同的位宽。 integer 有符号整数变量,32位宽,算术运算可产生2的 补码。 real 有符号的浮点数,双精度。 time 无符号整数变量,64位宽(Verilog-XL仿真 工具用64位的正数来记录仿真时刻)语法详细讲解主要的数据类型主要的数据类型 如何选择正确的数据类型?如何选择正确的数据类型?输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口 (output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,但它本身只能驱动网络连接。如果信号变量是在过程块 (initial块

47、 或 always块)中被赋值的,必须把它声明为寄存器类型变量 语法详细讲解主要的数据类型主要的数据类型举例说明数据类型的选择举例说明数据类型的选择module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule 模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmodule DUT(Y, A, B_);output Y;input A,B: wire Y, A, B; and (Y, A, B);

48、endmodule语法详细讲解主要的数据类型主要的数据类型 选择数据类型时常犯的错误选择数据类型时常犯的错误在过程块中对变量赋值时,忘了把它定义为寄存器在过程块中对变量赋值时,忘了把它定义为寄存器 类型(类型(regreg)或已把它定义为连接类型了(或已把它定义为连接类型了(wirewire)把实例的输出连接出去时,把它定义为寄存器类型把实例的输出连接出去时,把它定义为寄存器类型了了把模块的输入信号定义为寄存器类型了。把模块的输入信号定义为寄存器类型了。这是经常犯的三个错误!这是经常犯的三个错误!语法详细讲解主要的数据类型主要的数据类型 参数(参数(parameters)类型类型常用参数来声明

49、运行时的常数。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。举例说明:举例说明:module md1(out,in1,in2);.parameter cycle=20, prop_del=3, setup=cycle/2-prop_del, p1=8, x_word=16bx, file = “/user1/jmdong/design/mem_file.dat”;wire p1:0 w1; /用参数来说明用参数来说明wire 的位宽的位宽 . initial begin $open(file); . #20000 display(“%s”,file)

50、; $stop end .endmodule语法详细讲解主要的数据类型主要的数据类型 参数值的改写参数值的改写(方法之一方法之一)举例说明举例说明: :module mod ( out, ina, inb);parameter cycle = 8, real_constant=2.039, file = “/user1/jmdong/design/mem_file.dat”;endmodulemodule test; mod mk(out,ina,inb); defparam mk.cycle=6, mk.file=“./my_mem.dat”; endmodule 语法详细讲解主要的数据类型

51、主要的数据类型 参数值的改写参数值的改写( (方法之二方法之二) )举例说明举例说明: :module mod ( out, ina, inb);parameter cycle = 8, real_constant=2.039, file = “/user1/jmdong/design/mem_file.dat”;endmodulemodule test; mod # (5, 3.20, “./my_mem.dat”) mk(out,ina,inb); endmodule 语法详细讲解寄存器阵列寄存器阵列 Verilog 语言支持寄存器阵列的声明语言支持寄存器阵列的声明:举例说明:举例说明:integer NUMS 7:0; / 8个整型变量的寄存器阵列time t_vals 3:0; /4个时间变量的寄存器阵列数据类型为 reg 的阵列常称为存储器(即 memory):reg 15:0 MEM 0:1023; / 1K x 16 位的存储器reg 7:0 PREP hfffe : hffff; / 2 x 8 位的存储器可以用参数来表示存储器的大小:parameter wordsize = 16;parameter memsize = 1024;reg wordsize-1:0 MEM3memsize-1:0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号