




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系第六章第六章 Verilog行为语句行为语句6.1 过程语句过程语句 6.2 块语句块语句 6.3 赋值语句赋值语句6.4 条件语句条件语句 6.5 循环语句循环语句 6.6 编译指示编译指示语句语句 6.7 任务与函数语句任务与函数语句 6.8 顺序执行与并发执行顺序执行与并发执行第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系在一个模块(在一个模块(mo
2、dule)中,使用中,使用initial和和always语句的次数语句的次数是不受限制的。是不受限制的。initial语句常用于仿真中的初始化,语句常用于仿真中的初始化,initial过过程块中的语句仅执行一次;程块中的语句仅执行一次;always块内的语句则是不断重复块内的语句则是不断重复执行的执行的, ,直到仿真过程结束。直到仿真过程结束。6.1 过程语句过程语句(initial、always)第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系6.1.1 always过程语句使用模板过程语句使用模板:lalways ()begin/过程赋值过程
3、赋值/if-else,case,casex,casez选择语句选择语句/while,repeat,for循环循环/task,function调用调用endl“always”过程语句通常是带有触发条件的,触发过程语句通常是带有触发条件的,触发条件写在敏感信号表达式中,只有当触发条件满条件写在敏感信号表达式中,只有当触发条件满足时,其后的足时,其后的“begin-end”块语句才能被执行。块语句才能被执行。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系always的敏感信号表达式的敏感信号表达式:l敏感信号表达式又称事件表达式或敏感信号列表,即当敏
4、感信号表达式又称事件表达式或敏感信号列表,即当该表达式中变量的值改变时,就会引发块内语句的执行。该表达式中变量的值改变时,就会引发块内语句的执行。因此敏感信号表达式中应列出影响块内取值的所有信号。因此敏感信号表达式中应列出影响块内取值的所有信号。若有两个或两个以上信号时,它们之间用若有两个或两个以上信号时,它们之间用“or”连接。连接。l例如:例如:(a) a) / /当信号当信号a a的值发生改变的值发生改变 (a or b) a or b) / /当信号当信号a a或信号或信号b b的值发生改变的值发生改变 (posedge clock) /posedge clock) /当当clock
5、clock 的上升沿到来时的上升沿到来时 (negedge clock) /negedge clock) /当当clock clock 的下降沿到来时的下降沿到来时 (posedge clk or negedge reset) posedge clk or negedge reset) / /当当clkclk的上升沿到来或的上升沿到来或resetreset信号的下降沿到来信号的下降沿到来第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系敏感信号列表举例敏感信号列表举例44选选1 1数据选择器数据选择器:lmodule mux4_1(out,in0,
6、in1,in2,in3,sel);output out;input in0,in1,in2,in3;input1:0 sel; reg out;always (in0 or in1 or in2 or in3 or sel) /敏感信号列表敏感信号列表case(sel) 2b00: out=in0; 2b01: out=in1; 2b10: out=in2; 2b11: out=in3; default: out=2bx;endcaseendmodule第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系posedge和和negedge关键字关键字:
7、 :l对于时序电路,事件通常是由时钟边沿触发的,为表达对于时序电路,事件通常是由时钟边沿触发的,为表达边沿这个概念,边沿这个概念,Verilog提供了提供了posedge和和negedge关键字关键字来描述。来描述。l【例】同步置数、同步清零的计数器:【例】同步置数、同步清零的计数器:module count(out,data,load,reset,clk);output7:0 out; input7:0 data;input load,clk,reset; reg7:0 out;always (posedge clk) /clk上升沿触发上升沿触发 begin if(!reset) out=
8、8h00; /同步清同步清0, 低电平有效低电平有效 else if(load) out=data; /同步预置同步预置 else out=out+1;/计数计数 endendmodule第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系敏感信号列表中用逗号分隔敏感信号敏感信号列表中用逗号分隔敏感信号l在在Verilog-1995中,书写敏感信号列表时,通常用中,书写敏感信号列表时,通常用“or”来连接敏感信号,如来连接敏感信号,如:always (a or b or cin) cout, sum=a+b+cin; always (posedge
9、clk or negedge clr) if (!clr) q=0; else q=d;l在在Verilog-2001中可用逗号分隔敏感信号,上面的语句可中可用逗号分隔敏感信号,上面的语句可写为写为:always (a, b, cin) /用逗号分隔信号用逗号分隔信号cout, sum=a+b+cin;always (posedge clock, negedge clr)if (!clr) q=0;else q end_wave; join并行块并行块fork_joinbegin #50 r = h35; #50 r = hE2; #50 r = h00; #50 r = hF7; #50 -
10、 end_wave; end第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系赋值分为两类赋值分为两类:连续连续赋值语句赋值语句(Continuous Assignments)assign语句,用于对语句,用于对wire型变量赋值,是描述型变量赋值,是描述组合逻辑组合逻辑最最常用的方法之一。常用的方法之一。【例例】assign c=a&b; /a、b、c均为均为wire型变量型变量详见详见5.2。过程过程赋值语句赋值语句(Procedural Assignments)用于对用于对reg型变量赋值,有两种方式:型变量赋值,有两种方式:u非阻塞
11、非阻塞(non-blocking)赋值方式:赋值方式: 赋值符号为赋值符号为=,如,如 b = a ; u阻塞(阻塞(blocking)赋值方式:赋值方式: 赋值符号为赋值符号为=,如,如 b = a 6.3 过程过程赋值语句赋值语句第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系19191. 1. 非阻塞非阻塞赋值方式赋值方式 always (posedge clk) begin b = a ; c = b; endclkDFFcD QD QabDFF非阻塞非阻塞赋值赋值在块结束时才在块结束时才完成赋值操作!完成赋值操作!注:注:c c的值比的
12、值比b b的值落后一个时钟周期!的值落后一个时钟周期!非阻塞赋值与阻塞非阻塞赋值与阻塞赋值的区别赋值的区别第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系2. 2. 阻塞阻塞赋值方式赋值方式 always (posedge clk) begin b = a ; c = b; end阻塞阻塞赋值赋值在在该语句结束时就该语句结束时就完成赋值操作!完成赋值操作!clkDFFcD Qab注:注:在一个块语句中,如果有多条阻塞在一个块语句中,如果有多条阻塞赋值语句,在前赋值语句,在前面的赋值语句没有完成之前,后面的语句就不能被面的赋值语句没有完成之前,后面
13、的语句就不能被执行,就像被阻塞了一样,因此称为执行,就像被阻塞了一样,因此称为阻塞阻塞赋值方式赋值方式。 这里这里c的值与的值与b的值一样的值一样 !第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系非阻塞赋值仿真波形图非阻塞赋值仿真波形图 阻塞赋值仿真波形图阻塞赋值仿真波形图 第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系u非阻塞(非阻塞(non-blocking)赋值方式赋值方式 ( b= a):b的值被赋成新值的值被赋成新值a的操作的操作, 并不是立刻完成的,而是并不是立刻完成的,而是在块结束
14、时才完成;在块结束时才完成;块内的多条块内的多条赋值语句在块结束时同时赋值;赋值语句在块结束时同时赋值;硬件有对应的电路。硬件有对应的电路。u阻塞(阻塞(blocking)赋值方式赋值方式 ( b = a):b的值立刻被赋成新值的值立刻被赋成新值a;完成该赋值语句后才能执行下一句的操作;完成该赋值语句后才能执行下一句的操作;硬件没有对应的电路,因而综合结果未知。硬件没有对应的电路,因而综合结果未知。非阻塞非阻塞赋值与赋值与阻塞阻塞赋值方式的主要区别赋值方式的主要区别v在同一过程中对同一变量的赋值,两者在同一过程中对同一变量的赋值,两者不不允许允许混混合使合使用!用!v建议在可综合风格的模块中使
15、用建议在可综合风格的模块中使用非阻塞非阻塞赋值!赋值!第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系高级程序语句高级程序语句条件语句条件语句循环控制语句循环控制语句if-else条件条件case条件条件foreverrepeatwhilefor6.4 条件语句条件语句第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系6.4.1 if条件语句条件语句if-else语句使用方法有以下语句使用方法有以下3种:种:if(表达式)表达式) 语句语句1;if(表达式)表达式) 语句语句1; else 语句语句2
16、;if(表达式表达式1) 语句语句1; else if(表达式表达式2) 语句语句2; else if(表达式表达式3) 语句语句3; else if(表达式表达式n) 语句语句n; else 语句语句n+1;第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系【例例】 模为模为60的的BCD码加法计数器码加法计数器counter60.valwaysalways块语句和块语句和assignassign语句是并语句是并行执行的!行执行的!在在alwaysalways块内的语块内的语句是顺序执行的!句是顺序执行的!第六章第六章 Verilog行为语句行为
17、语句材料与能源学院微电子工程系材料与能源学院微电子工程系使用使用if语句五点说明:语句五点说明:三种形式的三种形式的if语句中在语句中在if后面都有后面都有“表达式表达式”,一般为,一般为逻辑表达式或关系表达式,且必须放在括号中。逻辑表达式或关系表达式,且必须放在括号中。第二、第三种形式的第二、第三种形式的if语句中,在每个语句中,在每个else前面有一前面有一分号,整个语句结束处有一分号。分号,整个语句结束处有一分号。在在if和和else后面可以包含一个内嵌的操作语句后面可以包含一个内嵌的操作语句(如上例如上例),也可以有多个操作语句,此时用也可以有多个操作语句,此时用 begin和和end
18、这两个这两个关键词将几个语句包含起来成为一个复合块语句。关键词将几个语句包含起来成为一个复合块语句。允许允许“表达式表达式”简写。如:简写。如:if(en=1)可简写为可简写为if(en)。if语句的嵌套在语句的嵌套在if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套。语句的嵌套。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系使用条件语句注意事项使用条件语句注意事项u应注意列出所有条件分支,否则当条件不满足应注意列出所有条件分支,否则当条件不满足时,编译器会生成一个锁存器保持原值时,编译器会生成一个锁存器保持原值
19、;u这一点可用于设计时序电路,如计数器:条件这一点可用于设计时序电路,如计数器:条件满足时加满足时加1,否则保持原值不变。,否则保持原值不变。u而在组合电路设计中,应避免而在组合电路设计中,应避免生成隐含锁存器生成隐含锁存器!有效的方法是在有效的方法是在if语句最后写上语句最后写上else项;在项;在case语语句最后写上句最后写上default项。项。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系例例设计一个数据选择器设计一个数据选择器always (al or d) begin if(al) q=d; else q=0; end0dalqm
20、ultiplexer当当al为为0时,时,q等于等于0!如何正确使用如何正确使用if语句?语句?生成了不想要的锁存器:生成了不想要的锁存器:不会生成锁存器:不会生成锁存器:always (al or d) begin if(al) q=d; enddDFFD Qalq当当al为为0时,时,q保持原值!保持原值!第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系如何正确使用如何正确使用case语句?语句?always (sel1:0 or a or b) case(sel1:0) 2b00: q=a; 2b11: q=b; endcase生成了不想要
21、的锁存器:生成了不想要的锁存器:例例 设计一个数据选择器设计一个数据选择器always (sel1:0 or a or b) case(sel1:0) 2b00: q=a; 2b11: q=b; default: q=b0; endcase不会生成锁存器:不会生成锁存器:v避免生成锁存器的原则:避免生成锁存器的原则:u如果用到如果用到if语句,最好写上语句,最好写上else项;项;u如果用到如果用到case语句,最好写上语句,最好写上default项。项。当当sel为为00或或11以外的以外的值时,值时,q保持原值!保持原值!第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程
22、系材料与能源学院微电子工程系6.4.2 case条件语句条件语句条件语句分为两种:条件语句分为两种:case语句和语句和if-else语句语句,它们都是顺序它们都是顺序语句,应放在语句,应放在“always”块内。块内。case语句的使用格式如下:语句的使用格式如下:case (敏感表达式)敏感表达式) 值值1: 语句语句1; /case分支项分支项 值值2: 语句语句2; 值值n: 语句语句n; default:语句语句n+1; endcaseu当敏感表达式取不同的值时当敏感表达式取不同的值时, 执行不同的语句。执行不同的语句。u功能功能:当某个当某个(控制控制)信号取不同的值时,给另一个(
23、输出)信号取不同的值时,给另一个(输出)信号赋不同的值。常用于多条件译码电路信号赋不同的值。常用于多条件译码电路(如译码器、数如译码器、数据选择器、状态机、微处理器的指令译码据选择器、状态机、微处理器的指令译码)。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系BCD码码七段数码管显示译码器七段数码管显示译码器module decode4_7(decodeout,indec);module decode4_7(decodeout,indec);output6:0 decodeout;output6:0 decodeout;input3:0 ind
24、ec; reg6:0 decodeout;input3:0 indec; reg6:0 decodeout;always (indec)always (indec)begin case(indec) begin case(indec) / /用用casecase语句进行译码语句进行译码 4 4d0:decodeout=7b1111110;d0:decodeout=7b1111110; 4d1:decodeout=7b0110000; 4d1:decodeout=7b0110000; 4d2:decodeout=7b1101101; 4d2:decodeout=7b1101101; 4d3:de
25、codeout=7b1111001; 4d3:decodeout=7b1111001; 4d4:decodeout=7b0110011; 4d4:decodeout=7b0110011; 4d5:decodeout=7b1011011; 4d5:decodeout=7b1011011; 4d6:decodeout=7b1011111; 4d6:decodeout=7b1011111; 4d7:decodeout=7b1110000; 4d7:decodeout=7b1110000; 4d8:decodeout=7b1111111; 4d8:decodeout=7b1111111; 4d9:de
26、codeout=7b1111011; 4d9:decodeout=7b1111011; default: decodeout=7bx; default: decodeout=7bx;endcase endendcase endendmoduleendmodule第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系使用使用case语句说明:语句说明:其中其中“敏感敏感表达式表达式”又称为又称为“控制控制表达式表达式”,通常表示,通常表示为控制信号的某些位。为控制信号的某些位。值值1值值n称为称为分支分支表达式,用控制信号的具体状态值表示,表达式,用控制
27、信号的具体状态值表示,因此又称为因此又称为常量常量表达式。表达式。default项可有可无,一个项可有可无,一个case语句里只能有一个语句里只能有一个default项项!值值1值值n必须互不相同,否则矛盾。必须互不相同,否则矛盾。值值1值值n的位宽必须相等,且与控制表达式的位宽相同。的位宽必须相等,且与控制表达式的位宽相同。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系是是case语句的两种变体语句的两种变体u在在case语句中,分支表达式每一位的值都是确语句中,分支表达式每一位的值都是确定的(或者为定的(或者为0,或者为,或者为1););u
28、在在casez语句中,若分支表达式某些位的值为高语句中,若分支表达式某些位的值为高阻值阻值z,则不考虑对这些位的比较;,则不考虑对这些位的比较;u在在casex语句中,若分支表达式某些位的值为语句中,若分支表达式某些位的值为z或不定值或不定值x,则不考虑对这些位的比较。,则不考虑对这些位的比较。u在分支表达式中,可用在分支表达式中,可用“?”来标识来标识x或或z。casez与与casex语句语句第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系module mux_z(out,a,b,c,d,select); output out; input a
29、,b,c,d; input3:0 select; reg out; /必须声明必须声明 always (select3:0 or a or b or c or d) begin casez (select) 4b?1: out = a; 4b?1? : out = b; 4b? 1? : out = c; 4b 1? : out = d; endcase endendmodule【例例】 用用casez描述的数据选择器描述的数据选择器这 里这 里 “ ? ”表示高阻态表示高阻态第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系6.5 循环语句循环语
30、句循环语句分为循环语句分为4种:种:for语句语句通过通过3个步骤来决定语句的循环执行个步骤来决定语句的循环执行:(1)给控制循环次数的变量赋初值。)给控制循环次数的变量赋初值。(2)判定循环执行条件,若为假则跳出循环;若为真,)判定循环执行条件,若为假则跳出循环;若为真,则执行指定的语句后,转到第(则执行指定的语句后,转到第(3)步。)步。(3)修改循环变量的值,返回第()修改循环变量的值,返回第(2)步)步repeat语句语句连续执行一条语句连续执行一条语句n次次while语句语句执行一条语句,直到循环执行条件不满足;执行一条语句,直到循环执行条件不满足;若一开始条件即不满足,则该语句一次
31、也不能被执行!若一开始条件即不满足,则该语句一次也不能被执行!forever语句语句无限连续地执行语句,可用无限连续地执行语句,可用disable语句语句中断。中断。generate语句语句Verilog-2001新增特性新增特性。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系for语句语句for语句的一般形式为:语句的一般形式为: for(表达式表达式1;条件表达式;表达式;条件表达式;表达式2) 语句语句它的执行过程为:它的执行过程为:执行表达式执行表达式1,实际是对,实际是对循环变量赋初值循环变量赋初值;判断条件表达式判断条件表达式,若其
32、值为真若其值为真(非非0),则执行,则执行for语句中语句中指定语句,然后执行下面的第指定语句,然后执行下面的第3步;若为假步;若为假(0),则结,则结束循环,转到第束循环,转到第步。步。 条件表达式实际为循环结束条条件表达式实际为循环结束条件件。在执行指定的语句后,执行表达式在执行指定的语句后,执行表达式2,然后继续判断条,然后继续判断条件表达式。件表达式。表达式表达式2实际为循环控制变量增量表达式实际为循环控制变量增量表达式。执行执行for语句下面的语句。语句下面的语句。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系module vote7
33、 ( pass,vote ); input 6:0 vote; output pass; reg2:0 sum; /sum/sum为为regreg型变量,用于统计赞成的人数型变量,用于统计赞成的人数 integer i; reg pass; always (vote) begin sum = 0; /sum/sum初值为初值为0 0 for(i = 0;i=3d4) 第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系while语句语句while语句带有一个条件控制表达式,在条件满足时,语句带有一个条件控制表达式,在条件满足时,重复执行过程语句。重复
34、执行过程语句。while语句的格式如下:语句的格式如下: while(条件表达式条件表达式) 语句;语句; 或或 while(条件表达式条件表达式) begin 多条语句多条语句 ; end执行过程:首先判读条件表达式是否成立,如成立,执行过程:首先判读条件表达式是否成立,如成立,则执行过程语句,然后再对条件表达式是否成立进行则执行过程语句,然后再对条件表达式是否成立进行判断,只要成立就再次执行过程语句,如此不断重复,判断,只要成立就再次执行过程语句,如此不断重复,直到条件表达式不成立,程序退出直到条件表达式不成立,程序退出while语句。语句。MAX + PLUS II不支持,但不支持,但Q
35、uartus II支持!支持!第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系下例用下例用while循环语句对循环语句对rega这个这个8位二进制数中值为位二进制数中值为1的位的位进行计数。进行计数。 begin:count1s reg7:0 tempreg; count0; tempregrega; while (tempreg=1) begin if (tempreg 0) countcount+1; tempregtempreg1; end end第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程
36、系repeat语句语句repeat语句是重复执行若干次的语句,带有一个控制语句是重复执行若干次的语句,带有一个控制循环次数的常数或变量。循环次数的常数或变量。repeat语句的格式如下:语句的格式如下: repeat(表达式表达式) 语句;语句; 或或 repeat(表达式表达式) begin 多条语句多条语句 ; end在在repeat语句中,其表达式为常量表达式,用以控制语句中,其表达式为常量表达式,用以控制循环次数。所以,无需循环次数控制增量表达式及其循环次数。所以,无需循环次数控制增量表达式及其计算。计算。MAX + PLUS II不支持,但不支持,但Quartus II支持!支持!第
37、六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系module mult_repeat(outcome, a, b);parameter size=8; inputsize:1 a,b;output2*size:1 outcome;reg2*size:1 temp_a,outcome;regsize:1 temp_b;always (a or b) begin outcome=0; temp_a=a; temp_b=b; repeat(size) /repeat/repeat语句,语句,sizesize为循环次数为循环次数 begin if(temp
38、_b1) / /* *如果如果temp_btemp_b的最低位为的最低位为1 1,就执就执 行下面的加法行下面的加法* */ / outcome=outcome +temp_a; temp_a=temp_a1; /操作数操作数b b右移一位右移一位 end endendmodule【例例】 用用repeat实现实现8位二进制数乘法位二进制数乘法移位相加操作移位相加操作8次,实现乘法运算次,实现乘法运算第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系forever语句语句forever语句是无限循环语句,该循环语句中的循环语句是无限循环语句,该循环
39、语句中的循环体部分将不断重复执行。该语句不需要声明任何变体部分将不断重复执行。该语句不需要声明任何变量。量。forever语句的格式如下:语句的格式如下: forever 语句;语句; 或或 forevere begin 多条语句多条语句 ; endforever循环语句常用于产生周期性的波形,作为仿循环语句常用于产生周期性的波形,作为仿真测试信号。它与真测试信号。它与always语句不同之处在于它不能语句不同之处在于它不能独立写在程序中,而必须写在独立写在程序中,而必须写在initial块中。块中。一般情况下是不可综合的!常用在测试文件中一般情况下是不可综合的!常用在测试文件中第六章第六章
40、Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系initial begin : Clocking clk = 0; #10 forever #10 clk = !clk; endinitial begin : Stimulus disable Clocking; / 停止时钟停止时钟 end 【例例】 用用forever产生时钟信号产生时钟信号第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系generate语句语句Verilog-2001新增了语句新增了语句“generate”,通过,通过generate循环,可
41、以产生一个对象(比如一个循环,可以产生一个对象(比如一个元件或一个模块等)的多个例化,为可变尺度的元件或一个模块等)的多个例化,为可变尺度的设计提供了方便。设计提供了方便。generate语句语句有有generate-for、generate-if、genetate-case。generate-for语句语句必须用必须用genvar关键字定义关键字定义for的索引变量;的索引变量;for的内容必须用的内容必须用beginend块语句包起来,块语句包起来,哪怕只有一句;哪怕只有一句;beginend块必须起个名字。块必须起个名字。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工
42、程系材料与能源学院微电子工程系module gray2bin1 ( bin, gray ); parameter SIZE = 8;input SIZE-1:0 bin; output SIZE-1:0 gray;genvar i;generatefor (i = 0;i=SIZE;i = i+1)begin:b1assingn bini=graySIZE-1:0 ;endendgenerateendmodule第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系等同于下面的语句:等同于下面的语句:assingn bin0=graySIZE-1:0
43、;assingn bin1=graySIZE-1:1 ;assingn bin2=graySIZE-1:2 ;assingn bin3=graySIZE-1:3 ;assingn bin4=graySIZE-1:4 ;assingn bin5=graySIZE-1:5 ;assingn bin6=graySIZE-1:6 ;assingn bin7=graySIZE-1:7 ;第五章第五章 Verilog运算符与结构描述语句运算符与结构描述语句 材料与能源学院微电子工程系材料与能源学院微电子工程系6.6 编译指示语句编译指示语句Verilog允许在程序中使用特殊的编译向导允许在程序中使用特殊的
44、编译向导( (Compiler Directives)语句,在编译时,通常先对语句,在编译时,通常先对这些向导语句进行这些向导语句进行“预处理预处理”,然后再将预处理,然后再将预处理的结果和源程序一起进行编译。的结果和源程序一起进行编译。向导语句以符号向导语句以符号“”开头,以区别于其它语句。开头,以区别于其它语句。Verilog提供了十几条编译向导语句,如:提供了十几条编译向导语句,如:define、ifdef、else、endif、restall等。比较常用的有等。比较常用的有define,include和和ifdef、else、endif等等。第六章第六章 Verilog行为语句行为语句
45、材料与能源学院微电子工程系材料与能源学院微电子工程系宏替换宏替换definedefine语句用于将一个简单的名字或标志符(或称语句用于将一个简单的名字或标志符(或称为宏名)来代替一个复杂的名字或字符串,其使用为宏名)来代替一个复杂的名字或字符串,其使用格式为:格式为:define 宏名(标志符)宏名(标志符) 字符串字符串如:如:define sum ina+inb+inc+ind在上面的语句中,用简单的宏名在上面的语句中,用简单的宏名sum来代替了一个来代替了一个复杂的表达式复杂的表达式ina+inb+inc+ind,采用了这样的定义采用了这样的定义形式后,在后面的程序中,就可以直接用形式后
46、,在后面的程序中,就可以直接用sum来代来代表表达式表表达式ina+inb+inc+ind了。了。define不是不是Verilog HDL语句,不必在行末加分号!语句,不必在行末加分号!define属于编译指示语句,不参与综合。属于编译指示语句,不参与综合。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系关于宏定义的说明关于宏定义的说明宏名可以用宏名可以用大写大写字母,也可用字母,也可用小写小写字母表示;但字母表示;但建建议用大写字母议用大写字母,以与变量名相区别。,以与变量名相区别。 define语句可以写在模块定义的语句可以写在模块定义的外
47、面外面或或里面里面。宏。宏名的有效范围为定义命令之后到源文件结束。名的有效范围为定义命令之后到源文件结束。在引用已定义的宏名时,必须在其前面加上符号在引用已定义的宏名时,必须在其前面加上符号“ ”。 使用宏名代替一个字符串,可简化书写,便于记忆,使用宏名代替一个字符串,可简化书写,便于记忆,易于修改。易于修改。预处理时只是将程序中的宏名替换为字符串,不管预处理时只是将程序中的宏名替换为字符串,不管含义是否正确。只有在编译宏展开后的源程序时才含义是否正确。只有在编译宏展开后的源程序时才报错。报错。宏名和宏内容必须在同一行中进行声明宏名和宏内容必须在同一行中进行声明!第六章第六章 Verilog行
48、为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系文件包含文件包含includeinclude是文件包含语句,它可将一个文件全部是文件包含语句,它可将一个文件全部包含到另一个文件中。其格式为:包含到另一个文件中。其格式为:include “文件名文件名”使用使用include语句时应注意以下几点:语句时应注意以下几点:一个一个include语句只能指定一个被包含的文件。语句只能指定一个被包含的文件。include语句可以出现在源程序的任何地方。语句可以出现在源程序的任何地方。被包含的文件若与包含文件不在同一个子目被包含的文件若与包含文件不在同一个子目录下,必须指明其路径名。录下
49、,必须指明其路径名。文件包含允许多重包含,比如文件文件包含允许多重包含,比如文件1包含文件包含文件2,文件,文件2又包含文件又包含文件3等。等。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系 include “././halfadder.v” /双引号内是所包含文件的路径和文件名双引号内是所包含文件的路径和文件名 module adder; endmodule【例例】 假设假设halfadder.v文件的内容如下:文件的内容如下: module halfadder; endmodule 编 译 时 ,编 译 时 , a d d e r. v 中
50、 的中 的 i n c l u d e 这 一 行 将 由 文 件这 一 行 将 由 文 件“././halfadder.v”的内容替代。的内容替代。adder.v的内容变成:的内容变成: module halfadder; endmodule module adder; endmodule第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系 时间尺度时间尺度timescale在在Verilog HDL模型中,所有时延都用单位时间表示。模型中,所有时延都用单位时间表示。timescale定义时延单位和时延精度,其格式如下定义时延单位和时延精度,其格式
51、如下:timescale在这条命令中,时间单位参量是用来定义模块中仿真时在这条命令中,时间单位参量是用来定义模块中仿真时间和延迟时间的基准单位的。时间精度参量是用来声明间和延迟时间的基准单位的。时间精度参量是用来声明该模块的仿真时间的精确程度的,该参量被用来对延迟该模块的仿真时间的精确程度的,该参量被用来对延迟时间值进行取整操作时间值进行取整操作(仿真前仿真前),因此该参量又可以被称,因此该参量又可以被称为取整精度为取整精度。时间单位和时间精度参量值的数字必须是整数,其有效时间单位和时间精度参量值的数字必须是整数,其有效数字为数字为1,10,100,单位为,单位为s,ms,us,ns,ps,f
52、s。如果在同一个程序设计里,存在多个如果在同一个程序设计里,存在多个timescale命令,命令,则用最小的时间精度值来决定仿真的时间单位。则用最小的时间精度值来决定仿真的时间单位。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系例:例: timescale 1ns/100ps module andfunc (z, a, b); output z; input a, b; and #(5.22, 6.17) u1 (z, a, b); /规定上升及下降时延规定上升及下降时延 endmodule 时延单位是时延单位是ns,时延精度是,时延精度是0.
53、1ns/100ps)。因此,时。因此,时延值延值5.22对应对应5.2ns(精度为(精度为0.1ns),时延),时延6.17对应对应6.2ns。 若替换为若替换为timescale 10ns/1ns。 那么那么5.22对应对应52ns,6.17对应为对应为62ns。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系 条件编译命令条件编译命令ifdef、else、endififdef 宏名宏名程序段程序段 1 endif 它的作用是当宏名已经被定义过它的作用是当宏名已经被定义过(用用define命令定命令定义义),则对程序段,则对程序段1进行编译;否
54、则程序段进行编译;否则程序段1被忽略。被忽略。ifdef 宏名宏名 程序段程序段1 else 程序段程序段2 endif 它的作用是当宏名已经被定义过它的作用是当宏名已经被定义过(用用define命命令定义令定义),则对程序段,则对程序段1进行编译,程序段进行编译,程序段2将被忽略;否将被忽略;否则编译程序段则编译程序段2,程序段,程序段1被忽略。被忽略。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系6.7 任务与函数任务与函数任务任务( (task)和和函数函数( (function)语句分别用来由用户定语句分别用来由用户定义任务和函数。义任
55、务和函数。任务和函数往往是大的程序模块中在任务和函数往往是大的程序模块中在不同不同地点地点多次多次用到的用到的相同相同的程序段。的程序段。利用任务和函数可将一个很大的程序模块分解为许利用任务和函数可将一个很大的程序模块分解为许多较小的任务和函数,便于理解和调试。多较小的任务和函数,便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和输入、输出和总线信号的值可以传入、传出任务和函数。函数。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系6.7.1 任务任务(task) 任务是一段封装在关键词任务是一段封装在关键词task-endtask之间
56、的程序。任之间的程序。任务是通过调用来执行的,任务有接受数据的输入端和返回数务是通过调用来执行的,任务有接受数据的输入端和返回数据的输出端。另外,任务可以彼此调用,而且任务内还可以据的输出端。另外,任务可以彼此调用,而且任务内还可以调用函数。调用函数。任务定义任务定义格式格式: task ; /注意无端口列表注意无端口列表 端口及数据类型声明语句;端口及数据类型声明语句; 其它语句;其它语句; endtask第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系定义任务的注意事项:定义任务的注意事项:第一行第一行task语句不能列出端口名列表。语句不能
57、列出端口名列表。在任务定义结构中的行为语句部分可以有延时语句、敏感在任务定义结构中的行为语句部分可以有延时语句、敏感事件控制语句等时间控制语句出现。事件控制语句等时间控制语句出现。一个任务可以没有输入、输出和双向端口,也可以有一个一个任务可以没有输入、输出和双向端口,也可以有一个或多个输入、输出和双向端口。或多个输入、输出和双向端口。一个任务可以没有返回值,也可以通过输出端口或双向端一个任务可以没有返回值,也可以通过输出端口或双向端口返回一个或多个返回值。口返回一个或多个返回值。在一个任务中可以条用其它的任务和函数,也可以调用该在一个任务中可以条用其它的任务和函数,也可以调用该任务本身。任务本
58、身。在任务定义结构内可以出现在任务定义结构内可以出现disable中止语句,这条语句的中止语句,这条语句的执行将中断正在执行的任务,程序将返回调用任务的地方执行将中断正在执行的任务,程序将返回调用任务的地方继续向下执行。继续向下执行。第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系【例例】: task read_mem; /任务定义,任务名任务定义,任务名read_mem input 15:0 address; /输入端口说明输入端口说明 output 31:0 data; /输出端口说明输出端口说明 reg 3:0 counter; /局部变量
59、说明局部变量说明 reg 7:0 temp 1:4 ; /局部变量说明局部变量说明 begin for ( counter=1; counter=4; counter=counter+1) temp counter =mem address+counter-1; data= temp1, temp2, temp3, temp4; end endtask /任务定义任务定义结尾结尾第六章第六章 Verilog行为语句行为语句材料与能源学院微电子工程系材料与能源学院微电子工程系任务的调用任务的调用 任务的调用是通过任务调用语句实现的,任务调用任务的调用是通过任务调用语句实现的,任务调用语句格式:语
60、句格式: (端口端口1,端口,端口2,.,端口,端口N);任务调用的注意事项任务调用的注意事项:任务调用语句只能出现在过程块内。任务调用语句只能出现在过程块内。任务调用语句就像一条普通的行为语句那样得到执行。任务调用语句就像一条普通的行为语句那样得到执行。当被调用的任务具有输入或输出端口时,任务调用语当被调用的任务具有输入或输出端口时,任务调用语句必须包含端口名列表,这个列表内的端口名顺序和类句必须包含端口名列表,这个列表内的端口名顺序和类型必须与任务定义中端口说明部分的端口顺序和类型一型必须与任务定义中端口说明部分的端口顺序和类型一致。任务语句中的输出端口类型必须是寄存器型变量。致。任务语句中的输出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 郑州工程技术学院《医学微生物》2023-2024学年第二学期期末试卷
- 南京晓庄学院《机械加工工艺实训》2023-2024学年第二学期期末试卷
- 2025届浙江省金华市云富高级中学高三数学试题5月15日第7周测试题含解析
- 幼儿园大班大雪节气教育
- 长沙电力职业技术学院《声乐表演》2023-2024学年第二学期期末试卷
- 成都东软学院《概率论与数理统计B》2023-2024学年第一学期期末试卷
- 六盘水幼儿师范高等专科学校《微剧本创作》2023-2024学年第一学期期末试卷
- 天津中德应用技术大学《分子医学实验》2023-2024学年第一学期期末试卷
- 南京航空航天大学《西方教育哲学史》2023-2024学年第二学期期末试卷
- 中国矿业大学徐海学院《建筑制图实验》2023-2024学年第二学期期末试卷
- 2025年铅锌矿项目可行性研究报告
- 防春困防疲劳驾驶课件
- 玻璃更换施工方案
- 2025年中国职工保险互助会贵州省办事处招聘笔试参考题库含答案解析
- 2025年生猪屠宰兽医卫生检疫人员考试题(附答案)
- 2025-2030垃圾发电产业市场深度分析及前景趋势与投资研究报告
- 出生缺陷预防培训课件
- 中小学综合实践活动课程指导纲要:让学生更好地了解活动的意义和价值
- 物理-安徽省安庆市2024-2025学年高三下学期第二次模拟考试试卷(安庆二模)试题和答案
- 律师尽职调查工作方案
- 2024年杭州市粮食收储有限公司招聘考试真题
评论
0/150
提交评论