VerilogHDL基本语法

上传人:m**** 文档编号:568630102 上传时间:2024-07-25 格式:PPT 页数:82 大小:244KB
返回 下载 相关 举报
VerilogHDL基本语法_第1页
第1页 / 共82页
VerilogHDL基本语法_第2页
第2页 / 共82页
VerilogHDL基本语法_第3页
第3页 / 共82页
VerilogHDL基本语法_第4页
第4页 / 共82页
VerilogHDL基本语法_第5页
第5页 / 共82页
点击查看更多>>
资源描述

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

1、第二部分第二部分 Verilog HDL基本语法基本语法2.1 Verilog HDL2.1 Verilog HDL程序模块结构程序模块结构设设计计模模块块模块端口定义模块端口定义I/OI/O说明说明功能描述功能描述模块内容模块内容信号类型说明信号类型说明2.1.1 模块端口定义模块端口定义模模块块端端口口定定义义用用来来声声明明设设计计电电路路模模块块的的输输入入输输出出端口。端口定义端口。端口定义格式格式如下如下module 模块名(端口模块名(端口1,端口,端口2,端口,端口3,);); 在在端端口口定定义义的的圆圆括括弧弧中中,是是设设计计电电路路模模块块与与外外界界联联系系的的全全部

2、部输输入入输输出出端端口口信信号号或或引引脚脚,它它是是设设计计实实体体对对外外的的一一个个通通信信界界面面,是是外外界界可可以以看看到到的的部部分分(不不包包含电源和接地端),多个端口名之间用含电源和接地端),多个端口名之间用“,”分隔。分隔。例如,例如,module adder(sum,cont,ina,inb,cin););2.1.2 模块内容模块内容模块内容模块内容包括包括I/O说明、信号类型声明和功能描述。说明、信号类型声明和功能描述。1. 模块的模块的I/O说明说明模模块块的的I/O说说明明用用来来声声明明模模块块端端口口定定义义中中各各端端口口数数据据流流动动方方向向包包括括输输

