1. 程式人生 > 其它 >FPGA工程師進階必學:時序分析的基本步驟和整體設計思路

FPGA工程師進階必學:時序分析的基本步驟和整體設計思路

最近看了看了一篇《vivado使用誤區與進階》的文章,覺得寫得挺不錯了,看完後自己對時序分析又有了更深一層的理解,故記錄下來。可能排版有些亂,有些圖都是直接從文章中擷取,但是不影響閱讀。

時序分析的基本步驟

一個合理的時序約束,可以分為以下步驟:

時序約束整體的思路與之前我說的方法基本一致。整體的思路如下:

1. 先是約束時鐘,讓軟體先解決內部時序問題;(在這一步驟中可以適當加入時序例外,以便時序通過)

2. 然後再加入IO的延遲約束;

3. 最後針對沒有過的時序,新增時序例外。

在《vivado使用誤區與進階》中,提到了一種叫 UltraFAST 的設計方法。針對下圖中所說的根據迭代結果新增必要的例外約束(步驟1),為什麼是新增必要的呢?是因為雖然是跨時鐘域,但是有時候就算不約束,時序也能過。當碰到時序不過的時候,現階段可以去針對該部分路徑進行時序例外約束,以便後續繼續分析。需要注意的是,就算沒有報時序為例,現階段也一定要去留意那些跨時鐘的路徑(通過clock_interaction),確認程式碼有沒有做相應的跨時鐘域處理。針對跨時鐘域的程式碼處理後面會提到。

定義時鐘約束

時鐘主要可以分為主時鐘以及衍生時鐘。

建立主時鐘。典型的主時鐘根包括有以下幾種情況:輸入埠、千兆位收發器輸出引腳以及某些硬體原語輸出管腳。

約束例項 :

create_clock -name SysClk -period 10 -waveform {0 5} [get_ports sysclk]

GT 收發器輸入引腳,例如已恢復的時鐘。

約束例項 :

create_clock -name txclk -period 6.667 [get_pin gt0/TXOUTCLK]

建立生成時鐘

自動衍生時鐘

• MMCM*/ PLL*

• BUFR

• PHASER*

如果 Vivado 設計套件時序引擎所選擇的自動衍生時鐘名稱並不合適,您可以使用 create_generated_clock 命令強行定義自己的名稱,此時無需指定波形轉換。該約束應剛好位於約束檔案中定義主時鐘的約束之後。例如,由 MMCM 例項生成的時鐘的預設名稱是 net0,您可以新增如下約束強制將其設定為自己的名稱(例如fftClk):

create_generated_clock -name fftClk [get_pins mmcm_i/CLKOUT0]

生成時鐘源自另一個現有時鐘(主時鐘)。通常用來描述由邏輯模組在主時鐘上執行的波形變換。由於生成時鐘的定義取決於主時鐘特性,因此必須首先定義主時鐘。要明確定義生成時鐘,必須使用 create_generated_clock 命令。

create_generated_clock -name GC1 -source [get_pins gen_clk_reg/C] -divide_by 2 [get_pins gen_clk_reg/Q]

跨時終域處理

跨時鐘域處理,主要是為了避免亞穩態的傳播(注意亞穩態不能消除,但是可以採用一定的方式,降低其傳播的風險)。觸發器進入亞穩態的時間可以用引數MTBF(Mean Time Between Failures)來描述,MTBF即觸發器取樣失敗的時間間隔,表示為:

例如針對單bit資料的跨時鐘域處理,是為了讓MTBF增大,使得進入一個可接受範圍。

*跟大家探討一個問題,為什麼打兩拍就可以降低亞穩態的傳播呢?

我想到的一個場景如下:

訊號a經過跨時鐘處理後變成了a’;這樣就可以確保在時序滿足的前提下,同一個時鐘域中的1、2、3模組接收到的a’的值是一致的,如果不做跨時鐘域處理,由於佈局佈線的延遲不一樣,不能確保到達1、2、3模組的值是一致的,從而導致邏輯混亂,引起系統的不穩定現象。

IO的延遲約束

輸入延遲

