第二三章Verilog语法的基本概念及常用Verilog语法之一_第1页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第2页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第3页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第4页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章第二章 Verilog语法的基本概念语法的基本概念o Verilog HDL是一种用于数字系统设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型(模块)。o Verilog模型可以是实际电路的不同级别的抽象。n 行为描述:系统级、算法级、RTL级n 结构描述:门级、开关级6/11/20221Verilog Verilog 的应用的应用p 系统级系统级(system): (system): 用高级语言结构实现用高级语言结构实现设计模块的设计模块的外部性能外部性能的模型。的模型。p 算算法级法级(algorithmic): (algorithmic):

2、用高级语言结构实现用高级语言结构实现设计设计算法算法的模型。的模型。p RTLRTL级级(Register Transfer Level): (Register Transfer Level): 描述数据在描述数据在寄寄存器存器之间流动和如何之间流动和如何处理处理这些数据的模型。这些数据的模型。p 门级门级(gate-level): (gate-level): 描述描述逻辑门逻辑门以及逻辑门之间的以及逻辑门之间的连接的模型。连接的模型。p 开关级开关级(switch-level): (switch-level): 描述器件中描述器件中三极管和储存三极管和储存节点节点以及它们之间连接的模型。以及

3、它们之间连接的模型。module muxtwo (out, a, b, sl);input a,b,sl;output out; reg out; always (sl or a or b) if (!sl) out = a; else out = b;endmoduleabsloutmodule muxtwo (out, a, b, sl);input a,b,sl;output out; not u1(ns1,sl); and #1 u2(sela,a,nsl); and #1 u3 (selb,b,sl); or #2 u4(out ,sela,selb);endmoduleoutabs

4、lselbselansl u2 u3 u4 u1module muxtwo (out, a, b, sl,clk);input a,b,sl;output out; reg out,s;always(posedge clk)out=s; always (sl or a or b) if (!sl) s = a; else s = b;endmoduleabsloutclk RTL模块的数据流动必须基于时模块的数据流动必须基于时钟。钟。RTL模块在每个时钟的沿时模块在每个时钟的沿时刻,其变量的值必定是精确的。刻,其变量的值必定是精确的。 RTL模块是可综合的,它是行为模块是可综合的,它是行为模块

5、的一个子集合。模块的一个子集合。 该行为描述并没有说明如果输入该行为描述并没有说明如果输入 a 或或 b是三态的(高阻时)输出应是三态的(高阻时)输出应该是什么,但有实际电路是有一定该是什么,但有实际电路是有一定的输出的。的输出的。 abslout简单的简单的 Verilog HDL Verilog HDL 模块模块例:例: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 简单的简单的 Ve

6、rilog HDL Verilog HDL 模块模块module compare ( equal,a,b ); output equal; /声明输出信号equal input 1:0 a,b; /声明输入信号a,b assign equal=(a=b)?1:0; /*如果两个输入信号相等,输出为1。否则为0*/endmodule / /* *.* */ /和和/./.表示注释部分表示注释部分p 一个复杂电路的完整一个复杂电路的完整Verilog HDLVerilog HDL模型是由若个模型是由若个 Verilog HDL Verilog HDL 模块构成的,每一个模块又可以由若模块构成的,每

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

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

9、逻辑运算符、位算术运算符、逻辑运算符、位运算符运算符。Verilog HDLVerilog HDL语言作为一种结构化的语言也非常适合于语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。门级和开关级的模型设计。Verilog HDLVerilog HDL的构造性语句可以精确地建立信号的模型。的构造性语句可以精确地建立信号的模型。这是因为在这是因为在Verilog HDLVerilog HDL中,提供了中,提供了延迟和输出强度延迟和输出强度的的原语来建立精确程度很高的信号模型。信号值可以有不原语来建立精确程度很高的信号模型。信号值可以有不同的的强度,可以通过设定宽范围的模糊值来降低不确同

