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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

未命名语句块中的声明

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 未命名语句块中的声明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

未命名語句塊中的聲明

命名塊中的局部變量
Verilog允許在命名的begin…end或fork…join塊中聲明局部變量。局部變量聲明的通常用法是聲明一個臨時變量進行循環控制。局部變量避免了對同名但用途不同的模塊模塊級變量的無意訪問。下面的代碼段聲明了兩個都叫i的變量,在命名的begin塊中的for循環將使用命名塊中聲明的局部變量i,而不會影響模塊級聲明的變量i。

module chip (input clock);integer i; //模塊級聲明always@(posedge clock) begin : loop //命名塊integer i;//局部變量for(i = 0; i <= 127; i = i + 1)begin...end end endmodule

對局部變量的層次化引用
在命名塊中聲明的變量可以用包含塊名的層次路徑引用。一般情況下,只要測試和驗證程序會使用層次路徑方式引用變量。層次化引用是不可綜合的,因為這并不代表硬件行為。VCD(Value Change Dump,一種標準的仿真波形記錄格式)文件、所有波形顯示或其他調試工具也可以使用層次路徑方式引用命名塊內的變量。

module test;reg clock;chip chip(.clock(clock));always #5 clock = ~clock; initial beginclock = 0;repeat(5)@(negedge clock)$display("chip.i = %0d",chip.i);$display("chip.loop.i = %0d",chip.loop.i);$finish; end endmodule

未命名塊中的局部變量

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語言,可以給時間值指定時間單位。

forever #5ns clock = ~clock;

直接給時間值指定時間單位消除了延遲時間不明確的缺點。
s(秒)、ms(毫秒)、us(微秒)、ns(納[諾]秒)、ps(皮[可]秒)、fs(飛[母托]秒)、step(軟件工具使用的最小花四濺單位,(用于SystemVerilog測試時鐘快))

注意:時間值和時間單位之間不允許有空格 #3.2ps //正確 #4.1 ps//不正確,不允許有空格

范圍即(scope-level)時間單位和精度
時間單位和精度作為模塊定義的一部分
SystemVerilog允許指定局部性的時間單位和精度,作為模塊、接口或程序塊的一部分,而不是作為軟件工具的指令。
在SystemVerilog中通過使用關鍵字timeunit和timeprecision進一步增強了時間單位的說明。這些關鍵字作為模塊定義的一部分,用來指定模塊內的時間單位和精度信息。

moudle chip(...);timeunit 1ns;timeprecision 10ps;... endmodule 關鍵字timeunit和timeprecision使模塊、接口或程序塊與時間單位和精度信息直接綁定,而不使用軟件 工具的指令, 這解決了Verilog的`timescale指令中存才的不明確性和對文件順序的依賴性。 除了特殊單位step外,關鍵字timeunit和precision可以使用單位和Verilog的 `timescale指令相同

注意:timeunit和timeprecision語句必須在其他任何聲明或語句之前、緊隨模塊、接口或程序的聲明之后指定。

編譯單元的時間單位和精度
外部聲明時間單位和精度
timeunit和timeprecision的聲明庫在編譯單元域指定,但必須先于其他任何聲明。在編譯單元域內和接口–如果他們沒有局部timeunit或timeprecision聲明,并且編譯時沒有有效的Verilog`timescale指令

時間單位和精度搜索次序
使用SystemVerilog時,時間單位和精度值可以在很多地方指定。SystemVerilog定義了一個搜索法則來確定時間值的單位和精度
(1)如果時間值帶時間單位,則使用指定的單位。
(2)否則,使用在模塊、接口和程序內部指定的時間單位和精度
(3)否則,如果模塊或接口聲明嵌入到其他的模塊和接口內,使用父模塊或接口指定的時間單位和精度
(4)否則,使用模塊編譯時,有效的`timescale時間單位和精度
(5)否則,使用在編譯單元域中定義的時間的單位和精度
(6)否則,使用仿真器默認的時間單位和精度

//時間單位和精度的混合聲明(不可綜合) timeunit 1ns //外部聲明的時間單位和精度 timeprecision 1ns;module my_chip(...)timeprecision 1ps;//局域精度(優于外部精度)always@(posedge data_request)begin#2.5 send_packet; //使用外部單位和局部精度#3.75 check_crc; //使用指定的單位endtask send_packet(); ..... endtasktask check_crc(); ..... endtask endmodule`timescale 1ps/ps //`timescale指令指定的單位和精度,優于外部聲明module FSM(...)timeunit 1ns; //局部聲明優于`timescale的指定always@(State)begin#1.2 case(State) //使用局部聲明的單位和`timescale指定的精度waite :#20ps ...; //使用此處指定的單位...end endmoudle

總結

以上是生活随笔為你收集整理的未命名语句块中的声明的全部內容,希望文章能夠幫你解決所遇到的問題。

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