3、入入(input)、输输出出(output)和和双双向向(inout)。I/O说说明格式如下明格式如下input 端口端口1,端口,端口2,端口,端口3,;output 端口端口1,端口,端口2,端口,端口3,;例如例如 input ina,inb,cin;output sum,cont;2. 信号类型声明信号类型声明 信号类型声明信号类型声明用来说明设计电路的功能描述中,所用的用来说明设计电路的功能描述中,所用的信号的数据类型以及函数声明。信号的数据类型以及函数声明。 信号的数据类型主要有信号的数据类型主要有连线(连线(wire)、寄存器(寄存器(reg)、整型(整型(integer)、实型

4、(实型(real)和和时间(时间(time)等类型。等类型。 3. 功能描述功能描述 功能描述功能描述是是Verilog HDL程序设计中最主要的部分,用来程序设计中最主要的部分,用来描述设计模块的内部结构和模块端口间的逻辑关系,在电路描述设计模块的内部结构和模块端口间的逻辑关系,在电路上相当于上相当于器件的内部电路结构器件的内部电路结构。 功能描述可以用功能描述可以用assign语句语句、元件例化(元件例化(instantiate)、always块语句块语句、initial块语句块语句等方法来实现,通常把确定这些等方法来实现,通常把确定这些设计模块描述的方法称为建模。设计模块描述的方法称为建

5、模。 (1)用)用assign语句建模语句建模 用用assign语语句句建建模模的的方方法法很很简简单单,只只需需要要在在“assign”后面再加一个表达式即可。后面再加一个表达式即可。assign语语句句一一般般适适合合对对组组合合逻逻辑辑进进行行赋赋值值,称称为为连连续续赋值方式。赋值方式。【例【例2.1】1位全加器的设计。位全加器的设计。 inainbcinadder1sumcoutVerilog HDL源程序如下源程序如下module adder1(sum,cout,ina,inb,cin);); /模块端口定义模块端口定义input ina,inb,cin;output sum,co

6、ut;/I/O声明声明assign cout,sum = ina+inb+cin; /功能描述语句功能描述语句endmodule /endmodule后不加分号后不加分号 默认的数据类型为默认的数据类型为wire(连线)型,(连线)型, 为拼接为拼接运算符,是将运算符,是将cout、sum这样两个这样两个1位操作数拼接为位操作数拼接为一个一个2位操作数。位操作数。(2)用元件例化()用元件例化(instantiate)方式建模)方式建模 元元件件例例化化方方式式建建模模是是利利用用Verilog HDL提提供供的的元元件库实现的。件库实现的。例例如如,用用与与门门例例化化元元件件定定义义一一个

7、个3输输入入端端与与门门可可以以写为写为andmyand3(y,a,b,c);(3)用)用always块语句建模块语句建模always块块语语句句可可以以产产生生各各种种逻逻辑辑,常常用用于于时时序序逻逻辑辑的的功功能能描描述述。一一个个程程序序设设计计模模块块中中,可可以以包包含含一一个个或或多多个个always语语句句。程程序序运运行行中中,在在某某种种条条件件满满足足时,就重复执行一遍时,就重复执行一遍always结构中的语句结构中的语句。【例】【例】8位二进制加法计数器的设计。位二进制加法计数器的设计。 module cnt8(out,cout,data,load,cin,clk,cl

8、r); input 7:0 data;input load, cin, clk, clr; output 7:0 out;output cout; reg 7:0 out; /寄存器型参量,具有寄存功能寄存器型参量,具有寄存功能always (posedge clk) /时时钟钟上上升升沿沿,每每次次上上升升沿沿,执行执行always语句语句 begin if (clr) out =8b0; else if (load) out = data; else out = out+8b1; endassign cout = &out & cin; /”&out”与与缩缩减减运运算算式式endmodu

9、le(4)用)用initial块语句建模块语句建模initial块语句与块语句与always语句类似,不过在程序中它语句类似,不过在程序中它只执行只执行1次次就结束了。就结束了。 Verilog HDL程序设计模块的基本结构小结程序设计模块的基本结构小结: Verilog HDL程程序序是是由由模模块块构构成成的的。每每个个模模块块的的内内容容都都是是嵌嵌在在module和和endmodule两两语语句句之之间间,每每个个模模块块实实现现特特定定的的功功能能,模模块块是是可可以以进进行行层层次次嵌嵌套套的。的。 每个模块首先要进行每个模块首先要进行端口定义端口定义,并说明输入,并说明输入(in

10、put)、输出()、输出(output)或双向()或双向(inouts),然),然后对模块的后对模块的功能功能进行逻辑进行逻辑描述描述。 Verilog HDL程程序序的的书书写写格格式式自自由由,一一行行可可以以一一条或多条语句,一条语句也可以分为多行写。条或多条语句,一条语句也可以分为多行写。 除除了了endmodule语语句句外外,每每条条语语句句后后必必须须要要有有分分号号“;”。 可以用可以用/*/或或/对对Verilog HDL程序的程序的任何部分作任何部分作注释注释。 一个完整的源程序都应当加上需要的注释,一个完整的源程序都应当加上需要的注释,以加强程序的可读性。以加强程序的可读

11、性。 2.2 Verilog HDL的词法的词法2.2.1 空白符和注释空白符和注释 Verilog HDL的的空空白白符符包包括括空空格格、tab符符号号、换换行行和和换页换页。 空空白白符符如如果果不不是是出出现现在在字字符符串串中中,编编译译源源程程序序时将被忽略。时将被忽略。 注释分为注释分为行注释行注释和和块注释块注释两种方式。行注释用两种方式。行注释用符号符号/(两个斜杠)开始,注释到本行结束。块注(两个斜杠)开始,注释到本行结束。块注释用释用/*开始,用开始,用*/结束结束。块注释可以跨越多行,但。块注释可以跨越多行,但它们不能嵌套。它们不能嵌套。 2.2.2 常数常数 Veri

12、log HDL的的常常数数包包括括数数字字、未未知知X和和高高阻阻Z三三种种。数数字字可可以以用用二二进进制制、十十进进制制、八八进进制制和和十十六六进进制制等等4种不同数制来表示,完整的种不同数制来表示,完整的数字格式数字格式为为 其其中中,位位宽宽表表示示数数字字对对应应的的二二进进制制数数的的位位数数宽宽度度;进进制制符符号号包包括括b或或B(表表示示二二进进制制数数),d或或D(表表示示十十进进制制数数),h或或H(表表示示十十六六进进制制数数),o或或O(表表示八进制数)。示八进制数)。例如例如8b10110001 /表示位宽为表示位宽为8位的二进制数位的二进制数8hf5 /表示位宽

