循環(huán)語句分為以下4種:
for語句——通過三個(gè)步驟來決定語句的循環(huán)執(zhí)行:
1.給控制循環(huán)次數(shù)的變量賦初值;
2.判定循環(huán)執(zhí)行條件,若為假則跳出循環(huán);若為真,則執(zhí)行指定語句后,轉(zhuǎn)到第三步
3.修改循環(huán)變量的值,返回第二步
repeat——連續(xù)執(zhí)行一條語句n次;
while——執(zhí)行一條語句,直到循環(huán)條件不滿足;若一開始條件不滿足,則該語句一次也不能執(zhí)行
forever——無限連續(xù)的執(zhí)行語句,可用disable語句中斷。
for語句
形式:
for(循環(huán)變量賦初值;循環(huán)執(zhí)行條件;循環(huán)變量增值) 執(zhí)行語句
例:用for語句描述7人投票表決器:超過4人投贊成票,則表決通過
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語句 if(vote[i]) sum=sum+1; //只要有人投贊成票,sum加1 if(sum[2]) pass =1; //若超過4人,pass為1 else pass =0; end endmodule例:用for語句初始化memory
begin:init_mem reg [7:0] tempi; //存儲(chǔ)器的地址變量 for(tempi=0;tempi例:用for語句實(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語句(不可綜合)
無條件連續(xù)執(zhí)行一條或多條語句n次
格式:repeat(循環(huán)次數(shù)表達(dá)式)語句
例:用repeat語句和移位操作實(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 語句
有條件地執(zhí)行一條或多條語句
首先判斷循環(huán)執(zhí)行條件表達(dá)式是否為真。若為真,則執(zhí)行后面的語句或語句塊;然后再回頭判斷循環(huán)執(zhí)行條件表達(dá)式是否為真,若為真,再執(zhí)行一次后邊的語句;如此不斷,直到條件表達(dá)式不為真.
格式:while(循環(huán)執(zhí)行條件表達(dá)式) 語句
注1:首先判斷循環(huán)執(zhí)行條件表達(dá)式是否為真,若為假,則其后的語句一次也不執(zhí)行
注2:在執(zhí)行語句中,必須有一條改變循環(huán)執(zhí)行條件表達(dá)式的值的語句
注3:while語句只有當(dāng)循環(huán)塊有事件控制(即@(posedge clk))時(shí)才可綜合。
例:用while語句對(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í)行下邊語句 begin if(tempreg[0]) count = count + 1; //只要tempreg最低位為1,則count加1 tempreg = tempreg >>1; //右移1位 end end endmodule例:用for語句對(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語句
無條件連續(xù)執(zhí)行forever后面的語句或語句塊。
格式:forever 語句;
常用在測(cè)試模塊中產(chǎn)生周期性的波形,作為仿真激勵(lì)信號(hào)。
常用disable語句跳出循環(huán)。
注:不同于always語句,不能獨(dú)立寫在程序中,一般用在initial語句塊中。
語句的順序執(zhí)行
在always模塊內(nèi),邏輯按書寫的順序執(zhí)行。
順序語句——always模塊內(nèi)的語句
在always模塊內(nèi),若隨意顛倒賦值語句的書寫順序,可能導(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語句,實(shí)例元件都是同時(shí)執(zhí)行的,它們?cè)诔绦蛑械南群箜樞驅(qū)Y(jié)果并沒有影響。
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文章
7643瀏覽量
166857 -
二進(jìn)制
+關(guān)注
關(guān)注
2文章
805瀏覽量
42245 -
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8523
原文標(biāo)題:IC學(xué)霸筆記 | Verilog語法之循環(huán)語句
文章出處:【微信號(hào):IC修真院,微信公眾號(hào):IC修真院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
哪有FPGA的verilog編程基礎(chǔ)知識(shí)?
Verilog HDL練習(xí)題和Verilog基礎(chǔ)知識(shí)適合verilog新人
Verilog HDL基礎(chǔ)知識(shí)
Verilog HDL實(shí)驗(yàn)練習(xí)與語法手冊(cè)
Verilog_HDL基礎(chǔ)知識(shí)非常好的學(xué)習(xí)教程 (1)
Verilog HDL的基礎(chǔ)知識(shí)詳細(xì)說明

Verilog教程之Verilog HDL數(shù)字集成電路設(shè)計(jì)方法和基礎(chǔ)知識(shí)課件

Verilog的基礎(chǔ)知識(shí)
Verilog HDL的基礎(chǔ)知識(shí)

評(píng)論