




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
两类语句在模块中的使用一个模块可以包含多条always语句和多条initial语句。每条语句启动一个单独的控制流。各语句在0时刻开始并行执行。两类语句在模块中的使用一个模块可以包含多条always语句和1moduleTestXorBehavior;regSa,Sb,Zeus;initialbeginSa=0;Sb=0;#5Sb=1;#5Sa=1;#5Sb=0;endalways@(SaorSb)Zeus=Sa^Sb;always@(Zeus)$display("Attime%t,Sa=%d,Sb=%d,Zeus=%b",$time,Sa,Sb,Zeus);endmodulemoduleTestXorBehavior;always2Attime5,Sa=0,Sb=1,Zeus=1Attime10,Sa=1,Sb=1,Zeus=0Attime15,Sa=1,Sb=0,Zeus=1Attime5,Sa=0,Sb=1,Ze3always/initial块小结always/initial块小结4时序控制时序控制与过程语句关联。有2种时序控制形式:1)时延控制2)事件控制时序控制时序控制与过程语句关联。有2种时序控制形式:5时延控制#delayprocedural_statement#2Tx=Rx-5;initialbegin#3Wave='b0111;#6Wave='b1100;#7Wave='b0000;endend时延控制#delayprocedural_statemen6时延控制#delay;alwaysbegin#3;RefClk=0;#5;RefClk=1;end时延控制#delay;7时延可以是任意表达式#StrobeCompare=TX^ask;#(PERIOD/2)Clock=~Clock;如果时延表达式的值为0,则称之为显式零时延。显式零时延促发一个等待,等待所有其它在当前模拟时间被执行的事件执行完毕后,才将其唤醒;模拟时间不前进。如果时延表达式的值为x或z,其与零时延等效。如果时延表达式计算结果为负值,那么其二进制的补码值被作为时延。时延可以是任意表达式#Strobe8事件控制在事件控制中,always的过程语句基于事件执行。有两种类型的事件控制方式:1)边沿触发事件控制2)电平敏感事件控制事件控制在事件控制中,always的过程语句基于事件执行。有9敏感表always@(sensitivity_list)begin--Statement#1--…………..--Statement#Nend过程块在敏感表中任何信号发生变化后执行敏感表always@(sensitivity_list)10上升沿触发事件@eventprocedural_statement@(posedgeClock)Curr_State=Next_State;上升沿0->x0->z0->1x->1z->1上升沿触发事件@eventprocedural_stat11下降延触发事件@(negedgeReset)Count=0;下降沿1->x1->z1->0x->0z->0下降延触发事件@(negedgeReset)Count12timeRiseEdge,OnDelay;initialbegin//等待,直到在时钟上发生正边沿:@(posedgeClockA);RiseEdge=$time;//等待,直到在时钟上发生负边沿:@(negedgeClockA);OnDelay=$time-RiseEdge;$display("Theon-periodofclockis%t.",Delay);endtimeRiseEdge,OnDelay;13多事件触发@(posedgeClearornegedgeReset)Q=0;@(Ctrl_AorCtrl_B)Dbus='bz;多事件触发@(posedgeClearorneged14电平敏感事件控制wait(Condition)procedural_statement过程语句只有在条件为真时才执行。如果执行到该语句时条件已经为真,那么过程语句立即执行。在上面的表示形式中,过程语句是可选的。不可综合电平敏感事件控制wait(Condition)proce15wait(Sum>22)Sum=0;wait(DataReady)Data=Bus;wait(Preset);wait(Sum>22)16两种类型过程组合过程敏感表所有输入用于组合逻辑always@(aorborsel)时序过程对时钟或控制信号敏感always@(posedgeclkornegedgeclr)两种类型过程组合过程时序过程17语句块语句块提供将两条或更多条语句组合成语法结构上相当于一条语句的机制。顺序语句块(begin...end):语句块中的语句按给定次序顺序执行。并行语句块(fork...join):语句块中的语句并行执行。语句块语句块提供将两条或更多条语句组合成语法结构上相当于一条18语句块的标识符语句块的标识符是可选的,如果有标识符,寄存器变量可在语句块内部声明。带标识符的语句块可被引用;例如,语句块可使用禁止语句来禁止执行。语句块标识符是提供唯一标识寄存器的一种方式。所有的寄存器均是静态的,即它们的值在整个模拟运行中不变。语句块的标识符语句块的标识符是可选的,如果有标识符,寄存器变19顺序语句块begin[:block_id{declarations}]procedural_statement(s)end//产生波形:begin#2Stream=1;#5Stream=0;#3Stream=1;#4Stream=0;#2Stream=1;#5Stream=0;end顺序语句块begin[:block_id{declarat20beginPat=Mask|Mat;@(negedgeClk);//只有在Clk上出现负沿时才执行FF=&Pat;endbegin21begin:SEQ_BLK//带有标记reg[0:3]Sat;//局部寄存器说明Sat=Mask&Data;FF=^Sat;endbegin:SEQ_BLK//带有标记22并行语句块fork[:block_id{declarations}]procedural_statement(s);join并行语句块带有定界符fork和join。并行语句块中的各语句并行执行。并行语句块内的各条语句指定的时延值都与语句块开始执行的时间相关。当并行语句块中最后的动作执行完成时(最后的动作并不一定是最后的语句),顺序语句块的语句继续执行。并行语句块内的所有语句必须在控制转出语句块前完成执行。并行语句块fork[:block_id{declarat23#10;fork#2Stream=1;#7Stream=0;#10Stream=1;#14Stream=0;#16Stream=1;#21Stream=0;join#10;24顺序语句块和并行语句块混合always begin:SEQ_A #4Dry=5;//S1 fork:PAR_A//S2 #6Cun=7;//P1 begin:SEQ_B//P2 EXE=Box;//S6 #5Jap=Exe;//S7 end #2Dop=3;//P3 #4Gos=2;//P4 #8Pas=4;//P5 join #8Bax=1;//S3 #2Zoom=52;//S4 #6$stop;//S5 end顺序语句块和并行语句块混合always25过程性赋值过程性赋值分两类:1)阻塞性过程赋值2)非阻塞性过程赋值过程性赋值是在initial语句或always语句内的赋值。对寄存器数据类型的变量赋值。reg,integer,real,或者time。在下一语句对变量再次赋值前变量值保持不变。表达式的右端可以是任何表达式。过程性赋值过程性赋值分两类:26阻塞性过程赋值赋值操作符是“=”的过程赋值是阻塞性过程赋值。阻塞性过程赋值在其后所有语句执行前执行,即在下一语句执行前该赋值语句完成执行。always@(AorBorCin)begin:CARRY_OUTregT1,T2,T3;T1=A&B;T2=B&Cin;T3=A&Cin;Cout=T1|T2|T3;end阻塞性过程赋值赋值操作符是“=”的过程赋值是阻塞性过程赋值。27initialbeginClr=#50;Clr=#41;Clr=#100;endinitial28beginArt=0;Art=1;end对Art的0赋值被丢弃。begin29非阻塞性过程赋值在非阻塞性过程赋值中,使用赋值符号“<=”。beginLoad<=32;RegA<=Load;RegB<=Store;end非阻塞性过程赋值在非阻塞性过程赋值中,使用赋值符号“<=30在非阻塞性过程赋值中,对目标的赋值是非阻塞的,但可预定在将来某个时间步发生。当非阻塞性过程赋值被执行时,计算右端表达式,右端值被赋于左端目标,并继续执行下一条语句。预定的最早输出将在当前时间步结束时,这种情况发生在赋值语句中没有时延时。在当前时间步结束或任意输出被调度时,即对左端目标赋值。建议:对于时序过程用非阻塞性过程赋值在非阻塞性过程赋值中,对目标的赋值是非阻塞的,但可预定在将来31initialbeginClr<=#51;Clr<=#40;Clr<=#100;endendinitial32initialbeginCbn<=0;Cbn<=1;end同时对同一寄存器变量有多个赋值,Cbn的值变得不确定,即Cbn=x。VerilogHDL标准中既没有规定在这种情况下,何种事件被调度,也没有规定事件被取消的次序。结果是根据特定的Verilog模拟器的事件调度算法,Cbn将被赋值为0或1。initial33阻塞性赋值vs非阻塞性赋值阻塞性赋值(=)initialbegin#5a=b;#10c=d;end非阻塞性赋值initialbegin#5a<=b;#10c<=d;end阻塞性赋值vs非阻塞性赋值阻塞性赋值(=)非阻塞性赋值34reg[0:2]Q_State;initialbeginQ_State=3’b011;Q_State<=3’b100;$display(“CurrentvalueofQ_Stateis%b”,Q_State);#5;//等待一定的时延。$display(“ThedelayedvalueofQ_Stateis%b”,Q_State);end产生如下结果:CurrentvalueofQ_Stateis011ThedelayedvalueofQ_Stateis100reg[0:2]Q_State;35过程赋值与连续赋值间的差异过程赋值连续赋值在always语句或initial语句内出现在一个模块内出现执行与周围其它语句有关与其它语句并行执行;在右端操作数的值发生变化时执行驱动寄存器驱动线网使用“=”或“<=”赋值符号使用“=”赋值符号无assign关键词有assign关键词过程赋值与连续赋值间的差异过程赋值连续赋值在always语句36过程赋值vs连续赋值moduleProcedural;regA,B,Z;always@(B)beginZ=A;A=B;endendmodulemoduleContinuous;wireA,B,Z;assignZ=A;assignA=B;endmoduleZ等于B过程赋值vs连续赋值moduleProcedural;mo37行为语句行为语句–IF-ELSE语句–CASE语句–循环语句行为语句可以用于时序过程行为语句行为语句38if-else语句if(<condition1>)sequenceofstatement(s)elseif(<condition2>)sequenceofstatement(s)..elsesequenceofstatement(s)if-else语句if(<condition1>)39if-else语句always@(selaorselboraorborc)
begin
if(sela)
q=a;
else
if(selb)
q=b;
else
q=c;endif-else语句always@(selaorse40if-else语句条件按照从顶至底求值首先,条件为真则相应语句执行如果所有条件为假则执行“else”相关联的语句if-else语句条件按照从顶至底求值41if(Sum<60)beginGrade=C;Total_C=Total_c+1;endelseif(Sum<75)beginGrade=B;Total_B=Total_B+1;endelsebeginGrade=A;Total_A=Total_A+1;endif(Sum<60)42if-if-else格式if(Clk)if(Reset)Q=0;elseQ=D;可能会有二义性,建议不使用在VerilogHDL中将else与最近的没有else的if相关联来解决。在这个例子中,else与内层if语句相关联。if-if-else格式可能会有二义性,建议不使用43if(Sum<100)Sum=Sum+10;if(Nickel_In)Deposit=5;elseif(Dime_In)Deposit=10;elseif(Quarter_In)Deposit=25;elseDeposit=ERROR;if(Ctrl)beginif(~Ctrl2)Mux=4'd2;elseMux=4'd1;endelsebeginif(~Ctrl2)Mux=4'd8;elseMux=4'd4;endif(Sum<100)if(~Ctrl2)44case语句case(expression)<condition1>:sequenceofstatement(s)<condition2>:sequenceofstatement(s)..default:sequenceofstatement(s)endcasecase语句case(expression)45case语句首先对条件表达式求值,然后依次对各分支项求值并进行比较,第一个与条件表达式值相匹配的分支中的语句被执行。可以在1个分支中定义多个分支项;这些值不需要互斥,既可以互相交叠。缺省分支覆盖所有没有被分支表达式覆盖的其他分支。当没有分支符合时执行缺省分支。缺省分支是可选的。如果没有说明则无动作。缺省分支只能有一个,使用多缺省分支非法。使用缺省分支是一个好的编程习惯。分支表达式和各分支项表达式不必都是常量表达式。case语句进行位到位的精确比较(包括x和z)。在case语句中,x和z值作为文字值进行比较。case语句首先对条件表达式求值,然后依次对各分支项求值并进46多路器always@(seloraorborcord)begincase(sel) 2’b00: q=a; 2’b01: q=b; 2’b10: q=c; default: q=d;end多路器always@(seloraorborc47parameterMON=0,TUE=1,WED=2,THU=3,FRI=4,SAT=5,SUN=6;reg[0:2]Day;integerPocket_Money;case(Day)TUE:Pocket_Money=6;//分支1。MON,WED:Pocket_Money=2;//分支2。FRI,SAT,SUN:Pocket_Money=7;//分支3。default:Pocket_Money=0;//分支4。endcaseparameter48简单的计算器modulecompute(result,rega,regb,opcode);input[7:0]rega,regb;input[2:0]opcode;output[7:0]result;reg[7:0]result;always@(regaorregboropcode)case(opcode) 3'b000:result=rega+regb; 3'b001:result=rega-regb; 3'b010:result=rega*regb; 3'b100:result=rega/regb; default:begin result='bx; $display("nomatch"); endendcaseendmodule简单的计算器modulecompute(result,49如果case表达式和分支项表达式的长度不同的情况下,在进行任何比较前所有的case表达式都统一为这些表达式的最长长度。case(3'b101<<2)3'b100:$display("Firstbranchtaken!");4'b0100:$display("Secondbranchtaken!");5'b10100:$display("Thirdbranchtaken!");default:$display("Defaultbranchtaken!");endcase如果case表达式和分支项表达式的长度不同的情况下,在进行任50case语句中的无关位有case语句的两种变异形式:casex和casez,允许比较中有无关位。比较中该位不予考虑。除关键字casex和casez以外,语法与case语句完全一致。在casez语句中,?和z被认为是无关值,即那个位被忽略(不比较)。在casex语句中,值x和z都被认为是无关位。case语句中的无关位有case语句的两种变异形式:case51casez所有z都被视为无关值
z可以用?代替casez(encoder)4’b1???:high_lvl=3;4’b01??:high_lvl=2;4’b001?:high_lvl=1;4’b0001:high_lvl=0;default:high_lvl=0;endcase如果encoder=4’b1zzz,则high_lvl=3casez所有z都被视为无关值casez(encoder)52casex所有的x和z都被视为无关值。casex(encoder)4’b1xxx:high_lvl=3;4’b01xx:high_lvl=2;4’b001x:high_lvl=1;4’b0001:high_lvl=0;default:high_lvl=0;endcase如果encoder=4’b1xzx,则high_lvl=3casex所有的x和z都被视为无关值。casex(enco53case语句和if-else-ifif-else-if结构中的条件表达式更具有一般性。任意形式的表达式都可以。case语句中,所有的case表达式都要与控制表达式具有相同的形式。case语句更简洁。case语句和if-else-ifif-else-if结构54两类语句在模块中的使用一个模块可以包含多条always语句和多条initial语句。每条语句启动一个单独的控制流。各语句在0时刻开始并行执行。两类语句在模块中的使用一个模块可以包含多条always语句和55moduleTestXorBehavior;regSa,Sb,Zeus;initialbeginSa=0;Sb=0;#5Sb=1;#5Sa=1;#5Sb=0;endalways@(SaorSb)Zeus=Sa^Sb;always@(Zeus)$display("Attime%t,Sa=%d,Sb=%d,Zeus=%b",$time,Sa,Sb,Zeus);endmodulemoduleTestXorBehavior;always56Attime5,Sa=0,Sb=1,Zeus=1Attime10,Sa=1,Sb=1,Zeus=0Attime15,Sa=1,Sb=0,Zeus=1Attime5,Sa=0,Sb=1,Ze57always/initial块小结always/initial块小结58时序控制时序控制与过程语句关联。有2种时序控制形式:1)时延控制2)事件控制时序控制时序控制与过程语句关联。有2种时序控制形式:59时延控制#delayprocedural_statement#2Tx=Rx-5;initialbegin#3Wave='b0111;#6Wave='b1100;#7Wave='b0000;endend时延控制#delayprocedural_statemen60时延控制#delay;alwaysbegin#3;RefClk=0;#5;RefClk=1;end时延控制#delay;61时延可以是任意表达式#StrobeCompare=TX^ask;#(PERIOD/2)Clock=~Clock;如果时延表达式的值为0,则称之为显式零时延。显式零时延促发一个等待,等待所有其它在当前模拟时间被执行的事件执行完毕后,才将其唤醒;模拟时间不前进。如果时延表达式的值为x或z,其与零时延等效。如果时延表达式计算结果为负值,那么其二进制的补码值被作为时延。时延可以是任意表达式#Strobe62事件控制在事件控制中,always的过程语句基于事件执行。有两种类型的事件控制方式:1)边沿触发事件控制2)电平敏感事件控制事件控制在事件控制中,always的过程语句基于事件执行。有63敏感表always@(sensitivity_list)begin--Statement#1--…………..--Statement#Nend过程块在敏感表中任何信号发生变化后执行敏感表always@(sensitivity_list)64上升沿触发事件@eventprocedural_statement@(posedgeClock)Curr_State=Next_State;上升沿0->x0->z0->1x->1z->1上升沿触发事件@eventprocedural_stat65下降延触发事件@(negedgeReset)Count=0;下降沿1->x1->z1->0x->0z->0下降延触发事件@(negedgeReset)Count66timeRiseEdge,OnDelay;initialbegin//等待,直到在时钟上发生正边沿:@(posedgeClockA);RiseEdge=$time;//等待,直到在时钟上发生负边沿:@(negedgeClockA);OnDelay=$time-RiseEdge;$display("Theon-periodofclockis%t.",Delay);endtimeRiseEdge,OnDelay;67多事件触发@(posedgeClearornegedgeReset)Q=0;@(Ctrl_AorCtrl_B)Dbus='bz;多事件触发@(posedgeClearorneged68电平敏感事件控制wait(Condition)procedural_statement过程语句只有在条件为真时才执行。如果执行到该语句时条件已经为真,那么过程语句立即执行。在上面的表示形式中,过程语句是可选的。不可综合电平敏感事件控制wait(Condition)proce69wait(Sum>22)Sum=0;wait(DataReady)Data=Bus;wait(Preset);wait(Sum>22)70两种类型过程组合过程敏感表所有输入用于组合逻辑always@(aorborsel)时序过程对时钟或控制信号敏感always@(posedgeclkornegedgeclr)两种类型过程组合过程时序过程71语句块语句块提供将两条或更多条语句组合成语法结构上相当于一条语句的机制。顺序语句块(begin...end):语句块中的语句按给定次序顺序执行。并行语句块(fork...join):语句块中的语句并行执行。语句块语句块提供将两条或更多条语句组合成语法结构上相当于一条72语句块的标识符语句块的标识符是可选的,如果有标识符,寄存器变量可在语句块内部声明。带标识符的语句块可被引用;例如,语句块可使用禁止语句来禁止执行。语句块标识符是提供唯一标识寄存器的一种方式。所有的寄存器均是静态的,即它们的值在整个模拟运行中不变。语句块的标识符语句块的标识符是可选的,如果有标识符,寄存器变73顺序语句块begin[:block_id{declarations}]procedural_statement(s)end//产生波形:begin#2Stream=1;#5Stream=0;#3Stream=1;#4Stream=0;#2Stream=1;#5Stream=0;end顺序语句块begin[:block_id{declarat74beginPat=Mask|Mat;@(negedgeClk);//只有在Clk上出现负沿时才执行FF=&Pat;endbegin75begin:SEQ_BLK//带有标记reg[0:3]Sat;//局部寄存器说明Sat=Mask&Data;FF=^Sat;endbegin:SEQ_BLK//带有标记76并行语句块fork[:block_id{declarations}]procedural_statement(s);join并行语句块带有定界符fork和join。并行语句块中的各语句并行执行。并行语句块内的各条语句指定的时延值都与语句块开始执行的时间相关。当并行语句块中最后的动作执行完成时(最后的动作并不一定是最后的语句),顺序语句块的语句继续执行。并行语句块内的所有语句必须在控制转出语句块前完成执行。并行语句块fork[:block_id{declarat77#10;fork#2Stream=1;#7Stream=0;#10Stream=1;#14Stream=0;#16Stream=1;#21Stream=0;join#10;78顺序语句块和并行语句块混合always begin:SEQ_A #4Dry=5;//S1 fork:PAR_A//S2 #6Cun=7;//P1 begin:SEQ_B//P2 EXE=Box;//S6 #5Jap=Exe;//S7 end #2Dop=3;//P3 #4Gos=2;//P4 #8Pas=4;//P5 join #8Bax=1;//S3 #2Zoom=52;//S4 #6$stop;//S5 end顺序语句块和并行语句块混合always79过程性赋值过程性赋值分两类:1)阻塞性过程赋值2)非阻塞性过程赋值过程性赋值是在initial语句或always语句内的赋值。对寄存器数据类型的变量赋值。reg,integer,real,或者time。在下一语句对变量再次赋值前变量值保持不变。表达式的右端可以是任何表达式。过程性赋值过程性赋值分两类:80阻塞性过程赋值赋值操作符是“=”的过程赋值是阻塞性过程赋值。阻塞性过程赋值在其后所有语句执行前执行,即在下一语句执行前该赋值语句完成执行。always@(AorBorCin)begin:CARRY_OUTregT1,T2,T3;T1=A&B;T2=B&Cin;T3=A&Cin;Cout=T1|T2|T3;end阻塞性过程赋值赋值操作符是“=”的过程赋值是阻塞性过程赋值。81initialbeginClr=#50;Clr=#41;Clr=#100;endinitial82beginArt=0;Art=1;end对Art的0赋值被丢弃。begin83非阻塞性过程赋值在非阻塞性过程赋值中,使用赋值符号“<=”。beginLoad<=32;RegA<=Load;RegB<=Store;end非阻塞性过程赋值在非阻塞性过程赋值中,使用赋值符号“<=84在非阻塞性过程赋值中,对目标的赋值是非阻塞的,但可预定在将来某个时间步发生。当非阻塞性过程赋值被执行时,计算右端表达式,右端值被赋于左端目标,并继续执行下一条语句。预定的最早输出将在当前时间步结束时,这种情况发生在赋值语句中没有时延时。在当前时间步结束或任意输出被调度时,即对左端目标赋值。建议:对于时序过程用非阻塞性过程赋值在非阻塞性过程赋值中,对目标的赋值是非阻塞的,但可预定在将来85initialbeginClr<=#51;Clr<=#40;Clr<=#100;endendinitial86initialbeginCbn<=0;Cbn<=1;end同时对同一寄存器变量有多个赋值,Cbn的值变得不确定,即Cbn=x。VerilogHDL标准中既没有规定在这种情况下,何种事件被调度,也没有规定事件被取消的次序。结果是根据特定的Verilog模拟器的事件调度算法,Cbn将被赋值为0或1。initial87阻塞性赋值vs非阻塞性赋值阻塞性赋值(=)initialbegin#5a=b;#10c=d;end非阻塞性赋值initialbegin#5a<=b;#10c<=d;end阻塞性赋值vs非阻塞性赋值阻塞性赋值(=)非阻塞性赋值88reg[0:2]Q_State;initialbeginQ_State=3’b011;Q_State<=3’b100;$display(“CurrentvalueofQ_Stateis%b”,Q_State);#5;//等待一定的时延。$display(“ThedelayedvalueofQ_Stateis%b”,Q_State);end产生如下结果:CurrentvalueofQ_Stateis011ThedelayedvalueofQ_Stateis100reg[0:2]Q_State;89过程赋值与连续赋值间的差异过程赋值连续赋值在always语句或initial语句内出现在一个模块内出现执行与周围其它语句有关与其它语句并行执行;在右端操作数的值发生变化时执行驱动寄存器驱动线网使用“=”或“<=”赋值符号使用“=”赋值符号无assign关键词有assign关键词过程赋值与连续赋值间的差异过程赋值连续赋值在always语句90过程赋值vs连续赋值moduleProcedural;regA,B,Z;always@(B)beginZ=A;A=B;endendmodulemoduleContinuous;wireA,B,Z;assignZ=A;assignA=B;endmoduleZ等于B过程赋值vs连续赋值moduleProcedural;mo91行为语句行为语句–IF-ELSE语句–CASE语句–循环语句行为语句可以用于时序过程行为语句行为语句92if-else语句if(<condition1>)sequenceofstatement(s)elseif(<condition2>)sequenceofstatement(s)..elsesequenceofstatement(s)if-else语句if(<condition1>)93if-else语句always@(selaorselboraorborc)
begin
if(sela)
q=a;
else
if(selb)
q=b;
else
q=c;endif-else语句always@(selaorse94if-else语句条件按照从顶至底求值首先,条件为真则相应语句执行如果所有条件为假则执行“else”相关联的语句if-else语句条件按照从顶至底求值95if(Sum<60)beginGrade=C;Total_C=Total_c+1;endelseif(Sum<75)beginGrade=B;Total_B=Total_B+1;endelsebeginGrade=A;Total_A=Total_A+1;endif(Sum<60)96if-if-else格式if(Clk)if(Reset)Q=0;elseQ=D;可能会有二义性,建议不使用在VerilogHDL中将else与最近的没有else的if相关联来解决。在这个例子中,else与内层if语句相关联。if-if-else格式可能会有二义性,建议不使用97if(Sum<100)Sum=Sum+10;if(Nickel_In)Deposit=5;elseif(Dime_In)Deposit=10;elseif(Quarter_In)Deposit=25;elseDeposit=ERROR;if(Ctrl)beginif(~Ctrl2)Mux=4'd2;elseMux=4'd1;endelsebeginif(~Ctrl2)Mux=4'd8;elseMux=4'd4;endif(Sum<100)if(~Ctrl2)98case语句case(expression)<condition1>:sequenceofstatement(s)<condition2>:sequenceofstatement(s)..default:sequenceofstatement(s)endcasecase语句case(expression)99case语句首先对条件表达式求值,然后依次对各分支项求值并进行比较,第一个与条件表达式值相匹配的分支中的语句被执行。可以在1个分支中定义多个分支项;这些值不需要互斥,既可以互相交叠。缺省分支覆盖所有没有被分支表达式覆盖的其他分支。当没有分支符合时执行缺省分支。缺省分支是可选的。如果没有说明则无动作。缺省分支只能有一个,使用多缺省分支非法。使用缺省分支是一个好的编程习惯。分支表达式和各分支项表达式不必都是常量表达式。case语句进行位到位的精确比较(包括x和z)。在case语句中,x和z值作为文字值进行比较。case语句首先对条件表达式求值,然后依次对各分支项求值并进100多路器always@(seloraorborcord)begincase(sel) 2’b00: q=a; 2’b01: q=b; 2’b10: q=c; default: q=d;end多路器alw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 我国新型城镇化与基础教育资源的适配性研究
- 早期肝细胞癌微波消融术后的风险分层及预后评估
- 基于自监督学习的光伏电池板缺陷检测方法研究
- 角的知识结构图
- 维修电工培训
- 冠心病患者的饮食调节与运动建议
- 2025年度银行按揭二手房产买卖资金监管合同
- 二零二五年度酒店管理公司经营权转让协议范本
- 2025年度租赁地产维修保养合同
- 药店员工二零二五年度劳动合同与劳动争议预防措施
- 工业废盐资源化利用项目可行性研究报告
- 应急预案桌面推演脚本
- 《钻井安全培训材料》课件
- 《外伤性颅内积气》课件
- 卒中后抑郁康复治疗
- 《ArcGIS应用基础》课件
- 煤矿安全质量标准化培训课件
- 沪教版英语小学六年级上学期期末试题与参考答案(2024-2025学年)
- 2024解析:第十七章欧姆定律-基础练(解析版)
- 新教材 人教版高中化学选择性必修2全册各章节学案(知识点考点精讲及配套习题)
- 感染性休克护理
评论
0/150
提交评论