生活随笔
收集整理的這篇文章主要介紹了
底部检测的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循环的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。