溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Verilog循環(huán)語句實(shí)例分析

發(fā)布時(shí)間:2022-02-18 16:19:38 來源:億速云 閱讀:195 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了Verilog循環(huán)語句實(shí)例分析的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Verilog循環(huán)語句實(shí)例分析文章都會(huì)有所收獲,下面我們一起來看看吧。

Verilog循環(huán)語句實(shí)例分析

關(guān)鍵詞:while, for, repeat, forever

Verilog 循環(huán)語句有 4 種類型,分別是 while,for,repeat,和 forever 循環(huán)。循環(huán)語句只能在 always 或 initial 塊中使用,但可以包含延遲表達(dá)式。

while 循環(huán)

while 循環(huán)語法格式如下:

while (condition) begin
   …
end

while 循環(huán)中止條件為 condition 為假。

如果開始執(zhí)行到 while 循環(huán)時(shí) condition 已經(jīng)為假,那么循環(huán)語句一次也不會(huì)執(zhí)行。

當(dāng)然,執(zhí)行語句只有一條時(shí),關(guān)鍵字 begin 與 end 可以省略。

下面代碼執(zhí)行時(shí),counter 執(zhí)行了 11 次。

實(shí)例

`timescale 1ns/1ns

module test ;

   reg [3:0]    counter ;
   initial begin
       counter = 'b0 ;
       while (counterb1 ;
       end
   end

  //stop the simulation
   always begin
       #10 ;  if ($time >= 1000) $finish ;   end

endmodule

仿真結(jié)果如下: Verilog循環(huán)語句實(shí)例分析

for 循環(huán)

for 循環(huán)語法格式如下:

for(initial_assignment; condition ; step_assignment)  begin
   …
end

initial_assignment 為初始條件。

condition 為終止條件,condition 為假時(shí),立即跳出循環(huán)。

step_assignment 為改變控制變量的過程賦值語句,通常為增加或減少循環(huán)變量計(jì)數(shù)。

一般來說,因?yàn)槌跏紬l件和自加操作等過程都已經(jīng)包含在 for 循環(huán)中,所以 for 循環(huán)寫法比 while 更為緊湊,但也不是所有的情況下都能使用 for 循環(huán)來代替 while 循環(huán)。

下面 for 循環(huán)的例子,實(shí)現(xiàn)了與 while 循環(huán)中例子一樣的效果。需要注意的是,i = i + 1 不能像 C 語言那樣寫成 i++ 的形式,i = i -1 也不能寫成 i — 的形式。

實(shí)例

// for 循環(huán)語句integer      i ;
reg [3:0]    counter2 ;
initial begin
   counter2 = 'b0 ;
   for (i=0; ib1 ;
   end
end

repeat 循環(huán)

repeat 循環(huán)語法格式如下:

repeat (loop_times) begin
   …
end

repeat 的功能是執(zhí)行固定次數(shù)的循環(huán),它不能像 while 循環(huán)那樣用一個(gè)邏輯表達(dá)式來確定循環(huán)是否繼續(xù)執(zhí)行。repeat 循環(huán)的次數(shù)必須是一個(gè)常量、變量或信號(hào)。如果循環(huán)次數(shù)是變量信號(hào),則循環(huán)次數(shù)是開始執(zhí)行 repeat 循環(huán)時(shí)變量信號(hào)的值。即便執(zhí)行期間,循環(huán)次數(shù)代表的變量信號(hào)值發(fā)生了變化,repeat 執(zhí)行次數(shù)也不會(huì)改變。

下面 repeat 循環(huán)例子,實(shí)現(xiàn)了與 while 循環(huán)中的例子一樣的效果。

實(shí)例

// repeat 循環(huán)語句
reg [3:0]    counter3 ;
initial begin
   counter3 = 'b0 ;
   repeat (11) begin  //重復(fù)11次
       #10 ;
       counter3 = counter3 + 1'b1 ;
   end
end

下面 repeat 循環(huán)例子,實(shí)現(xiàn)了連續(xù)存儲(chǔ) 8 個(gè)數(shù)據(jù)的功能:

實(shí)例

always @(posedge clk or negedge rstn) begin
   j = 0  ;
   if (!rstn) begin
       repeat (8) begin
           buffer[j]   'b0 ;      //沒有延遲的賦值,即同時(shí)賦值為0
           j = j + 1 ;
       end
   end
   else if (enable) begin
       repeat (8) begin
           @(posedge clk) buffer[j]

仿真結(jié)果如下圖。

由圖可知,rstn 拉高時(shí),buffer 的 8 個(gè)向量同時(shí)賦值為 0。

第二個(gè)時(shí)鐘周期后,buffer 依次被 counter3 賦值,實(shí)現(xiàn)了連續(xù)存儲(chǔ) 8 個(gè)數(shù)據(jù)的功能。 Verilog循環(huán)語句實(shí)例分析

forever 循環(huán)

forever 循環(huán)語法格式如下:

forever begin
   …
end

forever 語句表示永久循環(huán),不包含任何條件表達(dá)式,一旦執(zhí)行便無限的執(zhí)行下去,系統(tǒng)函數(shù) $finish 可退出 forever。

forever 相當(dāng)于 while(1) 。

通常,forever 循環(huán)是和時(shí)序控制結(jié)構(gòu)配合使用的。

例如,使用 forever 語句產(chǎn)生一個(gè)時(shí)鐘:

實(shí)例

reg          clk ;
initial begin
   clk       = 0 ;
   forever begin
       clk = ~clk ;
       #5 ;   end
end

例如,使用 forever 語句實(shí)現(xiàn)一個(gè)時(shí)鐘邊沿控制的寄存器間數(shù)據(jù)傳輸功能:

實(shí)例

reg    clk ;
reg    data_in, data_temp ;
initial begin
   forever @(posedge clk)      data_temp = data_in ;
end

關(guān)于“Verilog循環(huán)語句實(shí)例分析”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Verilog循環(huán)語句實(shí)例分析”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI