免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
FPGA中的時序約束--從原理到實例

FPGA中的時序問題是一個比較重要的問題,時序違例,尤其喜歡在資源利用率較高、時鐘頻率較高或者是位寬較寬的情況下出現(xiàn)。本文介紹時序分析的原理以及出現(xiàn)時序問題時一般的解決辦法。

基本概念

建立時間和保持時間是FPGA時序約束中兩個最基本的概念,同樣在芯片電路時序分析中也存在。

電路中的建立時間和保持時間其實跟生活中的紅綠燈很像,建立時間是指在綠燈(clk的上升沿)亮起之前行人或者車輛(data數(shù)據(jù))在路口提前等待的時間(只允許綠燈亮起的一剎那在路口的車輛才允許通行),而保持時間,則是綠燈亮起后必須保持的時間,這樣行人或者數(shù)據(jù)才能夠通過這個十字路口,否則hold時間就不滿足。

同時,紅綠燈默認(rèn)都是周期性的(clk也是周期性的),車輛不允許在兩個相鄰的紅綠燈之間通過的時間超過一個clk的周期(組合邏輯時延不能過大)。

建立時間(Tsu):是指在時鐘沿到來之前數(shù)據(jù)從不穩(wěn)定到穩(wěn)定所需的時間,如果建立的時間不滿足要求,在時鐘上升沿,寄存器將不能正確采到數(shù)據(jù)值。如下圖(左)所示:

保持時間(Th):是指在時鐘上升沿后數(shù)據(jù)保持穩(wěn)定的時間,如果保持時間不滿足要求那么數(shù)據(jù)同樣也不能被正確采集到。保持時間示意圖如下圖(右)所示:

? ? 如圖1.3,這是一個FPGA輸入數(shù)據(jù)的模型,輸入端口到第一個寄存器之間的路徑需要進(jìn)行時序約束。一般我們需要告知FPGA輸入輸出接口的最大最小延遲,使EDA工具在進(jìn)行布局布線時能夠盡可能的優(yōu)化輸入端口到第一級寄存器之間的延遲,使FPGA中時鐘的上升沿能夠正確采集到輸入的數(shù)據(jù)。在sdc約束中,輸入延時是從上游器件發(fā)出數(shù)據(jù)到FPGA輸入端口的延時時間。如圖,1.4所示,輸入接口時序清楚反應(yīng)了FPGA在接收數(shù)據(jù)時應(yīng)滿足的建立和保持時間要求。

說明:
? ?OSC ? ? ? ? ? : 系統(tǒng)時鐘
? ?ASSP.CLk :外部器件寄存器的時鐘
? ?ASSP.Q ? ? ?:外部器件數(shù)據(jù)輸出
? ?FPGA.D ? ? ?:FPGA數(shù)據(jù)輸入
? ?FPGA.CLK ? ? ? ?:FPGA內(nèi)部寄存器的時鐘
? ?Tclk1 ? ? ? :系統(tǒng)時鐘到外部器件之間的延時
? ?Tclk2 ? ? ? :系統(tǒng)時鐘到FPGA之間的延時
? ?Tco ? ? ? ? :數(shù)據(jù)經(jīng)過外部器件寄存器輸出后相對于ASSP.CLK的偏移
? ?Tpcb ? ? ? ? ? ?:數(shù)據(jù)在pcb電路板上的延時
? ?FTsu ? ? ? ? ? ?:FPGA上寄存器的建立時間要求
? ?FTh ? ? ? ? :FPGA上寄存器的保持時間要求
? ?setup slack :建立時間余量,必須大于等于0才能滿足建立時間的時序要求
? ?hold slack ?:保持時間余量,必須大于等于0才能滿足保持時間的時序要求
? ?T: 系統(tǒng)時鐘頻率

c. 輸出延時即為FPGA輸出數(shù)據(jù)后到達(dá)外部器件的延時時間。如1.7所示,為FPGA和外部器件接口時序圖。

系統(tǒng)同步和源同步接口

