改进的for循环
改進的for循環
聲明局部循環變量
SystemVerilog簡化了聲明用于for循環的局部變量的方法。SystemVerilog可以在for循環內部聲明循環變量。這樣就不需要在模塊級定義多個變量,也不用在命名的begin…end塊中定義局部變量了。
局部循環變量避免發生干擾
在for循環內部聲明的變量是這個循環的局部變量。在循環中引用這個變量名稱只會使用這個局部變量,而不會是模塊其他地方,如接口、程序、任務或函數中聲明的相同名字的變量。
局部循環變量時自動的
當在for循環初始化語句中聲明變量時,變量時自動儲存而不是靜態的。當次for循環啟動時,就自動地創建這個變量并初始化;當循環退出時,這個變量就被清除。自動變量的使用有如下幾個需要注意的問題:
- 自動變量不能層次化引用
- 自動變量不能保存到VCD文件中
- for循環變量的值不能在循環外部使用,因為這個變量在循環外部是不存在的。
局部循環變量在循環外不存在
always_comb beginfor(int lobit=0;lo_bit <=63;lo_bit++)beginif(data[lo_bit]) break;//當位值為1就退出循環endif(lo_bit > 7) //出錯:此處并沒有lo_bit... end如果需要在循環外引用一個變量,這個變量必須在循環外聲明。
always_comb int lo_bit;//本塊的局部變量 beginfor( lobit=0;lo_bit <=63;lo_bit++)beginif(data[lo_bit]) break;//當位值為1就退出循環endif(lo_bit > 7) //lo_bit的值為最后一個循環的值... end2、多重for循環賦值
SystemVerilog可以在for循環中使用多個初始化賦值語句,多個步進賦值語句。
多個初始化或步進賦值語之間用逗號隔開。
每個循環變量可以聲明為不同類型
for(int i=1,byte j=0;i*j <128;i++,j+=3) ....3、for循環中聲明的變量的層次化引進
局部變量沒有層次路徑
作為for循環一部分聲明的局部變量不能被層次化引用。測試向量、顯示波形或VCD文件都不能引用這些局部變量(但是工具可能會提供私有的、非標準的方法來處理這些變量)
如果確實需要對for循環的控制變量進行層次化引用,則這個變量必須在for循環外部聲明:在模塊級或在命名的begin…end塊內。
always_ff@(posedge clock) begin:loop int i;//i可以層次化引用for(int i=0;i<=15;i++)begin...end end總結
- 上一篇: 《沙石镇时光》登陆蒸汽平台,首发价 62
- 下一篇: 底部检测的do...while循环