`timescale命令用來說明跟在該命令后的模塊的時間單位和時間精度。使用`timescale命令可以在同一個設計里包含采用了不同的時間單位的模塊。例如,一個設計中包含了兩個模塊,其中一個模塊的時間延遲單位為ns,另一個模塊的時間延遲單位為ps。EDA工具仍然可以對這個設計進行仿真測試。
`timescale 命令的格式如下:
`timescale《時間單位》/《時間精度》
在這條命令中,時間單位參量是用來定義模塊中仿真時間和延遲時間的基準單位的。時間精度參量是用來聲明該模塊的仿真時間的精確程度的,該參量被用來對延遲時間值進行取整操作(仿真前),因此該參量又可以被稱為取整精度。如果在同一個程序設計里,存在多個`timescale命令,則用最小的時間精度值來決定仿真的時間單位。另外時間精度至少要和時間單位一樣精確,時間精度值不能大于時間單位值。
在`timescale命令中,用于說明時間單位和時間精度參量值的數字必須是整數,其有效數字為1、10、100,單位為秒(s)、毫秒(ms)、微秒(us)、納秒(ns)、皮秒(ps)、毫皮秒(fs)。這幾種單位的意義說明見下表。
時間單位 定義
s 秒(1S)
千分之一秒(10-3S) ms
百萬分之一秒(10-6S) us
十億分之一秒(10-9S) ns
萬億分之一秒(10-12S) ps
千萬億分之一秒(10-15S) fs
下面舉例說明`timescale命令的用法。
[例1]:`timescale 1ns/1ps
在這個命令之后,模塊中所有的時間值都表示是1ns的整數倍。這是因為在`timescale命令中,定義了時間單位是1ns。模塊中的延遲時間可表達為帶三位小數的實型數,因為 `timescale命令定義時間精度為1ps.
[例2]:`timescale 10us/100ns
在這個例子中,`timescale命令定義后,模塊中時間值均為10us的整數倍。因為`timesacle 命令定義的時間單位是10us。延遲時間的最小分辨度為十分之一微秒(100ns),即延遲時間可表達為帶一位小數的實型數。
例3:`timescale 10ns/1ns
module test;
reg set;
parameter d=1.55;
initial
begin
#d set=0;
#d set=1;
end
endmodule
在這個例子中,`timescale命令定義了模塊test的時間單位為10ns、時間精度為1ns。因此在模塊test中,所有的時間值應為10ns的整數倍,且以1ns為時間精度。這樣經過取整操作,存在參數d中的延遲時間實際是16ns(即
1.6×10ns),這意味著在仿真時刻為16ns時寄存器set被賦值0,在仿真時刻為32ns時寄存器set被賦值1。仿真時刻值是按照以下的步驟來計算的。
1) 根據時間精度,參數d值被從1.55取整為1.6。
2) 因為時間單位是10ns,時間精度是1ns,所以延遲時間#d作為時間單位的整數倍為16ns。
3) EDA工具預定在仿真時刻為16ns的時候給寄存器set賦值0 (即語句 #d set=0;執行時刻),在仿真時刻為32ns的時候給寄存器set賦值1(即語句 #d set=1;執行時刻),
注意:如果在同一個設計里,多個模塊中用到的時間單位不同,需要用到以下的時間結構。
1) 用`timescale命令來聲明本模塊中所用到的時間單位和時間精度。
2) 用系統任務$printtimescale來輸出顯示一個模塊的時間單位和時間精度。
3) 用系統函數$time和$realtime及%t格式聲明來輸出顯示EDA工具記錄的時間信息。
編輯:jq
-
寄存器
+關注
關注
31文章
5361瀏覽量
120873 -
eda
+關注
關注
71文章
2777瀏覽量
173542 -
函數
+關注
關注
3文章
4344瀏覽量
62843
原文標題:Verilog HDL 的時間尺度 `timescale
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論