第五章 常用Verilog语法之三.ppt_第1页
第五章 常用Verilog语法之三.ppt_第2页
第五章 常用Verilog语法之三.ppt_第3页
第五章 常用Verilog语法之三.ppt_第4页
第五章 常用Verilog语法之三.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 常用Verilog语法之三,条件语句 循环语句 生成块,7/27/2020,1,第五章 常用Verilog语法之三,条件语句if-else if(表达式) 语句; if(ab) out=int1; if (表达式) 语句1; else 语句2; if(ab) out1=int1; else out1=int2;,7/27/2020,2,第五章 常用Verilog语法之三,条件语句if-else if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; . else if (表达式m) 语句m; else 语句n;,7/27/2020,

2、3,第五章 常用Verilog语法之三,说明 If后面都有表达式,为逻辑表达式或关系表达式。系统对表达式的值进行判断,若为0,x,z,按假处理;若为1,按真处理,执行指定的语句。 else前面有一分号,整个语句结束有一分号 if和else后面可以包含一个内嵌的操作语句,也可以有多个操作语句,此时用begin和end这两个关键词将几个语句包含起来成为一个复合块语句,此时end之后无需分号;,7/27/2020,4,7/27/2020,5,第五章 常用Verilog语法之三,说明 条件语句必须在过程块语句中使用,即由initial和always语句引导的执行语句集合。除这两种块语句引导的“begi

3、n-end”块中可以编写条件语句外,模块的其他地方都不能编写。,7/27/2020,6,第五章 常用Verilog语法之三,说明 允许一定形式的表达式简写方式。 if(expression) 等价于 if(expression=1) if(!expression) 等价于 if(expression!=1),7/27/2020,7,第五章 常用Verilog语法之三,说明 If语句的嵌套。 if(expression1 ) if(expression2) 语句1; else 语句2; else if(expression3 ) 语句3; else 语句4;,7/27/2020,8,注意if与e

4、lse的配对关系,else总是与它上面的最近的if配对。如果if与else的数目不一样,为了实现程序设计者的意图,可以用begin_end块语句来确定配对关系。,7/27/2020,9,第五讲 常用Verilog语法之三,case语句多分支选择语句 case(表达式) endcase casez(表达式) endcase casex(表达式) endcase case分支项的一般格式: 分支表达式: 语句; default: 语句;,7/27/2020,12,第五章 常用Verilog语法之三,case括号内的表达式为控制表达式,case分支项中得表达式称为分支表达式。 当控制表达式的值与分支

5、表达式的值相同时,就执行分支表达式后面的语句。如果所有分支表达式的值都没有与控制表达式的值相匹配,就执行default后面的语句; default项可有可无,一个case语句里只允许有一个default项。,7/27/2020,13,第五章 常用Verilog语法之三,7/27/2020,14,每个case分项分支表达式值必须不同,否则会出现矛盾。 执行完case分项后的语句,则跳出该case语句结构,终止case语句的执行; 在用case语句表达式进行比较的过程中,只有当信号的对应位的值能明确进行比较时,比较才能成功; case语句的所有表达式值的位宽必须相等;,7/27/2020,15,第

6、五章 常用Verilog语法之三,casez:不考虑高阻z的比较过程; casex: 不考虑高阻z和不定值x的比较过程;,7/27/2020,16,7/27/2020,17,casez:不考虑高阻z的比较过程; casex:不考虑高阻z和不定值x的比较过程;,7/27/2020,18,第五章 常用Verilog语法之三,7/27/2020,19,使用条件语句不当,在设计中生成了原本没想到的锁存器 不正确使用if语句,7/27/2020,20,第五章 常用Verilog语法之三,使用条件语句不当在设计中生成了原本没想到的锁存器 不正确使用if语句,7/27/2020,22,第五章 常用Veril

7、og语法之三,使用条件语句不当在设计中生成了原本没想到有的锁存器 不正确使用case语句,缺少default语句。,7/27/2020,24,第五章 常用Verilog语法之三,使用条件语句不当在设计中生成了原本没想到有的锁存器 不正确使用case语句,缺少default语句。,7/27/2020,26,第五章 常用Verilog语法之三,如果用到if语句,最好写上else项; 若用case语句,最好写上default项。 可以避免生成锁存器。,7/27/2020,28,第五章 常用Verilog语法之三,case语句的行为类似于多路选择器 module mux4_to_1(out,io,i1

8、,i2,i3,s1,s0); output out; input io,i1,i2,i3; input s1,s0; reg out; always (s1 or s0 or i0 or i1 or i2 or i3) begin case(s1,s0) 2b00: out=i0; 2b01: out=i1; 2b10: out=i2; 2b11: out=i3; default: out=1bx; end case end endmodule,第五章 常用Verilog语法之三,5.2 循环语句,forever:连续的执行语句 repeat:连续执行一条语句n次 while: 执行一条语句直

