廢話不多說,踏踏實實講技術。
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的高級領域。
黃鴨哥不是在偷懶,隻是在整理文筆。
日積月累,進步從一點一滴開始,加油!!我們下期再見~