作者naticom (踢踢~)
看板Electronics
標題[問題] 一些STA launch/capture的問題
時間Wed Aug 24 04:33:17 2016
通常在 Flip-Flip timing path中,若是single cycle single clock design
capture端預計是在launch端的下一個cycle拿到資料對吧
http://i.imgur.com/PYsZthr.jpg
就此圖而言,若資料於E2被餵入UFF0,則UFF1應該是在E3 capture這個資料
(single cycle design,假設兩個FF都是positive trigger)
timing engine在做setup check時候UFF0的triggering edge是E2
UFF1則是E3
但如果clock skew太大了(如下圖),實際上UFF0在E2之後吐出的資料
就會變成也是在E2的時候被UFF1吃回去(甚至E1)
http://i.imgur.com/UMXacye.jpg
但我發現timing engine還是用E3去trigger UFF1,造成setup check的時候
根本不會有setup violation(多給了一個T以上的時間)
當然這不代表說電路沒問題,因為hold time就沒過了
請問STA這樣的model是正確的嗎?
主要是我們在寫一個timing check的小程式,發現和其他的timing engine結果不一樣
我覺得STA是把clock對齊到time=0s的時候開始,並且single cycle design的capture端
本來就是要在下一個cycle才可以動作(designer設計也是這樣),因此應該忠於這個假設
下去做timing check,反正setup沒問題hold也會出現問題,到時候還是得修
但我的組員是覺得應該忠於電路真實的行為,例如第二個例子我們應該用E1去trigger
UFF1,因他覺得電路不知道什麼E1/E2/E3,UFF1看到E1來了就準備接收資料
這個例子就會剛好接收到UFF0 E2的資料,因此我們應該用E1來檢查setup violation
我覺得這樣不太對,因為UFF1拿到資料的時間點不對,整個電路的行為就錯了
你去對一個錯的行為檢查setup time沒有意義
他的論點是說那是因為我們在clock=0s的時候就假設電路開始動作並且標記了E1/E2/E3
若我們先把clock啟動後一陣子再讓電路開始動作,這樣UFF1的clock看起來就沒有delay
到1T以上了(我是有回說那你這樣就是做simulation不是STA了)
其實我覺得他說的很有道理,但timing report卻依然用next cycle triggering edge來
計算setup time
不知有沒有版友孰悉這一塊可以給一些意見呢? 謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 96.55.76.82
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Electronics/M.1471984399.A.8BD.html
1F:推 shengyeh: 為什麼先啟動電路 最後看到的skew 可以變小? 08/24 06:26
2F:推 kyo547896321: STA應該是照你說的那樣算,只管set-up time,hold t 08/24 07:36
3F:→ kyo547896321: ime就等APR再修 08/24 07:36
4F:推 wait: STA model錯了吧... create_clock後DC跟PT就會用next cycle 08/25 09:42
5F:→ wait: 當作setup time來確認(除非有設multicycle_path) 08/25 09:43
6F:→ wait: 所以PT check時還是以CLKM作為基準加上clk network...去檢查 08/25 09:52
7F:推 ViewMoon: 你的理解是對的,你的組員是錯的,timing engine 對 08/27 23:11
8F:→ ViewMoon: setup/hold edge 的計算方式不隨著 back annotation 08/27 23:12
9F:→ ViewMoon: from SDF or calculated delay from SPEF 的 delay 而 08/27 23:13
10F:→ ViewMoon: 動態改變 edge 的算法 08/27 23:14