溫馨提示×

溫馨提示×

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

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

Verilog語言的循環(huán)語句怎么使用

發(fā)布時間:2023-04-11 15:04:24 來源:億速云 閱讀:120 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Verilog語言的循環(huán)語句怎么使用”,在日常操作中,相信很多人在Verilog語言的循環(huán)語句怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Verilog語言的循環(huán)語句怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

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

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

while 循環(huán)

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

while (condition) begin
    …
end

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

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

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

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

`timescale 1ns/1ns
 
module test ;
 
    reg [3:0]    counter ;
    initial begin
        counter = 'b0 ;
        while (counter<=10) begin
            #10 ;
            counter = counter + 1'b1 ;
        end
    end
 
   //stop the simulation
    always begin
        #10 ;  if ($time >= 1000) $finish ;
    end
 
endmodule

for 循環(huán)

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

for(initial_assignment; condition ; step_assignment)  begin
    …
end

initial_assignment 為初始條件。

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

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

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

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

// for 循環(huán)語句
integer      i ;
reg [3:0]    counter2 ;
initial begin
    counter2 = 'b0 ;
    for (i=0; i<=10; i=i+1) begin
        #10 ;
        counter2 = counter2 + 1'b1 ;
    end
end

repeat 循環(huán)

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

repeat (loop_times) begin
    …
end

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

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

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

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

always @(posedge clk or negedge rstn) begin
    j = 0  ;
    if (!rstn) begin
        repeat (8) begin
            buffer[j]   <= 'b0 ;      //沒有延遲的賦值,即同時賦值為0
            j = j + 1 ;
        end
    end
    else if (enable) begin
        repeat (8) begin
            @(posedge clk) buffer[j]    <= counter3 ;       //在下一個clk的上升沿賦值
            j = j + 1 ;
        end
     end
end

真結(jié)果如下圖。

由圖可知,rstn 拉高時,buffer 的 8 個向量同時賦值為 0。

第二個時鐘周期后,buffer 依次被 counter3 賦值,實現(xiàn)了連續(xù)存儲 8 個數(shù)據(jù)的功能。

Verilog語言的循環(huán)語句怎么使用

forever 循環(huán)

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

forever begin
    …
end

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

forever 相當于 while(1) 。

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

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

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

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

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

到此,關(guān)于“Verilog語言的循環(huán)語句怎么使用”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

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

AI