外部器件傳送資料到FPGA系統模型如下圖所示。對FPGA的IO口進行輸入最大最小延時約束是為了讓FPGA設計工具能夠儘可能的優化從輸入埠到第一級暫存器之間的路徑延遲,使其能夠保證系統時鐘可靠的採到從外部晶片到FPGA的訊號。

輸入延時即為從外部器件發出資料到FPGA輸入埠的延時時間。其中包括時鐘源到FPGA延時和到外部器件延時之差、經過外部器件的資料傳送Tco,再加上PCB板上的走線延時。如下圖所示,為外部器件和FPGA介面時序。

最大輸入延時(input delay max)為當從資料傳送時鐘沿(lanuch edge)經過最大外部器件時鐘偏斜(Tclk1),最大的器件資料輸出延時(Tco),再加上最大的PCB走線延時(Tpcb),減去最小的FPGA時鐘偏移(FTsu)的情況下還能保證時序滿足的延時。這樣才能保證FPGA的建立時間,準確採集到本次資料值,即為setup slack必須為正,計算公式如下式所示:

Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +Tco(max) +Tpcb(max) +FTsu)≥0(1)

最小輸入延時(input delay min)為當從資料傳送時鐘沿(lanuch edge)經過最小外部器件時鐘偏斜(Tclk1),最小器件資料輸出延時(Tco),再加上最小PCB走線延時(Tpcb),此時的時間總延時值一定要大於FPGA的最大時鐘延時和建立時間之和,這樣才能不破壞FPGA上一次資料的保持時間,即為hold slack必須為正,計算公式如下式所示:

Hold slack = (Tclk1(min) + Tco(min) + Tpcb(min))–(FTh + Tclk2(max))≥ 0(2)

我們很容易就可以從公式(1)和(2)推到出(3)

Tclk – Ftsu ≥Tclk1 - Tclk2 + Tco + Tpcb ≥ FTh(3)

在公式(3)中,我們發現Tclk 、Ftsu以及FTh,對於工具來說是已知的,而Tclk1 - Tclk2 + Tco + Tpcb正是我們需要告知綜合工具的延遲量。

從我們推到出的公式,我們可以得到:

Input_delay_max = Tclk – Ftsu;

Input_delay_min = FTh ;

輸出延遲

FPGA輸出資料給外部器件模型如下圖所示。對FPGA的IO口進行輸出最大最小延時約束是為了讓FPGA設計工具能夠儘可能的優化從第一級暫存器到輸出埠之間的路徑延遲,使其能夠保證讓外部器件能準確的採集到FPGA的輸出資料。

輸出延時即為從FPGA輸出資料後到達外部器件的延時時間。其中包括時鐘源到FPGA延時和到外部器件延時之差、PCB板上的走線延時以及外部器件的資料建立和保持時間。如所示,為FPGA和外部器件介面時序圖。

最大輸出延時(output delay max)為當從FPGA資料發出後經過最大的PCB延時、最小的FPGA和器件時鐘偏斜,再加上外部器件的建立時間。約束最大輸出延時,是為了約束IO口輸出,從而使外部器件的資料建立時間,即為setup slack必須為正,計算公式如下式所示:

Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +FTco(max) +Tpcb(max) +Tsu)≥0(4)

最小輸出延時(output delay min)為當從FPGA資料發出後經過最小的PCB延時、最大的FPGA和器件時鐘偏斜,再減去外部器件的建立時間。約束最小輸出延時,是為了約束IO口輸出,從而使IO口輸出有個最小延時值,防止輸出過快,破壞了外部器件上一個時鐘的資料保持時間,導致hlod slack為負值,不能正確的鎖存到資料,最小輸出延時的推導計算公式如下式所示:

Hold slack = (Tclk1(min) + FTco(min) + Tpcb(min))–(Th + Tclk2(max))≥ 0(5)

我們很容易就可以從公式(4)和(5),發現這兩條公式與前面推導輸入延遲如出一轍。只不過現在FPGA變成了輸出器件,而Tsu、Th是下游器件的引數,綜合工具並不知情,需要我們告訴他。除了FTco以外,其他引數都需要我們告訴工具。

