零基礎學FPGA (二十四)必會! 從靜態時序分析到SDRAM時序收斂(上篇)

2020-12-05 電子產品世界

  下面我們進入正題,今天我們講時序

本文引用地址:http://www.eepw.com.cn/article/278905.htm

  一、從靜態時序分析說起

  我理解的靜態時序分析,就是我們在不加激勵的情況下,通過對電路進行時序的延遲計算,預計電路的工作流程,對電路提出我們需要的一些約束條件,比如我們需要從A寄存器到B寄存器的延遲不能大於10ns,如果我們不添加時序約束,綜合工具可能會有好幾條路徑,按照它自己的要求來布局布線,那麼從A寄存器到B寄存器的時間就有可能是20ns或者15ns之類的路徑,而我們需要的是不能大於10ns,因此,我們需要添加時序約束,再根據特定的時序模型,使我們的系統達到設計要求。

  這裡的時間延遲可能包括我們的PCB板的走線延遲,也包括FPGA內部的走線延遲,時鐘延遲等等,這裡我們添加的時序約束,就相當於我們在沒有下板之前,通過計算,來模擬仿真下板後的延遲情況,並通過時序報告查看有哪些違規路徑,以及建立保持時間不平衡的情況,通過時序優化使其達到一個穩定狀態的過程。

  小墨在做SDRAM時序約束的時候深有體會,即使我們老老實實的按照時序計算公式將延時計算出來添加到工程中去,時序報告也顯示時序收斂並且也幾乎達到了建立保持時間的平衡狀態,前後仿真也沒什麼問題,以為一切就緒了,但是下板後就是跑不起來,最後我還是改動了一下約束參數,有時候甚至改動幅度與計算幅度相比較大,當然還是在保證時序收斂的情況下,下板之後竟然跑起來了,可能是我第一次接觸時序這個高大上的概念,經驗不足吧,有的時候真是碰運氣....當然等會我將源碼共享的時候,大家還需要自己進行時序約束,因為我們的FPGA晶片型號,PCB布局,SDRAM型號都不太一樣,那麼跑起來是件很困難的事情,所以大家還需要自己親自學一下這部分的知識,自己去摸索。

  我們直接來看這個圖,

  

 

  要看懂這個圖,當然還需要有一個模型

  

 

  時序圖上的第一個時鐘,即我們的源時鐘,或者說是我們的晶振時鐘,從晶振到達源寄存器,這段路程肯定是有延遲的,我們把這段延遲叫做Tc2s,也即我們的clk1.

  時序圖上的第二個時鐘,是我們的源時鐘到達目的寄存器的時鐘,即我們的鎖存寄存器的時鐘,它到目的寄存器的延遲,我們稱為Tc2d,也即我們的clk2

  clk1 到達源寄存器的時候,將輸入的數據鎖存器到源寄存器,目的寄存器沒有鎖存值,等到第二個時鐘周期,clk2 到達目的寄存器的時候,將源寄存器的輸出數據鎖存,數據必須在clk2 到達之前保持穩定,從數據到達目的寄存器到clk2到達這段時間,稱為建立時間,當然,數據被鎖存之後,還需要保持穩定一段時間,這段時間稱為保持時間。

  從數據被源寄存器鎖存開始,到數據出現在目的寄存器的這段時間,我們稱為數據的傳輸時間Tco

  我們做這樣一個考慮,如果Tco很長,也就是說,數據從被源寄存器捕獲,到出現在目的寄存器的延時時間較長,甚至長到clk2到達目的寄存器的時候還沒有到達,那麼,我們就說這段路徑,建立時間違規,數據不能被正確捕獲,這時候,我們就可以給其添加約束,讓數據在多少納秒之內到達,保證數據被捕獲,然後綜合工具就會根據我們的要求,尋找最佳路徑,從而保證建立時間足夠長。

  同理,假設Tco很短,短到clk2到來的時候,本來應該被捕獲的數據,還沒有保持一定的穩定時間,就被下一個要捕獲的數據給覆蓋了,或者說我們捕獲到的是下一個要捕獲的數據,從而造成保持時間違規

  所以,Tco的時間既不能太長,也不能太短,必須在一個合理的範圍內,儘量讓目的寄存器的捕獲時鐘在數據的有效窗口內,所以,建立保持時間必須滿足下列公式,公式的由來完全來自於時序圖

  

 

  其中,Tc2d - Tc2s叫做時鐘偏斜,這兩個公式,是我們下面分析SDRAM時序的兩個重要公式

  再來看一下這兩個公式,既然我們要做時序分析,得要知道我們要分析的是哪一部分吧,Tclk我們無法改變,就是系統時鐘嘛,時鐘偏斜我們也改變不了,因為對於一個特定的FPGA器件,時鐘偏斜相對固定,所以我們可以改變的就是Tco,怎麼改變呢,就是添加我們的時序約束,讓綜合工具按照我們的要求尋找符合我們約束的路徑,從而滿足建立保持時間的要求。

  二、輸入輸出模型以及I/O約束

  1、先來看輸出模型

  

 

  當然這個輸出模型並不是很符合我們的FPGA 和SDRAM的輸出模型,是我從網上找來的一張圖片,不過沒關係,做一下修改就好了。

  我們的源時鐘需要進入FPGA的PLL中,然後輸出給我們的FPGA做內部時鐘,在輸出到外部做SDRAM的工作時鐘,所以上圖中,晶振到外部器件的時鐘路徑,應該是PLL的輸出到SDRAM的輸出路徑

  還有,我們之前做的靜態時序分析,是基於在FPGA內部的,所以數據的延遲時間只有Tco一個參數,然而,我們的這個輸出模型,是源寄存器在FPGA內部,而目的寄存器在我們的SDRAM內部,所以,我們的數據輸出路徑的延遲,還需要加上一部分,即我們的外部PCB走線延遲

  這樣,我們的輸入延遲 = 數據在FPGA內部傳輸延遲 Tco + 外部PCB走線延遲

  帶入我們的靜態時序分析的建立時間公式得

  Tco < Tclk - Tsu - 外部PCB延遲 + 時鐘偏斜

  由於是輸出模型,所以,Tco即我們的約束部分,Tsu即SDRAM的建立時間,又因為,altera官方提供的資料,不用時鐘偏斜這一概念,用的是時鐘網絡延時,

  即時鐘網絡延時 = - 時鐘偏斜,即 Tc2s - Tc2d

  所以,我們得出輸出模型的一個最終公式

  Tco < Tclk - Tsu - 外部PCB延遲 - 最大時鐘網絡延時

  其中 Tsu + 外部PCB延遲 + 最大時鐘網絡延時 稱為最大輸出延時

  也即 Tco < Tclk - 最大輸出延時

  我們到時候給時序分析工具添加的,就是這個最大輸出延時,有人會問,為什麼我們添加的不是 Tclk - 最大輸出延時,這個問題我之前也想過,我理解的就是,最大輸出延時是真實存在的,當我們下板之後,這些延時會直接影響系統的,而Tclk確實固定的,因此,我們只需要算出最大輸出延時,其實Tco就已經確定了,綜合工具會根據這個確定值尋找路徑

  同理,我們根據靜態時序分析的公式算出最小輸出延時

  即Tco + 外部PCB走線延遲 + 時鐘偏斜 > Th

  即 Tco > Th - 外部PCB走線延時 + 最大時鐘網絡延時

  其中,最小輸出延時 = Th - 外部PCB走線延時 + 最大時鐘網絡延時

  即 Tco > 最小輸出延時

  2、再來看輸入模型

  

 

  輸入模型無非就是跟輸出模型相反罷了,原來FPGA作為輸出,現在作為輸入,還是要考慮我們之前靜態時序分析的時候推出的那兩個公式

  即 Tclk + 時鐘偏斜 > Tco + 外部PCB走線延時 + Tsu

  那麼Tco + 外部PCB走線延時 + 時鐘網絡延時 < Tclk - Tsu,

  小於號左邊就是我們的最大輸入延時 ,這裡的Tco就不再是FPGA內部的了,而是數據經過SDRAM的延時了。Tclk就是FPGA的內部時鐘了,Tsu當然也是FPGA的建立時間。到了這個地方我就有點不懂了,既然是輸入延時,為什麼不把FPGA的建立時間考慮在內呢?要知道我們在推輸出延時的時候也是把SDRAM的建立時間考慮在內了啊,為什麼這裡就不把FPGA的建立時間考慮在內呢?

  我是這麼理解的,會不會是因為我們只需要算數據到FPGA引腳的延時就可以了,剩下的路徑,包括數據從FPGA引腳到數據被鎖存這段時間,也就是已經包括了FPGA的建立時間在內了的緣故,這段時間是綜合工具根據我們的輸入延時來分配路線的。

  這個問題,希望看到的大神給個意見吧

  當然了,最小輸入延時也是根據那個公式求得

  即Tco + 外部PCB走線延時 +時鐘網絡延時 > Th

  即最小輸入延時 > Th

  3、下面我們做一個總結

  最大輸出延時 = 外部器件的Tsu + 外部PCB最大延遲 + 最大時鐘網絡延時

  最小輸出延時 = 外部器件的Th - 外部最小PCB走線延時 + 最大時鐘網絡延時

  最大輸入延時 = 外部器件最大Tco + 外部PCB最大走線延時 + 最大時鐘網絡延時

  最小輸入延時 = 外部器件最小Tco + 外部PCB最小走線延時 + 最小時鐘網絡延時

  下面再來解釋一下最大最小問題,看到這大家肯有點看不懂了,剛才還覺得可以,加了一些最大最小就看不懂了,其實我們要做的輸出,不僅僅是有一個引腳輸出,拿我們的SDRAM來說,有12根地址線,還有16根數據線還有其他的控制信號線要輸出,那麼,我們應該選其中最長的,或者最短的來考慮,只要最長的或者最短的滿足要求了,其他的自然也就滿足要求了,即我們用最壞的打算來考慮我們的約束路徑。

  還有最大最小時鐘網絡延時,由於這裡我們只有一跟時鐘線,就無所謂最大最小了,這麼說就是為了規範

  最大最小外部器件的Tco,數據經過SDRAM的時候,並不是時間都是一樣的,總有些快慢問題,這裡我們也取極限,就是數據經過SDRAM的最大時間和最小時間,這個時間在datasheet裡面是有參數的

  細心的朋友可能會發現 最小輸出延時計算的時候,為什麼是減去 最小PCB走線延時呢,為什麼不是最大?為什麼不是加上最大時鐘網絡延時呢?為什麼不是最小?其實,時序分析工具分析的時候是按照一定的公式計算數據到達時間和數據需要時間的,這個公式見下圖

  

 

  在計算保持時間餘量,數據需要時間的時候,公式是減去 output minimum delay of pin

  為什麼是減去呢,按理說應該是加上我們的輸出最小延時才對,小墨當時也不理解,所以就當是記住吧,也就是說

  這裡的 output minimum delay of pin = - 輸出最小延時

  這樣理解的話,那麼輸出最小延時越大,那麼output minimum delay of pin 就越小了,也就是為什麼是減去最小PCB延時的原因吧

  後面我們到時序分析工具裡面看時序報告圖的時候就會發現,如果我們約束的最小輸出延時是負數的話,裡面顯示的卻是正數,所以,我們就暫時記住好了,因為真的是不好理解。

  三、參數計算

  根據我們剛才推斷出來的那幾個公式,我們就可以進行參數計算了,先來看看我們需要什麼參數

  輸出模型的時候,我們需要的是SDRAM的建立時間,保持時間,外部PCB走線延時,輸入模型的時候,我們需要的是外部器件的最大最小Tco

  SDRAM的建立保持時間可以從datasheet裡面找到

  

 

  根據器件型號,我們選擇建立時間為 1.5 ns ,保持時間為 0.8ns,外部PCB走線延時這個不怎麼好算,只能估計吧,因為板子不是我畫的,長度也不知道,根據經驗,我們知道,信號在PCB上的延時大概為0.18ns /1000mil,那我就估計為最大0.3ns,最小0.1好了

  然後是時鐘網絡延時,也就是源時鐘到達源寄存器 - 到達目的寄存器的值,由於我們的時鐘是總PLL發出的,時鐘從FPGA管腳輸出後再送給SDRAM,因此這個值一定是負值,而且也是時鐘在PCB上的走線延時,這個值我們估算為-0.1ns好了,因為真的沒法算我覺得。

  然後是數據經過外部器件的最大最小延時,這個值我們在SDRAM的理論篇裡面說了,就是Tac參數和Toh參數,不懂得朋友可以到前面去補補課,這個值我們在datasheet裡面也找得到

  

 

  所以我們取最大Tco 為5.4ns 最小Tco為2.7ns

  經過計算得我們的約束參數

  最大輸出延時 =外部器件的Tsu+外部PCB最大延遲+最大時鐘網絡延時

  =1.5+0.3-0.1=1.7ns

  最小輸出延時 = 外部器件的Th - 外部最小PCB走線延時 + 最大時鐘網絡延時

  = -(0.8 - 0.1 - 0.1 ) = - 0.6ns

  最大輸入延時 = 外部器件最大Tco + 外部PCB最大走線延時 + 最大時鐘網絡延時

  = 5.4 + 0.3 - 0.1=5.6ns

  最小輸入延時 = 外部器件最小Tco + 外部PCB最小走線延時 + 最小時鐘網絡延時

  = 2.7 + 0.1 -0.1 = 2.7ns

  四、全局時鐘約束

  由於我們的時鐘是由晶振源傳到PLL,然後再由PLL輸出給SDRAM和FPGA內部寄存器的,因此我們需要對輸入的時鐘進行約束,約束其為50M的時鐘,並對應好我們的埠時鐘clk,即約束我們的輸入時鐘為50M,並給這個時鐘取一個在時序分析時鐘的名字,即sys_clk,關於timequest的使用,大家還需自行學習,這裡僅僅只是說約束方法

  

 

  而對於PLL輸出時鐘的約束,我們僅需在.sdc文件相應的的位置,手動輸入約束即可,僅需要一條語句 ,這條命令輸進去以後,時序分析工具會自動的為我們約束好PLL的輸出時鐘

  

 

  我們可以通過查看時序報告,可以看到,我們的時鐘都跑到了我們約束的條件,如果我們不加這條語句的的話,那麼PLL的輸出時鐘是達不到這個要求的,那樣的話,我們的時鐘都不穩定,更別提系統穩定性了

  

 

  五、關於虛擬時鐘

  上圖中,細心的朋友可能會看到,第一行有一個SDRAM_CLK,這個時鐘是怎麼來的呢?這個時鐘,其實就是我們給外部的晶片模擬了一個時鐘,因為外部器件的時鐘是我們PLL生成,送到外部管腳去的,並不是我們FPGA的內部時鐘,既然不是內部時鐘,那麼我們就無法對其進行約束,我們只能定義這麼一個虛擬的時鐘,來儘可能模擬SDRAM的工作時鐘。 例如,輸入的時候,源寄存器在SDRAM中,目的寄存器在FPGA中,數據的傳輸是在SDRAM工作時鐘下進行的,但是時序分析工具不知道這個時鐘,所以我們定義一個虛擬時鐘,連接好它的路徑,即從哪輸出,輸到哪,這裡的話就是從PLL的clk2輸出,到SDRAM的時鐘輸入引腳了。因為這裡是時序約束模型為源同步時序模型,即時鐘都是由FPGA產生,在不是源同步時序模型的情況下,就不需要指明虛擬時鐘的源和目的,只需要指明周期即可。

  

 

  既然是模擬,那我們也應該考慮到這個時鐘從PLL輸出,到FPGA引腳的這段時間的延時,我們對其進行最大,最小延時約束

  

 

  同理,我們約束最小值為0ns,這裡就不做演示了,方法是一樣的

  六、I/O時序約束

  由於篇幅所限,這裡就不能一點點的做了,只舉個例子吧,做最大輸入延時的約束,我們點擊 constraints ———> set input delay

  時鐘名字我們選的就是我們生成的虛擬時鐘,為什麼呢?因為我們做的是IO約束,即FPGA和SDRAM互相交換數據,既然交換數據肯定是建立在時鐘的基礎上的,這個時鐘,就是虛擬時鐘。這個地方比較難懂了,我理解的也不是太好。畢竟我們是要看得是時序報告,時序報告就是建立在虛擬時鐘的基礎上的一個模擬過程。先理解到這裡吧,也不知道該怎麼解釋了,還請看到的大神給指點一二吧~

  下面我們做最大輸入延時的約束,設置我們最大的輸入延時為5.4ns

  

 

  設置輸入路徑,因為只有SDRAM_data路徑是雙向的,做輸入的時候僅考慮這個路徑即可

  

 

  然後我們再做一個輸出最大延時的約束,輸出最大延時為1.7ns ,輸出路徑包括除了時鐘和時鐘有效信號sdram_cke信號外的所有的SDRAM引腳,當然也包括sdram_data信號,為什麼不包括cke信號呢?因為cke信號自始至終沒有多少次的變化,也就是說對時序要求不嚴格,對於這種信號,類似還有片選信號,數碼管片選,位選等,我們只需對其進行false路徑約束即可,即對時序沒有嚴格要求的路徑

  

 

  

 

  剩下的路徑我就不再做了,都是一樣的,將所有路徑約束好之後,我們需要開始調sdram工作時鐘的相位偏移了

  由於篇幅所限,剩下的內容我放到下篇中講,謝謝大家~

