版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字系统设计与VerilogHDL
(第7版)第5章Verilog语言要素5.1Verilog语言要素5.2常量5.3数据类型5.4参数5.5向量5.6运算符5.1概述Verilog程序由符号流构成,符号包括:空白符(Whitespace)注释(Comments)操作符(Operators)数字(Numbers)字符串(Strings)标识符(Identifiers)关键字(Keywords)等空白符和注释空白符(Whitespace)空白符包括:空格、tab、换行和换页。空白符使代码错落有致,阅读起来更方便。在综合时空白符被忽略。注释(Comment)◆单行注释:以“//”开始到本行结束◆多行注释:多行注释以“/*”开始,到“*/”结束标识符(Identifiers)标识符(Identifiers)Verilog中的标识符可以是任意一组字母、数字以及符号“$”和“_”(下划线)的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。countCOUNT//COUNT与count是不同的_A1_d2//以下划线开头R56_68FIVE关键字(Keywords)Verilog语言内部已经使用的词称为关键字或保留字,这些保留字用户不能作为变量或节点名字使用。关键字都是小写的。整数实数字符串5.2常量程序运行中,值不能被改变的量称为常(constants)。Verilog中的常量主要有如下3种类型:整数按如下方式书写:
+/-<size>'<base><value>即+/-<位宽>'<进制><数字>size为对应二进制数的宽度;base为进制;value是基于进制的数字序列。进制有如下4种表示形式:二进制(b或B)十进制(d或D或缺省)十六进制(h或H)八进制(o或O)整数(integer)8'b11000101//位宽为八位的二进制数110001018'hd5//位宽为八位的十六进制数d5;5'O27//5位八进制数4'D2//4位十进制数24'B1x_01//4位二进制数1x015'Hx//5位x(扩展的x),即xxxxx4'hZ//4位z,即zzzz8□'h□2A/*在位宽和'之间,以及进制和数值之间允许出现空格,但'和进制之间,数值间是不允许出现空格的,比如8'□h2A、8'h2□A等形式都是不合法的写法*/整数(integer)实数(Real)有下面两种表示法。◆十进制表示法。例如:2.00.1 //以上2例是合法的实数表示形式2. //非法:小数点两侧都必须有数字◆科学计数法。例如:43_5.1e2 //其值为43510.09.6E2 //960.0(e与E相同)5E-4 //0.0005实数(Real)字符串(Strings)字符串是双引号内的字符序列。字符串不能分成多行书写。例如:"INTERNALERROR"字符串的作用主要是用于仿真时,显示一些相关的信息,或者指定显示的格式。5.3数据类型Verilog有下面四种基本的逻辑状态。0:低电平、逻辑0或逻辑非1:高电平、逻辑1或“真”x或X:不确定或未知的逻辑状态z或Z:高阻态Verilog中的所有数据类型都在上述4类逻辑状态中取值,其中x和z都不区分大小写,也就是说,值0x1z与值0X1Z是等同的。数据类型(DataType)是用来表示数字电路中的物理连线、数据存储和传输单元等物理量的。数据类型Verilog中的变量分为如下两种数据类型:net型variable型net型中常用的有wire、tri;variable型包括reg、integer等。注意:在Verilog-1995标准中,variable型变量称为register型;在Verilog-2001标准中将register一词改为了variable,以避免初学者将register和硬件中的寄存器概念混淆起来。5.3.1net型Net型数据相当于硬件电路中的各种物理连接,其特点是输出的值紧跟输入值的变化而变化。对连线型有两种驱动方式,一种方式是在结构描述中将其连接到一个门元件或模块的输出端;另一种方式是用持续赋值语句assign对其进行赋值。wire是最常用的Net型变量。wire型变量的定义格式如下:wire数据名1,数据名2,……数据名n;例如:wirea,b;//定义了两个wire型变量a和b5.3.2Variable型variable型变量必须放在过程语句(如initial、always)中,通过过程赋值语句赋值;在always、initial等过程块内被赋值的信号也必须定义成variable型。注意:variable型变量并不意味着一定对应着硬件上的一个触发器或寄存器等存储元件,在综合器进行综合时,variable型变量会根据具体情况来确定是映射成连线还是映射为触发器或寄存器。reg型变量是最常用的一种variable型变量。reg数据名1,数据名2,……数据名n;例如:rega,b;//定义了两个reg型变量a,breg[7:0]qout;//定义qout为8位宽的reg型向量reg[8:1]qout;5.4参数(parameter)在Verilog语言中,用参数parameter来定义符号常量,即用parameter来定义一个标志符代表一个常量。参数常用来定义时延和变量的宽度。其定义格式如下:parameter参数名1=表达式1,参数名2=表达式2,参数名3=表达式3,……;例如:parameterSEL=8,CODE=8'ha3;【例5.3】采用参数定义的数据比较器modulecompare_w(a,b,larger,equal,less);parameterSIZE=6; //参数定义input[SIZE-1:0]a,b;outputlarger,equal,less;wirelarger,equal,less;assignlarger=(a>b);assignequal=(a==b);assignless=(a<b);endmodule【例5.4】采用参数定义的二进制计数器modulecount_w(en,clk,reset,out);inputclk,reset,en;parameterWIDTH=8; //参数声明Outputreg[WIDTH-1:0]out;always@(posedgeclkornegedgereset)if(!reset)out=0;elseif(en)out=out+1;endmodule【例5.5】采用参数定义的加法器moduleadd_w//模块声明采用Verilog-2001格式#(parameterMSB=15,LSB=0) //参数声明,注意没有分号;(input[MSB:LSB]a,b,output[MSB+1:LSB]sum);assignsum=a+b;endmoduleVerilog-2001中的参数声明【例5.7】采用了局部参数localparam的加法器moduleadd_localp#(parameterMSB=15,LSB=0) //parameter参数定义(input[MSB:LSB]a,b,output[HSB:LSB]sum);localparamHSB=MSB+1; //localparam参数定义assignsum=a+b;endmodulelocalparam局部参数5.5向量1.标量与向量宽度为1位的变量称为标量,如果在变量声明中没有指定位宽,则默认为标量(1位)。举例如下:
wirea; //a为标量
regclk; //clk为标量reg型变量线宽大于1位的变量(包括net型和variable型)称为向量(vector)。向量的宽度用下面的形式定义:
[msb:lsb]比如:
wire[3:0]bus;//4位的总线2.位选择和域选择在表达式中可任意选中向量中的一位或相邻几位,分别称为位选择和域选择,例如:A=mybyte[6];//位选择B=mybyte[5:2];//域选择再比如:reg[7:0]a,b;reg[3:0]c;regd;d=a[7]&b[7]; //位选择c=a[7:4]+b[3:0]; //域选择5.6运算符(Operators)1.算术运算符(Arithmeticoperators)常用的算术运算符包括:+ 加- 减* 乘/ 2.逻辑运算符(Logicaloperators)&& 逻辑与|| 逻辑或! 逻辑非3.位运算符(Bitwiseoperators)位运算,即将两个操作数按对应位分别进行逻辑运算。~ 按位取反& 按位与| 按位或^ 按位异或^~,~^ 按位同或(符号^~与~^是等价的)4.关系运算符(Relationaloperators)< 小于<= 小于或等于> 大于>= 大于或等于5.等式运算符(EqualityOperators)== 等于!= 不等于=== 全等!== 不全等6.缩减运算符(Reductionoperators)& 与~& 与非| 或~| 或非^ 异或^~,~^ 同或7.移位运算符(shiftoperators)>> 右移<< 左移8.指数运算符**Verilog-2001标准中增加了指数运算符“**”,执行指数运算,一般使用更多的是底数为2的指数运算9.条件运算符(conditionaloperators)?:三目运算符,其定义方式如下:signal=condition?true_expression:false_expression;即:信号=条件?表达式1:表达式2;当条件成立时,信号取表达式1的值,反之取表达式2的值。10.位拼接运算符(concatenationoperators){}该运算符将两个或多个信号的某些位拼接起来。{信号1的某几位,信号2的某几位,……,信号n的某几位}运算符的优先级在书写程序时建议用括号()来控制运算的优先级
习题55.1下列标识符哪些是合法的,哪些是错误的?Cout,8sum,\a*b,_data,\wait,initial,$latch5.2下列数字的表示是否正确?6'd18,'Bx0,5'b0x110,'da30,10'd2,'hzF5.3reg型和wire型变量有什么本质的区别?5.4如果wire型变量没有被驱动,其值为多少?5.5reg型变量的初始值一般是什么?习题55.6定义如下的变量和常量:(1)定义一个名为count的整数;(2)定义一个名为ABUS的8位wire总线;(3)定义一个名为address的16位reg型变量,并将该变量的值赋为十进制数128;(4)定义参数Delay_time,参数值为8;(5)定义一个名为DELAY的时间变量;(6)定义一个32位的寄存器MYREG;(7)定义一个容量为128,字长为32位的存储器MYMEM;实验与设计5-1用altpll锁相环宏模块实现倍频和分频实验要求:基于QuartusPrime软件,用altpll锁相环模块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南申论模拟108
- 湖南申论模拟215
- 2024年银行个人商业用房贷款抵押借款合同范本
- 2013年6月29日上午面试真题
- 甘肃省公务员面试真题汇编3
- 建筑工程有限公司年度责任目标任务及考核方案
- 山西公务员面试模拟27
- 2024年工资集体协商要约书(范本)
- 地方公务员浙江申论171
- 河北省公务员面试模拟127
- 酒店行业数据安全与隐私保护
- 小班数学《神奇的魔术师》
- 国家开放大学《科学与技术》形考任务1-4参考答案
- 厂房泄爆面积计算
- 第四章-体育旅游市场
- 工程费率招标文件模板
- 口腔修复学:全口义齿课件
- 宫颈及阴道上药的护理(妇产科护理课件)
- 人教精通版英语五上Unit5《Isthisyourschoolbag》教案
- 二十四种基本形状
- 腹腔镜操作流程scmc
评论
0/150
提交评论