13、为表示位宽为8位的十六进制数位的十六进制数十进制数的位宽和进制符号可以缺省十进制数的位宽和进制符号可以缺省,例如,例如125/表示十进制数表示十进制数125126X和和Z表示位数的特殊性表示位数的特殊性:1278b1111xxxx/等价等价8hfx1288b1101zzzz/等价等价8hdz2.2.3 字符串字符串字字符符串串是是用用双双引引号号括括起起来来的的可可打打印印字字符符序序列列,它它必必须须包含在包含在同一行同一行中。中。例如,例如,”ABC”,”A BOY.”,”A”,”1234”都是字符串。都是字符串。2.2.4 标识符标识符 标标识识符符是是用用户户编编程程时时为为常常量量、

14、变变量量、模模块块、寄寄存存器器、端端口口、连连线线、示示例例和和begin-end块块等等元元素素定定义义的的名名称称。标标识识符符可可以以是是字字母母、数数字字和和下下划划线线“_”等等符符号号组成的任意序列。定义标识符时应遵循如下组成的任意序列。定义标识符时应遵循如下规则:规则: 首字符不能是数字。首字符不能是数字。 字符数不能多于字符数不能多于1024个。个。 大小写字母是不同的。大小写字母是不同的。 不要与关键字同名。不要与关键字同名。 2.2.5 关键字关键字 关键字是关键字是Verilog HDL预先定义的单词,它们预先定义的单词,它们在程序中有不同的使用目的。所有关键字都用小写

15、在程序中有不同的使用目的。所有关键字都用小写例如,例如, module和和endmodule来指出源程序模块的开始来指出源程序模块的开始和结束;用和结束;用assign来描述一个逻辑表达式等。来描述一个逻辑表达式等。 Verilog HDL的关键字有的关键字有97个。个。 2.2.6 操作符操作符 操作符也称为运算符,是操作符也称为运算符,是Verilog HDL预定义的预定义的函数名字,这些函数对被操作的对象(即操作数)函数名字,这些函数对被操作的对象(即操作数)进行规定的运算,得到一个结果。进行规定的运算,得到一个结果。 操作符通常由操作符通常由13个字符组成,例如,个字符组成,例如,“+