9、到某个条件不满足 for循环,7/27/2020,30,5.2 循环语句,forever:连续的执行语句,用于产生周期性波形,必须写在initial块中。 forever 语句; or forever begin 多条语句; end,7/27/2020,31,5.2 循环语句,repeat语句 repeat(表达式) 语句; or repeat(表达式) begin 多条语句; end,7/27/2020,32,7/27/2020,33,while循环语句 while(表达式) 语句; or while(表达式) begin 多条语句; end,7/27/2020,34,5.2 循环语句,7/

10、27/2020,35,for循环语句 for(表达式1;表达式2;表达式3) 语句; for(循环变量赋初值;循环结束条件;循环变量增值);,7/27/2020,36,5.2 循环语句,for循环相当于采用while语句建立以下循环结构 begin 循环变量赋初值; while(循环结束条件) begin 执行语句; 循环变量增值; end end,5.2 循环语句,begin: init_mem reg7:0 tempi; for(tempi=0;tempimemsize;tempi=tempi+1) memorytempi=0; end,7/27/2020,39,7/27/2020,40,

11、生成块,生成语句可以动态的生成Verilog代码,方便参数化模块的生成,简化程序的编写。 对矢量中的多个位进行重复操作 进行多个模块的实例引用的重复操作 根据参数的定义确定程序中是否应该包含某段Verilog代码; 生成语句必须用在module内部,用来生成该module内部的程序代码,生成块,生成实例可以包含以下的一个或多种类型 模块(module instance) 用户定义原语;(primitive instance) 门级原语; 连续赋值语句; initial和always块;(procedural block) task 和funciton,生成块,编写代码时必须在模块中说明生成的实

12、例范围,关键字generateendgenerate用来指定该范围。 Verilog允许在生成范围内声明下列数据类型 net(网络)、reg(寄存器); integer, real, time, realtime event(事件) 生成的数据类型具有唯一的标识名,可以被层次引用,也可以使用defparam声明的参数重新定义,生成块,任务和函数的声明也允许出现在生成范围之中,但不能出现在循环生成当中。 任务和函数具有唯一的标识符名称,可以被层次引用。 不允许出现在生成范围之中的模块项声明包括 参数、局部参数; 输入、输出和输入/输出声明; 指定块。,生成语句的基本结构,生成块,Verilog中

13、有3种创建生成语句的方法 循环生成; 条件生成; case声成。,生成语句的基本结构,循环生成语句,module bitwise_xor(out,i0,i1); parameter N=32; outputN-1:0 out; inputN-1:0 i0,i1; genvar j; generate for(j=0;jN;j=j+1) begin:xor_loop xor g1(outj,i0j,i1j); end endgenerate endmodule,对于xor,相当于生成以下语句 xor_loop0.g1, xor_loop1.g1, . xor_loop31.g1,生成语句,生成块

14、的本质是使用循环内的一条语句来代替多条重复的Verilog语句,简化用户的编程。 关键词genvar用于声明生成变量,只能用在生成块中,在仿真过程中,生成变量是不存在的 循环生成语句可以嵌套使用,不过使用同一个生成变量作为索引的循环生成语句不能够相互嵌套; Xor_loop是循环生成语句的名字,目的在于通过它对循环生成语句中的变量进行层次化引用。因此,循环生成的各个异或门的相对层次名为: xor_loop0.g1 , xor_loop1.g1 , xor_loop2.g1 ,.,module ripple_adder(co,sum,a0,a1,ci); parameter N=4; outpu

15、tN-1:0 sum; output co; inputN-1:0 a0,a1; input ci; wireN:0 carry; assign carry0=ci; genvar i; generate for(i=0;iN;i=i+1) begin:r_loop wire t1,t2,t3; xor g1(t1,a0i,a1i); xor g2(sumi,t1,carryi); and g3(t2,a0i,a1i); and g4(t3,t1,carryi); or g5(carryi+1,t2,t3); end endgenerate assign co=carry4; endmodul

16、e,条件生成语句,defparam,在一个模块中显式地改变另一个模块的参数时(参数的重新定义),需要使用defparam命令 只有parameter 参数可以被重新定义,localparam,specparam参数不能被重新定义;,case 生成语句,module adder(co,sum,a0,a1,ci); parameter N=4; outputN-1:0 sum; output co; inputN-1:0 a0,a1; input ci; generate case(N) 1: adder_1bit adder1(co,sum,a0,a1,ci); 2: adder_2bit adder2(co,sum

温馨提示

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

评论

0/150

提交评论