Verilog表达式和语句.ppt_第1页
Verilog表达式和语句.ppt_第2页
Verilog表达式和语句.ppt_第3页
Verilog表达式和语句.ppt_第4页
Verilog表达式和语句.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、,Verilog表达式和语句,目录,目 录,壹,运算符及表达式,1、基本的算数运算符 2、赋值运算符 3、关系运算符 4、逻辑运算符 5、位运算符 6、等式运算符 7、移位运算符 8、位拼接运算符 9、优先级别,一,运算符,(1)算数运算符:+、-、x、/、% (2)赋值运算符:=、=、 (8)拼接运算符: (9)其他。,1、基本的算数运算符(二进制运算符),(1)+(加法运算符,正值运算符,如rega+regb,+3) (2)- (减法运算符,负值运算符,如rega-2,-3) (3)x(乘法运算符,如rega*3) (4)/(除法运算符,如5/3) 在进行整数除法运算时,结果值略去小数部分

2、,只取整数部分。 (5)%(模运算符,或者求余运算符,如7%3值为1) 结果的符号位采用模运算式里第一个操作数的符号位,如: 10%3,-10%3,10%-3,2、赋值运算符,(1)非阻塞赋值方式(如b=a) 特点:1、所赋变量值不能立即为下面语句所用; 2、块结束后才完成赋值操作,所赋的变量是上一次赋值得到的; 3、编写可综合的时序逻辑模块,这是最常用的赋值。 例1 always(posedge clk) begin b=a; c=b; end,(2)阻塞赋值方式(如b=a) 特点:1、赋值语句执行完后,块才结束; 2、赋值语句执行后,变量值立即改变; 3、用在时序逻辑中,会产生意想不到的结

3、果。 例2 always(posedge clk) begin b=a; c=b; end,D,CLK,Q,clk,a,b,c,3、关系运算符,(1)ab (3)a=b 在进行关系运算时,如果声明关系为假(flase),返回值为0;如果声明关系为真(true),则返回值为1;如果某个操作数不定,则关系模糊,返回值为不定值。,4、逻辑运算符,(1) (2),8、位拼接运算符,位拼接运算符 ,用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作,使用方法: 信号1的某几位,信号2的某几位,信号n的某几位 例:a,b3:0,w,3b101,可以写成 a,b3,b2,b1,b0,w,1b1,1

