资源描述:
《Verilog行为描述高级语句.ppt》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第四讲行为描述高级语句◆过程语句(initial、always)◆块语句(begin-end、fork-join)◆赋值语句(assign、=、<=)◆条件语句(if-else、case、casez、casex)◆循环语句(for、forever、repeat、while)◆编译指示语句(`define、`include、`ifdef、`else、`endif)◆任务(task)与函数(function)◆顺序执行与并发执行VerilogHDL行为语句类别语句可综合性过程语句initialalways
2、√块语句串行块begin-end√并行块fork-join赋值语句持续赋值assign√过程赋值=、<=√条件语句if-else√case√循环语句for√repeatwhileforever编译向导语句`define√`include`ifdef,`else,`endif√4.1过程语句initialalways在一个模块(module)中,使用initial和always语句的次数是不受限制的。initial语句常用于仿真中的初始化,initial过程块中的语句仅执行一次;always块内的语句则
3、是不断重复执行的,always结构在仿真过程中是时刻活动的。always过程语句使用模板always@(<敏感信号表达式event-expression>)begin//过程赋值//if-else,case,casex,casez选择语句//while,repeat,for循环//task,function调用end“always”过程语句通常是带有触发条件的,触发条件写在敏感信号表达式中,只有当触发条件满足时,其后的“begin-end”块语句才能被执行。敏感信号表达式敏感信号表达式又称事件表达式或
4、敏感信号列表,即当该表达式中变量的值改变时,就会引发块内语句的执行。因此敏感信号表达式中应列出影响块内取值的所有信号。若有两个或两个以上信号时,它们之间用“or”连接。always@(a)//当信号a的值发生改变always@(aorb)//当信号a或信号b的值发生改变always@(posedgeclock)//当clock的上升沿到来时always@(negedgeclock)//当clock的下降沿到来时always@(posedgeclkornegedgereset)//当clk的上升沿到来或
5、reset信号的下降沿到来电平敏感,组合逻辑电路采用边沿敏感,时序逻辑用。不要混用敏感信号列表举例modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always@(in0,in1,in2,in3,sel)//敏感信号列表case(sel)2'b00:out=in0;2'b01:out=in1;2'b10:out=in2;2'b11:out=in3;default:out=2
6、'bx;endcaseendmodule4选1数据选择器posedge和negedge关键字对于时序电路,事件通常是由时钟边沿触发的,为表达边沿这个概念,Verilog提供了posedge和negedge关键字来描述。比如:【例】同步置数、同步清零的计数器modulecount(out,data,load,reset,clk);output[7:0]out;input[7:0]data;inputload,clk,reset;reg[7:0]out;always@(posedgeclk)//clk上升
7、沿触发beginif(!reset)out=8'h00;//同步清0,低电平有效elseif(load)out=data;//同步预置elseout=out+1;//计数endendmodule4.2块语句块语句是由块标志符begin-end或fork-join界定的一组语句,当块语句只包含一条语句时,块标志符可以缺省。顺序块,以关键字begin…end将多条语句封装成块。按顺序执行。beginregb=rega;regc=regb;end由于begin-end块内的语句顺序执行,在最后,将regb、
8、regc的值都更新为rega的值,该begin-end块执行完后,regb、regc的值是相同的。并行块(了解即可)以关键字fork…join将多条语句封装成块所有语句并行执行initialforka=0;#5b=1;#10c={a,b};#15d={b,a};join并行块容易引起竞争适用于绝对时间的控制实际建模时,并行块不可综合。用于仿真。仅用顺序块即可4.3过程赋值语句行为级的赋值语句必须出现在initial和always结构中过程赋值语句的左端都