eda技术与verilog设计电子课件教案-第四章_verilog设计进阶

上传人:aa****6 文档编号:53680095 上传时间:2018-09-04 格式:PPT 页数:36 大小:197KB
返回 下载 相关 举报
eda技术与verilog设计电子课件教案-第四章_verilog设计进阶_第1页
第1页 / 共36页
eda技术与verilog设计电子课件教案-第四章_verilog设计进阶_第2页
第2页 / 共36页
eda技术与verilog设计电子课件教案-第四章_verilog设计进阶_第3页
第3页 / 共36页
eda技术与verilog设计电子课件教案-第四章_verilog设计进阶_第4页
第4页 / 共36页
eda技术与verilog设计电子课件教案-第四章_verilog设计进阶_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《eda技术与verilog设计电子课件教案-第四章_verilog设计进阶》由会员分享,可在线阅读,更多相关《eda技术与verilog设计电子课件教案-第四章_verilog设计进阶(36页珍藏版)》请在金锄头文库上搜索。

1、第4章 Verilog设计进阶,主要内容, 过程语句(initial、always) 块语句(begin-end、fork-join) 赋值语句(assign、=、=) 条件语句(if-else、case、casez、casex) 循环语句(for、forever、repeat、while) 编译指示语句(define、include、ifdef、else、endif) 任务(task)与 函数(function) 顺序执行与并发执行,Verilog HDL行为语句,4.1 过程语句,initialalways 在一个模块(module)中,使用initial和always语句的次数是不受限制

2、的。initial语句常用于仿真中的初始化,initial过程块中的语句仅执行一次;always块内的语句则是不断重复执行的。,always过程语句使用模板,always () begin /过程赋值 /if-else,case,casex,casez选择语句 /while,repeat,for循环 /task,function调用 end “always”过程语句通常是带有触发条件的,触发条件写在敏感信号表达式中,只有当触发条件满足时,其后的“begin-end”块语句才能被执行。,敏感信号表达式“event-expression”,敏感信号表达式又称事件表达式或敏感信号列表,即当该表达式中

3、变量的值改变时,就会引发块内语句的执行。因此敏感信号表达式中应列出影响块内取值的所有信号。若有两个或两个以上信号时,它们之间用“or”连接。 例如: (a) /当信号a的值发生改变 (a or b) /当信号a或信号b的值发生改变 (posedge clock) /当clock 的上升沿到来时 (negedge clock) /当clock 的下降沿到来时 (posedge clk or negedge reset) /当clk的上升沿到来或reset信号的下降沿到来,敏感信号列表举例(4选1数据选择器),module mux4_1(out,in0,in1,in2,in3,sel); outp

4、ut out; input in0,in1,in2,in3; input1:0 sel; reg out; always (in0 or in1 or in2 or in3 or sel)/敏感信号列表 case(sel)2b00: out=in0;2b01: out=in1;2b10: out=in2;2b11: out=in3;default: out=2bx; endcase endmodule,posedge和negedge关键字,对于时序电路,事件通常是由时钟边沿触发的,为表达边沿这个概念,Verilog提供了posedge和negedge关键字来描述。比如: 【例】同步置数、同步清

5、零的计数器 module count(out,data,load,reset,clk); output7:0 out; input7:0 data; input load,clk,reset; reg7:0 out; always (posedge clk) /clk上升沿触发beginif(!reset) out=8h00; /同步清0,低电平有效else if(load) out=data; /同步预置else out=out+1; /计数end endmodule,4.2 块语句,块语句是由块标志符begin-end或fork-join界定的一组语句,当块语句只包含一条语句时,块标志符可

6、以缺省。 begin-end串行块中的语句按串行方式顺序执行。 比如:beginregb=rega;regc=regb;end 由于begin-end块内的语句顺序执行,在最后,将regb、regc 的值都更新为rega的值,该begin-end块执行完后,regb、regc 的值是相同的。,4.3 赋值语句,1、持续赋值语句(Continuous Assignments) assign为持续赋值语句,主要用于对wire型变量的赋值。 比如:assign c=a 在上面的赋值中,a、b、c三个变量皆为wire型变量,a和b信号的任何变化,都将随时反映到c上来。,2、过程赋值语句(Procedu

7、ral Assignments)过程赋值语句多用于对reg型变量进行赋值。过程赋值有阻塞(blocking)赋值和非阻塞(non_blocking)赋值两种方式。 (1)非阻塞(non_blocking)赋值方式赋值符号为“=”, 如:b= a;非阻塞赋值在整个过程块结束时才完成赋值操作,即b的值并不是立刻就改变的。 (2)阻塞(blocking)赋值方式 赋值符号为“=”, 如:b= a;阻塞赋值在该语句结束时就立即完成赋值操作,即b的值在该条语句结束后立刻改变。如果在一个块语句中,有多条阻塞赋值语句,那么在前面的赋值语句没有完成之前,后面的语句就不能被执行,仿佛被阻塞了(blocking)

