您的位置 首页 kreess

IC驗證之“Timescale”使用小談(一)

廢話不多說,踏踏實實講技術。Timescale,想必大傢都不會陌生,它在我們的工程項目中扮演瞭一個很重要的角色,我們的testbench或者rtl都要依賴於timescal

廢話不多說,踏踏實實講技術。

Timescale,想必大傢都不會陌生,它在我們的工程項目中扮演瞭一個很重要的角色,我們的testbench或者rtl都要依賴於timescale來承載一些與時間相關的事情。

我們先來看看在工程裡面我們是怎麼使用timescale的。

一般來說,我們的每個testbench都有自己所定義的timescale,比如在tb_top的開頭定義瞭`timescale 1ns/1ps

這代表什麼呢?

首先,1ns表示的是我們時間的基本單位,有人要問瞭,這個基本單位指的是什麼?

這裡為瞭更清楚的說明,我們舉個簡單的例子:

上圖的28行可以看到#5,這又是啥意思?

大傢應該都很熟悉,也就是阻塞5個時間點。這個時間點也就是我們的ns,這個就是我們的基本單位(timeunit)。

然後我們再來看看第二個參數1ps,這個是時間精度(timeprecision),假如我們把剛剛的#5換成#5.001,這個語句會不會阻塞5.001ns呢?

答案想必大傢都知道瞭,是的,會和我們預期的那樣。

那#5.0001呢?

這個時候末尾的0.0001將會被忽略,因為1ns==1000ps,這個100fs已經小於1ps瞭,所以#5.0001四舍五入之後等同於#5。

黃鴨哥這裡順帶提句,對於#5.001這種寫法不是很推薦,這是verilog的寫法,SystemVerilog裡推薦寫成#5.001ns,這樣可讀性會更好。

有人這個時候可能會想到timeunit和timeprecision間的關系瞭,黃鴨哥這裡要說下,SystemVerilog上沒有明確規定這倆之間的關系,隻是強調瞭timeprecision必須小於等於timeunit。

這種寫法對於編譯器是非法的,會報error:

所以我們一定要註意:

timeunit一定要比timeprecision大 !

timeunit一定要比timeprecision大 !

timeunit一定要比timeprecision大 !

說瞭半天我們一直在解釋timescale的基本用法,這個時候有人會說瞭,這些太簡單瞭,我們都會,能不能來點幹的,這個時候黃鴨哥會反問一句瞭:

你知道這個timescale的作用范圍嗎?

你知道關於`timescale與timeunit,timeprecision間的優先級關系嗎?

你知道timescale的debug方法嗎?

你知道timescale涉及的仿真加速的方法嗎?

要是你們都知道的話那黃鴨哥恭喜你們,你們的工程經驗還是很豐富的,你是個niubility的工程師。

如果你們還存在疑問,那可以多等幾天,下周黃鴨哥告訴你timescale的高級領域。

黃鴨哥不是在偷懶,隻是在整理文筆。

日積月累,進步從一點一滴開始,加油!!我們下期再見~

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部