4、b0,1b1 在位拼接表达式中不允许存在没有指明位数的信号。 例:重复,4w等同于w,w,w,w 嵌套,b,3a,b等同于b,a,b,a,b,a,b,9、优先级别,贰,语句,1、条件语句(if_else) 2、case语句 3、循环语句 4、块语句 5、过程块,1、条件语句(if_else),(1)if(表达式) 语句。 例如: if (ab) out1=int1; (2)if (表达式) 语句1 else 语句2,例如: if (ab) out1=int1; else out2=int2;,if语句是用来判断所给定的条件是否满足,根据判定的结果决定执行给出的两种操作之一。,(3)if (表达

5、式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; : : else if (表达式m) 语句m; else 语句n;,注:条件语句必须在过程块中使用。所谓过程块是指由initial和always语句引导的执行语句集合。除这两种块语句引导的begin end块中可以编写条件语句外,模块中其他地方都不能编写。,6点说明: (1)3种形式的if语句中if后面都有“表达式”,一般为逻辑表达式和关系表达式。只有表达式的值为1时,执行指定语句。 (2)第2、3种形式的if语句,在每个else前面有一个分号,整个语句结束处有一个分号。else子句不能作为语句单

6、独使用,它必须是if语句的一部分,与if配对使用。,(3)在if和else后面可以包含一个内嵌的操作语句,也可以有多个操作语句,此时用begin和end这两个关键词将几个语句包含起来成为一个复合块语句。,例:if(ab) begin out1=int1; out2=int2; end else begin out1=int2; out2=int1; end,(4)允许一定形式的表达式简写方式。例如: if(expression) 等同与 if(expression=1) if(! expression) 等同与 if(expression! =1) (5)if语句的嵌套。例如: if(expr

7、ession1) if(expression2) 语句1;(内嵌if) else 语句2; else if(expression3) 语句3;(内嵌if) else 语句4; 注:注意if和else的配对关系,else总是和它上面最近的if配对。如果if和else的数目不一样,为了实现程序设计者的企图,可以用begin_end块语句来确定配对关系。,2、case语句,(1)case(表达式) endcase (2)casez(表达式) endcase (3)casex(表达式) endcase case分支项的一般格式如下: 分支表达式: 语句; 默认项(default项):语句; 说明: (

8、1)case括弧内的表达式成为控制表达式,case分支项中的表达式称为分支表达式。 (2)当控制表达式的值等于分支表达式的值时,就执行分支表达式后面的语句。,(3)default项可有可无,有且只准有一个default项。 (4)每个case分项的分项表达式的值必须互不相同。 (5)执行完case分项后的语句,则跳出该case语句结构,终止case语句的执行。 (6)在用case语句表达式进行比较时,只有当信号的相应位的值能明确进行比较时,比较才能成功。 (7)case语句的所有表达式值得位宽必须相同。,case,casez和casex的真值表,casez语句用来处理不考虑高阻态z的比较过程。

9、casex语句则将高阻态z和不定值x都视为不必关心的情况。,例1:reg7:0 ir; casez(ir) 8b1?:instruction1(ir); 8b01?:instruction2(ir); 8b00010?:instruction3(ir); 8b000001?:instruction4(ir); endcase,例2: reg7:0 r,mask; mask=8bx0 x0 x0 x0; casex(rmask) 8b001100 xx:stat1; 8b1100 xx00:stat2; 8b00 xx0011:stat3; 8bxx001100:stat4; endcase,例

10、3、case语句实现四选一多路选择器,module mux4_to_1(out,i0,i1,i2,i3,s1,s0); output out; input i0,i1,i2,i3; input s0,s1; 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; endcase end endmodule,3、循环语句,(1)forever语句 格式:foreve

11、r 语句;或 forever begin多条语句end 常用来产生周期性的波形,用来作为仿真测试信号。与always语句不同之处在于不能独立写在程序中,而必须写在initial块中。 (2)repeat语句 格式:repeat(表达式)语句;或者repeat(表达式)begin多条语句end 其表达式通常为常量表达式,(3)while语句 格式:while(表达式)语句;或者while(表达式)begin多条语句end 例:对rega八位二进制数中值为1的位进行计数。 begin:countls reg7:0 tempreg; count = 0; tempreg = rega; while

12、(tempreg) begin if (tempreg0) count = count+1; tempreg = tempreg1; end end,(4)for语句 格式:for(表达式1;表达式2,表达式3)语句;,最简单的应用形式: for(循环变量赋初值;循环结束条件;循环变量增值) 执行语句; 相当于采用while循环语句建立如下结构: begin 循环变量赋初值; while(循环结束条件) begin 执行语句; 循环变量增值; end end,(1)先求解表达式1. (2)求解表达式2,若其值为真(非0)则执行for语句中指定的内嵌语句,然后执行下面的第(3)步。若为假(0)

13、则结束循环,转到第(5)步。 (3)若表达式为真,在执行指定语句,求解表达式3. (4)转回上面的第(2)步骤继续执行。 (5)执行for语句下面的语句,例1:for语句初始化memory begin:init_mem reg7:0 tempi; for(tempi=0;tempi1) if (tempreg0) count=count+1; end,4、块语句,(1)顺序块(也称过程块) 关键字begin_end用于将多条语句组成顺序块 特点:1、顺序块中的语句是一条一条按顺序执行的,只有前面的语句执行完成之后才能执行后面的语句。 2、如果语句包括延迟或者事件控制,那么延迟总是相对于前面那条

14、语句执行完成的仿真时间的。,reg x, y; reg 1:0 z, w; initial begin x=1b0; /仿真时刻0完成 #5 y=1b1; /仿真时刻5完成 #10 z=x,y; /仿真时刻15完成 #20 w=y,x;/仿真时刻35完成 end,(2)并行块 关键词fork_join声明 特点:1、块内语句并行执行; 2、语句执行顺序是由各自语句内延迟或事件控制决定的; 3、语句中的延迟或事件控制是相对于快语句开始执行的时刻而言的;,reg x, y; reg 1:0 z, w; initial fork x=1b0; /仿真时刻0完成 #5 y=1b1; /仿真时刻5完成

15、#10 z=x,y; /仿真时刻10完成 #20 w=y,x;/仿真时刻20完成 join,(3)块语句特点 1、嵌套块 initial begin x=1b0; fork #5 y=1b1; #10 z=x,y; join #20 w=y,x; end,2、命名块 特点:(1)命名块中可以声明局部变量; (2)命名块是设计层次的一部分,命名块中声明的变量可以通过层次名引用进行访问; (3)命名块可以被禁用,例如停止其执行,5、过程块,(1)initial语句 格式:initial begin 语句1; 语句2; 语句n; end,例1:对存储器变量赋初始值。 initial begin ar

16、eg=0; for(index=0;indexsize; index=index+1) memoryindex=0; end,例2:用initial语句生成激励波形。 initial begin inputs=b000000; #10 inputs=b011001; #10 inputs=b011011; #10 inputs=b011000; #10 inputs=b001000; end,(2)always语句 always语句在仿真过程中是不断活动着的。后跟的过程块是否执行,则看它的触发条件是否满足,如满足则执行一次;如不断满足,则不断地循环执行。其声明格式如下:always alway

17、s语句由于其不断活动的特性,只有和一定的时序控制结合在一起才有用。如果一个always语句没有时序控制,则这个always语句将会使仿真器产生死锁。 例1:always areg=areg; 生成一个0延迟的无限循环跳变过程,发生仿真死锁。 例2:always #half_period areg=areg; 生成一个周期为period的无限延续的信号波形。常用来描述时钟信号,并作为激励信号来测试所设计的电路。 always的时间控制可以是沿触发也可以是沿电平触发的,可以是单信号也可以是多信号,中间用关键字or连接。 沿触发的always块常常描述时序行为,如有限状态机。 电平触发的always块常常用来描述组合逻辑的行为。,例3: reg7:0 counter; reg tick; always(posedge areg) begin tick=tick; counter=counter+1;

温馨提示

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

评论

0/150

提交评论