VerilogHDL硬件描述-3_第1页
VerilogHDL硬件描述-3_第2页
VerilogHDL硬件描述-3_第3页
VerilogHDL硬件描述-3_第4页
VerilogHDL硬件描述-3_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、1西安理工大学电子工程西安理工大学电子工程系系2if_else语句语句 if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种两种操作之一 。Verilog 语言提供了三种形式的if语句: if (表达式) 语句1; if (表达式) 语句1; else 语句2; if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; . else if(表达式m) 语句m; else 语句n;3if_else语句语句六点说明 :l三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表达式。系统对表达式的值进行判断,若

2、为0,x,z,按“假”处理,若为1,按“真”处理,执行指定的语句。l第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。 else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。 各 有 一 个 分 号 If (ab) out1 =int1;else out1 b) begin out1=int1; out2=int2;endelsebegin out1=int2; out20)for(i=0; i0)begin $display(.); memoryi=0;endelse $display(error-indexiszero);if(inde

3、x0) beginfor(i=0; i0)begin $display(.); memoryi=0;end endelse $display(error-indexiszero);7从从if语句推导出语句推导出锁存器 a l w a y s ( a l o r d ) b e g i n i f ( a l ) q = d ; e n d 有 锁 存 器 a l w a y s ( a l o r d ) b e g i n i f ( a l ) q = d ; e l s e q = 0 e n d 无 锁 存 器 If语句使用不当生成了并不想要的锁存器。8从从if语句推导出语句推导出锁存

4、器9从从if语句推导出语句推导出锁存器10If/else优先级编码 If-else语句实际上具有隐含的优先级。FBSel0Sel1Sel2Sel3ACDE优先级别依次为:E D C B A11case语句是一种多分支选择语句 .case (敏感表达式) 分支表达式1:语句1; 分支表达式2:语句2; 分支表达式n:语句n; default: 语句n+1;endcase12case括弧内的表达式称为控制表达式(也称为敏感表达式),case分支项中的表达式称为分支表达式。控制表达式通常表示为控制信号的某些位,分支表达式则用这些控制信号的具体状态值来表示:分支表达式是常量表达分支表达式是常量表达式式

5、。case语句的行为如同一个嵌套的语句的行为如同一个嵌套的if语句语句。当控制表达式的值与分支表达式的值相等时,就执行分支表达式后面的语句。如果所有的分支表达式的值都没有与控制表达式的值相匹配的,就执行default后面的语句。default项可有可无,一个case语句里只准有一个default项。13case语句通常用于微处理器的指令译码语句通常用于微处理器的指令译码,case语句的行为如同一语句的行为如同一个嵌套的个嵌套的if语句语句。1415 case, casez和casexcase语句逐位比较case表达式和分支表达式中的0、1、x、z值,值x和z只从字面上解释,即作为x和z值;ca

6、sez语句中,值z被认为是无关值,z也可以写成“?”。casex语句中,值x和z都被认为是无关位。casez语句用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。所谓不必关心的情况,即在表达式进行比较时,不将该位的状态考虑在内。这样在case语句表达式进行比较时,就可以灵活地设置以对信号的某些位进行比较。1617casez语句18casex语句19case语句时生成锁存器的例子case语句时生成锁存器的例子 a l w a y s ( s e l 1 : 0 o r a o r b ) c a s e ( s e l 1 : 0 ) 2 b 0 0 :

7、q = a ; 2 b 1 1 : q = b ; e n d c a s e 有 锁 存 器 a l w a y s ( s e l 1 : 0 o r a o r b ) c a s e ( s e l 1 : 0 ) 2 b 0 0 : q = a ; 2 b 1 1 : q = b ; d e f a u l t : q = b 0 ; e n d c a s e 无 锁 存 器 20case语句时生成锁存器的例子21case语句时生成锁存器的例子输出信号为复数时,如果不将所有条件写全输出信号为复数时,如果不将所有条件写全Always (A) begin case (A) 3b000

8、: begin DATA1 = 1b1; DATA2= 1b0; end 3b001 : begin DATA1 = 1b0; DATA3= 1b1; end 3b010 : begin DATA1 = 1b0; DATA2= 1b1; end 3b101 : begin DATA1 = 1b1; end default : begin DATA1 = 1b0; DATA2= 1b0; DATA3= 1b0; endEndcaseend没有DATA3的描述没有DATA2的描述22输出信号为复数时,针对每一个条件应将输出写全输出信号为复数时,针对每一个条件应将输出写全Always (A) beg