? ? ? ?系統(tǒng)同步中數(shù)據(jù)發(fā)送器和數(shù)據(jù)接收器在同一時鐘源下同步工作,發(fā)送器和接收器之間只傳遞數(shù)據(jù),數(shù)據(jù)的時序關(guān)系以系統(tǒng)時鐘作為參考。

?????? 所謂源同步接口是指發(fā)送器和接收器之間傳送數(shù)據(jù)時同時傳一個和數(shù)據(jù)保持特定相位關(guān)系的時鐘,接收器就可以根據(jù)這個時鐘的相位來準(zhǔn)確采集相應(yīng)的數(shù)據(jù)。如圖所示,分別是系統(tǒng)同步和源同步接口示例圖。

?????? 在系統(tǒng)同步接口中,系統(tǒng)時鐘到發(fā)送器和接收器之間的時延很難確定,所以接收器比較難確定時鐘和數(shù)據(jù)之間的相位關(guān)系,采集到的數(shù)據(jù)很難保證正確。所以系統(tǒng)時鐘只適用于低速時鐘低速數(shù)據(jù)的收發(fā)。而源同步接口的好處就在于可以以較高的頻率高速收發(fā)數(shù)據(jù),數(shù)據(jù)和時鐘由發(fā)送器同步給出,在電路板上數(shù)據(jù)和時鐘布線等長,時延相等,接收器接收到的數(shù)據(jù)和時鐘的相位關(guān)系基本保持不變。所以對于源同步接口的時序約束也較為簡單,我們只需要告訴FPGA上游芯片發(fā)送端口數(shù)據(jù)和時鐘的相對關(guān)系,F(xiàn)PGA布局布線時就會調(diào)整時鐘和數(shù)據(jù)的布線長度,使接收數(shù)據(jù)時滿足時序要求。

? ? GMII的數(shù)據(jù)收發(fā)就是一個典型的源同步接口。MAC接收數(shù)據(jù)的時鐘Rx_clk和數(shù)據(jù)Rxd由上游PHY同步給出;MAC發(fā)送數(shù)據(jù)時發(fā)送時鐘Gtx_clk和數(shù)據(jù)Txd也是同步給到PHY,所以我們對于GMII接口的時序約束就可以按照源同步接口的方法。

SOC系統(tǒng)的時序接口及約束

? ? 若系統(tǒng)外部PHY芯片的型號是RTL8211EG,其芯片手冊中給出了PHY接口處的時序,如圖所示:

RTL8211EG芯片GMII接口時序關(guān)系

對于輸入時鐘的約束

時鐘輸入接口約束

GMII接口的Rx_clk時鐘是125MHZ,頻率較高。這時由外部器件進(jìn)入FPGA內(nèi)部的時鐘可能不穩(wěn)定,采集Rxd數(shù)據(jù)時會有影響,這時我們應(yīng)先對輸入的時鐘進(jìn)行約束。

如果不加PLL,即直接時鐘模式,一般不改變時鐘特性直接進(jìn)行數(shù)據(jù)采集,這通常適用于低速輸入且中心對齊的單速率源同步接口;如果在輸入端加一個PLL,即采用PLL時鐘模式,PLL可對時鐘與數(shù)據(jù)的關(guān)系進(jìn)行精確調(diào)整,適用于高速輸入的中心對齊和邊沿對齊的源同步接口。因此,使用PLL時鐘對調(diào)整FPGA的接口時序有很大幫助。

??由圖1.4中輸入時序接口可以看出Tco即為時鐘上升沿與數(shù)據(jù)的偏移,則RTL8211EG中MAC接收端口Tco(max)?=T-tR/2-tGSUT=8-0.5-2.5=5ns,最小Tco(min)=tGHTT+ tR/2=1ns,

故相對于Rx_clk的輸入最大最小延時

?????? input delay max = Tco(max)?=5ns

?????? input delay min = Tco(min) =1ns

以上的約束的輸入延時是相對于輸入時鐘Rx_clk的約束,在sdc約束中我們還可以設(shè)置一個虛擬時鐘(可以假設(shè)是上游器件寄存器的驅(qū)動時鐘,用于計算源器件的啟動沿),源同步接口輸入數(shù)據(jù)以這個虛擬時鐘為參考輸入FPGA,所以當(dāng)我們聲明輸入延時時就可以以這個虛擬時鐘作為啟動時鐘。使用虛擬時鐘約束輸入延時的好處是可以是約束更加方便、更加精確。