10、的的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。定条件的影响。Verilog Verilog 的应用的应用第三章第三章 常用常用Verilog语法之一语法之一o 模块结构o 数据类型o 变量、基本的运算符号6/11/202214模块的结构模块的结构VerilogVerilog的基本设计单元是的基本设计单元是“模块模块”(block)(block)。一个模块是由两部分组成的:一个模块是由两部分组成的: 描述接口;描述接口; 描述逻辑功能,即定义输入是如何影响输出的。描述逻辑功能,即定义输入是如何影响输出的。从上面的例子可以看出:从上面的例子可以看出:- - VerilogVerilo

11、g模块结构完全嵌在模块结构完全嵌在modulemodule和和endmoduleendmodule声明语句之间;声明语句之间;- 每个每个VerilogVerilog程序包括四个主要部分:程序包括四个主要部分:- 端口定义端口定义- I/OI/O说明说明- 内部信号声明内部信号声明- 功能定义功能定义模块的结构模块的结构模块的端口定义模块的端口定义module 模块名(口1,口2,口3, ) 模块的端口表示的是模块的输入输出口名,它与别的模块联系端口的标识。6/11/202217module compare ( equal,a,b ); 。 。 。 。endmodule模块内容模块内容o 输入

12、口: input信号位宽-1:0 端口名1; input信号位宽-1:0 端口名2;o 输出口: output信号位宽-1:0 端口名1; output信号位宽-1:0 端口名2;o 输入/输出口: inout信号位宽-1:0 端口名1; inout信号位宽-1:0 端口名2;6/11/202218I/O说明说明 I/O说明也可以写在端口声明语句里 module module_name(input port1, , output port1, .) 6/11/202219模块内容模块内容I/O说明说明模块内容模块内容 模块内部用到的与端口有关的wire和reg类型变量的声明regwidth-1

13、:0 R1, R2;wirewidth-1:0 W1, W2; 6/11/202220内部信号声明内部信号声明模块内容模块内容功能定义:定义逻辑功能功能定义:定义逻辑功能 用 assign声明语句assign a=b&c; 用实例元件and #2 ul(q,a,b); ul为与门,输入a,b,输出q, 输出延迟2个时间单位6/11/202221模块内容模块内容功能定义:定义逻辑功能功能定义:定义逻辑功能 用always块(过程块,procedural block) always (posedge clk or posedge clr) begin if(clr) q=0; else i

14、f(en) q=d; end;6/11/202222模块内容模块内容功能定义:定义逻辑功能功能定义:定义逻辑功能 assign 语句是描述组合逻辑常用方法; always 可用于描述组合逻辑和时序逻辑; assign, always, 实例化描述的逻辑功能是同时(并行)执行; 在always模块内,逻辑是顺序执行的。但是不同的always模块式并行执行的。6/11/202223module mu1 (a, q,q2,b, c);input b,c;output q,q2,a; assign a=b&c; and #2 ul(q,c,b); always (b,c) begin q2=b

