日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺談Verilog循環(huán)語(yǔ)句

在Verilog中存在著四種類型的循環(huán)語(yǔ)句,用來(lái)控制執(zhí)行語(yǔ)句的執(zhí)行次數(shù)。其語(yǔ)法和用途與C語(yǔ)言很類似,下面為大家講解一下Verilog循環(huán)語(yǔ)句。

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

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

while 循環(huán)

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

while (condition) begin
   …
end

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

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

當(dāng)然,執(zhí)行語(yǔ)句只有一條時(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é)果如下:

for 循環(huán)

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

for(initial_assignment; condition ; step_assignment)  begin
   …
end

initial_assignment 為初始條件。

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

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

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

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

實(shí)例

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

repeat 循環(huán)

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

repeat (loop_times) begin
   …
end

repeat 的功能是執(zhí)行固定次數(shù)的循環(huán),它不能像 while 循環(huán)那樣用一個(gè)邏輯表達(dá)式來(lái)確定循環(huán)是否繼續(xù)執(zhí)行。repeat 循環(huán)的次數(shù)必須是一個(gè)常量、變量或信號(hào)。如果循環(huán)次數(shù)是變量信號(hào),則循環(huán)次數(shù)是開(kāi)始執(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)語(yǔ)句
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 ;      //沒(méi)有延遲的賦值,即同時(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ù)的功能。

forever 循環(huán)

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

forever begin
   …
end

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

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

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

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

實(shí)例

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

例如,使用 forever 語(yǔ)句實(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

網(wǎng)站標(biāo)題:淺談Verilog循環(huán)語(yǔ)句
本文鏈接:http://www.dlmjj.cn/article/ccojhig.html