?????? 輸入約束的時延值可以理解為有效數(shù)據(jù)沿相對于時鐘的偏移,如果時延值為正說明數(shù)據(jù)相對于時鐘向后偏移,時延為負(fù)說明數(shù)據(jù)相對于時鐘向前偏移。根據(jù)上面描述輸入數(shù)據(jù)相對于輸入時鐘Rx_clk的最大最小延時分別為1ns和5ns,下面我們計算輸入數(shù)據(jù)相對于虛擬時鐘vir_clk的延時值。取Rx_clk的上升下降時間分別為0、4ns(周期8ns),取數(shù)據(jù)時延Tco的平均值3ns為vir_clk相對于Rx_clk的偏移,即vir_clk的上升下降時間分別為3、7ns。

根據(jù)下圖所示,當(dāng)Tco取1ns時,Rxd有效時相對于Rx_clk上升沿偏移1ns,相對于vir_clk上升沿偏移-2ns;當(dāng)Tco取5ns時,Rxd有效時相對于Rx_clk上升沿偏移5ns,相對于vir_clk偏移2ns。

Tco取最小值時Rxd相對于vir_clk關(guān)系圖

Tco取最大值時Rxd相對于vir_clk關(guān)系圖

根據(jù)上述描述,我們以虛擬時鐘vir_clk為參考時鐘,約束如下:

sdc中的輸入延時約束

當(dāng)然,我們也可以用Rx_clk作為參考來約束輸入延時,但是quartus在布局布線時,以輸入時鐘為參考的約束不夠精確,有時仍會出現(xiàn)時序錯誤。

對于GMII發(fā)送數(shù)據(jù)約束時,由于發(fā)送時鐘和發(fā)送數(shù)據(jù)布線時延可忽略,故FPGA發(fā)送端口和PHY接收端口數(shù)據(jù)時鐘相位關(guān)系相似,結(jié)合圖1.4中發(fā)送接口時序和RTL8211EG的圖表可以看出FTco(max)+tGSUR+tR/2=Tclk,F(xiàn)Tco(min)=tGHTR+ tR/2

故有

output delay max=Tclk- FTco(max)=tGSUR+tR/2=2.5ns

output delay min=- FTco(min)= -(tGHTR+tR/2)=-0.5ns

SDR接口輸出約束含義

所以,在sdc中我們?nèi)缦录s束輸出接口:

在上面的輸出約束中,我們可以理解為:

?????? 根據(jù)outputdelay中max/-min的定義,源同步接口中輸出最大最小延時為輸出時鐘上升沿到達(dá)之前最大與最小的數(shù)據(jù)有效窗口。如圖所示,用于建立時間分析的set output delay –max的值為正數(shù)2.5ns,表示數(shù)據(jù)窗口在Gtx_clk上升沿之前2.5ns時間內(nèi)有效,而用于保持時間分析的 -min之后跟著負(fù)數(shù)-0.5ns,表示數(shù)據(jù)在Gtx_clk上升沿之后0.5ns內(nèi)有效,即相對于Gtx_clk輸出數(shù)據(jù)有效窗口為-0.5ns到2.5ns,這個范圍大于等于PHY芯片手冊中給出的Txd相對于Gtx_clk的窗口范圍時,才能滿足PHY芯片采集Txd時的時序要求。

Quartus的邏輯分區(qū)約束

既然是FPGA和外部接口的時序問題,也就是輸入輸出的寄存Rxd/Txd的寄存器到外部器件寄存器的時序問題。

GMII接收數(shù)據(jù)路徑分析

Tpcb是外部PCB板上數(shù)據(jù)的延時,Tdata_i是數(shù)據(jù)的輸入延時,Gmii_rx_interface相當(dāng)于Rxd進(jìn)入FPGA后的第一個寄存器模塊(可以專門寫一個接口模塊,將Rxd數(shù)據(jù)打一拍,用于接收數(shù)據(jù))。如果Gmii_rx_interface距離接口Rxd較遠(yuǎn),Tdata_i的路徑較長,布局布線時Rxd的八根線時延相差可能就比較大,所以我們應(yīng)讓這個模塊放在距離Rxd接口較近的地方。

