




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
兩類語句在模塊中的使用一個模塊可以包含多條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仁懷市交通運輸服務有限公司招聘92人筆試參考題庫附帶答案詳解
- 江西豐城市紀委監委招聘38名調查看護人員筆試歷年參考題庫附帶答案詳解
- 天津濱海職業學院《程序設計實訓(二)》2023-2024學年第二學期期末試卷
- 西安財經大學《功能高分子材料的設計與開發》2023-2024學年第二學期期末試卷
- 隨州職業技術學院《網絡爬蟲技術》2023-2024學年第二學期期末試卷
- 錫林郭勒職業學院《新媒體網絡營銷劃寫作》2023-2024學年第二學期期末試卷
- 北京郵電大學世紀學院《現代大地測量學》2023-2024學年第二學期期末試卷
- 南京師范大學中北學院《人力資源管理實驗》2023-2024學年第二學期期末試卷
- 榆林能源科技職業學院《護理學基礎Ⅰ(實驗)》2023-2024學年第二學期期末試卷
- 湖南三一工業職業技術學院《現代環境監測技術》2023-2024學年第二學期期末試卷
- 衛生監督信息員培訓課件
- 《東方物探HSE管理》課件
- 杜邦分析法公式
- 五年級下冊勞動《編花籃》課件
- 貴州省2025屆高考英語二模試卷含解析
- 2024年公務員考試申論課件:全面掌握答題技巧
- 2024年大唐集團招聘筆試試題及答案-
- 《傳染病疫情應急預案管理辦法》解讀
- 主題英語知到智慧樹章節測試課后答案2024年秋中南大學
- 《禱告的教會》課件
- 《廣州恒大俱樂部》課件
評論
0/150
提交評論