【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告...
聲明:本文為黑金動力社區(http://www.heijin.org)原創教程,如需轉載請注明出處,謝謝!
黑金動力社區2013年原創教程連載計劃:
http://www.cnblogs.com/alinx/p/3362790.html
《FPGA那些事兒--TimeQuest 靜態時序分析》REV2.0 PDF下載地址:
http://www.heijin.org/forum.php?mod=viewthread&tid=22393&extra=page%3D1
第二章:模型角色,網表概念,時序報告
2.1 TimeQuest模型的努力
2.2 SDC的網表(Net Lists)基本單位
2.3 TimeQuest模型的簡單實例
2.4 進一步看看TimeQuest模型如何分析時序
2.5 建立sdc文件與網表
2.6 時鐘約束
2.7 時序報告
總結:
第二章:模型角色,網表概念,時序報告
2.1 TimeQuest模型的努力
我們知道TimeQuest的存在是某師兄所追求的神器,目的是要給懶人們一個解決物理時序的福利,其中最耀眼的就是TimeQuest模型。在前面筆者也曾介紹過TimeQuest模型它是什么?它基于什么?它有什么誤點?”。然在這一章節當中,筆者將會討論它是用來“干什么?”。
TimeQuest模型是用來解決兩個點寄存器(節點)之間的建立關系和保持關系問題。但是在一個最簡單的HDL設計,不可能僅是由兩個寄存器就組成,里邊可能會有“很多很多很多”對寄存器。結果TimeQuest就會用自己的時序分析模型,逐個檢查“很多很多很多”對寄存器之間的“建立關系和保持關系是否合格化”。
試想看看,舉例最簡單的計數器設計,里邊就有多少對寄存器?而且TimeQuest這個機器將會逐個去分析保持關系和建立關系,TimeQuest的行為和努力真是讓筆者感動到全身撲地。好了不多廢話了,進入主題吧。
2.2 SDC的網表(Net Lists)基本單位
網表 Net Lists是什么?嗯 ... 筆者真的不想用太多專業的話來講因為太無趣了,因此我們從另一個角度去看網表。筆者喜歡把FPGA看成一座巨大的邏輯資源庫,如果讀者喜歡玩具的話,也可以把它看成樂高積木庫,那么HDL 就是這個邏輯資源庫的建模工具。
但是有一點比較不同的是,HDL是一個理想的工具,HDL的建模是軟模型,然而網表就是硬模型。FPGA綜合的過程就像我們日常建立機械模型那樣,我們必須先在電腦上建立一個軟模型。當軟模型的經過電腦模擬和測試以后,那么它會成為硬模型的理想參考物,最后模型設備會根據這個軟模型,把金屬生肉加工成為實物。
在FPGA綜合的過程中,邏輯資源之間會開始“布線”,把相關的單位連線起來。設計有多大,那么連線的數量就越多,最終這龐大的連線就成為網表。
圖2.2.1 布線過程·連線·網表的概念圖
圖2.2.1 是布線過程的概念圖 ... 布線過程就是按軟模型,在FPGA巨大的資源庫里建立硬模型,邏輯資源之間的鏈接稱為連線,所有連線的總和稱為網表。明白了嗎?對于不同的性質的網表都有不同的基本單位,對于TimeQuest 來說它是使用SDC網表。有關SDC的背景請維基百科一下 .... 它不在討論范圍之內。
SDC網表有它自己的基本單位,至于是那些基本單位呢?
| 基本單位 | 說明 |
| Cell | SDC網表中最普遍的個體。FPGA中可以找到的寄存器呀, 片上RAM呀,PLL資源呀,硬件乘法器等邏輯資源。 |
| Pin | Cell進出口。 |
| Net | Pins之間的連線。 |
| Port | 頂層模塊的頂層輸入輸出口。 |
Cell 從另一個角度來看,任何FPGA的邏輯資源都可以看成Cell。Pin是每一個Cell
的進出口(軟引腳)。Net就是連線了,最后的Port就是頂層模塊的輸入輸出口(硬引腳)。好了,筆者就以一個 或模塊 or_module.v 來解釋。
圖 2.2.2 或模塊的建模圖。
圖2.2.2是一個軟模塊,亦即或模塊的建模圖,它有A_Sig,B_Sig 和CLK_Sig 輸入,金額Q_Sig 輸出。當這個或模塊經過綜合和布線以后,它會成為 ....
圖2.2.3 布線過后的或模塊
圖2.2.3 是經過布線過后的或模塊,每一個綠色框框都是 Cell,每一個紅色箭頭都是 Pin每一個連線都是 Net。但是有一點比較曖昧的就是 輸入輸出口,它既是Cell 也是 Port,這到底是什么一回事呢?
圖2.2.4 配置引腳后就成為 Port
圖2.2.4是從圖2.2.3的基礎上,將CLk_Sig和Q_Sig 配上引腳,最終造就它們都變身為Port。SDC網表的基本單位看看就好了,不要太計較它們是什么,因為它們的作用不大,不過它們又有什么作用呢?
圖 2.2.5 某個約束命令,基本單位的作用。
如圖2.2.5所示,筆者簡單舉例一個約束命令,其功能先不管。基本上,基本單位的作用就是為約束命令設置 源對象(Source)或者目標對象(Targets)而已,如圖2.2.5所示 ... 有一個名為 create_generated_clock 的約束命令,它約束的源對象是 pll的輸出pin,亦即clk1,而約束的目前對象就是名為 SDRAM_CLK的輸出port。
2.3 TimeQuest模型的簡單實例
實驗一: 入門實驗
想了想,筆者還是用一個簡單的實例來搞清楚,大體上TimeQuest 模型是如何工作 ... 這樣的話,筆者也可以省下許多口水,讀者認識也可以得更具體。
圖 2.3.1 分頻模塊的建模圖。
圖2.3.1 是久違的建模圖,它是名為 divide_module.v的分頻模型,而主要功能是把 CLK_Sig 實現4分頻,然后輸出至Q_Sig。
1. module C1_module 2. ( 3. input CLK_Sig, 4. output Q_Sig 5. ); 6. 7. /*********************/ 8. 9. reg [2:0]C1; 10. 11. always @ ( posedge CLK_Sig ) C1 <= C1 + 1'b1; 12. 13. /***********************/ 14. 15. assign Q_Sig = C1[2]; 16. 17. /***********************/ 18. 19. endmodule代碼很簡單而已,連小孩子都看懂了,讀者不可能看不懂吧?看不懂的朋友自己仿真看看就好了。這個分頻模塊的內容也超級簡單,就是把 C1[3]驅動Q_Sig(第15行)。
圖2.3.2 TMV視圖
圖2.3.2 是分頻模塊的 Technology Mapping Viewer,關于這種視圖還真的是不常用,它不過是用來分析物理時序才用得到的“理想概念視圖”而已。接下來我們來看看,分配模塊的里邊到底有多少對寄存器(節點)需要TimeQuest去分析他們之間的建立關系和保持關系。
圖2.3.3 六對寄存器的建立關系需要分析
圖2.3.4 六對寄存器的保持關系需要分析
同學們千萬不要慌圖2.3.3~4的結果是如何得到的 .. 在這里,筆者只是要讀者弄明白TimeQuest模型分析物理路徑的大概經過而已,同學乖 ... 暫時先忍耐。
圖2.3.5 第三對C1[0]~C1[0]寄存器
讓我們先看第第3對,亦即C1[0] ~ C1[0]的分析經過。在此讀者可能會覺得疑惑,同樣都是C1[0]節點,為何建立關系和保持關系的分析過程會成立呢?讀者稍微注意一下,圖2.3.5的C1[0]的輸出方向,除了reg2-Q以外,它還反饋給自己的reg1-Q,節點C1[0]~C1[0]也因此成立。
圖2.3.6 把C1[0]拆開的概念圖
圖2.3.6是比較人性化的概念圖,只要有兩個寄存器(節點)那么TimeQuest模型就可以開始分析它們之間的建立關系和保持關系了。
圖2.3.7 第一(六)對C1[1]~C1[2]寄存器
相比之下,節點C1[1]~C1[2] 比起節點C1[0]~C[0]更容易理解。C1[1]是寄存器1的第1位,而C1[2]則是寄存器2的第2位,LOGIC_CELL_COMB 是Tdata延遲。然而其他節點也有大同小異的情形,筆者就不一一解釋了,自己看著辦吧。
就這樣TimeQuest模型會一對一對的分析節點之間的建立關系和保持關系,一個設計里邊有多少對節點,TimeQuest就分析多少對。只要所有節點沒有發生違規時序(建立關系和保持關系合格,亦即建立余量和保持余量都為正值化),那么這個設計就okay了。換句話說,這個分頻模塊的物理時序是合格的,因為圖2.3.3~4正好反饋所有節點的建立余量和保持余量都是正直。
在此有些朋友可能著急了,問道:“圖2.3.3~4是如何得到的?”。安啦~朋友,前面的故事還沒有說完,你這只太監怎么先著急了?不想當太監就要慢慢來 ...
在這個章節當中,筆者只是想幫讀者們大概搞個明白 ... TimeQuest到底是如何使用自身的模型來進行時序分析,這些概念絕對是一個基礎。有些玩TimeQuest 的朋友,根本就沒有任何概念可言,有的只是純公式而已,當然筆者并不反對純公式的使用,只是純公式它太無趣了,根本上也稱不上學習。
不過在這章節中,筆者太感動了,TimeQuest真的是努力的孩子,如一個簡單的分頻模塊,就有6對節點的時序需要分析,亦即C1[0]~C1[0],C1[0]~C1[1],C1[0]~C1[2],
C1[1]~C1[1],C1[1]~C1[2] 還有 C1[2]~C1[2] 。TimeQuest它都會一一去分析沒對節點之間的時序。同樣的,如果一個設計,里邊有100對節點需要分析的話,TimeQuest也會組個去分析 ... 讀者說TimeQuest是不是努力的好孩子?
2.4 進一步看看TimeQuest模型如何分析時序
筆者需要先強調一下,目前筆者還沒有準備玩弄TimeQuest這個工具,反之了解TimeQuest模型才是學習TimeQuest的首要功課。筆者這種醉翁之意的心情,可能會使許多心急的朋友焦慮不安 ... 不過筆者勸告道:要玩轉TimeQuest 就需要把 TimeQuest 模型每一個重要部分“窺視”清楚才行。TimeQuest模型,絕對不是網上所說的那樣,幾個公式,幾個圖像就可以解釋清楚,實際上它更加神秘許多... 更加好玩。
在2.3章節中,我們知道TimeQuest模型都會逐個分析分頻模塊的所有節點之間的建立關系和保持關系。在這個章節當中,我們以“實際延遲”來實驗看看TimeQuest如何使用模型來工作。因此故事的主角繼續以 2.3章節分頻模塊為例。
圖2.4.1 節點C[0]~C[0]的物理狀況(建立過程)。
圖2.4.2 C1[0]~C1[0] 建立關系的分析過程。
圖2.4.1是節點C1[0]~C1[0]的物理狀況,而圖2.4.1是該節點的建立關系過程。讀者暫時把焦點放在 Data Arrival Path 那邊... Clock路徑亦即 Tclk1 它有2.883ns延遲 (TimeQuest都是以ns為計算單位),Data路徑亦即 Tco + Tdata 它有 0.805ns延遲。
按照公式計算的話:
數據抵達時間 Data Arrival Time = 啟動沿 + Tclk1 + Tco + Tdata
= 0 + 2.883 + 0.805(Tco + Tdata)
= 3.688ns
現在又把焦點放在 Data Required Path 的身上,亦即數據獲取時間。鎖存時間是 10ns(和理想建立關系值等價),Clock路徑亦即 Tclk2它有2.883ns的延遲,uTsu就是 Tsu寄存器特性,延遲結果是 0.040ns。繼續按照公式來計算的話:
數據獲取時間 Data Required Time = 鎖存沿(理想建立關系值)+ Tclk2 - Tsu
= 10ns + 2.883ns - 0.040
= 12.843ns
erh .... 怎么數據獲取時間 Data Required Time的結果是 12.923ns 而不是 12.843ns ,這顯得TimeQuest 把 Tsu加上而不是減掉?這其中發生什么事情了?是不是TimeQuest搞錯了,還是筆者搞錯了?不不不,誰都沒有錯,這個問題有許多因緣 ... 用傻瓜的話來講,Tsu 這個延遲可有可無,實際情況上它非常接近0ns,因此 Tsu 可以小到忽略。
筆者稍微更動一下上面的計算結果:
數據獲取時間 Data Required Time = 鎖存沿(理想建立關系值)+ Tclk2 - Tsu
= 10ns + 2.883ns + 0.040
= 12.923ns
圖2.4.3 節點c[0]~c[0] 波形圖。
圖2.4.3是TimeQuest為節點c[0]~c[0]提供的波形圖,它有非常直觀的效果,比筆者涂鴉更規格,真的很慚愧。這張圖很容易看懂而已,讀者就自己看著辦吧。(注意不要過度轉牛角尖關于右下角的 - 0.04 ~無視無視)。
最后再計算建立余量的結果:
建立余量 Setup Slack = 數據獲取時間 - 數據抵達時間
= 12.923ns - 3.688ns
= 9.235ns
===================================================================
圖2.4.4 節點C[0]~C[0]的物理狀況(保持過程)。
圖2.4.5 節點C[0]~C[0]保持關系的的分析過程。
在前面筆者曾說過TimeQuest模型中求出保持余量的有兩種方法:一種是用頭腦;另一種是用屁股。很不巧TimeQuest確實是使用屁股來計算,圖2.4.5右邊的波形圖就是最好的證明。嗯 ... 讀者是不是覺得很郁悶,無論怎么左看由看,感覺難看不明白?好吧,筆者再干一次善行 ...
圖2.4.6 節點C[0]~C[0]保持關系的的分析過程的波形圖。
圖2.4.7 筆者為圖2.4.6加筆的時序圖。
從圖2.4.6與圖2.4.7的比較中,讀者是否可以看出其中的蹺蹊?關于這點筆者就不再解釋了,自己看著辦吧。好了,現在我們知道及節點C[0]~C[0]之間的理想保持關系值是 0ns,那么保持余量是:
數據抵達時間 Data Arrival Time = 啟動沿 + Tclk1 + Tco + Tdata
= 0ns + 2.883ns + 0.805ns
= 3.688ns
數據獲取時間 Data Required Time = 鎖存沿 + Tclk2 + Th
= 理想保持關系值 + Tclk2 + Th
= 0ns + 2.883ns + 0.306ns
= 3.189ns
保持余量 Hold Slack = 數據抵達時間 - 數據獲取時間
= 3.688ns - 3.189ns
= 0.499ns
除節點C[0]~C[0]以外,其他5對節點的分析過程也是大同小異。在這里,可能有些心急的同學已經耐不了性子了說,“我要用TimeQuest,我要搞TimeQuest!”。安啦安啦!下一章節開始就是了!要玩TimeQuest之前,理解一切基本的概念是必須的,讀者不要問為什么筆者如此啰嗦,因為在接下來的故事當中,讀者自然而然就會明白筆者的苦心。
2.5 建立sdc文件與網表
有關TimeQuest工具的使用步驟,雖說網上許多版本,不過官方的陣營占大部分,方法都是見仁見智的東西,只要點到重點,什么方法都不重要。使用TimeQuest主要有兩大步驟,一是配置,二是分析。
配置是指編譯器的優化配置,因為不同的配置選項都會產生不同的時序結果。而TimeQuest分析,顧名思義就是使用TimeQuest分析某個設計。好了!廢話還是少說,讓我們開始期待已久的TimeQuest 初次之旅。
圖2.5.1 打開實驗一項目
首先先打開 divider_module 實驗一的工程,如圖2.5.1。該設計筆者已經編譯過了,為了安全起見,筆者建議再編譯一次。
圖2.5.2 建立同名sdc文件。
然后新建一個同名的SDC文件在實驗一的目錄下,該文件取名和實驗一的項目名一樣,亦即 divider_module.sdc,如圖2.5.2所示。估計實驗一的目錄下已經有筆者原先建立好的 .sdc 文件,讀者們可以刪掉再建立,還是直接覆蓋都行。
接下來將 divider_module.sdc 文件設置為該實驗的默認sdc文件,過程如圖2.5.3所示:
打開設定
選擇“TimeQuest Timing Analyzer”,然后點擊“...”。
將 divider_module.sdc 托載進來。
點擊 Add把它添加進來。
圖2.5.3 設置實驗的默認sdc文件。
在這里,讀者稍微注意一下 ... Quartus II 版本10之前,Classic Timing Analyzer 會作為默認的靜態時序分析工具。反之10和以后的版本,TimeQuest作為默認時序分析工具。所以呀,不同的版本之間可能會有所出入,如果讀者使用的Quartus II的版本是10之前的話必須將靜態時序分析設置為 TimeQuest。當讀者把 divider_module.sdc 文件添加進來以后,為以防萬一再編譯一次。
圖2.5.4 打開TimeQuest
當編譯完成以后,點擊圖2.5.4顯示的“”圖標,然后就會正式進入TimeQuest。
圖2.5.5 TimeQuest界面
圖2.5.5是TimeQuest的界面, 注意左邊的紅色框圖嗎?它是這一章節的主角了。
(一)Create Timing Netlist 說簡單點就是建立網表,如果用筆者的話來說,就是軟
模型 divider_module.v 開始布線,然后建立硬模型。
(二)Read SDC File 就是讀取該項目中 .sdc 文件中“約束配置”。
(三)Update Timing Netlist 就是更新網表。每當我們更動過“舊網表的約束配置”,
然后我們必須再一次更新它。
關于“約束”這一詞英文是 Constraint,從字面它是“什么被什么強迫或者限制”的意思。 事實上 Constraint 這一詞用在TimeQuest上,沒有那么黃和暴力,而且范圍也很廣。TimeQuest是一個工具也是一個笨蛋,宏觀上“Constraint”的用意就是“告訴TimeQuest要怎么怎么干,要注意什么什么”。
| 圖2.5.6 自動建立網表。 | 好了,我們要正式開始建立網表了。如圖2.5.6所示,只要我們“雙擊”Crete Timing Netlist,那么TimeQuest就會自動建立默認網表。 但是不是所有同學都那么懶惰的 .... 除了自動建立以外,我們也可以手動建立網表。 |
圖2.5.7 手動建立網表。
圖2.5.7 是手動建立網表的經過,先是從Netlist菜單下點擊 點擊“Create Timing Netlist”,,如圖2.5.7左圖所示,然后就會自動彈出右圖。右圖的 Input Netlist 有 Post-fit 和 Post-map 選項,而且 Delay model 又有 Slow-corner ,Speed grade,Fast-corner 和 Zero IC delays 等選項。那么多選項,想必讀者又要抓狂了,嗚哇哇!
同學們千萬不要慌,右圖的各種選項設置會造就不同質量的網表,我們先粗略了解下各種選項字面上的意思 ...
Input netlist 字面上的意思是“輸入網表”。
Post-fit 官方的定義是:
“The TimeQuest analyzer performs timing analysis on a timing netlist that contains physical synthesis optimizations and fitting”。
用傻瓜的話來講,Post-fit網表會在建立之際會參考編譯器的優化設置結果(亦即使用TimeQuest的第一步)。
Post-map 官方的定義是:
“The TimeQuest analyzer performs timing analysis on a timing netlist that contains complete synthesis information”
用傻瓜的話來講,Post-map網表會參照綜合結果而建立。結果來說,Post-map網表更接近原型(沒有優化),但是post-fit更接近物理結果(有優化)。
===================================================================
Delay model 的意思如同字面上所示,亦即網表的延遲模型,用傻瓜的話來講就是“網表的環境”。“筆者你在說什么,網表的延遲模型和網表的環境到底有什么關系?”汗!真是一群心急的孩子 ....
Slow-corner 的官方定義是:
“Uses the worst-case (slowest) timing model to compute delays depending on the speed grade of the device specified in the Speed grade list.”
worst-case字面上是指最差環境,也指極端情況。
Fast-corner 的官方定義是:
“Uses the best-case (fastest) timing model to compute delays.”
Best-case 字面上是指最好環境,也指舒適情況。
根據worst-case 與 best-case 的選擇也會造就不同的質量的硬模型(網表),在此讀者只要簡單記住,worst-case硬模型有高保險余量高性能限制,而best-case硬模型有第保險余量低性能限制即可。如果用傻瓜的話來講,best-case比worst-case的硬模型更接近實際的網表。
所謂的 zero_ic_delay 就是會無視一些網表基本單位的延遲。
根據上述各種設置以后,我們會得到不同質量的網表 ... 而“不同質量的網表”到底是什么一會事呢?筆者以數學的“π”為例,它的常量是 3.142,但是隨著精度的不同,它的常量可以是 3.14159265358979 ,也可以是3.1415926535897932384。
不過“網表質量”的具體用意到底是什么呢?嘗試想象看看 3.142的π,它可以是 3.1415,它也可以是 3.14159;換之 3.141592的π,它不可以是 3.142也不可以3.1415。
這就是“保險余量”的用意。嘛 ... 有關網表質量就先解釋道這里吧,往后讀者有一定的基礎以后筆者會再詳細討論。
===================================================================
筆者再次強調一下,以上的內容純屬筆者自己的看法而已,至于讀者信不信,就自己看著辦吧。最后,至于什么樣配置的網表才是最正規呢?這個是沒有答案的問題!什么樣的設計,就需要什么樣的網表。不過對于一般實驗而言,它就足夠的說:
圖2.5.8 夠用的網表質量。
圖2.5.8是夠用的網表質量,這種 Create Timing Netlist的選項也是最接近 fpga的性能。
圖2.5.9 默認的網表質量。
然而TimeQuest在默認下,亦即快捷雙擊“Create Timing Netlist”,TimeQuest會產生如圖2.5.9所示的網表質量,又稱默認網表。
好了,我們先閑聊一會兒讓大腦放松放松 ... 在此有讀者可能會問:“筆者對TimeQuest正體的約束過程,有什么樣的概念呢?”嗯,雖然這是一個好問題 ... 讓筆者慢慢解釋吧。
圖2.5.10 TimeQuest正體的約束過程。
從圖2.5.10中我們可以知道,當我們要為某一個模塊(實驗)執行靜態時序分析(物理時序分析)的時候,我們必須先建立網表。然而在建立網表的過程,TimeQuest必須參考軟模型,亦即 divider_module.v。但是網表的質量可以根據需要自行調整。接下來TimeQuest必須從 divider_module.sdc 中讀取“任何的約束配置”,而“更新網表”是把“任何的約束配置”在網表生效。
在TimeQuest的一系列執行活動中,如建立網表,讀取約束配置,更新網表 ...... 等等“這一切都是 TimeQuest的活動”,所謂TimeQuest的活動,它需要從項目中參考相關的內容,如圖2.6.11所示。假設實驗一通過時序分析,然后我們要把實驗一的內容下載到開發板中 ... 這個時候我們所需要的東西也只有 .v 文件生成的硬模型而已。
用簡單的話來說,當某個實驗下載到開發板的時候,它有屬于自己的“物理網表(硬模型)”。為了測試這個“物理網表”到底合不合格,所以我們需要用TimeQuest 這個工具“仿真”這個“物理網表”,而TimeQuest不會直接仿真“物理網表”,而是仿真不同質量的網表,又或者仿真不同質量的硬模型。
假設這個設計是發生在極端的環境里,這時候我們就要選擇 worst-case 質量的網表,然后透過約束命令將各種延遲信息,時鐘信息告訴TimeQuest。接著TimeQuest就會在這個模擬的環境中測試該硬模型,如果時序合格的話,那么該設計即使在極端的環境里也能正常發揮。
圖2.5.11 筆者眼中的TimeQuest概念。
圖2.5.11是筆者眼中的概念圖,硬模型也就是某個.v 文件經過編譯和綜合的結果。然而一個硬模型可以分成軟模型和網表。軟模型可以用 Modelsim 仿真模塊的功能(行為),
其中需要 .vt 文件作為激勵過程;網表建立的過程中需要參考軟模型;網表可以經TimeQuest計算時序,看是否合格?其中可以用 .sdc文件來“約束”網表。
在早期的實驗當中,筆者通通都無視物理時序,換句話說就不把 .sdc 文件看在眼里。當Quartus II 發現某個設計如果沒有被指定 .sdc 文件,那么Quartus II 就會用默認的“Classic Timing Analysis”去分析網表了(Classic Timing Analysis似乎只是在早期的Quartus II 出現--版本10.0以前)。如果時鐘頻率不高的話,以黑金開發板為例 -- 20Mhz,50ns的周期時間,不管有沒有靜態時序工具分析網表,硬模型產生的結果都“夠用”了。
那些熟讀過筆者筆記的家伙,間接上會明白筆者的思維和思路是非常邏輯,所使用的辦法當然也是非常邏輯。在這里筆者所要強調的是,既然筆者是如此邏輯那么執行TimeQuest的步驟(過程)也要邏輯。讀者竟可以的話,把 .sdc 文件看成是硬模型的激勵文本,或者TimeQuest 的參考物。
2.6 約束時鐘
對TimeQuest而言,約束的大概意思是“注意什么,或者干什么”,接近的意思是“利用命令再現分析環境”有關這一點它與Modelsim非常類似,因為Modelsim是利用描述語言(其中包括驗證與綜合)再現仿真環境。所謂“約束時鐘”就是告訴TimeQuest,某個設計“到底有什么樣的時鐘?”。好了,讓我們開始2.5章節的實驗一吧。
實驗一的網表配置如下所示,這種作為沒有什么特殊的意思。
create_timing_netlist -post_map -model slow -zero_ic_delays
實驗一所使用的 CLK_Sig 是 100Mhz,50%占空比的典型時鐘,我們有責任把這個信息告訴 TimeQuest,該過程就是俗稱的“約束時鐘”。
圖2.6.1 打開同名sdc文件。
首先先確定在實驗一的項目中TimeQuest已經被打開,然后在QuartusII中打開和實驗一同名的 .sdc 文件,如圖2.6.1所示。
圖2.6.2 調出 create clock界面。
接著點擊Edit => Insert Constraint => Create Clock ... 如圖2.6.2.所示。
圖2.6.3 Create Clock界面(時鐘聲明)。
然后會彈出一個 Create Clock 的窗口,在Clock name 隨便輸入一個名字,在這里筆者就輸入 CLK_Sig,然后 Period 是 10.00ns 亦即 100Mhz頻率的意思。至于Rising 和 Falling 是設置占空比,放空下是50%的占空比。完后點擊 < ... > 取得 CLK_Sig對應的輸入口。
圖2.6.4 尋找對應的基本單位。
圖2.6.4是經圖2.6.3點擊 < ... > 以后彈出的窗口。接下來我們要干的工作就是告訴TimeQuest,我們這個CLK_Sig 的目標對象是哪一個基本單位?
Collection 方面設置 get_ports亦即選擇 port 基本單位。Filter < * > 表示沒有過濾 ,然后點擊 < List > 就會列出頻模塊的所有 port基本單位。 選擇 CLK_Sig 然后,再點擊" > " 把CLK_Sig 從左邊加入右邊,最后點擊 < OK > 就行了。
圖2.6.5 對應目標為 port基本單位的 CLK_Sig。
圖2.6.6 生成約束時鐘的約束命令(約束代碼)。
圖2.6.3變成圖2.6.5以后,再最后點擊 < Insert > ,然后 create_clock -name CLK_Sig -period [get_ports{CLK_Sig}] 這條 SDC命令會自動添加并且顯示在 Quartus II 中的 .sdc 文件里,結果如圖2.6.6所示。
圖2.6.7 在TimeQuest中約束時鐘。
圖2.6.1~6是筆者常用的方法,不過筆者也喜歡直接在 TimeQuest 中添加時鐘約束,如圖2.6.7所示那樣,基本上過程都是一致的。
圖2.6.8 在TimeQuest中保存sdc文件。
最后點擊保存,這樣 .sdc 文件就更新完畢,如圖2.6.8所示。
圖2.6.9 讀取sdc文件。
接下來我們把換面切換到 TimeQuest,然后雙擊 Tasks 任務窗口中的 Read SDC File, 那么TimeQuest 就會從實驗一中的 divider_module.sdc 文件中讀取約束配置。到目前為止我們的 divider_module.sdc 僅包含如下這一個命令而已。
create_clock -name CLK_Sig -period 10.00 [ get_ports {CLK_Sig} ]
圖2.6.10 更新網表。
當雙點擊 Read SDC File 以后,那么TimeQuest 就會知道“分頻模塊所使用的時鐘信號 名為CLK_Sig 周期是10.00ns,而且目標對象是 CLK_Sig 這個port基本單位”。最后
雙擊 Update Timing Netlist 如圖2.6.10所示,那么“約束時鐘”的動作就會更新完畢。
2.7 時序報告
在前一章節當中筆者為實驗一約束了“100Mhz- 10ns 50%”的CLK_Sig。用另一句話來說,筆者“恐嚇”TimeQuest說道:“喂!實驗一的分頻模塊是用 10ns 50% 的CLK_Sig,而且CLK_Sig 的輸入經由 CLK_Sig 輸入端口”。在2.6章節的最后,我們雙點擊“Update Timing Netlist”過后就進入閑聊了 ...
在這一章節當中,我們的工作是要列出時序分析的結果,亦即時序報告。關于時須報告的“列出過程”都是因人而異的,這現象也常常讓許多同學法問:“有沒有固定的步驟?”好了,在這里就按照筆者的習慣來列出時序報告。
圖2.7.1 列出時序簡報。
首先需要列出所有的“時序簡介”,在Task界面里雙點擊 < Report All Summaries > ,如圖2.7.1所示,Report All Summaries 會列出所有簡單的約束報告。
圖2.7.2 時鐘信號信息。
到目前為止,我們只是約束一個 CLK_Sig 而已,如圖2.7.2所示。我們所約束的 CLK_Sig 是10ns 周期,50% 的占空比( Rise - 0.0 Fall - 5.0 )。因此TimeQuest已經知道該實驗有一個名為 CLK_Sig周期是10ns的時鐘信號。
圖2.7.3 調出 Report Timing界面。
接下來我們要報告出,在實驗一的網表中,所有和 CLK_Sig 有關的網表基本單位。如圖2.7.3所示,在CLK_Sig 的簡介中,“右鍵點擊”然后會彈出一個窗口,最后點擊
< Report Timing ... > 就可以了。
圖2.7.4 Report Timing的基本界面。
圖2.7.4 是 Report Timing 的基本界面,對于第一次遇見它的朋友來說,可能會嚇了一跳 ... Report Timing幾乎是最常用的工具之一,它主要分析 setup, hold,recovery 還有 removal等時序結果(暫時先不管 recovery 和 removal)。
圖2.7.5 From和To與基本單位。
我們知道TimeQuest的模型只有在“一對節點”的情況下才能工作。From Clock 在某種意義上是指 reg1的提供時鐘,亦即源時鐘;反之 To Clock 在某種意義上是指 reg2的提供時鐘,亦即目的時鐘,如圖2.7.5所示。
圖2.7.6 節點C1[0]~C1[1]的from clock 與 to clock。
如果以實驗1為例,在TMV視圖當中,矩形中有一對節點,亦即C1[0]~C1[1](圖2.7.6)。其中C1[0]是Reg1,反之C1[1]是Reg2,Reg1和Reg2它們同是使用 CLK_Sig。在這里我們需要知道一個TimeQuest的硬道理“TimeQuest模型需要一對節點才能成立”。假設筆者在 From Clocks 中輸入 CLK_Sig,那么這一對節點C1[0]~C1[1] 就會被牽扯進來,同樣的道理,當筆者在To Clock 中輸入 CLK_Sig ,那么C1[0]~C1[1]也會被牽扯進來。
圖2.7.8 target 的對應選項。
圖2.7.8中的Targets有3個選項,亦即 From,Through 和 To,選項的功能如字面上的意思。Targets 是某個節點的基本單位,以實驗一為例,如果筆者在 From 中輸入 C1[0]如圖2.7.8所示,該動作就是把 C1[0]有關聯的節點都列出來 (也可以看成是把Reg1有關的“節點”都關聯進來)。
圖2.7.9 實驗的所有節點。
圖2.7.10 實驗一部分節點(from 對應 c1[0])。
我們知道實驗一中的分頻模塊,主要由6對節點組成,如圖2.7.9所示。那么和C1[0] 有關聯的節點如圖2.7.10所示。
圖2.7.11 Through的對應選線。
其外,Through的意思如字面上一般——經由,簡單說就是“經過什么”。如圖2.7.11所示,C1[0]~C1[1]節點之間就有 “C1[1]~1”這個組合邏輯。假設筆者在Through中輸入 “C1[1]~1|combout,C1[1]~1|datac,C1[1]~1|datad”,救過就是把C1[1]~1 組合邏輯有關的節點關聯進來。
圖2.7.12 與C1[1]~1|combout,C1[1]~1|datac,C1[1]~1|datad有關的節點。
結果會如圖2.7.12所示,與C1[1]~1 組合邏輯有關聯的節點只有 C1[0]~C1[1]和C1[1]~C1[1]而已。至于To 是From的反面的意思,筆者就不詳細介紹了,讀者可以把它看成“把Reg2有關的節點都關聯進來”。
圖2.7.13 時序分析選項。
圖2.7.13是Analysis type 的界面。TimeQuest的模型除了用來分析 Setup 建立關系, Hold 保持關系以外,還有 Recovery 和 Removal。Recovery /Removal 和 Setup /Hold 的差別就在于異步與同步之分,我們暫時不談它們。假設筆者要列出(Setup)建立關系的分析結果,那么只要使能 Setup就行。
圖2.7.14 output選項。
圖2.7.14是Output的界面,基本上沒有好介紹的,默認下就足夠了。最下面的是 Tcl command命令,看看就好了不要太認真。
圖2.7.15 Report Timing 界面。
再一次,筆者簡單介紹一下圖2.7.15當前的配置:
在Clocks界面中,To Clock輸入了 CLK_Sig ,根據實分頻模塊,其中的6對節點都是使用同樣的 To Clock , 換句話說就是把實驗一的全部“6對節點”都關聯進來;而Targets 空空如也,默認下這也表示把“所有節點”都關聯進來的意思:在Analysis type 中,Setup被使能,換句話說就是分析建立關系。好了,關于 Report Timing的界面,筆者介紹得差不多了,筆者是時候點擊 <Report Timing>。
圖2.7.16 詳細的setup時序報告。
最后就會出現如圖2.7.16所示的詳細setup時序報告。
===================================================================
好了,先給自己一段消化的小時間吧 ... 基本上要列出時序報告是沒有什么固定的步驟,但是對于一些懶人來說(筆者)最喜歡就是先列出“全部約束—Report All Summary”
,然后再“ Report Timing”直接把 CLK_Sig 有關的節點都列出來。就這樣,要報告出建立關系的結果,就在Analysis Types 中使能 setup:反之,要報告出保持關系的結果,就在Analysis Types 中使能 hold即可。
圖2.7.17 詳細的setup時序報告。
圖2.7.18 詳細的hold時序報告。
最后我們來看看實驗一中的分頻模塊的建立關系和保持關系的時序報告,如圖2.7.17~18所示,建立余量和保持余量均為正值,換句話說實驗一的時序已經合格。
總結:
在這一章節當中筆者簡單并且詳細的討論關于“TimeQuest如何使用自身的模型去分析時序是否合格”,“網表”,“約束”,“TimeQuest的使用步驟”和“時序報告”等概念。第二章的一切一切,筆者還是在討論一些基本的概念而已。
在筆者的眼中,要入門TimeQuest明白一些最基本的內容是關鍵的部分。TimeQuest雖說它是一個笨蛋的工具,但是設計者是用什么思維去設計它,這是學習TimeQuest,也是掌握TimeQuest的重點。以前,筆者初次接觸TimeQuest的時候,一直在“如何使用TimeQuest”這個大門外打轉,結果筆者打圈圈3/4年。
那時候的筆者雖然知道“保持余量”的概念,但是卻對求出“保持余量”的公式充滿著問題 .... 因為筆者還不知道如何使用屁股去分析保持余量的公式。此外,筆者也對“TimeQuest如何用自身的模型”去分析一個設計,充滿著許多問號。最后還有一個難題就是“筆者沒有網表的大致定義 ”.....
“網表的定義”是把所有概念聯系起來的重要“中間人”,只有知道網表的位置和定義,那么所有東西都可以串聯起來了,這種感覺如同工藤新一的頭部穿過電流那樣。
好了,筆者不廢話了,最后來個簡單的總結吧:
1. 一個硬模型基本上是由網表和軟模型經過編譯組成的。
2. TimeQuest是一個分析網表“是否合格”的工具(讀者可以看成是網表的仿真工具)。
3. 其中網表的生成需要參考軟模型。
4. 網表有質量之分。
5. “約束”的定義,在這個章節當中是“告訴TimeQuest干什么,或者注意什么”。
6. TimeQuest是用模型逐個去分析所有節點之間的保持|建立關系。
7. Technology Map Viewer 和TimeQuest有關系。
8. 可以把sdc看成是硬模型的激勵文本。
9. TimeQuest沒有固定的使用步驟。
10. “Report Timing”是一個很好用的工具。
嗯,就是這些而已。更多有趣的內容和學習,我們下一章再見。
轉載于:https://www.cnblogs.com/alinx/p/3383194.html
總結
以上是生活随笔為你收集整理的【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网卡驱动程序之编写虚拟网卡(二)
- 下一篇: 债券价格和通胀率