由公式(4)我們可以推匯出:

FTco(max) + Tpcb(max) –(Tclk2(min) – Tclk1(max)+Tsu ≤Tclk

那麼output delay max = Tpcb(max) –(Tclk2(min) – Tclk1(max)+Tsu

同理我們由公式(5)可以推匯出:

FTco(min) + Tpcb(min) – (Tclk2(max) – Tclk1(min))– Th ≥ 0

那麼output delay min = Tpcb(min) – (Tclk2(max) – Tclk1(min))– Th

為了幫助學員能夠更深入地掌握FPGA系統設計與實際應用。編者給大家準備了FPGA系列學習電子書籍,包括了CPLD/Verilog程式語言基礎與設計,數字IC、基本邏輯、組合邏輯等基礎電路,Vivado平臺開發與除錯、整合開發環境使用及相關技巧,FPGA數字訊號處理、數字影象處理及各種FPGA實戰專案設計案例等等。

1.Verilog數字系統設計教程

本書從演算法和計算的基本概念出發,講述如何用硬線邏輯電路實現複雜數字邏輯系統的方法。全書共分三部分。部分內容共18章;二部分共12個上機練習實驗範例;三部分是Verilog硬體描述語言參考手冊,可供讀者學習、查詢之用。本書2版後,在語法篇中增加了IEEE Verilog1364-2001標準簡介,以反映Verilog語法的新變化。

2.數位電路與邏輯設計

本書系統地闡述了邏輯電路的基礎理論--邏輯函式及其數學工具;重點討論了邏輯電路的設計方法和分析方法;詳細介紹了通用性強的幾類中、大規模整合器件,並結合例項介紹了它們在各領域中的應用;對可程式設計邏輯器件及其硬體描述語言也進行了系統介紹。

全書共10章,主要內容有:邏輯函式、整合邏輯閘、組合邏輯電路、整合觸發器、時序邏輯電路、硬體描述語言、半導體儲存器、可程式設計邏輯器件、脈衝單元電路、模數及數模轉換技術等。各章均附有內容提要、小結、思考題和習題。

3.Vivado從此開始

本書涵蓋了Vivado的四大主題:設計流程、時序約束、設計分析和Tcl指令碼的使用,結合例項深入淺出地闡述了Vivado的使用方法,精心總結了Vivado在實際工程應用中的一些技巧和注意事項,既包含圖形介面操作方式,也包含相應的Tcl命令。本書語言流暢,圖文並茂。全書共包含405張圖片、17個表格、172個Tcl指令碼和39個HDL程式碼,同時,本書配有41個電子教學課件,為讀者提供了直觀而生動的資料。本書可供電子工程領域內的本科高年級學生和研究生學習參考,也可供FPGA工程師和自學者參考使用。

4.Xilinx新一代FPGA設計套件Vivado應用指南

本書系統論述了新一代FPGA設計套件Vivado的效能、使用方法以及FPGA的開發方法。全書內容包括Vivado設計套件的特性,全面可程式設計FPGA器件的架構,使用Vivado套件建立複雜數字系統設計專案,模擬系統功能,RTL分析產生網表文件,效能要求的時序約束及綜合,佈局佈線及靜態時序分析和生成位流檔案等全部設計過程,基於專案和非專案批作業兩種用Tcl指令的設計模式,同步設計技術、HDL編碼技術、時序收斂和HI.S優化DSP演算法等關鍵技術,並以例項介紹了嵌入式系統的設計方法等。

5.Xilinx FPGA設計權威指南 Vivado整合設計環境

本書全面系統地介紹了Xilinx新一代整合開發環境Vivado的設計方法、設計流程和具體實現。全書共分8章,內容包括:Vivado設計導論、Vivado工程模式和非工程模式設計流程、Vivado除錯流程、基於IP的嵌入式系統設計流程、Vivado HLS設計流程、System Generator設計流程、Vivado部分可重配置設計流程和Vivado高階設計技術。本書參考了Xilinx公司提供的Vivado最新設計資料,理論與應用並重,將Xilinx公司最新的設計方法貫穿在具體的設計實現中。

6.基於FPGA的嵌入式影象處理系統設計

本書詳細介紹了FPGA這種新型可程式設計電子器件的特點,對FPGA的各種程式語言的發展歷程進行了回顧,並針對嵌入式影象處理系統的特點和應用背景,詳細介紹瞭如何利用FPGA的硬體並行性特點研製開發高效能嵌入式影象處理系統。作者還結合自己的經驗,介紹了研製開發基於FPGA的嵌入式影象處理系統所需要的正確思路以及許多實用,並給出了許多影象處理演算法在FPGA上的具體實現方法以及多個基於FPGA實現嵌入式影象處理系統的應用例項。

7.基於FPGA的數字影象處理原理及應用

本書首先介紹FPGA程式設計和影象與視訊處理的關鍵基礎理論,然後通過例項程式碼詳細講解了如何利用FPGA實現直方圖操作中的直方圖統計/均衡化/線性拉伸/規定化、線性濾波器操作中的均值濾波器、Sobel運算元(濾波、求模、求角度)、非線性濾波器操作中的排序類演算法/形態學濾波、影象分割演算法中的區域性自適應分割/Canny運算元等。本書在模擬測試部分設計了一種完善的通用測試系統,並利用此測試系統在每一章的模擬測試環節對所設計演算法進行嚴格的測試和驗證。本書在很後一章介紹了在視訊處理領域常見的輸入/輸出介面。本書偏向於工程應用,在書中有大量關於如何利用FPGA實現影象處理演算法的例項及程式碼,並對這些演算法的原理及其實現過程、演算法測試等做了詳細的介紹,全部的演算法都進行了模擬測試驗證。

8.數字訊號處理的FPGA實現

FPGA仍舊是快速創新的領域,很高興SpringerVerla9公司給我這個機會將FPGA領域的新發展囊括到本書的第3版中。本版新增了總計150多頁全新的理念和當前的設計方法。第3版的創新主要包括以下幾方面。

現在許多FPGA都包含嵌入式l8位×18位乘法器,因而推薦在以DSP為主的應用中使用這些器件,因為嵌入式乘法器可以節省很多LE。例如,在本版的所有示例,中都用到的CycloneIIEP2C35F672C6器件就具有35個18位×18位乘法器。

9.FPGA設計實戰演練(邏輯篇+高階技巧篇)

FPGA設計實戰演練共分為兩冊,分別是邏輯篇和高階技巧篇。

邏輯篇:主要面向廣大的FPGA/CPLD初學者,從零基礎開始講述FPGA/CPLD以及相關的基礎知識,並以一個支援各種入門、進階的子母板形式的學習套件為實驗平臺,針對Altera公司的Cyclone Ⅲ器件量身打造的24個應用例項貫穿其中。例項講解深入淺出,不僅有基本的Verilog語法講解,也有設計思路和背景知識的詳細描述; 開發工具(Quartus Ⅱ+ModelSim)的使用更是手把手、圖文並茂地展示給讀者。

高階技巧篇:現代FPGA的結構越來越複雜,多時鐘域的設計現在已是常態。對於功能電路來說,復位結構都必不可少。在同步邏輯設計中如何很好地處理非同步復位,甚至在多時鐘域之間傳遞(非同步)復位訊號也是邏輯工程師經常面臨的挑戰。本書除專門介紹了上述電路的設計方法外,還介紹了狀態機的設計。在介紹這些通用電路結構的基礎上,還介紹了程式碼優化以及如何對設計進行綜合與佈局佈線優化方面的相關內容。

10.FPGA專案開發實戰講解

本書立足於工程實踐經驗,首先介紹FPGA的原理、語法、設計技巧,然後詳細介紹了7項常用技術的實現。每項技術從以下幾方面介紹:相關技術介紹、FPGA方案框圖設計、子模組設計、模擬和測試、專案開發過程中遇到的問題、定位和解決措施,其中插入了大量的狀態機轉換圖和關鍵程式碼,方便讀者學習。

FPGA工程師經典必讀10+本全階學習推薦書目,資料截圖如下:

如何領取以上完整FPGA經典開發電子書?

掃一掃立即領取!