数电第4版 课件 第9章课件 3 VerilogHDL语言基础_第1页
数电第4版 课件 第9章课件 3 VerilogHDL语言基础_第2页
数电第4版 课件 第9章课件 3 VerilogHDL语言基础_第3页
数电第4版 课件 第9章课件 3 VerilogHDL语言基础_第4页
数电第4版 课件 第9章课件 3 VerilogHDL语言基础_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

9.3VerilogHDL语言基础9.3.1VerilogHDL的基本结构9.3.2VerilogHDL语言要素9.3.3VerilogHDL行为语句

硬件描述语言HDL(HardwareDescriptionLanguage)是一种用来描述数字电路和系统的语言。利用HDL可以完成数字电路系统的描述、仿真验证,经过自动综合工具转换到门级电路网表。再用FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。

硬件描述语言主要有三大用途:建立描述数字系统的标准文档;数字系统的仿真;逻辑综合(Synthesis)。9.3.1VerilogHDL的基本结构

目前常用的硬件描述语言有VerilogHDL和VHDL两种。从学习的角度来看,VerilogHDL比较简单,与C语言较接近,容易掌握;从使用的角度看,支持VerilogHDL的半导体厂家也比支持VHDL的多,因此,从发展趋势看VerilogHDL比VHDL有更宽广的应用前途。综合(Synthesis)就是利用EDA工具把VerilogHDL代码转变成相应的逻辑电路(门级网表),再通过布局布线工具自动地转变为某种具体器件和工艺的电路布线结构。9.3.1VerilogHDL的基本结构

(a)计算机程序的编译流程(b)HDL语言综合流程VerilogHDL模型(1)系统级(system-level):用语言提供的高级结构能够实现待设计模块的外部性能的模型;9.3.1VerilogHDL的基本结构

(2)算法级(algorithm-level):用语言提供的高级结构能够实现算法运行的模型;(3)RTL级(registertransferlevel):描述数据在寄存器之间的流动和如何处理、控制这些数据流动的模型;(4)门级(gate-level):描述逻辑门以及逻辑门之间连接的模型;(5)开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。一个简单的Verilog代码moduleMUX21(Y,A,B,SEL);inputA,B,SEL;outputY;regY;always@(SELorAorB) if(!SEL) Y=A; else Y=B;endmodule9.3.1VerilogHDL的基本结构

VerilogHDL模块结构位于module和endmodule声明语句之间,每个VerilogHDL模块程序包括:端口列表、端口说明、数据类型说明和逻辑功能定义。有时,还包括一些有用的注释。9.3.1VerilogHDL的基本结构

模块是VerilogHDL的基本描述单位,用于描述某个设计的功能、结构以及与其它模块连接的外部端口。1.端口说明端口是模块与外部电路连接的通道,相当于芯片的外部引脚。端口包括以下3种类型:9.3.1VerilogHDL的基本结构

(1)input:输入端口,即规定数据只能由此端口被读入模块实体中。(2)output:输出端口,即规定数据只能由此端口从模块实体向外输出。(3)inout:双向端口,即规定数据既可从此端口输出,也可以从此端口输入。input端口名1,端口名2,…;output端口名1,端口名2,…;inout端口名1,端口名2,…;input[msb:lsb]端口名1,端口名2,…;

输入输出端口如果没有申明数据类型,则默认为wire类型。9.3.1VerilogHDL的基本结构

2.数据类型说明用来指定模块内用到的数据对象的类型。常用的有连线型和寄存器型。input端口只能是连线(wire)型数据类型;output端口可以是连线型或寄存器(reg)型数据类型;inout端口也只能声明为连线型数据类型。wireA,B,C,D;//定义信号A、B、C、D为连线型reg[3:0]OUT;//定义信号OUT的数据类型为4位寄存器型9.3.1VerilogHDL的基本结构

3.逻辑功能定义通常用“assign”连续赋值语句或者“always”过程块赋值语句描述逻辑功能。(1)用“assign”声明语句,如:assignF=A&B;(2)用“always”块,如:这种方法语句很简单,只需在assign后面加一个赋值表达式即可。always@(SELorAorB) if(!SEL) Y=A; else Y=B;endmodule“assign”语句是描述组合逻辑最常用的方法之一,而“always”块既可用于描述组合逻辑,也可描述时序逻辑。9.3.1VerilogHDL的基本结构