8、一样,因此称为阻塞赋值方式。,阻塞赋值与非阻塞赋值,非阻塞赋值 module non_block(c,b,a,clk); output c,b; input clk,a; reg c,b; always (posedge clk)begin b=a;c=b;end endmodule,阻塞赋值 module block(c,b,a,clk); output c,b; input clk,a; reg c,b; always (posedge clk)beginb=a;c=b;end endmodule,阻塞赋值与非阻塞赋值,非阻塞赋值仿真波形图,阻塞赋值仿真波形图,阻塞赋值与非阻塞赋值,非阻塞

9、赋值综合结果,阻塞赋值综合结果,4.4 条件语句,( if-else语句) if-else语句使用方法有以下3种: (1)if(表达式) 语句1; (2)if(表达式) 语句1;else 语句2; (3)if(表达式1) 语句1;else if(表达式2) 语句2;else if(表达式3) 语句3;else if(表达式n) 语句n;else 语句n+1;,case语句的使用格式如下。 case (敏感表达式)值1: 语句1; /case分支项值2: 语句2;值n: 语句n;default:语句n+1; endcase,case语句,BCD码七段数码管显示译码器,module decode4

10、_7(decodeout,indec); output6:0 decodeout; input3:0 indec; reg6:0 decodeout; always (indec)begincase(indec) /用case语句进行译码4d0:decodeout=7b1111110;4d1:decodeout=7b0110000;4d2:decodeout=7b1101101;4d3:decodeout=7b1111001;4d4:decodeout=7b0110011;4d5:decodeout=7b1011011;4d6:decodeout=7b1011111;4d7:decodeout

11、=7b1110000;4d8:decodeout=7b1111111; 4d9:decodeout=7b1111011;default: decodeout=7bx;endcaseend endmodule,4.5 循环语句,repeat loop,initial beginfor(i=0;i4;i=i+1) out = out +1;end,initialbeginrepeat(5)out = out +1;end,initialbegini=0;while(i0)i=i+1;end,for loop,while loop,在Verilog中存在四种类型的循环语句,用来控制语句的执行次数。这

12、四种语句分别为: (1)forever:连续地执行语句;多用在“initial”块中,以生成时钟等周期性波形。 (2)repeat:连续执行一条语句n次。 (3)while:执行一条语句直到某个条件不满足。 (4)for:有条件的循环语句。,for语句,for语句的使用格式如下(同C语言): for(表达式1;表达式2;表达式3)语句; 即:for(循环变量赋初值;循环结束条件;循环变量增值)执行语句;,用for语句描述的七人投票表决器,module voter7(pass,vote); output pass; input6:0 vote; reg2:0 sum; integer i; re

13、g pass; always (vote)begin sum=0; for(i=0;i1; /操作数b右移一位 end end endmodule,4.6 编译指示语句,Verilog允许在程序中使用特殊的编译向导(Compiler Directives)语句,在编译时,通常先对这些向导语句进行“预处理”,然后再将预处理的结果和源程序一起进行编译。向导语句以符号“”开头,以区别于其它语句。Verilog提供了十几条编译向导语句,如:define、ifdef、else、endif、restall等。比较常用的有define,include和ifdef、else、endif等。,宏替换define

14、,define语句用于将一个简单的名字或标志符(或称为宏名)来代替一个复杂的名字或字符串,其使用格式为:define 宏名(标志符) 字符串如:define sum ina+inb+inc+ind在上面的语句中,用简单的宏名sum来代替了一个复杂的表达式ina+inb+inc+ind,采用了这样的定义形式后,在后面的程序中,就可以直接用sum来代表表达式ina+inb+inc+ind了。,文件包含include,include是文件包含语句,它可将一个文件全部包含到另一个文件中。其格式为: include “文件名”使用include语句时应注意以下几点: (1)一个include语句只能指定一个被包含的文件。 (2)include语句可以出现在源程序的任何地方。被包含的文件若与包含文件不在同一个子目录下,必须指明其路径名。 (3)文件包含允许多重包含,比如文件1包含文件2,文件2又包含文件3等。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 教育/培训/课件

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