時序分析的基本步驟
一個合理的時序約束,可以分為以下步驟:
時序約束整體的思路與之前我說的方法基本一致。整體的思路如下:
1. 先是約束時鐘,讓軟件先解決內(nèi)部時序問題;(在這一步驟中可以適當(dāng)加入時序例外,以便時序通過)
2. 然后再加入IO的延遲約束;
3. 最后針對沒有過的時序,添加時序例外。
在《vivado使用誤區(qū)與進階》中,提到了一種叫 UltraFAST 的設(shè)計方法。針對下圖中所說的根據(jù)迭代結(jié)果添加必要的例外約束(步驟1),為什么是添加必要的呢?是因為雖然是跨時鐘域,但是有時候就算不約束,時序也能過。當(dāng)碰到時序不過的時候,現(xiàn)階段可以去針對該部分路徑進行時序例外約束,以便后續(xù)繼續(xù)分析。需要注意的是,就算沒有報時序為例,現(xiàn)階段也一定要去留意那些跨時鐘的路徑(通過clock_interaction),確認(rèn)代碼有沒有做相應(yīng)的跨時鐘域處理。針對跨時鐘域的代碼處理后面會提到。
定義時鐘約束
時鐘主要可以分為主時鐘以及衍生時鐘。
創(chuàng)建主時鐘。典型的主時鐘根包括有以下幾種情況:輸入端口、千兆位收發(fā)器輸出引腳以及某些硬件原語輸出管腳。
約束實例 :
create_clock -name SysClk -period 10 -waveform {0 5} [get_ports sysclk]
GT 收發(fā)器輸入引腳,例如已恢復(fù)的時鐘。
約束實例 :
create_clock -name txclk -period 6.667 [get_pin gt0/TXOUTCLK]
創(chuàng)建生成時鐘
自動衍生時鐘
大部分生成時鐘都由 Vivado 設(shè)計套件時序引擎自動衍生獲得,該引擎可識別時鐘修改模塊 (CMB)及其對主時鐘所執(zhí)行的變換。賽靈思 7 系列器件中,CMB 是 :
? MMCM*/ PLL*
? BUFR
? PHASER*
如果 Vivado 設(shè)計套件時序引擎所選擇的自動衍生時鐘名稱并不合適,您可以使用 create_generated_clock 命令強行定義自己的名稱,此時無需指定波形轉(zhuǎn)換。該約束應(yīng)剛好位于約束文件中定義主時鐘的約束之后。例如,由 MMCM 實例生成的時鐘的默認(rèn)名稱是 net0,您可以添加如下約束強制將其設(shè)定為自己的名稱(例如fftClk):
create_generated_clock -name fftClk [get_pins mmcm_i/CLKOUT0]
生成時鐘源自另一個現(xiàn)有時鐘(主時鐘)。通常用來描述由邏輯模塊在主時鐘上執(zhí)行的波形變換。由于生成時鐘的定義取決于主時鐘特性,因此必須首先定義主時鐘。要明確定義生成時鐘,必須使用 create_generated_clock 命令。
create_generated_clock -name GC1 -source [get_pins gen_clk_reg/C] -divide_by 2 [get_pins gen_clk_reg/Q]
跨時終域處理
跨時鐘域處理,主要是為了避免亞穩(wěn)態(tài)的傳播(注意亞穩(wěn)態(tài)不能消除,但是可以采用一定的方式,降低其傳播的風(fēng)險)。觸發(fā)器進入亞穩(wěn)態(tài)的時間可以用參數(shù)MTBF(Mean Time Between Failures)來描述,MTBF即觸發(fā)器采樣失敗的時間間隔,表示為:
例如針對單bit數(shù)據(jù)的跨時鐘域處理,是為了讓MTBF增大,使得進入一個可接受范圍。
*跟大家探討一個問題,為什么打兩拍就可以降低亞穩(wěn)態(tài)的傳播呢?
我想到的一個場景如下:
信號a經(jīng)過跨時鐘處理后變成了a’;這樣就可以確保在時序滿足的前提下,同一個時鐘域中的1、2、3模塊接收到的a’的值是一致的,如果不做跨時鐘域處理,由于布局布線的延遲不一樣,不能確保到達1、2、3模塊的值是一致的,從而導(dǎo)致邏輯混亂,引起系統(tǒng)的不穩(wěn)定現(xiàn)象。
IO的延遲約束
輸入延遲
外部器件發(fā)送數(shù)據(jù)到FPGA系統(tǒng)模型如下圖所示。對FPGA的IO口進行輸入最大最小延時約束是為了讓FPGA設(shè)計工具能夠盡可能的優(yōu)化從輸入端口到第一級寄存器之間的路徑延遲,使其能夠保證系統(tǒng)時鐘可靠的采到從外部芯片到FPGA的信號。
輸入延時即為從外部器件發(fā)出數(shù)據(jù)到FPGA輸入端口的延時時間。其中包括時鐘源到FPGA延時和到外部器件延時之差、經(jīng)過外部器件的數(shù)據(jù)發(fā)送Tco,再加上PCB板上的走線延時。如下圖所示,為外部器件和FPGA接口時序。
最大輸入延時(input delay max)為當(dāng)從數(shù)據(jù)發(fā)送時鐘沿(lanuch edge)經(jīng)過最大外部器件時鐘偏斜(Tclk1),最大的器件數(shù)據(jù)輸出延時(Tco),再加上最大的PCB走線延時(Tpcb),減去最小的FPGA時鐘偏移(FTsu)的情況下還能保證時序滿足的延時。這樣才能保證FPGA的建立時間,準(zhǔn)確采集到本次數(shù)據(jù)值,即為setup slack必須為正,計算公式如下式所示:
Setup slack =(Tclk + Tclk2(min))–(Tclk1(max)+Tco(max)+Tpcb(max)+FTsu)≥0(1)
最小輸入延時(input delay min)為當(dāng)從數(shù)據(jù)發(fā)送時鐘沿(lanuch edge)經(jīng)過最小外部器件時鐘偏斜(Tclk1),最小器件數(shù)據(jù)輸出延時(Tco),再加上最小PCB走線延時(Tpcb),此時的時間總延時值一定要大于FPGA的最大時鐘延時和建立時間之和,這樣才能不破壞FPGA上一次數(shù)據(jù)的保持時間,即為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)中,我們發(fā)現(xiàn)Tclk 、Ftsu以及FTh,對于工具來說是已知的,而Tclk1 - Tclk2 + Tco + Tpcb正是我們需要告知綜合工具的延遲量。
從我們推到出的公式,我們可以得到:
Input_delay_max = Tclk – Ftsu;
Input_delay_min = FTh;
輸出延遲
FPGA輸出數(shù)據(jù)給外部器件模型如下圖所示。對FPGA的IO口進行輸出最大最小延時約束是為了讓FPGA設(shè)計工具能夠盡可能的優(yōu)化從第一級寄存器到輸出端口之間的路徑延遲,使其能夠保證讓外部器件能準(zhǔn)確的采集到FPGA的輸出數(shù)據(jù)。
輸出延時即為從FPGA輸出數(shù)據(jù)后到達外部器件的延時時間。其中包括時鐘源到FPGA延時和到外部器件延時之差、PCB板上的走線延時以及外部器件的數(shù)據(jù)建立和保持時間。如所示,為FPGA和外部器件接口時序圖。
最大輸出延時(output delay max)為當(dāng)從FPGA數(shù)據(jù)發(fā)出后經(jīng)過最大的PCB延時、最小的FPGA和器件時鐘偏斜,再加上外部器件的建立時間。約束最大輸出延時,是為了約束IO口輸出,從而使外部器件的數(shù)據(jù)建立時間,即為setup slack必須為正,計算公式如下式所示:
Setup slack =(Tclk + Tclk2(min))–(Tclk1(max)+FTco(max)+Tpcb(max)+Tsu)≥0(4)
最小輸出延時(output delay min)為當(dāng)從FPGA數(shù)據(jù)發(fā)出后經(jīng)過最小的PCB延時、最大的FPGA和器件時鐘偏斜,再減去外部器件的建立時間。約束最小輸出延時,是為了約束IO口輸出,從而使IO口輸出有個最小延時值,防止輸出過快,破壞了外部器件上一個時鐘的數(shù)據(jù)保持時間,導(dǎo)致hlod slack為負(fù)值,不能正確的鎖存到數(shù)據(jù),最小輸出延時的推導(dǎo)計算公式如下式所示:
Hold slack =(Tclk1(min)+ FTco(min)+ Tpcb(min))–(Th + Tclk2(max))≥ 0(5)
我們很容易就可以從公式(4)和(5),發(fā)現(xiàn)這兩條公式與前面推導(dǎo)輸入延遲如出一轍。只不過現(xiàn)在FPGA變成了輸出器件,而Tsu、Th是下游器件的參數(shù),綜合工具并不知情,需要我們告訴他。除了FTco以外,其他參數(shù)都需要我們告訴工具。
由公式(4)我們可以推導(dǎo)出:
FTco(max)+ Tpcb(max)–(Tclk2(min)– Tclk1(max)+Tsu ≤Tclk
那么output delay max= Tpcb(max)–(Tclk2(min)– Tclk1(max)+Tsu
同理我們由公式(5)可以推導(dǎo)出:
FTco(min)+ Tpcb(min)–(Tclk2(max)– Tclk1(min))– Th ≥ 0
那么output delay min =Tpcb(min)–(Tclk2(max)– Tclk1(min))– Th
為了幫助學(xué)員能夠更深入地掌握FPGA系統(tǒng)設(shè)計與實際應(yīng)用。編者給大家準(zhǔn)備了FPGA系列學(xué)習(xí)電子書籍,包括了CPLD/Verilog編程語言基礎(chǔ)與設(shè)計,數(shù)字IC、基本邏輯、組合邏輯等基礎(chǔ)電路,Vivado平臺開發(fā)與調(diào)試、集成開發(fā)環(huán)境使用及相關(guān)技巧,F(xiàn)PGA數(shù)字信號處理、數(shù)字圖像處理及各種FPGA實戰(zhàn)項目設(shè)計案例等等。
1.Verilog數(shù)字系統(tǒng)設(shè)計教程
本書從算法和計算的基本概念出發(fā),講述如何用硬線邏輯電路實現(xiàn)復(fù)雜數(shù)字邏輯系統(tǒng)的方法。全書共分三部分。部分內(nèi)容共18章;二部分共12個上機練習(xí)實驗范例;三部分是Verilog硬件描述語言參考手冊,可供讀者學(xué)習(xí)、查詢之用。本書2版后,在語法篇中增加了IEEE Verilog1364-2001標(biāo)準(zhǔn)簡介,以反映Verilog語法的新變化。
2.數(shù)字電路與邏輯設(shè)計
本書系統(tǒng)地闡述了邏輯電路的基礎(chǔ)理論--邏輯函數(shù)及其數(shù)學(xué)工具;重點討論了邏輯電路的設(shè)計方法和分析方法;詳細介紹了通用性強的幾類中、大規(guī)模集成器件,并結(jié)合實例介紹了它們在各領(lǐng)域中的應(yīng)用;對可編程邏輯器件及其硬件描述語言也進行了系統(tǒng)介紹。
全書共10章,主要內(nèi)容有:邏輯函數(shù)、集成邏輯門、組合邏輯電路、集成觸發(fā)器、時序邏輯電路、硬件描述語言、半導(dǎo)體存儲器、可編程邏輯器件、脈沖單元電路、模數(shù)及數(shù)模轉(zhuǎn)換技術(shù)等。各章均附有內(nèi)容提要、小結(jié)、思考題和習(xí)題。
3.Vivado從此開始
本書涵蓋了Vivado的四大主題:設(shè)計流程、時序約束、設(shè)計分析和Tcl腳本的使用,結(jié)合實例深入淺出地闡述了Vivado的使用方法,精心總結(jié)了Vivado在實際工程應(yīng)用中的一些技巧和注意事項,既包含圖形界面操作方式,也包含相應(yīng)的Tcl命令。本書語言流暢,圖文并茂。全書共包含405張圖片、17個表格、172個Tcl腳本和39個HDL代碼,同時,本書配有41個電子教學(xué)課件,為讀者提供了直觀而生動的資料。本書可供電子工程領(lǐng)域內(nèi)的本科高年級學(xué)生和研究生學(xué)習(xí)參考,也可供FPGA工程師和自學(xué)者參考使用。
4.Xilinx新一代FPGA設(shè)計套件Vivado應(yīng)用指南
本書系統(tǒng)論述了新一代FPGA設(shè)計套件Vivado的性能、使用方法以及FPGA的開發(fā)方法。全書內(nèi)容包括Vivado設(shè)計套件的特性,全面可編程FPGA器件的架構(gòu),使用Vivado套件創(chuàng)建復(fù)雜數(shù)字系統(tǒng)設(shè)計項目,仿真系統(tǒng)功能,RTL分析產(chǎn)生網(wǎng)表文件,性能要求的時序約束及綜合,布局布線及靜態(tài)時序分析和生成位流文件等全部設(shè)計過程,基于項目和非項目批作業(yè)兩種用Tcl指令的設(shè)計模式,同步設(shè)計技術(shù)、HDL編碼技術(shù)、時序收斂和HI.S優(yōu)化DSP算法等關(guān)鍵技術(shù),并以實例介紹了嵌入式系統(tǒng)的設(shè)計方法等。
責(zé)任編輯人:CC
-
時序分析
+關(guān)注
關(guān)注
2文章
127瀏覽量
22567
原文標(biāo)題:FPGA工程師進階必學(xué):時序分析的基本步驟和整體設(shè)計思路
文章出處:【微信號:elecfans,微信公眾號:電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論