Quartus軟件中有一個LogicLock(物理分區(qū))功能,把Gmii_rx_interface模塊建立成一個LogicLock分區(qū)但并不對分區(qū)位置和大小進(jìn)行固定,然后重新編譯工程。布局布線后就可以在chipplaner工具中看到這個分區(qū)的位置,如下圖所示(放大可以看清),Gmii_rx_interface模塊距離Rxd接口位置很遠(yuǎn),布局布線時,輸入信號要繞很長一段距離才會到達(dá)輸入的寄存器,資源占用很多時,Rxd的8根數(shù)據(jù)線長度不一,很容易造成時序問題。

未固定分區(qū)位置時布局布線結(jié)果

把Gmii_rx_interface模塊分區(qū)移動到Rxd接口附近進(jìn)行固定然后重新編譯工程,布局布線后該邏輯分區(qū)就會在Rxd接口附近,從而保證輸入數(shù)據(jù)接口進(jìn)入FPGA的第一個寄存器的時延在一定范圍內(nèi),保證時序要求。

采用LogicLock后,GMII寄存器接口位置

內(nèi)部寄存器到寄存器時序問題

寄存器到寄存器之間建立和保持時間時序要求

在FPGA的設(shè)計中除了應(yīng)該考慮到輸入輸出接口的時序,還應(yīng)該考慮到內(nèi)部寄存器到寄存器的時序問題。內(nèi)部寄存器之間同樣要滿足建立和保持時間要求,如上圖所示

其中Tdata為組合邏輯在電路中的延時。

?????? 建立時間余量=T+Tclk2-Tclk1-Tco-Tdata-Tsu>=0

?????? 保持時間余量=Tclk1+Tco+Tdata-Tclk2-Th>=0

通常在FPGA中忽略時鐘的skew(偏移),即有Tclk2-Tclk1=0

?????? 建立時間余量=T-Tco-Tdata-Tsu>=0

?????? 保持時間余量=Tco+Tdata -Th>=0

為了使FPGA設(shè)計的電路正常,就必須滿足以上的建立和保持時間要求,根據(jù)建立時間余量公式可知

???????????????????? T>=Tco+Tdata+Tsu

???????????????????? F=1/T

在FPGA中Tco、Tsu等的數(shù)值由所使用FPGA的特性決定,所以時序電路之間的組合電路延時決定了整個電路的速度,即決定了整個電路的最大工作時鐘頻率。

? ? ? 若FPGA工作頻率為130MHZ,如果在做設(shè)計時,組合邏輯的過于復(fù)雜,寄存器到寄存器之間的延時Tdata過大,如果系統(tǒng)仍工作在130MHZ的頻率下就有可能出現(xiàn)時序問題。所以在設(shè)計時我們應(yīng)盡可能減小組合邏輯的復(fù)雜度,以提高工作頻率。下面討論提高系統(tǒng)工作頻率的方法。

a.??????通過減小Tdata值來提高頻率

在quartus的sdc約束中有關(guān)于寄存器到寄存器之間組合邏輯時延的約束,通過設(shè)置從REG1到REG2之間組合邏輯延時的最大最小值,來約束FPGA的布局布線,從而來提高系統(tǒng)的工作頻率。

但這種方法通常只能提高5%左右的工作頻率,不能過多的限制組合邏輯的時延,否則不利于EDA工具的布局布線。

b.??????采用流水線設(shè)計來提高頻率

流水線分割組合邏輯

通過約束減小組合邏輯延時的方法并不能夠十分有效的提高系統(tǒng)的工作頻率,所以在設(shè)計時我們應(yīng)盡量減少大規(guī)模組合邏輯的使用。如圖所示,采用流水線的設(shè)計思想,將兩個寄存器之間的組合邏輯拆分成兩級組合邏輯,從而減小組合邏輯的復(fù)雜度。采用流水線技術(shù)可以很好地提高系統(tǒng)運行時鐘的工作頻率。