4.注释在VerilogHDL程序中有两种形式的注释:单行注释:以“//”开始到本行结束,不允许续行;多行注释:以“/*”开始,到“*/”结束。注释能够大大提高程序的可读性,在初学阶段就要养成撰写注释的习惯。1.词法9.3.2VerilogHDL语言要素(1)标识符VerilogHDL中的标识符可以是任意一组字母、数字以及“$”符号和“_”(下划线)的组合,但是标识符的第一个字符必须是字母或下划线。标识符区分大小写。(2)空白符空白符包括:空格、tab、换行符及换页符。空白符使代码层次分明、阅读方便。综合时,空白符被忽略。但是,在字符串中空白和制表符会被认为是有意义的字符。1.词法9.3.2VerilogHDL语言要素(3)数字VerilogHDL有4种基本数值,或者说任何变量都可能有1、0、x和z等4种不同逻辑状态的取值。0:含义有4个,即二进制数0、逻辑0、低电平、事件为伪的判断结果。1:含义有4个,即二进制数1、逻辑1、高电平、事件为真的判断结果。x或X:不确定或者未知的逻辑状态。z或Z:高阻态。9.3.2VerilogHDL语言要素常数的表示方式为:(4)关键字VerilogHDL内部已经使用的词称为关键字或保留字。这些关键字用户不能随便使用。在编写程序时,变量的定义不要与这些关键词冲突。所有的关键字都是小写。8‘b01011100 //位宽为8位的二进制数<对应的二进制数的位宽'><进制><数字>8'hd4//位宽为8位的十六进制数d4H9.3.2VerilogHDL语言要素2.数据类型(1)连线(wire)型连线型变量的特点是输出的值紧跟输入值的变化而变化。连线型变量不能存储值,而且必须受到驱动器的驱动。连线型变量有两种驱动方式,一种是在结构描述中将它连接到一个逻辑门或模块的输出端,另一种是用连续赋值语句assign对其进行赋值。如果输入/输出信号没有明确指定数据类型时都被默认为连线型。wire型变量的格式:例如:wire[n-1:0]数据名1,数据名2,…,数据名n;wire[7:0]DI;//定义8位wire型向量wireA;//定义了一个1位的wire型数据9.3.2VerilogHDL语言要素(2)寄存器(reg)型寄存器型变量对应的是具有状态保持作用的硬件电路,如触发器、锁存器等。寄存器型变量和连线型变量的区别:寄存器型变量保持最后一次的赋值,而连线型变量需有持续的驱动。寄存器型数据的格式:reg[n-1:0]数据名1,数据名2,…数据名n;在“always”模块内被赋值的每一个信号都必须定义成reg型。例如:regA,B; //定义了两个reg型变量reg[7:0]QOUT;//定义QOUT为8位宽的reg型变量9.3.2VerilogHDL语言要素(3)参数型(parameter)以下时常见的参数型变量声明语句示例:参数型数据格式:parameter参数名1=表达式1,参数名2=表达式2,…;parameterS0=2'b00;parameterS1=2'b01;parameterS2=2'b10;parameterS3=2'b11;9.3.2VerilogHDL语言要素3.运算符VerilogHDL语言参考了C语言中大多数运算符的语义和句法。运算符类型运算符符号运算功能描述算术运算符+加法运算符或正值运算符-减法运算符或者负值运算符*乘法运算符/除法运算符%取模运算符逻辑运算符&&逻辑与||逻辑或!逻辑非9.3.2VerilogHDL语言要素运算符类型运算符符号运算功能描述按位运算符~按位取反|按位或&按位与^按位异或~^按位同或关系运算符>大于<小于<=小于或等于>=大于或等于==等于!=不等于9.3.2VerilogHDL语言要素运算符类型运算符符号运算功能描述缩位运算符&与~&与非|或~|或非^异或~^同或移位运算符<<左移>>右移条件运算符?:条件位拼接运算符{,}拼接9.3.2VerilogHDL语言要素(8)各运算符的优先级。运算符类型运算符符号优先级补集!,~最高优先级算术*,/,%,+,-移位<<,>>关系<,<=,>,>=等式==,!=缩减&,~&,^,^~,|,~|逻辑&&,||条件?:最低优先级9.3.2VerilogHDL语言要素【例9.3-2】关系运算符应用示例。moduleRELATION(A,B,Y);input[5:0]A,B;output[5:0]Y;reg[5:0]Y;always@(A,B)beginY[0]=(A>B)?1:0;Y[1]=(A>=B)?1:0;Y[2]=(A<B)?1:0;Y[3]=(A<=B)?1:0;Y[4]=(A!=B)?1:0;Y[5]=(A==B)?1:0;

