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

下载本文档

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

文档简介

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

2、句m; else 语句n;5/8/20223第五章第五章 常用常用Verilog语法之三语法之三o 说明n If后面都有表达式,为逻辑表达式或关系表达式逻辑表达式或关系表达式。系统对表达式的值进行判断,若为0,x,z,按假处理;若为1,按真处理,按真处理,执行指定的语句。n else前面有一分号,整个语句结束有一分号n if和else后面可以包含一个内嵌的操作语句,也可以有多个操作语句,此时用begin和end这两个关键词将几个语句包含起来成为一个复合块语句,此时end之后无需分号;5/8/202245/8/20225第五章第五章 常用常用Verilog语法之三语法之三o 说明n 条件语句必须

3、在过程块语句中使用过程块语句中使用,即由initial和always语句引导的执行语句集合。除这两种块语句引导的“begin-end”块中可以编写条件语句外,模块的其他地方都不能编写。5/8/20226第五章第五章 常用常用Verilog语法之三语法之三o 说明n 允许一定形式的表达式简写方式。if(expression) 等价于 if(expression=1)if(!expression) 等价于 if(expression!=1)5/8/20227第五章第五章 常用常用Verilog语法之三语法之三o 说明n If语句的嵌套。 if(expression1 )if(expression2

4、) 语句1; else 语句2;elseif(expression3 ) 语句3; else 语句4;5/8/20228o 注意if与else的配对关系,else总是与它上面的最近的if配对。如果if与else的数目不一样,为了实现程序设计者的意图,可以用begin_end块语句来确定配对关系。5/8/20229第五讲第五讲 常用常用Verilog语法之三语法之三o case语句多分支选择语句n case(表达式) endcasen casez(表达式) endcasen casex(表达式) endcasen case分支项的一般格式:分支表达式: 语句; default: 语句;5/8/2

5、02212第五章第五章 常用常用Verilog语法之三语法之三o case括号内的表达式为控制表达式,case分支项中得表达式称为分支表达式。o 当控制表达式的值与分支表达式的值相同控制表达式的值与分支表达式的值相同时,就执行分支表达式后面的语句。如果所有分支表达式的值都没有与控制表达式的值相匹配,就执行default后面的语句;o default项可有可无,一个case语句里只允许有一个一个default项。5/8/202213第五章第五章 常用常用Verilog语法之三语法之三5/8/202214o 每个case分项分支表达式值必须不同分支表达式值必须不同,否则会出现矛盾。o 执行完cas

6、e分项后的语句,则跳出该case语句结构,终止case语句的执行;o 在用case语句表达式进行比较的过程中,只有当信号的对应位的值能明确进行比较时,当信号的对应位的值能明确进行比较时,比较才能成功比较才能成功;o case语句的所有表达式值的位宽必须相等所有表达式值的位宽必须相等;5/8/202215第五章第五章 常用常用Verilog语法之三语法之三o casez:不考虑高阻z的比较过程;o casex: 不考虑高阻z和不定值x的比较过程;5/8/2022165/8/202217o casez:不考虑高阻z的比较过程;o casex:不考虑高阻z和不定值x的比较过程;5/8/202218第

7、五章第五章 常用常用Verilog语法之三语法之三5/8/202219o 使用条件语句不当,在设计中生成了原本没想生成了原本没想到的锁存器到的锁存器n 不正确使用if语句5/8/202220第五章第五章 常用常用Verilog语法之三语法之三DENAPRECLRQq$latchqdalo 使用条件语句不当在设计中生成了原本没想到的锁存器n 不正确使用if语句5/8/202222第五章第五章 常用常用Verilog语法之三语法之三010aldqq0o 使用条件语句不当在设计中生成了原本没想到有的锁存器n 不正确使用case语句,缺少default语句。5/8/202224第五章第五章 常用常用V

8、erilog语法之三语法之三A1.0B1.0OUTEQUALA1.0B1.0OUTEQUALDENAPRECLRQSEL1.0DATA1.0OUTSELECTOREqual02 h0 -WideNor0q$latchabqsel1.0Selector0Equal12 h3 -o 使用条件语句不当在设计中生成了原本没想到有的锁存器n 不正确使用case语句,缺少default语句。5/8/202226第五章第五章 常用常用Verilog语法之三语法之三A1.0B1.0OUTEQUALA1.0B1.0OUTEQUALSEL2.0DATA2.0OUTSELECTORsel1.0baqWideNor0