16、”表表示加操作,示加操作,“= =”(两个(两个=字符)表示逻辑等操作,字符)表示逻辑等操作,“= = =”(3个个=字符)表示全等操作。字符)表示全等操作。 有些操作符的操作数只有有些操作符的操作数只有1个,称为个,称为单目单目操作;操作;有些操作符的操作数有有些操作符的操作数有2个,称为个,称为双目双目操作;有些操操作;有些操作符的操作数有作符的操作数有3个,称为个,称为三目三目操作。操作。 1. 算术操作符(算术操作符(Arithmetic operators)常用的算术操作符:常用的算术操作符: +(加)、(加)、-(减)、(减)、*(乘)、(乘)、/(除)、(除)、%(求余)。(求余

17、)。其其中中%是是求求余余操操作作符符, 在在两两个个整整数数相相除除的的基基础础上上,取取出出其余数。例如,其余数。例如,5 % 6的值为的值为5;13 % 5的值是的值是3。2. 逻辑操作符(逻辑操作符(Logical operators )逻辑操作符包括:逻辑操作符包括:&(逻辑与)、(逻辑与)、|(逻辑或)、!(逻辑非)(逻辑或)、!(逻辑非)3. 位运算(位运算(Bitwise operators)位运算是将两个操作数按对应位进行逻辑操作。位运算是将两个操作数按对应位进行逻辑操作。位运算操作符包括:位运算操作符包括:(按位取反)、(按位取反)、&(按位与)、(按位与)、|(按位或)、

18、(按位或)、(按位异或)、(按位异或)、或或(按位同或)。(按位同或)。 在在进进行行位位运运算算时时,当当两两个个操操作作数数的的位位宽宽不不同同时时,计计算算机机会会自自动动将将两两个个操操作作数数按按右右端端对对齐齐,位位数数少少的的操操作数会在高位用作数会在高位用0补齐。补齐。 4. 关系操作符(关系操作符(Pelational operators)关系操作符有:关系操作符有: (小小于于)、(大大于于)、=(大大于等于)。于等于)。其中,其中,(右移)、(右移)、 n ; /将将操操作作数数的的内内容容右右移移n位位,同同时时从从左边开始左边开始用用0来填补来填补移出的位数。移出的位

19、数。操作数操作数 4的结果是的结果是A = 8b00001101;而;而A 4的结果是的结果是A = 8b00010000。 8. 条件操作符条件操作符(Conditional operators)条件操作符为:?:条件操作符为:?:条件操作符的条件操作符的操作数有操作数有3个,个,其使用格式为其使用格式为操作数操作数 = 条件条件 ? 表达式表达式1:表达式:表达式2; 即当条件为真(条件结果值为即当条件为真(条件结果值为1)时,操作数)时,操作数 = 表达式表达式1;为假(条件结果值为;为假(条件结果值为0)时,操作数)时,操作数 = 表达表达式式2。源程序如下源程序如下moduleexa

20、mple_2_3(out,a,b,c);input a,b,c;outputout;assign out = a? b:c;endmodule【例【例2.3】用】用Verilog HDL语言描述下图所示的电路。语言描述下图所示的电路。outcba1&9. 位并接操作符(位并接操作符(Concatenation operators)并接操作符为:并接操作符为:并接操作符的并接操作符的使用格式使用格式:操操作作数数1的的某某些些位位,操操作作数数2的的某某些些位位,操操作作数数n的某些位;的某些位;作作用用:即即将将操操作作数数1的的某某些些位位与与操操作作数数2的的某某些些位位与与与操作数与操作

21、数n的某些位并接在一起。的某些位并接在一起。例例如如,将将1位位全全加加器器进进位位cont与与和和sum并并接接在在一一起起使使用用,它它们们的的结结果果由由两两个个加加数数ina、inb及及低低位位进进位位cin相相加加决决定的表达式为定的表达式为cont,sum= ina+inb+cin; 2.2.7 Verilog HDL数据对象数据对象Verilog HDL数据对象是指用来存放各种类型数据的数据对象是指用来存放各种类型数据的容器,包括容器,包括常量常量和和变量变量。 1. 常量常量常量是一个恒定不变的值数,一般常量是一个恒定不变的值数,一般在程序前部定义在程序前部定义。常量定义常量定

22、义格式格式为为parameter 常量名常量名1 = 表达式,常量名表达式,常量名2 = 表达式,表达式,常量名常量名n = 表达式;表达式;parameter是是常常量量定定义义关关键键字字,常常量量名名是是用用户户定定义义的的标标识符,表达式是为常量赋的值。例如识符,表达式是为常量赋的值。例如parameter vcc = 5,fbus = 8b11010001; 2. 变量变量 变量是在程序运行时其值可以改变的量。变量是在程序运行时其值可以改变的量。 在在Verilog HDL中,变量分为中,变量分为网络型(网络型(nets type)和和寄存器型(寄存器型(register type)

23、两种。两种。 (1)网络型变量()网络型变量(nets type) netsnets型型变变量量是是输输出出值值始始终终根根据据输输入入变变化化而而更更新新的的变量,它一般用来定义硬件电路中的变量,它一般用来定义硬件电路中的各种物理连线各种物理连线。类类 型型功能说明功能说明wire、tri连线类型(两者功能完全相同)连线类型(两者功能完全相同)wor、trior具有线或特性的连线(两者功能一致)具有线或特性的连线(两者功能一致)wand、triand具有线与特性的连线(两者功能一致)具有线与特性的连线(两者功能一致)tri1、tri0分别为上拉电阻和下拉电阻分别为上拉电阻和下拉电阻suppl

24、y1、supply0分别为电源(逻辑分别为电源(逻辑1)和地(逻辑)和地(逻辑0)Verilog HDL提供的提供的nets型变量如下型变量如下(2)寄存器型变量()寄存器型变量(register type) register型变量是一种数值容器,不仅可以型变量是一种数值容器,不仅可以容纳当容纳当前值前值,也可以,也可以保持历史值保持历史值,这一属性与,这一属性与触发器或寄存触发器或寄存器的记忆功能器的记忆功能有很好的对应关系。有很好的对应关系。 register型变量与型变量与wire型变量的根本区别:型变量的根本区别:register型变量需要被明确地赋值,并且在被重新赋值前一直型变量需要

25、被明确地赋值,并且在被重新赋值前一直保持原值。保持原值。 register型变量是在型变量是在always、initial等过程语句中定等过程语句中定义,并通过过程语句赋值。义,并通过过程语句赋值。 常用的常用的register型变量及说明型变量及说明 类类 型型功功 能能 说说 明明reg常用的寄存器型变量常用的寄存器型变量integer32位带符号整数型变量位带符号整数型变量real64位带符号实数型变量位带符号实数型变量time无符号时间型变量无符号时间型变量 integer、real和和time等等3种种寄寄存存器器型型变变量量都都是是纯纯数数学学的的抽抽象象描描述述,不不对对应应任任

26、何何具具体体的的硬硬件件电电路路,但但它它们们可可以以描描述述与与模模拟拟有有关关的的计计算算。例例如如,可可以以利利用用time型型变量控制经过特定的时间后关闭显示等。变量控制经过特定的时间后关闭显示等。 reg型变量是数字系统中存储设备的抽象,常用于型变量是数字系统中存储设备的抽象,常用于具体的硬件描述,因此是最常用的寄存器型变量。具体的硬件描述,因此是最常用的寄存器型变量。 reg型变量定义的关键字是型变量定义的关键字是reg,定义,定义格式格式如下如下reg 位宽位宽 变量变量1,变量,变量2,变量,变量n;用用reg定定义义的的变变量量有有一一个个范范围围选选项项(即即位位宽宽),默

27、默认认的的位位宽宽是是1。位位宽宽为为1位位的的变变量量称称为为标标量量,位位宽宽超超过过1位位的的变变量量称称为为向向量量。标标量量的的定定义义不不需需要要加加位位宽宽选选项项,例例如如 reg a,b;/定义两个定义两个reg型变量型变量a,b 向量定义时需要位宽选项向量定义时需要位宽选项,例如,例如reg7:0data;/定定义义1个个8位位寄寄存存器器型型变量,最高有效位是变量,最高有效位是7,最低有效位是,最低有效位是0reg0:7data;/定定义义1个个8位位寄寄存存器器型型变量,最高有效位是变量,最高有效位是0,最低有效位是,最低有效位是7向量定义后可以采有多种使用形式(即赋值

28、)向量定义后可以采有多种使用形式(即赋值)data=8b00000000;data5:3=3b111;data7=1; (3)数组)数组 若若干干个个相相同同宽宽度度的的向向量量构构成成数数组组。在在数数字字系系统统中中,reg型数组变量即为型数组变量即为memory(存储器)型变量(存储器)型变量。存储器型可以用如下语句定义存储器型可以用如下语句定义reg7:0mymemory1023:0;上上述述语语句句定定义义了了一一个个1024个个字字存存储储器器变变量量mymemory,每每个个字字的的字字长长为为8位位。在在表表达达式式中中可可以以用用下下面面的的语语句来使用存储器:句来使用存储器

29、:mymemory7 = 75;/存存储储器器mymemory的的第第7个个字字被赋值被赋值752.3 Verilog HDL的语句的语句 语句是构成语句是构成Verilog HDL程序不可缺少的部分。程序不可缺少的部分。Verilog HDL的语句包括赋值语句、条件语句、循的语句包括赋值语句、条件语句、循环语句、结构说明语句和编译预处理语句等类型,环语句、结构说明语句和编译预处理语句等类型,每一类语句又包括几种不同的语句。在这些语句中,每一类语句又包括几种不同的语句。在这些语句中,有些语句属于顺序执行语句,有些语句属于并行执有些语句属于顺序执行语句,有些语句属于并行执行语句。行语句。 2.3

30、.1 赋值语句赋值语句1. 门基元赋值语句门基元赋值语句格式:格式:基本逻辑门关键字基本逻辑门关键字(门门输输出出,门门输输入入1,门门输输入入2,门输入,门输入n);); 基基本本逻逻辑辑门门关关键键字字是是Verilog HDL预预定定义义的的逻逻辑辑门门,包包括括and、or、not、xor、nand、nor等等;圆括弧中内容是被描述门的输出和输入信号。圆括弧中内容是被描述门的输出和输入信号。例例如如,具具有有a、b、c、d四四个个输输入入和和y为为输输出出与与非非门门的门基元赋值语句为的门基元赋值语句为nand(y,a,b,c,d););该语句与该语句与y = (a & b & c &

31、 d)等效)等效2. 连续赋值语句连续赋值语句格式格式assign赋值变量赋值变量 = 表达式;表达式;例如例如assigny = (a & b & c & d);); 在执行中,输出在执行中,输出y的变化跟随输入的变化跟随输入a、b、c、d的的变化而变化,变化而变化,反映了信息传送的连续性反映了信息传送的连续性。 【例】【例】4输入端与非门的输入端与非门的Verilog HDL源程序。源程序。moduleexample_4_4(y,a,b,c,d);outputy;inputa,b,c,d;assign #1 y = (a&b&c&d);endmodule #1表示该门的输出与输入信号之间具

32、有表示该门的输出与输入信号之间具有1个个单位的时间延迟。单位的时间延迟。 3. 过程赋值语句过程赋值语句 过过程程赋赋值值语语句句出出现现在在initial和和always块块语语句句中中,赋值符号是赋值符号是“=”,格式为,格式为赋值变量赋值变量 = 表达式;表达式; 在过程赋值语句中,赋值号在过程赋值语句中,赋值号“=”左边的赋值变左边的赋值变量必须是量必须是reg(寄存器)型变量,其值在该语句结束(寄存器)型变量,其值在该语句结束即可得到即可得到。如果一个块语句中包含若干条过程赋值语。如果一个块语句中包含若干条过程赋值语句,那么这些过程赋值语句是按照语句编写的句,那么这些过程赋值语句是按

33、照语句编写的顺序顺序由由上至下一条一条地上至下一条一条地执行执行,前面的语句没有完成,后面,前面的语句没有完成,后面的语句就不能执行,就象被阻塞了一样。因此,过程的语句就不能执行,就象被阻塞了一样。因此,过程赋值语句也称为阻塞赋值语句。赋值语句也称为阻塞赋值语句。 4. 非阻塞赋值语句非阻塞赋值语句 非非阻阻塞塞赋赋值值语语句句也也是是出出现现在在initial和和always块块语语句中,赋值符号是句中,赋值符号是“=”,格式为格式为赋值变量赋值变量 = 表达式;表达式; 在非阻塞赋值语句中,赋值号在非阻塞赋值语句中,赋值号“=”左边的赋值左边的赋值变量也必须是变量也必须是reg型变量型变量

34、,其值其值不象在过程赋值语句不象在过程赋值语句那样,语句结束时即刻得到,而那样,语句结束时即刻得到,而在该块语句结束才可在该块语句结束才可得到得到。 【例】上升沿触发的【例】上升沿触发的D触发器的的源程序。触发器的的源程序。moduleD_FF(q,d,clock);inputd,clock;outputq;regq;always(posedge clock) q = d;endmoduleq是触发器的输出,属于是触发器的输出,属于reg型变量;型变量;d和和clock是输入,是输入,属于属于wire型变量(由隐含规则定义)。型变量(由隐含规则定义)。 2.3.2 条件语句条件语句条件语句包含

35、条件语句包含if语句和语句和case语句,它们都是顺序语句,它们都是顺序语句,应放在语句,应放在always块中。块中。1. if语句语句完整的完整的Verilog HDL的的if语句结构如下:语句结构如下:if (表达式表达式) begin 语句语句; endelse if (表达式表达式) begin 语句语句; endelse begin 语句语句; end【例】【例】8线线-3线优先编码器的设计线优先编码器的设计 输入输入输出输出a0 a1 a2 a3 a4 a5 a6 a7y0 y1 y2x x x x x x x 01 1 1x x x x x x 0 10 1 1x x x x

36、x 0 1 11 0 1x x x x 0 1 1 10 0 1x x x 0 1 1 1 11 1 0x x 0 1 1 1 1 10 1 0x 0 1 1 1 1 1 11 0 00 1 1 1 1 1 1 10 0 0Verilog HDL源代码如下源代码如下moduleexample_2_6(y,a);input 7:0a;output 2:0y;reg 2:0y;always (a)beginif(a7)y=3b111; else if(a6)y=3b110;else if(a5)y=3b101;else if(a4)y=3b100;else if(a3)y=3b011;else i

37、f(a2)y=3b010;else if(a1)y=3b001;else y=3b000;endendmodule2. case语句语句 case语语句句是是一一种种多多分分支支的的条条件件语语句句,完完整整的的case语句的语句的格式格式为为case (表达式表达式) 选择值选择值1 : 语句语句1; 选择值选择值2 : 语句语句2; 选择值选择值n : 语句语句n; default :语句语句n+1;endcase【例】用【例】用case语句描述语句描述4选选1数据选择器。数据选择器。 moduleexample_4_7(z,a,b,c,d,s1,s2);inputs1,s2;inputa

38、,b,c,d;outputz;regz;always (s1 or s2 or a or b or c or d)beginabcds1s2数数据据选选择择器器z case (s1,s2) 2b00:z=a;2b01:z=b;2b10:z=c;2b11:z=d; default: z=a; endcaseendendmodule case语句还有两种变体语句形式,即语句还有两种变体语句形式,即casez和和casex语句。语句。casez和和casex语句与语句与case语句的格语句的格式完全相同,它们的区别是:在式完全相同,它们的区别是:在casez语句中,如语句中,如果分支表达式某些位的值

39、为高阻果分支表达式某些位的值为高阻z,那么对这些位,那么对这些位的比较就不予以考虑,只关注其他位的比较结果。的比较就不予以考虑,只关注其他位的比较结果。 在在casex语句中,把不予以考虑的位扩展到未知语句中,把不予以考虑的位扩展到未知x,即不考虑值为高阻,即不考虑值为高阻z和未知和未知x的那些位,只关注其的那些位,只关注其他位的比较结果。他位的比较结果。 2.3.3 循环语句循环语句 循环语句包含循环语句包含for语句、语句、repeat语句、语句、while语句语句和和forever语句语句4种。种。1. for语句语句for语句的语法格式为语句的语法格式为for (循循环环指指针针 =

40、初初值值; 循循环环指指针针 终终值值; 循循环环指指针针 = 循环指针循环指针 + 步长值步长值) begin 语句语句; end【例】【例】8位奇偶校验器的描述。位奇偶校验器的描述。 moduleexample_2_8(a, out);input 7:0a;outputout;regout;integern;always(a)begin out = 0; for (n = 0; n =b) max=a;elsemax=b; endendfunction函数调用的格式如下函数调用的格式如下函数名(关联参数表);函数名(关联参数表); 函函数数调调用用一一般般是是出出现现在在模模块块、任任务务

41、或或函函数数语语句句中中。通通过过函函数数的的调调用用来来完完成成某某些些数数据据的的运运算算或或转转换。换。例如,调用例编制的求最大值的函数例如,调用例编制的求最大值的函数peak=max(data,peak); 其中,其中,data和和peak是与函数定义的两个参数是与函数定义的两个参数a、b关联的关联参数。通过函数的调用,求出关联的关联参数。通过函数的调用,求出data和和peak中的最大值,并用函数名中的最大值,并用函数名max返回。返回。 2.4 不同抽象级别的不同抽象级别的Verilog HDL模型模型 Verilog HDL是是一一种种用用于于逻逻辑辑电电路路设设计计的的硬硬件件

42、描描述述语语言言。用用Verilog HDL描描述述的的电电路路称称为为该该设设计计电电路路的的Verilog HDL模型。模型。 Verilog HDL具有具有行为描述行为描述和和结构描述结构描述功能。功能。 行行为为描描述述是是对对设设计计电电路路的的逻逻辑辑功功能能的的描描述述,并并不不用用关关心心设设计计电电路路使使用用那那些些元元件件以以及及这这些些元元件件之之间间的连接关系。的连接关系。 行行为为描描述述属属于于高高层层次次的的描描述述方方法法,在在Verilog HDL中中,行行为为描描述述包包括括系系统统级级(System Level)、算算法法级级(Algorithm Lev

43、el)和和寄寄存存器器传传输输级级(RTL:Register Transfer Level)等)等3种抽象级别。种抽象级别。 结结构构描描述述是是对对设设计计电电路路的的结结构构进进行行描描述述,即即描描述述设设计计电电路路使使用用的的元元件件及及这这些些元元件件之之间间的的连连接接关系。关系。 结结构构描描述述属属于于低低层层次次的的描描述述方方法法,在在Verilog HDL,结结构构描描述述包包括括门门级级(Gate Level)和和开开关关级级(Switch Level)2种抽象级别。种抽象级别。 在在Verilog HDL的学习中,应重点掌握高层次的学习中,应重点掌握高层次描述方法,

44、但门级描述在一些电路设计中也有一描述方法,但门级描述在一些电路设计中也有一定的实际意义。定的实际意义。2.4.1 Verilog HDL门级描述门级描述 用用于于门门级级描描述述关关键键字字包包括括:not(非非门门)、and(与与门门)、nand(与与非非门门)、or(或或门门)、nor(或或非非门门)、xor(异异或或门门)、xnor(异异或或非非门门)、buf(缓缓冲冲器器)以以及及bufif1、bufif0、notif1、notif0等等各种三态门。各种三态门。门级描述语句格式为门级描述语句格式为门类型关键字门类型关键字 (端口列表);(端口列表);其中,其中,“例化门的名称例化门的名

45、称”是用户定义的标识符,属于是用户定义的标识符,属于可选项;端口列表按:可选项;端口列表按:(输出,输入,使能控制端)(输出,输入,使能控制端)的顺序列出。的顺序列出。 例如例如nand nand2(y,a,b);/2输入端与非门输入端与非门xor myxor(y,a,b);/异或门异或门bufif0 mybuf(y,a,en);/低电平使能的三态缓冲器低电平使能的三态缓冲器 【例】采用结构描述方式描述下图所示的硬件电路【例】采用结构描述方式描述下图所示的硬件电路 。S2S3S1moduleexample_2_11(out,a,b,c);input a,b,c;outputout;wire s

46、1,s2,s3;not (s1,a);nand (s2,c,s1);nand(s3,a,b);nand(out,s2,s3);endmodule 2.4.2 Verilog HDL的行为级描述的行为级描述 Verilog HDL的的行为级描述行为级描述是最能体现是最能体现EDA风格风格的硬件描述方式,它既可以描述简单的逻辑门,也可的硬件描述方式,它既可以描述简单的逻辑门,也可以描述复杂的数字系统乃至微处理器;既可以描述组以描述复杂的数字系统乃至微处理器;既可以描述组合逻辑电路,也可以描述时序逻辑电路。合逻辑电路,也可以描述时序逻辑电路。 【例】【例】3线线-8线译码器的设计。线译码器的设计。

47、moduleexample_2_12(a,b,c,y,en);inputa,b,c,en;output 7:0 y;reg 7:0 y;always (en or a or b or c)beginif (en) y = 8b11111111;else begincase(c,b,a) 3b000:y=8b11111110;3b001:y=8b11111101;3b010:y=8b11111011;3b011:y=8b11110111;3b100:y=8b11101111;3b101:y=8b11011111;3b110:y=8b10111111;3b111:y=8b01111111; end

48、case endendendmodule 【例】【例】8D锁存器的设计。锁存器的设计。 moduleexample_2_13(d,q,en);inputen;input 7:0d;output 7:0q;reg 7:0 q;always (en or d)beginif (en) q = 8bzzzzzzzz;else q = d; endendmodule【例】异步清除十进制加法计数器的设计。【例】异步清除十进制加法计数器的设计。 moduleexample_2_14(clr,clk,cnt,out);inputclr,clk;output3:0 out;outputcnt;reg 3:0out;regcnt;always (posedge clk or posedge clr) begin if (clr) begin out=4b0000; cnt=0; end else if (out=4b1001) begin out=4b0000; cnt=1; end else begin out=out+1; cnt=0; end endendmodule

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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