Vivado使用誤區與進(jìn)階——XDC約束技巧之I/O篇 (上)

發(fā)布時(shí)間:2015-3-24 15:31    發(fā)布者:eechina
關(guān)鍵詞: Vivado , XDC , 約束
作者:周麗娜(Ally Zhou ),Xilinx工具與方法學(xué)應用專(zhuān)家

《XDC約束技巧之時(shí)鐘篇》中曾對I/O約束做過(guò)簡(jiǎn)要概括,相比較而言,XDC中的I/O約束雖然形式簡(jiǎn)單,但整體思路和約束方法卻與UCF大相徑庭。加之FPGA的應用特性決定了其在接口上有多種構建和實(shí)現方式,所以從UCF到XDC的轉換過(guò)程中,最具挑戰的可以說(shuō)便是本文將要討論的I/O約束了。

I/O 約束的語(yǔ)法

XDC 中可以用于 I/O 約束的命令包括 set_input_delay / set_output_delay 和set_max_delay / set_min_delay 。其中,只有那些從 FPGA 管腳進(jìn)入和/或輸出都不經(jīng)過(guò)任何時(shí)序元件的純組合邏輯路徑可以用 set_max_delay / set_min_delay 來(lái)約束,其余 I/O 時(shí)序路徑都必須由set_input_delay / set_output_delay 來(lái)約束。如果對 FPGA 的 I/O 不加任何約束,Vivado 會(huì )缺省認為時(shí)序要求為無(wú)窮大,不僅綜合和實(shí)現時(shí)不會(huì )考慮 I/O 時(shí)序,而且在時(shí)序分析時(shí)也不會(huì )報出這些未約束的路徑。

本文以下章節將會(huì )著(zhù)重討論 XDC 接口約束和時(shí)序分析的基礎,介紹如何使用set_input_delay / set_output_delay 對 FPGA 的 I/O 時(shí)序進(jìn)行約束。

Input 約束



上圖所示 set_input_delay 的基本語(yǔ)法中, 是想要設定 input 約束的端口名,可以是一個(gè)或數個(gè) port;-clock 之后的 指明了對 時(shí)序進(jìn)行分析所用的時(shí)鐘,可以是一個(gè) FPGA 中真實(shí)存在的時(shí)鐘也可以是預先定義好的虛擬時(shí)鐘;-max 之后的 描述了用于 setup 分析的包含有板級走線(xiàn)和外部器件的延時(shí);-min 之后的 描述了用于 hold 分析的包含有板級走線(xiàn)和外部器件的延時(shí)。

上述這些選項是定義 Input 約束時(shí)必須寫(xiě)明的,還有少數幾個(gè)可選項,如 -add_delay和 -clock_fall 用于 DDR 接口的約束。

Output 約束



上圖所示 set_output_delay 的基本語(yǔ)法中, 是想要設定 output 約束的端口名,可以是一個(gè)或數個(gè) port;-clock 之后的 指明了對 時(shí)序進(jìn)行分析所用的時(shí)鐘,可以是一個(gè) FPGA 中真實(shí)存在的時(shí)鐘也可以是預先定義好的虛擬時(shí)鐘;-max 之后的 描述了用于 setup 分析的包含有板級走線(xiàn)和外部器件的延時(shí);-min之后的 描述了用于 hold 分析的包含有板級走線(xiàn)和外部器件的延時(shí)。

上述這些選項是定義 Output 約束時(shí)必須寫(xiě)明的,還有少數幾個(gè)可選項如 -add_delay和 -clock_fall 用于 DDR 接口的約束。

Setup/Hold 時(shí)序分析