假設(shè)原來路徑延時為t,加入兩級流水線并且假設(shè)路徑切割均勻,則路徑延時減少到約t/3,從而系統(tǒng)的工作頻率提高到原來3倍左右。

如上圖所示,在我們做FPGA設(shè)計過程中,原來的judge_result是一個很大的組合邏輯,信號產(chǎn)生的路徑時延很大,很難滿足時序要求,在FPGA編譯完做驗證時,出現(xiàn)if條件不正確的情況,狀態(tài)機不能正確跳轉(zhuǎn)。

修改:將if中復(fù)雜的組合邏輯信號在時鐘的上升沿,賦值給中間變量寄存器judge_result和judge_result_en,這樣在做if判斷時就不用判斷原來的復(fù)雜組合邏輯值,只需判斷judge_result和judge_result_en的值。即采用流水線分割的方法把原來十分復(fù)雜的組合邏輯分成兩部分,這樣FPGA在編譯后就不會出現(xiàn)時序錯誤的情況。

實例:使用vivado進(jìn)行簡單的時鐘約束

Vivado下時鐘約束可以參考這兩個文章:

https://blog.csdn.net/neufeifatonju/article/details/80450951

https://blog.csdn.net/FPGADesigner/article/details/82871624

之所以要進(jìn)行時鐘約束是因為:當(dāng)時鐘進(jìn)入了FPGA器件,通過時鐘樹傳遞時,時鐘邊沿會有延時,通常稱作時鐘網(wǎng)絡(luò)延遲;噪聲或硬件表現(xiàn)會導(dǎo)致時鐘隨時可能發(fā)生變化,通常稱作時鐘不確定性,包括時鐘抖動、相位錯位等等。

?增加時鐘約束可以一定程度上減少時鐘延時帶來的問題,比如大位寬數(shù)據(jù)(128位)從ram中讀出時由于路徑延時導(dǎo)致數(shù)據(jù)錯誤的問題。

這里介紹一下簡單進(jìn)行時鐘約束的辦法(以vivado2018.2為例):

第一步:對工程進(jìn)行綜合,綜合之后點擊“Edit Timing Constraints”

第二步,打開之后看到如下界面:

第三步,雙擊create clock,打開如下界面:

第四步,一般會點擊sourcesobjects 旁邊的這個按鈕來選擇你要約束的時鐘:

點擊之后彈出如下界面:

第五步,輸入你要約束的時鐘,然后進(jìn)行查找,找到之后按照如下添加到右側(cè)框內(nèi),然后點擊set:

第六步,然后set之后會返回到這個界面,你需要在這個界面輸入時鐘名,不然會生成一個虛擬時鐘:

第七步,然后到這個界面,按照圖片進(jìn)行操作:

一般來說要點擊add clock,然后按crtl+s保存你設(shè)置的時鐘約束,之后再點擊apply(或者直接點擊apply)。

然后你打開你的xdc文件,會發(fā)現(xiàn)已經(jīng)有了這么一個約束了,然后再重新綜合和實現(xiàn)就好了。

create_clock -period 8.000-name clkb -waveform {0.000 4.000} -add [get_nets{u_TTE_switch_top/U_ET_switch_plane_top/U_fp_and_sch_0/u_schedule_top/u_bus_ram/clkau_TTE_switch_top/U_ET_switch_plane_top/U_fp_and_sch_0/u_schedule_top/u_bus_ram/clkb}]

create_clock -period 8.000-name clk_gtx_125m -waveform {0.000 4.000} -add [get_netsinst_sgmii_if/clk_gtx_125m]

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【博客大賽】零基礎(chǔ)學(xué)FPGA (二十六)必會! 從靜態(tài)時序分析到SDRAM時序收斂(上篇)
Xilinx FPGA編程技巧之常用時序約束詳解
在FPGA設(shè)計環(huán)境中加時序約束--arm-123的筆記
[轉(zhuǎn)]Xilinx OFFSET偏移約束略談
FPGA開發(fā)全攻略——時序約束
ucf文件中的端口和時序約束
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服