endendmodule9.3.3VerilogHDL行为语句行为描述语句包括过程语句、赋值语句、条件语句等,以下介绍这3种常用的语句。1.always过程语句

always过程语句后跟着的过程块可以不断重复执行,只要触发条件满足就可以,即满足一次执行一次,而且是可综合的。always@(敏感信号列表)begin//过程赋值//if-else,case等选择语句end9.3.3VerilogHDL行为语句

敏感信号列表的作用是用来激活always过程语句的执行;只要敏感信号列表中某个信号发生变化,就会引发块内语句的执行。敏感信号可以分为两种类型:一种为电平敏感型,一种为边沿敏感型。@(A)//当信号A的值发生变化时敏感信号列表主要有以下几种格式:@(AorB)//当信号A或B的值发生变化时@(posedgeCLK) //当CLK上升沿到来时@(negedgeCLK) //当CLK下降沿到来时@(posedgeCLKornegedgeRST) //当CLK的上升沿或RST的下降沿到来时9.3.3VerilogHDL行为语句【例9.3-4】4选1数据选择器的描述。moduleMUX_41(Y,A,B,C,D,SEL);inputA,B,C,D;input[1:0]SEL;outputY;regY;always@(AorBorCorDorSEL)case(SEL) 2'b00:Y=A;

2'b01:Y=B;2'b10:Y=C;

2'b11:Y=D;

default:Y=2'bx;

endcaseendmodule//always过程中只允许对寄存器型的信号进行赋值。9.3.3VerilogHDL行为语句【例9.3-5】

同步置数、同步清零的计数器。moduleCOUNT(CLK,CLR,LD,D,Q);input[7:0]D;inputLD,CLR,CLK;output[7:0]Q;reg[7:0]Q;always@(posedgeCLK)

beginif(!CLR)Q<=0;

elseif(!LD)Q<=D;

elseQ<=Q+1;

endendmodule//CLK上升沿触发//同步清零,低电平有效//同步置数,低电平有效//8位二进制加法计数器9.3.3VerilogHDL行为语句思考1:异步清零如何描述?【例9.3-5】具有异步清零的D触发器VerilogHDL代码。moduleDFFC(D,CLK,RD,Q);inputD,CLK,RD;outputregQ;always@(posedgeCLKornegedgeRD)beginif(!RD)Q<=1'd0;elseQ<=D; endendmodule思考2:异步清零信号RD为电平有效,敏感信号表中能否改为@(posedgeCLKorRD)?9.3.3VerilogHDL行为语句2.持续赋值语句

持续赋值语句用来描述组合逻辑,它只能对连线型变量进行赋值,不能对寄存器型变量进行赋值。【例9.3-6】用持续赋值语句实现4位全加器。assign连线型变量名=赋值表达式;moduleADDR_4(A,B,CI,SUM,CO);input[3:0]A,B;inputCI;output[3:0]SUM;outputCO;assign{CO,SUM}=A+B+CI;endmodule9.3.3VerilogHDL行为语句3.过程赋值语句

过程赋值是在always语句内的赋值,它只能对寄存器数据类型的变量赋值。过程赋值语句分为阻塞型赋值和非阻塞赋值两种。(1)阻塞赋值方式

阻塞赋值用“=”进行赋值。如果一个变量通过阻塞赋值语句赋值,则这个新赋的值会被该块中所有的后续语句使用。如果在一个语句块中有多条阻塞赋值语句,则前面赋值语句没有完成之前,后面赋值语句不能被执行,仿佛被阻塞一样。9.3.3VerilogHDL行为语句【例9.3-7】阻塞赋值举例。moduleBLOCK(C,B,A,CLK);inputCLK,A;outputC,B;regC,B;always@(posedgeCLK)begin B=A;

C=B;

endendmodule//阻塞赋值如果一个变量通过阻塞赋值语句赋值,则这个新赋的值会被该块中所有的后续语句使用。9.3.3VerilogHDL行为语句(2)非阻塞型赋值方式

非阻塞型赋值用“<=”进行赋值。always块中所有非阻塞赋值语句在求值时所用的值全都是进入always块时各变量已具有的值。非阻塞的含义为,在执行当前语句时,对其它语句的执行一律不加限制,不加阻塞。【例9.3-8】

非阻塞赋值举例。moduleNON_BLOCK(C,B,A,CLK);outputC,B;inputCLK,A;regC,B;always@(posedgeCLK)begin

B<=A;

C<=B;

enden

温馨提示

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

评论

0/150

提交评论