我們知道約束是為了設計服務(wù),而設置好的約束必須在時(shí)序報告中加以驗證。所以,怎樣理解時(shí)序分析中的檢查規則就成了重中之重,這一點(diǎn)對 I/O 約束來(lái)說(shuō)尤為重要。理解時(shí)序分析工具如何選取路徑分析的發(fā)送端(Launch)和接收端(Capture)時(shí)鐘沿(Clock Edges),在 Setup 和 Hold 分析時(shí)又有怎樣的具體區別,以及這些數字在時(shí)序報告中如何體現等等是設置正確 I/O 約束的基礎。

更具體的時(shí)序分析方法以及如何深入解讀時(shí)序報告等內容將會(huì )在后續另開(kāi)主題文章詳述,這里僅就 Setup/Hold 分析時(shí)對時(shí)鐘邊沿的選擇加以描述,便于以下章節的展開(kāi)。

Setup 時(shí)序分析


同步電路設計中,一般情況下,數據在時(shí)鐘上升沿發(fā)送,在下一個(gè)時(shí)鐘上升沿接收,發(fā)送的時(shí)鐘沿稱(chēng)作 Launch Edge,接收沿稱(chēng)作 Capture Edge。時(shí)序分析中的 Setup Check 跟Capture Edge 的選擇息息相關(guān)。

在 SDR 接口的 setup 分析中,工具如下圖這樣識別發(fā)送和接收時(shí)鐘沿。



而在 DDR 接口的 setup 分析中,因為數據是雙沿采樣,所以發(fā)送和接收時(shí)鐘沿變成上升(下降)沿發(fā)送,下降(上升)沿接收。



Hold 時(shí)序分析



Hold Check 主要是為了保證數據在接收(采樣)端時(shí)鐘沿之后還能穩定保持一段時(shí)間,對 Hold 分析而言,同一個(gè)時(shí)鐘沿既是 Launch Edge 也是 Capture Edge,這一點(diǎn)對 SDR和 DDR(不論是中心對齊還是邊沿對齊)都一樣。

Input 接口類(lèi)型和約束

由于歷史的原因,相當一部分 FPGA 設計仍然在系統中起到膠合邏輯(Glue Logic)的作用,當然,如今的 FPGA 中嵌入了高速串行收發(fā)器嵌入式處理器等,早就不僅僅局限于系統設計的配角,反而成為了其中的主角甚至是明星。但數據接口的同步一直是FPGA 設計中的常見(jiàn)問(wèn)題,也是一個(gè)重點(diǎn)和難點(diǎn),很多設計不穩定都是因為數據接口的同步有問(wèn)題。

FPGA 的數據接口同步根據系統級設計方式來(lái)講可以分為系統同步和源同步兩種。

系統同步接口


系統同步接口(System Synchronous Interface)的構建相對容易,以 FPGA 做接收側來(lái)舉例,上游器件僅僅傳遞數據信號到 FPGA 中,時(shí)鐘信號則完全依靠系統板級來(lái)同步。時(shí)鐘信號在系統級上同源,板級走線(xiàn)的延時(shí)也要對齊。正因為這樣的設計,決定了數據傳遞的性能受到時(shí)鐘在系統級的走線(xiàn)延時(shí)和 skew 以及數據路徑延時(shí)的雙重限制,無(wú)法達到更高速的設計要求,所以大部分情況也僅僅應用 SDR 方式。



對系統同步接口做 Input 約束相對容易,只需要考慮上游器件的 Tcko 和數據在板級的延時(shí)即可。下圖是一個(gè) SDR 上升沿采樣系統同步接口的 Input 約束示例。



設置和分析 I/O 約束一定要有個(gè)系統級思考的視角,如上右圖所示,Launch Edge 對應的是上游器件的時(shí)鐘,而 Capture Edge 則對應 FPGA 的輸入時(shí)鐘,正因為是系統同步時(shí)鐘,所以可以將其視作完全同步而放在一張圖上分析,這樣一來(lái),就可以用一般時(shí)序分析方法來(lái)看待問(wèn)題。

