日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

底部检测的do...while循环

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 底部检测的do...while循环 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

底部檢測的do…while循環

1、while循環可能從未執行
while循環有可能根本沒有執行過。當執行流首次執行到循環的開頭,控制值就為假的時候就會發生這種情況。
為了保證循環的每個輸出都與循環的輸入變量保持一致,使用這種在開頭檢測的while循環需要在循環之前增加代碼。

always_comb beginif(addr < 128 || addr >255)begindone = 0;outofBound = 1;out = mem[128];endelse while(addr >= 128 && addr <= 255)beginif(addr == 128)begindone = 1;outofBound=0;endelsebegindone = 0;outofBound =0;endout=mem[addr];addr -=1;end end

2、do…while循環至少執行一次

do...while循環的基本語法如下: do<語句或語句塊> while(<條件>); always_comb begin do beigndone = 0;outofBound =0;out=mem[addr];if(addr < 128 || addr >255)beginoutofBound = 1;out = mem[128];endelse if(addr == 128)begindone = 1;addr -=1;endwhile(addr >= 128 && addr <= 255); end

3、foreach數組循環結構
SystemVerilog增加了foreach循環,它可用來對一維和多維數組的元素進行迭代,而不必指定數組每個維度的尺寸。
新的跳轉語句–break、continue、return
4、disable語句即可用作繼續執行也可用于使執行過程停止。

//在一定范圍的位中找到第一個值為1的 always@* beginbegin:loopinteger i;first_bit =0;for(i=0;i<=63;i=i+1)begin:passif(i < start_range)disable pass;//繼續循環if(i>end_range)disable loop;//跳出循環if(data[i])beginfirst_bit = i;disable loop;//跳出循環endend//一次循環結束 end//整個循環結束 ...//根據第一個1的位置左數據處理 end

disable語句還可以用作返回語句
disable語句還可以使任務的所有語句全部執行完之前提前從任務中返回。

task add_uo_to_max(input [5:0] max,output[63:0] result ); integer i; beginresult = 1;if(max ==0)disable add_up_to_max;//退出任務for(i=1;i<=63;i=i+1)beginresult =result + result;if(i == max)disable add_up_to_max;//退出任務end end endtask

另外,也可以使用disable語句來外部禁止一個并發進程或任務的執行,只是這種外部的disable語句是不可綜合的。
5、continue語句
使用continue語句不需要在代碼中增加begin…end命名塊

logic [15:0] array[0:255]; always_comb beginfor(int i=0;i<=255;i++)begin:loopif(array[i]==0)continue;//跳過空元素transform_function(array[i]);end//循環結束 end

6、break語句
break語句會立即中止循環的執行。除非過程塊的執行流再一次到達這個循環語句的開頭,否則循環不會再次執行。

//在一定范圍的位中找到第一個值為1的位 always_comb beginfirst_bit =0;for(int i=0;i<=63;i=i+1)beginif(i<start_range) continue;if(i>end_range) break;//跳出循環if(data[i])beginfirst_bit = i;break;//跳出循環endend//整個循環結束....//根據第一個1的位置情況做數據處理 end

不用break跳出case語句(相當于C語言的swict語句)。case語句在分支執行結束后就會自動退出,不需要執行break。
7、return語句
return語句,用來從非空函數返回或從空函數或任務中跳出。return語句可以在任務或函數執行流的任意時間執行,執行后立即從任務或函數中退出,無需到達任務或函數的結尾。

task add_up_to_max(input [5:0] max,output [63:0] result ); result = 1; if(max=0) return;//退出任務 for(int i=1;i<=63;i=i+1) beginresult = result + result;if(i==max) result;//退出任務 end endtask

return語句可以用來函數或任務中提前退出。
注意:在任務或空函數中,關鍵字return后面不能有表達式,而在非空函數中return后面一定要有表達式。

總結

以上是生活随笔為你收集整理的底部检测的do...while循环的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。