未命名语句块中的声明
未命名語句塊中的聲明
命名塊中的局部變量
Verilog允許在命名的begin…end或fork…join塊中聲明局部變量。局部變量聲明的通常用法是聲明一個臨時變量進行循環控制。局部變量避免了對同名但用途不同的模塊模塊級變量的無意訪問。下面的代碼段聲明了兩個都叫i的變量,在命名的begin塊中的for循環將使用命名塊中聲明的局部變量i,而不會影響模塊級聲明的變量i。
對局部變量的層次化引用
在命名塊中聲明的變量可以用包含塊名的層次路徑引用。一般情況下,只要測試和驗證程序會使用層次路徑方式引用變量。層次化引用是不可綜合的,因為這并不代表硬件行為。VCD(Value Change Dump,一種標準的仿真波形記錄格式)文件、所有波形顯示或其他調試工具也可以使用層次路徑方式引用命名塊內的變量。
未命名塊中的局部變量
module chip (input clock);integer i; //模塊級聲明always@(posedge clock) begin //未命名塊integer i;//局部變量for(i = 0; i <= 127; i = i + 1)begin...end end endmodule未命名塊中的局部變量沒有層次路徑
由于塊沒有名字,未命名塊中的局部變量不能被層次化引用。測試程序或VCD文件也不能引用局部變量,因為變量沒有層次路徑。
在未命名塊中聲明變量可以作為一種方法,保護局部變量不被外部交叉模塊引用。由于沒喲層次路徑,局部變量不能在局部范圍以外的任何地方引用。
從調試過程推導層次路徑
允許未命名域中聲明變量的擴展不是SystemVerilog特有的。Verilog語言也有類似情況。用戶自定義原語(UDP)可以在內部聲明域中創建一個變量。在這種情況下,軟件工具會推斷出一個實例名,以便于UDP中的變量能在調試工具中引用。軟件工具也可以給未命名塊一個推斷名,以便于波形顯示或調試工具引用未命名中的局部變量。Verilog標準中既不要求也不禁止給未命名原語實例推斷一個實例名。SystemVerilog標準中也既不要求也不禁止給未命名原語實例推斷一個實例名。
仿真時間單位和精度
包含時間單位的時間值
將時間單位指定為時間值的一部分
SystemVerilog擴展了Verilog語言,可以給時間值指定時間單位。
直接給時間值指定時間單位消除了延遲時間不明確的缺點。
s(秒)、ms(毫秒)、us(微秒)、ns(納[諾]秒)、ps(皮[可]秒)、fs(飛[母托]秒)、step(軟件工具使用的最小花四濺單位,(用于SystemVerilog測試時鐘快))
范圍即(scope-level)時間單位和精度
時間單位和精度作為模塊定義的一部分
SystemVerilog允許指定局部性的時間單位和精度,作為模塊、接口或程序塊的一部分,而不是作為軟件工具的指令。
在SystemVerilog中通過使用關鍵字timeunit和timeprecision進一步增強了時間單位的說明。這些關鍵字作為模塊定義的一部分,用來指定模塊內的時間單位和精度信息。
注意:timeunit和timeprecision語句必須在其他任何聲明或語句之前、緊隨模塊、接口或程序的聲明之后指定。
編譯單元的時間單位和精度
外部聲明時間單位和精度
timeunit和timeprecision的聲明庫在編譯單元域指定,但必須先于其他任何聲明。在編譯單元域內和接口–如果他們沒有局部timeunit或timeprecision聲明,并且編譯時沒有有效的Verilog`timescale指令
時間單位和精度搜索次序
使用SystemVerilog時,時間單位和精度值可以在很多地方指定。SystemVerilog定義了一個搜索法則來確定時間值的單位和精度
(1)如果時間值帶時間單位,則使用指定的單位。
(2)否則,使用在模塊、接口和程序內部指定的時間單位和精度
(3)否則,如果模塊或接口聲明嵌入到其他的模塊和接口內,使用父模塊或接口指定的時間單位和精度
(4)否則,使用模塊編譯時,有效的`timescale時間單位和精度
(5)否則,使用在編譯單元域中定義的時間的單位和精度
(6)否則,使用仿真器默認的時間單位和精度
總結
以上是生活随笔為你收集整理的未命名语句块中的声明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下制作linux U盘启动
- 下一篇: SystemVerilog文本值和数据类