一條完整的時(shí)序路徑,從源觸發(fā)器的 C 端開(kāi)始,經(jīng)過(guò) Tcko 和路徑傳輸延時(shí)再到目的觸發(fā)器的 D 端結束。放在系統同步的接口時(shí)序上,傳輸延時(shí)則變成板級傳輸延時(shí)(還要考慮 skew),所以上述 -max 后的數值是 Tcko 的最大值加上板級延時(shí)的最大值而來(lái),而-min后的數值則是由兩個(gè)最小值相加而來(lái)。

源同步接口

為了改進(jìn)系統同步接口中時(shí)鐘頻率受限的弊端,一種針對高速 I/O 的同步時(shí)序接口應運而生,在發(fā)送端將數據和時(shí)鐘同步傳輸,在接收端用時(shí)鐘沿脈沖來(lái)對數據進(jìn)行鎖存,重新使數據與時(shí)鐘同步,這種電路就是源同步接口電路(Source Synchronous Interface)。

源同步接口最大的優(yōu)點(diǎn)就是大大提升了總線(xiàn)的速度,在理論上信號的傳送可以不受傳輸延遲的影響,所以源同步接口也經(jīng)常應用 DDR 方式,在相同時(shí)鐘頻率下提供雙倍于SDR 接口的數據帶寬。

源同步接口的約束設置相對復雜,一則是因為有 SDR、DDR、中心對齊(Center Aligned)和邊沿對齊(Edge Aligned)等多種方式,二則可以根據客觀(guān)已知條件,選用與系統同步接口類(lèi)似的系統級視角的方式,或是用源同步視角的方式來(lái)設置約束。



如上圖所示,對源同步接口進(jìn)行 Input 約束可以根據不同的已知條件,選用不同的約束方式。一般而言,FPGA 作為輸入接口時(shí),數據有效窗口是已知條件,所以方法 2 更常見(jiàn),Vivado IDE 的 Language Templates 中關(guān)于源同步輸入接口 XDC 模板也是基于這種方法。但不論以何種方式來(lái)設置 Input 約束,作用是一樣,時(shí)序報告的結果也應該是一致的。



針對上圖所示中心對齊源同步 SDR 接口時(shí)序,分別按照兩種方式來(lái)約束,需要的已知條件和計算方式雖然不同,但卻可以得到完全一樣的結果。



DDR 接口的約束設置


DDR 源同步接口的約束稍許復雜,需要將上升沿和下降沿分別考慮和約束,以下以源同步接口為例,分別就輸入接口數據為中心對齊或邊沿對齊的方式來(lái)舉例。

DDR 源同步中心對齊輸入接口




已知條件如下:
時(shí)鐘信號 src_sync_ddr_clk 的頻率: 100 MHz
數據總線(xiàn): src_sync_ddr_din[3:0]
上升沿之前的數據有效窗口 ( dv_bre ) : 0.4 ns
上升沿之后的數據有效窗口 ( dv_are ) : 0.6 ns
下降沿之前的數據有效窗口 ( dv_bfe ) : 0.7 ns
下降沿之后的數據有效窗口 ( dv_afe ) : 0.2 ns

可以這樣計算輸入接口約束:DDR 方式下數據實(shí)際的采樣周期是時(shí)鐘周期的一半;上升沿采樣的數據(Rise Data)的 -max 應該是采樣周期減去這個(gè)數據的發(fā)送沿(下降沿)之前的數據有效窗口值 dv_bfe,而對應的-min 就應該是上升沿之后的數據有效窗口值dv_are ;同理,下降沿采樣的數據(Fall Data)的 -max 應該是采樣周期減去這個(gè)數據的發(fā)送沿(上升沿)之前的數據有效窗口值 dv_bre,而對應的-min 就應該是下降沿之后的數據有效窗口值 dv_afe 。

所以最終寫(xiě)入 XDC 的 Input 約束應該如下所示:



DDR 源同步邊沿對齊輸入接口