9、Equal12 h3 -Selector01 h0 -Equal02 h0 -o 如果用到if语句,最好写上else项;o 若用case语句,最好写上default项。可以避免生成锁存器。5/8/202228第五章第五章 常用常用Verilog语法之三语法之三o case语句的行为类似于多路选择器module mux4_to_1(out,io,i1,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) begincase(s1,s0

10、)2b00: out=i0;2b01: out=i1;2b10: out=i2;2b11: out=i3;default: out=1bx;end case end endmodule第五章第五章 常用常用Verilog语法之三语法之三5.2 循环语句循环语句o forever:连续的执行语句o repeat:连续执行一条语句n次o while: 执行一条语句直到某个条件不满足o for循环5/8/2022305.2 循环语句循环语句o forever:连续的执行语句,用于产生周期性波形,必须写在initial块中。forever 语句;orforever begin 多条语句; end5/8

11、/2022315.2 循环语句循环语句o repeat语句repeat(表达式) 语句;orrepeat(表达式) begin 多条语句; end5/8/2022325/8/202233o while循环语句while(表达式) 语句;orwhile(表达式) begin 多条语句; end5/8/2022345.2 循环语句循环语句5/8/202235o for循环语句for(表达式1;表达式2;表达式3) 语句;for(循环变量赋初值;循环结束条件;循环变量增值);5/8/2022365.2 循环语句循环语句o for循环相当于采用while语句建立以下循环结构begin循环变量赋初值;w

12、hile(循环结束条件)begin执行语句;循环变量增值;endend5.2 循环语句循环语句begin: init_memreg7:0 tempi;for(tempi=0;tempimemsize;tempi=tempi+1)memorytempi=0;end5/8/2022395/8/202240生成块生成块o 生成语句可以动态的生成动态的生成Verilog代码代码,方便参数化模块的生成,简化程序的编写。n 对矢量中的多个位矢量中的多个位进行重复操作n 进行多个模块的实例引用多个模块的实例引用的重复操作n 根据参数的定义确定程序中是否应该包含某段确定程序中是否应该包含某段Verilog代码

13、代码;n 生成语句必须用在必须用在module内部内部,用来生成该module内部的程序代码生成块生成块o 生成实例可以包含以下的一个或多种类型n 模块(module instance)n 用户定义原语;(primitive instance)n 门级原语;n 连续赋值语句;n initial和always块;(procedural block)n task 和funciton生成块生成块o 编写代码时必须在模块中说明生成的实例范生成的实例范围,关键字围,关键字generateendgenerate用来指定该范围。o Verilog允许在生成范围内声明下列数据类型n net(网络)、reg(寄

14、存器);n integer, real, time, realtimen event(事件)o 生成的数据类型具有唯一的标识名,可以被层次引用,也可以使用defparam声明的参数重新定义生成块生成块o 任务和函数任务和函数的声明也允许出现在生成范围之中,但不能出现在循环生成当中。o 任务和函数具有唯一的标识符名称,可以被层次引用。o 不允许不允许出现在生成范围之中的模块项声明包括n 参数、局部参数;n 输入、输出和输入/输出声明;n 指定块。生成语句的基本结构生成语句的基本结构生成块生成块o Verilog中有3种创建生成语句的方法n 循环生成;n 条件生成;n case声成。生成语句的基本

15、结构生成语句的基本结构循环生成语句循环生成语句module bitwise_xor(out,i0,i1);parameter N=32;outputN-1:0 out;inputN-1:0 i0,i1;genvar j;generatefor(j=0;jN;j=j+1)begin:xor_loopxor g1(outj,i0j,i1j);endendgenerateendmoduleo 对于xor,相当于生成以下语句 xor_loop0.g1, xor_loop1.g1, . xor_loop31.g1,生成语句生成语句o 生成块的本质是使用循环内的一条语句来代替多条重使用循环内的一条语句来代

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

17、;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_loopwire 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);endendgenerateassign co=carry4;endmodule条件生成语句条件生成语句defparamo 在一个模块中显式地显式地改变另一个模块的参数时(参数的重新定义),需要使用defparam命令n 只有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(c

温馨提示

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

评论

0/150

提交评论