`timescale命令用來說明跟在該命令后的模塊的時間單位和時間精度。使用`timescale命令可以在同一個設(shè)計里包含采用了不同的時間單位的模塊。例如,一個設(shè)計中包含了兩個模塊,其中一個模塊的時間延遲單位為ns,另一個模塊的時間延遲單位為ps。EDA工具仍然可以對這個設(shè)計進(jìn)行仿真測試。
`timescale 命令的格式如下:
`timescale《時間單位》/《時間精度》
在這條命令中,時間單位參量是用來定義模塊中仿真時間和延遲時間的基準(zhǔn)單位的。時間精度參量是用來聲明該模塊的仿真時間的精確程度的,該參量被用來對延遲時間值進(jìn)行取整操作(仿真前),因此該參量又可以被稱為取整精度。如果在同一個程序設(shè)計里,存在多個`timescale命令,則用最小的時間精度值來決定仿真的時間單位。另外時間精度至少要和時間單位一樣精確,時間精度值不能大于時間單位值。
在`timescale命令中,用于說明時間單位和時間精度參量值的數(shù)字必須是整數(shù),其有效數(shù)字為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的整數(shù)倍。這是因為在`timescale命令中,定義了時間單位是1ns。模塊中的延遲時間可表達(dá)為帶三位小數(shù)的實(shí)型數(shù),因為 `timescale命令定義時間精度為1ps.
[例2]:`timescale 10us/100ns
在這個例子中,`timescale命令定義后,模塊中時間值均為10us的整數(shù)倍。因為`timesacle 命令定義的時間單位是10us。延遲時間的最小分辨度為十分之一微秒(100ns),即延遲時間可表達(dá)為帶一位小數(shù)的實(shí)型數(shù)。
例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中,所有的時間值應(yīng)為10ns的整數(shù)倍,且以1ns為時間精度。這樣經(jīng)過取整操作,存在參數(shù)d中的延遲時間實(shí)際是16ns(即
1.6×10ns),這意味著在仿真時刻為16ns時寄存器set被賦值0,在仿真時刻為32ns時寄存器set被賦值1。仿真時刻值是按照以下的步驟來計算的。
1) 根據(jù)時間精度,參數(shù)d值被從1.55取整為1.6。
2) 因為時間單位是10ns,時間精度是1ns,所以延遲時間#d作為時間單位的整數(shù)倍為16ns。
3) EDA工具預(yù)定在仿真時刻為16ns的時候給寄存器set賦值0 (即語句 #d set=0;執(zhí)行時刻),在仿真時刻為32ns的時候給寄存器set賦值1(即語句 #d set=1;執(zhí)行時刻),
注意:如果在同一個設(shè)計里,多個模塊中用到的時間單位不同,需要用到以下的時間結(jié)構(gòu)。
1) 用`timescale命令來聲明本模塊中所用到的時間單位和時間精度。
2) 用系統(tǒng)任務(wù)$printtimescale來輸出顯示一個模塊的時間單位和時間精度。
3) 用系統(tǒng)函數(shù)$time和$realtime及%t格式聲明來輸出顯示EDA工具記錄的時間信息。
編輯:jq
-
寄存器
+關(guān)注
關(guān)注
31文章
5357瀏覽量
120590 -
eda
+關(guān)注
關(guān)注
71文章
2765瀏覽量
173387 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4333瀏覽量
62723
原文標(biāo)題:Verilog HDL 的時間尺度 `timescale
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論