9、in case (A) 3b000 : begin DATA1 = 1b1; DATA2= 1b0; DATA3= 1bx; end 3b001 : begin DATA1 = 1b0; DATA2= 1bx; DATA3= 1b1; end 3b010 : begin DATA1 = 1b0; DATA2= 1b1; DATA3= 1bx; end 3b101 : begin DATA1 = 1b1; DATA2= 1bx; DATA3= 1bx; end default : begin DATA1 = 1b0; DATA2= 1b0; DATA3= 1b0; endEndcaseendca

10、se语句时生成锁存器的例子23Always (A) begin DATA1 = 1bx; DATA1= 1bx; DATA2= 1bx; case (A) 3b000 : begin DATA1 = 1b1; DATA2= 1b0; end 3b001 : begin DATA1 = 1b0; DATA3= 1b1; end 3b010 : begin DATA1 = 1b0; DATA2= 1b1; end 3b101 : begin DATA1 = 1b1; end default : begin DATA1 = 1b1; DATA1= 1b1; DATA2= 1b0; end初始值描述方

11、式24Case分支的全列举如果没有在case表达式所有可能的取值情况下都对变量赋值,则该变量就会被推导成锁存器。但是,如果设计者知道case表达式不会取case分支项中未列出的任何其他值,则可以使用综合指令:full_case.综合工具在case语句中遇到这样的综合指令时就会认为:case表达式所有可能的取值都已经罗列出来了,不存在其他可能的取值。这样变量就在case语句的所有分支中都被赋值了,因而不会推导成锁存器。25使用综合指令:full_case/Synthesis full_case26并行Case分支Case语句的verilog语义表明了选取case分支的优先级顺序。Case表达式首

12、先与第一个分支项进行比较,如果不相同,则再与下一个分支项比较,依此类推。Case语句暗示了检查分支项的优先级顺序。如果设计者知道所有的分支项相互排斥,希望把case控制逻辑综合成译码器,而不是优先级逻辑,可以使用综合指令:parallel_case。27使用综合指令:parallel_case28function 范围范围 函数名函数名; begin . endendfunctionassign x = sign_extend(a); / function 调用调用29函数的定义蕴含声明了与函数同名的、函数内部的变量。如在函数的声明语句中为缺省,则这个变量是一位的,否则是与函数定义中一致的变量

13、。定义函数时至少要有一个输入参量。在函数的定义中必须有一条赋值语句给函数中的一个内部变量赋以函数的结果值,该内部变量具有和函数名相同的名字:函数返回值函数返回值被赋予函数同名的内部变量。被赋予函数同名的内部变量。 assign x = sign_extend(a); / function 调用调用30 using ANSI C Style argumentsfunction calc_parity (input 31:0 address); begin /Return the xor of all address bits. calc_parity = address; endendfunct

14、ion31Ex: assign o=a&b; assign o=(sel)?a:b;32module 41sel( in, sel, out );input 3:0 in;input 1:0 sel;output out;function select;input 3:0 a;input 1:0 b;case( b)2h0 : select = a0;2h1 : select = a1;2h2 : select =a2;2h3 : select = a3;endcaseendfunctionassign out = select( in, sel ); / function selec

15、t调用调用endmodule 复数位选择器复数位选择器function、case语句描述语句描述in0in1in2in3sel1:0out334 to 1selectmodule 41sel( in, sel, out );input 3:0 in;input 1:0 sel;outputout;function select;input 3:0 in;input 1:0 sel;case( sel )2h0 : select = in0;2h1 : select = in1;2h2 : select = in2;2h3 : select = in3;endcaseendfunctionass

16、ign out = select( in, sel ); endmodule module 41sel( in, sel, out );input 3:0 in;input 1:0 sel;outputout;function select;input 3:0 in;input 1:0 sel;if( sel = 2h0 )select = in0;else if( sel = 2h1 )select = in1;else if( sel = 2h2 )select = in2;elseselect = in3; endfunctionassign out = select( in, sel

17、); endmodule343 to 1selectmodule 31sel( in, sel, out );input 2:0 in;input 1:0 sel;outputout;function select;input 2:0 in;input 1:0 sel;case( sel )2h0 : select = in0;2h1 : select = in1;default :select = in2;endcaseendfunctionassign out = select( in, sel ); endmodulemodule 31sel( in, sel, out );input

18、2:0 in;input 1:0 sel;outputout;function select;input 2:0 in;input 1:0 sel;if( sel = 2h0 )select = in0;else if( sel = 2h1 )select = in1;elseselect = in2;endfunctionassign out = select( in, sel ); endmodule35循环语句循环语句 在Verilog HDL中存在着四种类型的循环语句,用来控制执行语句的执行次数。forever 连续的执行语句。repeat 连续执行一条语句 n 次。while 执行一