15、&c; end; endmodule模块的引用模块的引用 严格按照严格按照模块定义的端口顺序模块定义的端口顺序来连接,不用来连接,不用标明原模块定义时的端口名:标明原模块定义时的端口名: 模块名(连接端口1信号名,连接端口2信号名,.) 在引用时在引用时用用“.”符号,标明原模块定义时规符号,标明原模块定义时规定的端口名定的端口名.模块名(.端口1名(连接信号1名), .端口2名(连接信号2名,.)6/11/202225要点总结要点总结o Verilog模块中所有过程块模块中所有过程块(如如initial,always)、连续赋值语句、实例引用都是并行的;连续赋值语句、实例引用都是并行

16、的;o 它们表示的是一种通过变量名互相连接的关系;它们表示的是一种通过变量名互相连接的关系;o 在同一模块中这三者出现的先后顺序没有关系;在同一模块中这三者出现的先后顺序没有关系;o 只有连续赋值语句和实例引用语句可以只有连续赋值语句和实例引用语句可以独立于过独立于过程块程块(always,initial)而存在于模块的功能定义而存在于模块的功能定义部分。部分。6/11/2022263.2 数据类型及其常量和变量数据类型及其常量和变量o Verilog HDL中总共有19种数据类型。数据类型是表示数字电路中的数据存储和传送元素数据存储和传送元素的。6/11/202229常量常量o 数字数字整数

17、整数n 二进制二进制(b,B), 十进制十进制(d,D),十六进制,十六进制(h,H),八进制八进制(o,O)n 表示方法:表示方法:oo ,默认,默认32位位o ,默认,默认32位,十进制位,十进制8b10101100, 8ha2, 6/11/202230常量常量o 数字数字x和和zn x不定值;不定值;n z高阻值,也可用高阻值,也可用?表示表示 4b10 x0, 4b101z, 12dz, 12d?, 8h4x6/11/202231常量常量o 数字数字负数负数在数字表达式的前面加在数字表达式的前面加-8d56/11/202232常量常量o 数字数字下划线(下划线(underscore_)

18、用来用来分割数的表达以提高程序可读性分割数的表达以提高程序可读性,但,但不可以不可以用在位宽和进制处用在位宽和进制处,只能用在,只能用在具体的数字之具体的数字之间间16b1010_1011_1111_10106/11/202233常量常量o 当常量不说明位数时,默认值是当常量不说明位数时,默认值是32位,位, 10=32d10, -1=-32d1=32hFFFF_FFFF BX=32BX=32BXXXXXo 每个字母用每个字母用8位的位的ASCII值表示值表示 “AB”=16B01000001_010000106/11/202234参数型参数型(parameter)常量常量o 可以用可以用pa

19、rameter来定义来定义常量常量,即,即用用parameter定义一个标识符代表一个常量,称为定义一个标识符代表一个常量,称为符号常量符号常量,即标识符形式的常量,即标识符形式的常量 parameter 参数名参数名1=表达式,参数名表达式,参数名2=表达表达式;式; 注意:表达式必须是注意:表达式必须是常数表达式,只能包含数字或常数表达式,只能包含数字或先前已定义过的参数先前已定义过的参数 parameter msb=7, e=25; parameter byte_size=8, byte_msb=byte_size-1;6/11/202235参数型参数型(parameter)o 参数型常

20、数用来定义参数型常数用来定义延迟时间和变量宽度延迟时间和变量宽度。在。在模块或实例引用时,可通过模块或实例引用时,可通过参数传递参数传递改变在被改变在被引用模块或者实例中已定义的参数。引用模块或者实例中已定义的参数。6/11/202236参数型参数型(parameter)例: module Decode(A,F); parameter Width=1, Polarity=1; end module module Top wire3:0 A4; wire15:0 F16; Decode #(4,0) D1(A4,F16); Decode #(5) D2(A4, F16); end module6

21、/11/202237变量变量o 在程序运行过程中其值可以改变的量。在程序运行过程中其值可以改变的量。o 变量数据类型变量数据类型(variable data type), 用来暂存用来暂存数据,在过程中被赋值的变量。数据,在过程中被赋值的变量。n 可在可在 initial procedure, always procedure, task, function 中被赋值。中被赋值。n未被初始化时,默认值为未被初始化时,默认值为X。n 默认为默认为unsigned类型,除非指定为类型,除非指定为signed类型。类型。n 默认位宽为默认位宽为1bit。 变量变量o 网络数据类型(网络数据类型(ne

22、t data type)表示结构表示结构实体之间的物理连接,不能储存值,而且必实体之间的物理连接,不能储存值,而且必须受到驱动器的驱动。如果没有驱动器连接须受到驱动器的驱动。如果没有驱动器连接到网络类型的变量上,则该变量就是到网络类型的变量上,则该变量就是高阻值高阻值z。nWire:表示单个门驱动或者连续赋值语句驱动的:表示单个门驱动或者连续赋值语句驱动的网络类型数据。网络类型数据。nTri:表示多驱动源:表示多驱动源(器器)驱动的网络类型数据。驱动的网络类型数据。变量变量o Wire:常用来表示:常用来表示以以assign关键字指定的关键字指定的组合逻辑信号组合逻辑信号。nVerilog中输

23、入、输出信号类型默认时自动定义为中输入、输出信号类型默认时自动定义为wire型。型。nWire信号可以用作任何方程式的输入信号可以用作任何方程式的输入n可用作可用作assign语句或实例元件的输出。语句或实例元件的输出。 wiren-1:0 b,a; 定义了两条总线定义了两条总线b、a,每条总线宽度为,每条总线宽度为n bits;变量变量o reg 型:寄存器数据类型,默认初始值为不定值型:寄存器数据类型,默认初始值为不定值x。o reg型数据常用来表示型数据常用来表示always模块内的指定信模块内的指定信号,代表触发器。号,代表触发器。在在always内被赋值的每一个内被赋值的每一个信号都

24、必须定义成信号都必须定义成reg型型。 regn-1:0 数据名数据名1,数据名,数据名2; regn:1 数据名数据名1,数据名,数据名2; reg3:0 regb; reg4:1 regc, regd;变量变量o reg型数据,其赋值语句的作用就如同改变一型数据,其赋值语句的作用就如同改变一组触发器的存储单元的值;组触发器的存储单元的值;o reg型数据的默认值是型数据的默认值是x,reg型数据可以赋正型数据可以赋正值、负值,值、负值,o 若为表达式的若为表达式的操作数操作数,其值被当作是,其值被当作是无符号值无符号值。o reg只表示被定义的信号将用在只表示被定义的信号将用在always

25、块内。块内。o memory型:型:Verilog通过对通过对reg型变量型变量建立数建立数组组来对存储器建模,来对存储器建模,nRAM型存储器型存储器nROM存储器存储器nreg文件。文件。o Memory型数据通过扩展型数据通过扩展reg型数据的地址范围型数据的地址范围来生成。来生成。 regn-1:0 存储器名存储器名m-1:0; regn-1:0 存储器名存储器名m:1; reg7:0 mema255:0;变量变量对存储器进行地址对存储器进行地址索引的表达式必须索引的表达式必须为常数表达式,为常数表达式,m必须为常数必须为常数o 在同一个数据类型声明语句里,可以同时定义存储器型数据和r

26、eg型数据。 parameter wordsize=16, memsize=256; regwordsize-1:0 memmemsize-1:0, writereg, readreg;变量变量o 注意memory型数据与reg型数据的不同 regn-1:0 rega; 定义一个n位的寄存器, reg meman-1:0; 定义一个由n个1位寄存器构成的存储器组。 rega=0; 合法 mema=0; 错误 mema2=0; 正确变量变量3.3 运算符及表达式运算符及表达式按功能分类:o 算术运算符(+,-,x,/,%);o 位运算符( , &, |, , );o 逻辑运算符(&

27、;, |, !);o 关系运算符(,=,=);o 移位运算符();o 拼接运算符( );o 条件运算符(? :);o 赋值运算符(=,=); 3.3 运算符及表达式运算符及表达式按运算符所带的操作数不同:按运算符所带的操作数不同:o 单目运算符单目运算符(unary operator):可以带:可以带一个操作数,操作数放在运算符的右边;一个操作数,操作数放在运算符的右边;o 双目运算符双目运算符(binary operator):可以):可以带两个操作数,操作数放在运算符的两边;带两个操作数,操作数放在运算符的两边;o 三目运算符三目运算符(ternary operator):可以带:可以带三

28、个操作数,这三个操作数用三目运算符分三个操作数,这三个操作数用三目运算符分隔开。隔开。 clock=clock; c=a|b; r=s?t:u;基本的算术运算符基本的算术运算符o 算术运算符又称为二进制运算符算术运算符又称为二进制运算符o +,-,x,/,%o 整数除法整数除法运算,结果只取运算,结果只取整数部分整数部分;o 取模取模运算时,结果值的运算时,结果值的符号位符号位采用模运算里采用模运算里第一个操作数的符号位第一个操作数的符号位。 10%3=1;11%-3=2;-10%3=-1;基本的算术运算符基本的算术运算符o 运算规则运算规则n若某一操作数为若某一操作数为X,则结果为,则结果为X;n符号扩展符号扩展:不同长度的数据进行位运算,系统自动将两不同长度的数据进行位运算,系统自动将两者右端对齐者右端对齐ounsigned:位数少的操作数会在相应的高位用位数少的操作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论