循環(huán)語(yǔ)句分為以下4種:
for語(yǔ)句——通過(guò)三個(gè)步驟來(lái)決定語(yǔ)句的循環(huán)執(zhí)行:
1.給控制循環(huán)次數(shù)的變量賦初值;
2.判定循環(huán)執(zhí)行條件,若為假則跳出循環(huán);若為真,則執(zhí)行指定語(yǔ)句后,轉(zhuǎn)到第三步
3.修改循環(huán)變量的值,返回第二步
repeat——連續(xù)執(zhí)行一條語(yǔ)句n次;
while——執(zhí)行一條語(yǔ)句,直到循環(huán)條件不滿足;若一開(kāi)始條件不滿足,則該語(yǔ)句一次也不能執(zhí)行
forever——無(wú)限連續(xù)的執(zhí)行語(yǔ)句,可用disable語(yǔ)句中斷。
for語(yǔ)句
形式:
for(循環(huán)變量賦初值;循環(huán)執(zhí)行條件;循環(huán)變量增值) 執(zhí)行語(yǔ)句
例:用for語(yǔ)句描述7人投票表決器:超過(guò)4人投贊成票,則表決通過(guò)
module vote7( output pass, input [6:0] vote ); reg [2:0] sum; //sum 為reg變量,用于統(tǒng)計(jì)贊成的人數(shù) integer i; regpass; always @(vote) begin sum = 0; //sum初始值為0 for(i=0;i<=6;i++) //for語(yǔ)句 if(vote[i]) sum=sum+1; //只要有人投贊成票,sum加1 if(sum[2]) pass =1; //若超過(guò)4人,pass為1 else pass =0; end endmodule例:用for語(yǔ)句初始化memory
begin:init_mem reg [7:0] tempi; //存儲(chǔ)器的地址變量 for(tempi=0;tempi例:用for語(yǔ)句實(shí)現(xiàn)兩個(gè)二進(jìn)制數(shù)乘法 module mult_for (outcome,a,b); parameter size =8; output [2*size:1] outcome; input [size;1] a,b; reg [2*size:1] outcome; integer i; always@(a or b) begin outcome = 0; for(i=1;i<=size;i=i+1) if(b[i]) outcome = outcome +(a<<(i-1)); end endmodule
repeat語(yǔ)句(不可綜合)
無(wú)條件連續(xù)執(zhí)行一條或多條語(yǔ)句n次
格式:repeat(循環(huán)次數(shù)表達(dá)式)語(yǔ)句
例:用repeat語(yǔ)句和移位操作實(shí)現(xiàn)兩個(gè)8位二進(jìn)制數(shù)乘法
module mult_repeat(outcome,a,b); parameter size=8; output[2*size:1] outcome; input [size:1] a,b; //a 為被乘數(shù),b為乘數(shù) reg [2*size:1] outcome; reg [2*size:1] temp_a; //中間變量,存放操作數(shù)a左移移位的結(jié)果 reg[2*size:1]temp_b;//中間變量,存放操作數(shù)b右移移位的結(jié)果 always@(a or b) begin outcome = 0; temp_a = a; temp_b = b; repeat(size) begin if(temp_b[1]) //如果tem_b的最低位是1,則執(zhí)行下面加法 outcome = outcome + temp_a; temp_a = temp_a <<1; //操作數(shù)a左移一位,以便代入上式,求部分積 temp_b = temp_b >>1; //操作數(shù)b右移一位,以便取temp_b【1】 end end endmodule
while 語(yǔ)句
有條件地執(zhí)行一條或多條語(yǔ)句
首先判斷循環(huán)執(zhí)行條件表達(dá)式是否為真。若為真,則執(zhí)行后面的語(yǔ)句或語(yǔ)句塊;然后再回頭判斷循環(huán)執(zhí)行條件表達(dá)式是否為真,若為真,再執(zhí)行一次后邊的語(yǔ)句;如此不斷,直到條件表達(dá)式不為真.
格式:while(循環(huán)執(zhí)行條件表達(dá)式) 語(yǔ)句
注1:首先判斷循環(huán)執(zhí)行條件表達(dá)式是否為真,若為假,則其后的語(yǔ)句一次也不執(zhí)行
注2:在執(zhí)行語(yǔ)句中,必須有一條改變循環(huán)執(zhí)行條件表達(dá)式的值的語(yǔ)句
注3:while語(yǔ)句只有當(dāng)循環(huán)塊有事件控制(即@(posedge clk))時(shí)才可綜合。
例:用while語(yǔ)句對(duì)一個(gè)8位二進(jìn)制中值為1的位進(jìn)行計(jì)數(shù)
module count1s_while(count,rega,clk); output [3:0] count; input [7:0] rega; input clk; reg [3:0] count; always@(posedge clk) begin:count1 reg[7:0] tempreg; //用作循環(huán)執(zhí)行條件表達(dá)式 count =0; //count初始值為0 tempreg = rega; //tempreg初值為rega while(tempreg) //若tempreg非0,則執(zhí)行下邊語(yǔ)句 begin if(tempreg[0]) count = count + 1; //只要tempreg最低位為1,則count加1 tempreg = tempreg >>1; //右移1位 end end endmodule例:用for語(yǔ)句對(duì)一個(gè)8位二進(jìn)制中值為1的位進(jìn)行計(jì)數(shù)module count1s_for_good(count,rega); output [3:0] count; input [7:0] rega; reg [3:0] count; always@(rega) begin:block integer i; count = 0; for(i=0;i<=7;i++) if(rega[i]) count = count +1; end endmodule
forever語(yǔ)句
無(wú)條件連續(xù)執(zhí)行forever后面的語(yǔ)句或語(yǔ)句塊。
格式:forever 語(yǔ)句;
常用在測(cè)試模塊中產(chǎn)生周期性的波形,作為仿真激勵(lì)信號(hào)。
常用disable語(yǔ)句跳出循環(huán)。
注:不同于always語(yǔ)句,不能獨(dú)立寫(xiě)在程序中,一般用在initial語(yǔ)句塊中。
語(yǔ)句的順序執(zhí)行
在always模塊內(nèi),邏輯按書(shū)寫(xiě)的順序執(zhí)行。
順序語(yǔ)句——always模塊內(nèi)的語(yǔ)句
在always模塊內(nèi),若隨意顛倒賦值語(yǔ)句的書(shū)寫(xiě)順序,可能導(dǎo)致不同的結(jié)果
module serial2(q,a,clk); output q,a; input clk; reg q,a; always @(posedge clk) begin a = ~q; q = ~q; end endmodule
always模塊,assign語(yǔ)句,實(shí)例元件都是同時(shí)執(zhí)行的,它們?cè)诔绦蛑械南群箜樞驅(qū)Y(jié)果并沒(méi)有影響。
module parall1(q,a,clk); output q,a; input clk; reg q,a; always @(posedge clk) begin q = ~q; end always @(posedge clk) begin a = ~q; end endmodule module parall2(q,a,clk); output q,a; input clk; reg q,a; always @(posedge clk) begin a = ~q; end always @(posedge clk) begin q = ~q; end endmodule
審核編輯:劉清
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7525瀏覽量
164159 -
二進(jìn)制
+關(guān)注
關(guān)注
2文章
795瀏覽量
41720 -
Verilog語(yǔ)言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8286
原文標(biāo)題:IC學(xué)霸筆記 | Verilog語(yǔ)法之循環(huán)語(yǔ)句
文章出處:【微信號(hào):IC修真院,微信公眾號(hào):IC修真院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論