19、条语句直到某个条件不满足。如果一开始条件即 不满足(为假),则语句一次也不能被执行。for for语句通过以下三个步骤来决定语句的循环执行。 先给控制循环次数的变量赋初值。 判定控制循环的表达式的值,如为假则跳出循环语句,如为真则执行指定的语句后,转到第三步。 执行一条赋值语句来修正控制循环变量次数的变量的值,然后返回第二步。36forever语句语句forever语句的格式如下:forever语句; 或foreverbegin多条语句 end此循环语句连续执行过程语句。同时,在过程语句中必须使用某种形式的时序控制,否则, forever循环将在0时延后永远循环下去。 initialbegin

20、clk = 0;#5 forever #10 clk = clk;end这一实例产生时钟波形;时钟首先初始化为0,并一直保持到第5个时间单位。此后每隔10个时间单位,clk反相一次。Forever不可综合,一般用来产生仿真波形。37repeat语句语句 repeat语句的格式如下:repeat(表达式) 语句在repeat语句中,其表达式通常为常量表达式。38while语句while语句的格式如下: while(表达式) 语句39for语句语句 for语句的一般形式为: for(表达式1;表达式2;表达式3) 语句执行过程如下:1) 先求解表达式1;2) 求解表达式2,若其值为真(非0),则执

21、行for语句中指定的内嵌语句,然后执行下面的第3步。若为假(0),则结束循环,转到第5步。3) 若表达式为真,在执行指定的语句后,求解表达式3。4) 转回上面的第2步骤继续执行。执行for语句下面的语句。for语句最简单的应用形式是很易理解的,其形式如下: for(循环变量赋初值;循环结束条件;循环变量增值) 执行语句40for语句语句 for循环语句实际上相当于采用while循环语句建立以下的循环结构:begin循环变量赋初值;while(循环结束条件)begin 执行语句 循环变量增值;endend41for语句语句for循环语句是典型的可以综合的循环语句,循环语句是典型的可以综合的循环语

22、句,for循环的综合是通过循环的综合是通过展开来实现的。展开来实现的。也就是说,复制for循环中的所有语句,对循环变量每一个可能的取值复制一次.需要对循环边界加以限制,保证循环边界都是常量。42always语句语句格式如下: always always语句是重复执行的,只有和一定的时序控制结合在一起才有用。如果一个always语句没有时序控制,则这个always语句将会生成一个仿真死锁。 always areg = areg; 此语句将在0时刻无限循环,形成仿真死锁。行为建模:使用行为建模:使用always语句语句43两种时序控制方式1) 时延控制 always #half_period cl

23、k = clk; 这个例子生成了一个周期为:period(=2*half_period) 的无限延续的信号波形,常用这种方法来描述时钟信号,作为激励信号来测试所设计的电路 。2) 事件控制 在事件控制中,always的过程语句基于事件执行。 符号“ ”被用来指明事件控制(event control)。 always 的事件可以控制是沿触发,也可以是电平触发,可以单个信号,也可以多个信号。如果是多个信号,则信号名之间需要有关键字 or。44事件控制always (posedge clock or negedge reset) /由两个沿触发的always块 begin end在在Verilog

24、HDLVerilog HDL中中posedgeposedge和和negedgenegedge是表示正沿和负沿的关键字是表示正沿和负沿的关键字 always ( a or b or c ) /由多个电平触发的always块 begin end always ( a,b,c ) /由多个电平触发的always块 begin end45always语句沿触发的always块常常描述时序逻辑,如果符合可综合风格要求可用综合工具自动转换为表示时序逻辑的寄存器组和门级逻辑电平触发的always块常常用来描述组合逻辑和带锁存器的组合逻辑,如果符合可综合风格要求可转换为表示组合逻辑的门级逻辑或带锁存器的组合逻辑。一个模块中可以有多个always块,它们都是并行运行的。46always (灵敏度表灵敏度表) 赋值描述赋值描述 其中,灵敏度表内元素可以为:其中,灵敏度表内元素可以为:posedge 信号(多数为时钟信号及复位)信号(多数为时钟信号及复位) negedge 信号(多数为时钟信号及复位)信号(多数为时钟信号及复位)用用reg、wire定义的变量及信号定义的变量及信号各信号之间用各信号之

温馨提示

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

评论

0/150

提交评论