相關焦點

  • 正點原子FPGA靜態時序分析與時序約束教程
    靜態時序分析是檢查晶片時序特性的一種方法,可以用來檢查信號在晶片中的傳播是否符合時序約束的要求。相比於動態時序分析,靜態時序分析不需要測試矢量,而是直接對晶片的時序進行約束,然後通過時序分析工具給出時序分析結果,並根據設計者的修復使設計完全滿足時序約束的要求。
  • FPGA設計中的時序問題的詳細分析與解決方案
    但在深入探討之前,我們首先需要對時序問題進行一點基本分析。這裡的目標是首先排除明顯的問題,如將時鐘引腳置於器件的上部、在器件下部驅動數字時鐘管理器(DCM),然後再在器件上部驅動全局緩衝(BUFG)。 有時,此類引腳布局會導致根本沒有辦法滿足時序要求。通過察看時序報告中的延遲,通常可以發現這些明顯的時序問題。
  • 零基礎學FPGA(七)淺談狀態機
    fpga相關文章:fpga是什麼
  • 同步時序邏輯電路的分析方法
    同步時序邏輯電路的分析方法內容提要7.1 概述一、時序電路的定義二、電路構成三、分類:1 同步2 異步7.2 時序邏輯電路的分析方法7.2.1 同步時序邏輯電路的分析方法一、基本分析步驟1.寫方程式2.列狀態轉換真值表3.邏輯功能的說明4 畫狀態轉換圖和時序圖二、分析舉例
  • 時序分析基本概念介紹
    今天我們要介紹的時序分析概念是RC corner。
  • 快速學習時序圖:時序圖簡介、畫法及實例
    下面本文綜合參考了多篇時序圖的教程,根據作者的思路將時序圖做了更深入的講解。一、 什麼是時序圖?時序圖(Sequence Diagram),亦稱為序列圖、循序圖或順序圖,是一種UML交互圖。它通過描述對象之間發送消息的時間順序顯示多個對象之間的動態協作。
  • 看懂UML類圖和時序圖
    , 通常與運行狀態無關,一般由常識等因素決定的;它一般用來定義對象之間靜態的、天然的結構;所以,關聯關係是一種「強關聯」的關係;比如,乘車人和車票之間就是一種關聯關係;學生和學校就是一種關聯關係;關聯關係默認不強調方向,表示對象間相互知道;如果特別強調方向,如下圖,表示A知道B,但 B不知道A;
  • 示波器和I2C時序波形圖的關係分析
    打開APP 示波器和I2C時序波形圖的關係分析 周碧俊 發表於 2018-08-03 16:57:53 I2C簡介 I2C總線只需要兩條線,一條SDA數據線,一條SCL時鐘線;根據這兩條線的高低電平、上升沿、下降沿就可以實現主機與I2C設備的通訊 I2C與示波器 對於I2C總線的數據,我們要用到示波器,這樣我們才能抓取到信號,而且必須同時採集SDA和SCL的數據;該如何抓取呢?
  • FPGA驗證之功能仿真和時序仿真的區別與方法
    這裡我們使用一個波形發生器作為例子,來說明如何使用Modelsim對Quartus II生成的IP Core和相應的HDL文件進行功能仿真和時序仿真
  • 組合邏輯電路和時序邏輯電路比較_組合邏輯電路和時序邏輯電路有...
    打開APP 組合邏輯電路和時序邏輯電路比較_組合邏輯電路和時序邏輯電路有什麼區別 發表於 2018-01-30 17:26:04
  • ...電路和時序邏輯電路比較_組合邏輯電路和時序邏輯電路有什麼區別
    >   組合邏輯電路和時序邏輯電路都是數字電路,組合邏輯電路在邏輯功能上的特點是任意時刻的輸出僅僅取決於該時刻的輸入,與電路原來的狀態無關。而時序邏輯電路在邏輯功能上的特點是任意時刻的輸出不僅取決於當時的輸入信號,而且還取決於電路原來的狀態,或者說,還與以前的輸入有關。   本文主要介紹了組合邏輯電路和時序邏輯電路比較以及組合邏輯電路和時序邏輯電路的區別是什麼,跟隨小編一起來了解一下。
  • 日吞吐萬億,騰訊雲時序資料庫CTSDB解密
    Hadoop、Spark等批處理系統數據延遲高:離線批處理系統,數據從產生到可分析,耗時數小時、甚至天級;查詢性能差:不能很好的利用索引,依賴批處理任務,查詢耗時一般在分鐘級以上。3.HBase多維分析能力差:HBase可以較好的滿足寫入壓力,但對於非RowKey前綴的查詢性能較差;維護成本:使用HBase需要同時維護HBase和Hadoop等系統,且HBase的穩定性會進一步加大維護成本。三、寫入、存儲、查詢 多環節優化,時序資料庫 優勢明顯 1.
  • 十分鐘看懂時序資料庫(III)- 壓縮
    假設存在通用的壓縮算法,也就是說有個壓縮算法,對於長度為n的字符串,總能壓縮到長度小於n的字符串。總共有2n個長度為n的不同字符串;但卻只有2n-1 個長度小於n的字符串。那麼必定存在兩個長度為n的字符串A,B,經過壓縮得到同一個字符串。這樣解壓縮算法沒有辦法正確的解壓。所以假設錯誤,並不存在通用的壓縮算法。
  • FSMC驅動TFTLCD原理,時序和寄存器介紹
    一,FSMC簡介FSMC:靈活的靜態存儲控制器能夠與同步或異步存儲器和16位PC存儲器卡連接STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存儲器STM32 407和103是不支持SD RAM的,429,439支持SD RAM操作12345二,FSMC驅動
  • 如何看懂時序圖(經典)
    我們只需要關注以下幾個管腳:  3腳:VL,液晶顯示偏壓信號,用於調整LCD1602的顯示對比度,一般會外接電位器用以調整偏壓信號以下是LCD1602的時序圖:  大家要慢慢學會看時序圖,要知道操作一個器件的精華便蘊藏在其中,看懂看準了時序,你操控這個晶片就是非常容易的事了。
  • 時序分析基本概念介紹
    今天我們要介紹的時序分析概念是Infinite window, 全稱無窮大的時間窗。
  • 時序分析基本概念介紹
    今天要介紹的時序分析基本概念是Slew,信號轉換時間,也被稱為transition time。
  • SDRAM工作原理及S3C2410 SDRAM控制器配置方法
    5.SDRAM控制時序分析本文引用地址:http://www.eepw.com.cn/article/201611/317610.htm這5個方面來幫助初學者了解SDRAM。文章分為2篇,第1篇講解前3個知識點,第2篇講解後2個。
  • 理論與實踐:隨機噪聲對時序抖動的影響
    引言   時序抖動和時序噪聲屬於人們了解甚少的工程概念,而它們又是模擬設計和數字設計中最重要的參數。尤其是在高速通信系統中,惡劣的抖動性能會導致更高的誤碼率,並限制系統速度。時序抖動一般定義為數位訊號在某一重要時刻相對於其理想時間位置的短時間偏離。
  • 基於有限狀態機的飛行器自毀系統時序控制設計
    分析飛行器自毀系統工作原理,採用複雜可編程邏輯器件(CPLD)實現了飛行器自毀系統設計,結合CPLD的特點,提出一種基於改進型有限狀態機的飛行器自毀系統時序控制的設計方法,並在CPLD中予以實現。仿真及實驗表明,基於有限狀態機的飛行器自毀系統定時精度達到納秒級,可以有效地控制自毀信號輸出並消除毛刺現象,很好地滿足系統性能要求。該方法具有結構簡單緊湊、成本低、可靠性高、精度高等優點。