TimeQuest学习之三------外部寄存器模型
clock skew = < destination reg clock delay > - < source reg clock delay >
為了使clock skew 的影響可以疊加到data delay上,給出如下三組公式(對于fpga2ic):
1.clock skew = <ext_clk delay> - < fpga_clk delay>
2.data delay' = <data delay> - <clock skew>
?
對于多位寬數據(以三位為例):在D[0]~D[2]三個位寬中,delay max 影響建立時間(建立關系), delay min 影響保持時間(保持關系)。對于多位數據而言,max對應著最大延遲的那一位數據,min對應著最小延遲的那一位數據。TimeQuest 在分析D[0..2]建立時間的時候,它只要注意“最危險的建立時間”即可,按邏輯而言,沒有什么比“最危險”更危險。同樣思路,TimeQuest 在分析D[0..2]保持時間的時候,它只要注意“最危險的保持時間”即可,因為沒有什么比“最危險”更危險。
?
公式的推導都以fpga 為中心,因此fpga2ic 的公式又稱output 公式,針對啟動沿的 output 公式又名output max,換之針對下一個啟動沿的output 公式又名output min。
output max= <fpga2ext delay max> - < clock skew > + ext_Tsu;
output min= <fpga2ext delay min> - < clock skew > - ext_Th;
ic2fpga 是ic 發送數據,fpga 讀取數據的外部模型,不過不管位置怎么改變,大體上都是大同小異而已,
input max=<ext2fpga delay max> - < clock skew > + ext_Tco;
input min= <ext2fpga delay min> - < clock skew > + ext_Tco;
?
set_input_delay:
set output delay 與set input delay 好似一個“外包資料”,首先我們收集各種外部的延遲信息接著包裹在一個“外包資料”里,然后丟給TimeQuest 。TimeQuest 當然曉得某某delay max 是針對建立關系,又某某delay min 是針對保持關系。
set_output_delay:
TimeQuest 在分析內部的setup 與hold 時序時順便參考一下“外包資料”的信息... 就這樣TimeQuest 就可以獨立分開外部延遲信息與內部延遲信息。
?
?set_clock_latency:對于時鐘信息而言,max對應著這一時鐘的最大延遲,min對應著同一時鐘的最小延遲,當時鐘只有延遲而沒有抖動時(即延遲始終如一),成both。
set_clock_latency 約束行為不是為某個時鐘設置延遲,而是告訴TimeQuest 有關外邊時鐘信號的延遲信息。
set_clock_uncertainly:我們也知道SLDE 時間差是針對建立關系,而SEDL 時間差是針對保持關系。在此之前我們先將它們從input/output 公式中除掉,然后再將SLDE 與SEDL 的時間差透過set_clock_uncertainly 告訴TimeQuest 即可。
也即:使用set_clock_latency的作用是人為告訴TimeQuest時鐘的一些信息,由TimeQuest計算clock skew,所以使用了set_clock_latency時,就應該將input/output max/min中的clock skew去掉。
?在計算 set_input_delay 與set_output_delay 的時候,我們可以除掉clock skew,取而代之用set_clock_latency 約束命令告訴TimeQuest 關于外部模型中到底什么時鐘信號,然而又有多少的延遲。其中時鐘信號的產生源沒有抖動,又或者說抖動的early 與late值(both)作為前提。此外,透過set_clock_latency 約束命令,在Data Arrival Path 與Data Required Path 的信息中clock network delay 也會顯示對應的延遲。
set_clock_uncertainly 所謂的uncertainly 是指時鐘信號抖動的信息,不過更正確一點說就是各種時鐘抖動所產生的可能性時序里所隱藏的SLDE 時鐘差與SEDL 時鐘差,前者是針對建立關系,后者則是針對保持關系。
set_max_delay:
set_min_delay:
兩個都是比較老的命令,set maximum delay 直接自定義建立關系,而set minimum delay 直接定義保持關系。
對于物理時鐘來說,delay max(late)會造就最小的建立時間,換之delay min(early)會造就最小的保持時間。
create_generated_clock:是個笨蛋,只能一級銜接一級,不能跨級,否則出現錯誤:
Warning: No paths exist between clock target "ext1_clk" of clock "ext1_clk" and its clock source. Assumingzero source clock latency.
----------------------------------------------------------------------------------------------------------------------
?eetop前輩說:setup violation
主要就是設法剪掉critical path的delay,要么pipeline,要么retiming,要么把combination往前后級挪一挪。
hold time violation
hold time violation是clock tree的skew引起的。主要的宗旨就是設法加前面一級combination的delay,比如加buffer什么的。這時候hold time不滿足必須讓前前面延遲大一些,并大到比clock period還大出至少一個hold time來。也可以適當把clock period縮小。不過hold time并不是自己能控制的,挺鬧心的。
在綜合時,綜上所述,
setup violation是由于前級組合的延遲過大引起的,因此要用set_max_delay來限制,
hold violation是由于前級組合延遲國小引起的,因此不能讓他太小,要用set_min_delay來限制。
轉載于:https://www.cnblogs.com/fkl523/p/4005449.html
總結
以上是生活随笔為你收集整理的TimeQuest学习之三------外部寄存器模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雪莉机器人
- 下一篇: 铝扣板一平方多少钱啊?