已知條件如下:
時(shí)鐘信號 src_sync_ddr_clk 的頻率: 100 MHz
數據總線(xiàn): src_sync_ddr_din[3:0]
上升沿之前的數據 skew (skew_bre ) : 0.6 ns
上升沿之后的數據 skew (skew_are ) : 0.4 ns
下降沿之前的數據 skew (skew_bfe ) : 0.3 ns
下降沿之后的數據 skew (skew_afe ) : 0.7 ns

可以這樣計算輸入接口約束:因為已知條件是數據相對于時(shí)鐘上升沿和下降沿的skew,所以可以分別獨立計算;上升沿的 -max 是上升沿之后的數據 skew (skew_are ),對應的-min 就應該是負的上升沿之前的數據 skew (skew_bre );下降沿的 -max 是下降沿之后的數據 skew (skew_afe ),對應的-min 就應該是負的下降沿之前的數據 skew (skew_bfe )。

所以最終寫(xiě)入 XDC 的 Input 約束應該如下所示:



出現負值并不代表延時(shí)真的為負,而是跟數據相對于時(shí)鐘沿的方向有關(guān)。請一定牢記 set_input_delay 中 -max/-min 的定義,即時(shí)鐘采樣沿到達之后最大與最小的數據有效窗口(set_output_delay 中 -max/-min 的定義與之正好相反,詳見(jiàn)后續章節舉例說(shuō)明)。

在這個(gè)例子中,數據是邊沿對齊,只要有 jitter 跟 skew 的存在,最差情況下,數據有效窗口在到達時(shí)鐘采樣沿之前就已經(jīng)結束,所以會(huì )有負數出現在-min 之后。因此,在實(shí)際應用中,FPGA 用作輸入的邊沿對齊 DDR 源同步接口的情況下,真正用來(lái)采樣數據的時(shí)鐘會(huì )經(jīng)過(guò)一個(gè)MMCM/PLL 做一定的相移,從而把邊沿對齊變成中心對齊。

另外,在經(jīng)過(guò) MMCM/PLL 相移后的采樣時(shí)鐘跟同步接口輸入的時(shí)鐘之間需要做set_false_path 的約束(如下述例子)而把那些偽路徑從時(shí)序報告中剔除,這里不再詳述。



虛擬時(shí)鐘


在 FPGA 做系統同步輸入接口的情況下,很多時(shí)候上游器件送入的數據并不是跟某個(gè) FPGA 中已經(jīng)存在的真實(shí)的時(shí)鐘相關(guān),而是來(lái)自于一個(gè)不同的時(shí)鐘,這時(shí)就要用到虛擬時(shí)鐘(Virtual Clock)。

舉例來(lái)說(shuō),上游器件用一個(gè) 100MHz 的時(shí)鐘送出數據到 FPGA,實(shí)際上這個(gè)數據每?jì)蓚(gè)時(shí)鐘周期才變化一次,所以可以用 50MHz 的時(shí)鐘來(lái)采樣。FPGA 有個(gè) 100MHz 的輸入時(shí)鐘,經(jīng)過(guò) MMCM 產(chǎn)生一個(gè) 50MHz 的衍生時(shí)鐘,并用其來(lái)采樣上游器件送來(lái)的同步數據。

當然,系統級的設計上,必須有一定的機制來(lái)保證上游器件中的發(fā)送時(shí)鐘和 FPGA 中的接收時(shí)鐘的時(shí)鐘沿對齊。

此時(shí),我們可以借助虛擬時(shí)鐘的幫助來(lái)完成相應的 Input 接口約束。



篇幅所限,對 XDC 中 I/O 約束的設計思路、分析方法以及如何具體設置 Input 接口約束的討論就到這里,下一篇我們接著(zhù)分析如何設置 Output 接口約束,看看 Vivado 中有什么方式可以幫助用戶(hù)準確便捷地定義接口時(shí)序約束。
本文地址:http://selenalain.com/thread-147317-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页