(精品)第四章_Verilog_HDL行为语句.ppt
-
资源ID:84703222
资源大小:793KB
全文页数:36页
- 资源格式: PPT
下载积分:16金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
(精品)第四章_Verilog_HDL行为语句.ppt
芜湖职业技术学院第第4章章 Verilog HDL行为语句行为语句赋值语句赋值语句(assign、=、=)条件语句条件语句(if-else、case)循循 环环 语语 句句(for、forever、repeat、while)过程语句过程语句(initial、always)块语句块语句(begin-end、fork-join)芜湖职业技术学院 本章介绍Verilog HDL的行为语句,要充分理解硬件描述语言和硬件电路的关系,熟练掌握常用的行为语句,基本的行为语句就可以完成绝大多数电路与系统设计,要对常用语句用心专研、深入理解,对完成硬件电路设计将是非常有用的。本章概述芜湖职业技术学院4.1 赋值语句赋值语句 Verilog HDL赋值语句包括连续赋值语句和过程赋值语赋值语句包括连续赋值语句和过程赋值语句两种。句两种。1.连续赋值语句连续赋值语句数据流的描述是采用连续赋值语句数据流的描述是采用连续赋值语句(assign)语句来实现的,语法如下:语句来实现的,语法如下:assign net_type=表达式;表达式;连续赋值语句用于组合逻辑的建模。连续赋值语句用于组合逻辑的建模。等式左边是等式左边是wire类类型的变量型的变量,等式右边可以是常量,或是由运算符如逻辑运算,等式右边可以是常量,或是由运算符如逻辑运算符、算术运算符参与的表达。例如,符、算术运算符参与的表达。例如,wire 3:0 Z,Preset,Clear;/线网说明线网说明assign Z=Preset&Clear;/连续赋值语句连续赋值语句 芜湖职业技术学院注意两个方面的问题:注意两个方面的问题:(1)连续赋值语句的执行是:只要右边表达式任一个变量有)连续赋值语句的执行是:只要右边表达式任一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号。变化,表达式立即被计算,计算的结果立即赋给左边信号。(2)连续赋值语句之间是并行语句,因此与位置顺序无关。)连续赋值语句之间是并行语句,因此与位置顺序无关。2.过程赋值语句过程赋值语句 过程赋值语句多用于对reg型变量进行赋值。过程赋值有阻塞赋值和非阻塞赋值两种方式。阻塞语句是顺序执行的,在该语句结束时就立即完成赋值,那么在前面的语句没有完成之前,后面的就不能被执行,仿佛被阻塞了一样,常用于组合逻辑电路设计中;而非阻塞语句是同时执行的,在整个过程块结束时才完成赋值操作,即被赋值的变量的值不是立刻就改变的,常用于时序逻辑电路设计中。芜湖职业技术学院阻塞赋值语句,从字面上理解,该条语句阻塞了下阻塞赋值语句,从字面上理解,该条语句阻塞了下面语句的执行,面语句的执行,“=”用于阻塞的赋值,凡是在组用于阻塞的赋值,凡是在组合逻辑(如在合逻辑(如在assign语句中)赋值的请用阻塞赋值。语句中)赋值的请用阻塞赋值。非阻塞赋值操作符用小于等于号(即非阻塞赋值操作符用小于等于号(即=)表示,只)表示,只能用于对寄存器类型变量进行赋值,因此能用于对寄存器类型变量进行赋值,因此只能只能用在用在“initial”和和“always”等过程块中,不能用在等过程块中,不能用在assign语句中。语句中。阻塞赋值非阻塞赋值注:在同一个进程块中,最好不要同时用阻塞赋值和非阻塞赋值语句。芜湖职业技术学院4.2 条件语句条件语句 条件语句有if-else语句和case语句两种,它们都是顺序语句,应放在always块内。1.if-else语句语句 格式与C语言中的if-else语句类似,使用方法有三种:(1)If(表达式)语句1;(2)If(表达式)语句1;else 语句2;(3)if(条件表达式1)语句1;else if(条件表达式2)语句2;else if(条件表达式3)语句3;else 语句n;芜湖职业技术学院例如例如 if(Sum 60)begin Grade=C;Total_C=Total _c+1;endelse if(Sum 75)begin Grade=B;Total_B=Total_B+1;endelse begin Grade=A;Total_A=Total_A+1;end“表达式”一般为逻辑表达式或关系表达式,也可能是一位的变量。条条件件表表达达式式必必须须总总是是被被括括起起来来的的。对表达式的值进行判断,若为0,x或z,按“假”处理;若为1,按“真”处理,执行指定语句。芜湖职业技术学院2.case语句语句 相对于if语句只有两个分支而言,case语句是一种多分支语句,故case语句可用于多条件译码电路,如:描述译码器、数据选择器、状态机及微处理器的指令译码等。case语句的使用格式:语句的使用格式:case (敏感表达式敏感表达式)值值1:语句语句1;值值2:语句语句2;值值n:语句语句n;default:语句语句n+1;endcase 当当敏敏感感表表达达式式的的值值为为值值1时时,执执行行语语句句1;为为n时时执执行行语语句句n;如如果果敏敏感感表表达达式式的的值值与与列列出出的的值值都都不不相相同同的的话话,则则执执行行default后后面面的语句。的语句。建建议议:case的的默默认认项项必必须须写写,防止产生锁存器。防止产生锁存器。芜湖职业技术学院例如例如 begincase(HEX)4b0001:LED=7b1111001;/14b0010:LED=7b0100100;/24b0011:LED=7b0110000;/34b0100:LED=7b0011001;/44b0101:LED=7b0010010;/54b0110:LED=7b0000010;/64b0111:LED=7b1111000;/74b1000:LED=7b0000000;/84b1001:LED=7b0010000;/94b1010:LED=7b0001000;/A4b1011:LED=7b0000011;/B4b1100:LED=7b1000110;/C4b1101:LED=7b0100001;/D4b1110:LED=7b0000110;/E4b1111:LED=7b0001110;/Fdefault:LED=7b1000000;/0Endcase 芜湖职业技术学院3.条件语句使用要点条件语句使用要点 在在使使用用条条件件语语句句时时,应应注注意意列列出出所所有有条条件件分分支支,否否则则,编编译译器器认认为为条条件件不不满满足足时时,会会引引起起一一个个触触发发器器保保持持原原值值。这这一一点点可可用用于于设设计计时时序序电电路路,例例如如在在计计数数器器设设计计中中,条条件件满满足足则则加加1,否否则则保保持持不不变变;而而在在组组合合电电路路设设计计中中,应应避避免免这这种种隐隐含含触触发发器器的的存存在在。当当然然,一一般般不不可可能能列列出出所所有有分分支支,因因为为每每一一变变量量至至少少有有4种种取取值值0、1、z、x。为为包包含含所所有有分分支支,可可在在if语语句句最最后后加加上上else;在;在case语句的最后加上语句的最后加上default语句。语句。设计者原意是设计一个二输入与门,但因if语句中无else语句,在逻辑综合时会认为else语句为:“c=c”,即保持不变,形成了一个隐含锁存器。因此需要加一条语句:else c=0;芜湖职业技术学院4.3 循环语句循环语句 在Verilog HDL中存在4种类型的循环语句,可用来控制语句执行次数。这4种语句分别为:(1)forever:连续地执行语句,多用在“initial”块中,以生成 时钟等周期性波形。(2)repeat:连续执行一条语句n次;(3)while:执行一条语句,直到某个条件不满足;(4)for:有条件的循环语句 芜湖职业技术学院1.for语句语句for语句使用格式:for(表达式1;表达式2;表达式3)语句;即:for(循环变量赋初值;循环结束条件;循环变量增值)执行语句;2.repeat语句语句repeat语句的使用格式为:repeat(循环次数表达式)语句;或repeat(循环次数表达式)begin end 芜湖职业技术学院3.while 和和forever语句语句While语句 while语句的使用格式如下:while(循环执行条件表达式)语句;或 while(循环执行条件表达式)begin end while语句在执行时,首先判断循环执行条件表达式是否为真,若为真,执行后面的语句或语句块,然后再回头判断循环执行条件表达式是否为真,为真的话,再执行一遍后面的语句,如此不断,直到条件表达式不为真。因此,在执行语句中,必须有一条改变循环执行条件表达式的值的语句。芜湖职业技术学院forever语句 forever语句的使用格式如下:forever 语句;或 forever begin end forever循环语句连续不断地执行后面的语句或语句块,常用来产生周期性的波形,作为仿真激励信号for语句一般用在initial过程语句中,若要用它来进行模块描述,可用disable语句进行中断。芜湖职业技术学院举例:3个分别用for、repeat、while语句实现的同一个循环 芜湖职业技术学院 应用举例:采用for循环语句设计一个“七人表决器”,通过一个for循环语句统计赞成人数,若超过4人赞成则通过。芜湖职业技术学院 用vote6:0表示7个人的投票情况,“1”代表赞成,即votei为第“1”代表第i个赞成,pass=“1”表示表决通过 芜湖职业技术学院4.4 过程语句过程语句Verilog HDL中的多数过程模块都从属于以下2种过程语句:initialalways 在一个模块中,使用always和initial语句的次数是不受限制的。Initial语句常用于仿真中的初始化,initial过程块中的语句仅执行一次;always块内的语句则是不断重复执行的。Always过程语句是可综合的,在综合的电路设计中广泛采用。芜湖职业技术学院1.always过程语句过程语句always过程语句使用模板如下:always()begin/过程赋值/if-else,case选择语句/while,repeat,for循环/task,function调用end 芜湖职业技术学院 “always”过程语句通常是带有触发条件的,触发条件写在敏感信号表达式中,只有当触发条件满足时,其后的“begin-end”块语句才能被执行。下面讨论敏感信号表达式“event-expression”的含义以及如何写敏感信号表达式。敏感信号表达式 所谓敏感信号表达式,又称事件表达式或敏感信号列表,即当该表达式中变量的值改变时,就会引发块内语句的 执行。因此,敏感信号表达式中应列出影响块内取值的所有信号。若有两个或两个以上信号,它们之间用“or”连接。芜湖职业技术学院例如:(a)/当信号a值发生改变时(a or b)/当信号a或信号b的值发生改变时(posedge clock)/当clock的上升沿到来时(negedge clock)/当clock的下降沿到来时(posedge clk or negedge reset)/当clk的上升沿到来或 /reset信号的下降沿到来时 敏感信号可以分为两种类型:一种为边沿敏感型,一种为电平敏感型。每一个always过程最好只由一种类型的敏感信号来触发,而不要将边沿敏感型和电平敏感型列在一起。芜湖职业技术学院例如:always (posedge clk or posedge clr)/两个敏感信号都是边沿敏感型always (a or b)/两个敏感信号都是电平敏感型always (posedge clk or clr)/不建议这样用,最好不要将边沿敏感型和电平 /敏感型列在一起 芜湖职业技术学院同步和异步操作 对对于于时时序序电电路路,事事件件通通常常是是由由时时钟钟边边沿沿触触发发的的。为为表表达达边边沿沿这这个个概概念念,Verilog HDL 提提供供了了posedge和和negedge两两个个关关键键字字来来进进行行描描述述。根据过程语句中表述方式不同,根据过程语句中表述方式不同,可实现信号的同步操作和异步操作。可实现信号的同步操作和异步操作。此为同步置数,同步清零的例子 芜湖职业技术学院 对对于于上上例例中中的的load、reset信信号号没没有有写写在在敏敏感感信信号号表表达达式式当当中中,他他们们是是同同步步置置数数、同同步步清清零零,这这些些信信号号要要起起作作用用,必必须须有有时时钟钟的的上上升升沿沿到到来来。对对于于异异步步的的清清零零/置置数数,应应按按以以下下格格式式书书写写敏敏感信号表达式。感信号表达式。always (posedge clk or posedge clear)/clear信号上升沿到来时清零,故高电平清零有效always (posedge clk or negedge clear)/clear信号下降沿到来时清零,故低电平清零有效注注:块块内内的的逻逻辑辑描描述述要要与与敏敏感感信信号号表表达达式式中中信信号号的的有效电平一致。例如:有效电平一致。例如:芜湖职业技术学院用always过程块实现较复杂的组合逻辑电路 always过程语句通常用来对寄存器类型的数据进行赋值,但always过程语句也可以用来设计组合逻辑。在有的情况下,使用assign来实现组合逻辑电路,很多地方会显得冗长且效率低下,而适当地采用always过程语句来设计组合逻辑,能收到更好的效果。下面是一个简单的指令译码电路设计示例。该电路通过对指令的判断,对输入数据执行相应的操作,包括加、减、求与、求或、求反,并且无论是指令作用的数据还是指令本身发生变化,结果都应做出及时的反应。显然,这是一个较为复杂的组合逻辑电路,如果采用assign语句描述,表达起来非常复杂。本例中采用电平敏感的always块,并运用case结构来进行分析判断,使设计思想得到直观体现,代码整齐有序,便于理解。芜湖职业技术学院2.initial过程语句过程语句initial语句的使用格式如下:Initial语句的使用格式如下:initial begin 语句1;语句2;endinitial语句不带触发条件,initial过程中的块语句沿时间轴只执行一次。initial语句通常用于仿真模块中对激励向量的描述,或用于给寄存器变量赋初值,它是面向模拟仿真的过程语句,通常不能被逻辑综合工具所支持。芜湖职业技术学院4.5 块语句块语句 块语句是由标志符begin-end或fork-join界定的一组语句,当块语句只包含一条语句时,块标识符可以缺省。1.串行块串行块begin-endbegin-end串行块中的语句按串行方式顺序执行。比如:begin regb=rega;regc=regb;end 由于begin-end块内的语句顺序执行,在最后,将regb,regc的值 都 更 新 为 rega的 值,最 终regb,regc的值是相同的。仿真时,begin-end块中的每条语句前面的延时都是相对于前一条语句执行结束的相对时间。芜湖职业技术学院2.并行块并行块fork-join并行块fork-join中的所有语句是并发执行的。比如:fork regb=rega;regc=regb;join 由于fork-join并行块中的语句是同时执行的,在上面的块语句执行完后,regb更新为rega的值,而regc的值更新为没有改变前的regb的值,故执行完后,regb与regc的值是不同的。在进行仿真时,fork-join并行块中的每条语句前面的延时都是相对于该并行块的起始执行时间的。芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院