《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 解決方案 > 【Vivado使用誤區(qū)與進(jìn)階】XDC約束技巧之時鐘篇

【Vivado使用誤區(qū)與進(jìn)階】XDC約束技巧之時鐘篇

2015-03-05
關(guān)鍵詞: Vivado 約束 時鐘

Xilinx 的新一代設(shè)計套件Vivado中引入了全新的約束文件XDC,在很多規(guī)則和技巧上都跟上一代產(chǎn)品ISE中支持的UCF大不相同,給使用者帶來許多額外挑 戰(zhàn)。Xilinx工具專家告訴你,其實(shí)用好XDC很容易,只需掌握幾點(diǎn)核心技巧,并且時刻牢記:XDC的語法其實(shí)就是Tcl語言。

XDC的優(yōu)勢

XDC 是Xilinx Design Constraints的簡寫,但其基礎(chǔ)語法來源于業(yè)界統(tǒng)一的約束規(guī)范SDC(最早由Synopsys公司提出,故名Synopsys Design Constraints)。所以SDC、XDC跟Vivado Tcl的關(guān)系如下圖所示。

XDC約束技巧之時鐘篇

XDC的主要優(yōu)勢包括:

● 統(tǒng)一了前后端約束格式,便于管理;                          
● 可以像命令一樣實(shí)時錄入并執(zhí)行;
● 允許增量設(shè)置約束,加速調(diào)試效率;
● 覆蓋率高,可擴(kuò)展性好,效率高;
● 業(yè)界統(tǒng)一,兼容性好,可移植性強(qiáng);

XDC在本質(zhì)上就是Tcl語言,但其僅支持基本的Tcl語法如變量、列表和運(yùn)算符等等,對其它復(fù)雜的循環(huán)以及文件I/O等語法可以通過在Vivado中source一個Tcl文件的方式來補(bǔ)充。(對Tcl話題感興趣的讀者可以參考作者的另一篇文章《Tcl在Vivado中的應(yīng)用》

XDC與UCF的最主要區(qū)別有兩點(diǎn):

1. XDC可以像UCF一樣作為一個整體文件被工具讀入,也可以在實(shí)現(xiàn)過程中被當(dāng)作一個個單獨(dú)的命令直接執(zhí)行。這就決定了XDC也具有Tcl命令的特點(diǎn),即后 面輸入的約束在有沖突的情況下會覆蓋之前輸入的約束(時序例外的優(yōu)先級會在下節(jié)詳述)。另外,不同于UCF是全部讀入再處理的方式,在XDC中,約束是讀 一條執(zhí)行一條,所以先后順序很重要,例如要設(shè)置IO約束之前,相對應(yīng)的clock一定要先創(chuàng)建好。

2. UCF是完全以FPGA的視角看問題,所以缺省認(rèn)為所有的時鐘之間除非預(yù)先聲明是同步的,否則就視作異步而不做跨時鐘域時序分析;XDC則恰恰相 反,ASIC世界的血緣背景決定了在其中,所有的時鐘缺省視作全同步,在沒有時序例外的情況下,工具會主動分析每一條跨時鐘域的路徑。

XDC的基本語法

XDC 的基本語法可以分為時鐘約束、I/O約束以及時序例外約束三大類。根據(jù)Xilinx的UltraFast設(shè)計方法學(xué)中Baseline部分的建議 (UG949中有詳細(xì)介紹),對一個設(shè)計進(jìn)行約束的先后順序也可以依照這三類約束依次進(jìn)行。本文對可以在幫助文檔中查到的基本XDC語法不做詳細(xì)解釋,會 將重點(diǎn)放在使用方法和技巧上。

時鐘約束

時 鐘約束必須最早創(chuàng)建,對7系列FPGA來說,端口進(jìn)來的主時鐘以及GT的輸出RXCLK/TXCLK都必須由用戶使用create_clock自主創(chuàng)建。 如果是差分輸入的時鐘,可以僅僅在差分對的P側(cè)用get_ports獲取端口,并使用create_clock創(chuàng)建。例如,

XDC約束技巧之時鐘篇

Vivado自動推導(dǎo)的衍生時鐘

MMCM/PLL /BUFR的輸出作為衍生時鐘,可以由Vivado自動推導(dǎo),無需用戶創(chuàng)建。自動推導(dǎo)的好處在于當(dāng)MMCM/PLL/BUFR的配置改變而影響到輸出時鐘 的頻率和相位時,用戶無需改寫約束,Vivado仍然可以自動推導(dǎo)出正確的頻率/相位信息。劣勢在于,用戶并不清楚自動推導(dǎo)出的衍生鐘的名字,當(dāng)設(shè)計層次 改變時,衍生鐘的名字也有可能改變。這樣就會帶來一個問題:用戶需要使用這些衍生鐘的名字來創(chuàng)建I/O約束、時鐘關(guān)系或是時序例外等約束時,要么不知道時 鐘名字,要么時鐘名字是錯的。

推薦的做法是,由用戶來指定這類衍生時鐘的名字,其余頻率等都由Vivado 自動推導(dǎo)。這樣就只需寫明create_generated_clock 的三個option,其余不寫即可。如下所示。

XDC約束技巧之時鐘篇

當(dāng) 然,此類情況下用戶也可以選擇完全由自己定義衍生時鐘,只需補(bǔ)上其余表示頻率/相位關(guān)系的option,包括-multiply_by 、-devide_by 等等。需要注意的是,一旦Vivado在MMCM/PLL/BUFR 的輸出檢測到用戶自定義的衍生時鐘,就會報告一個Warning,提醒用戶這個約束會覆蓋工具自動推導(dǎo)出的衍生時鐘(例外的情況見文章下半段重疊時鐘部分 的描述),用戶須保證自己創(chuàng)建的衍生鐘的頻率等屬性正確。

用戶自定義的衍生時鐘

工具不能自動推導(dǎo)出衍生鐘的情況,包括使用寄存器和組合邏輯搭建的分頻器等,必須由用戶使用create_generated_clock 來創(chuàng)建。舉例如下,

XDC約束技巧之時鐘篇

I/O約束

在設(shè)計的初級階段,可以不加I/O約束,讓工具專注于滿足FPGA內(nèi)部的時序要求。當(dāng)時序要求基本滿足后,再加上I/O約束跑實(shí)現(xiàn)。XDC中的I/O約束有以下幾點(diǎn)需要注意:

1. 不加任何I/O約束的端口時序要求被視作無窮大。

2. XDC中的set_input_delay / set_output_delay對應(yīng)于UCF中OFFSET IN / OFFSET OUT,但視角相反。OFFSET IN / OFFSET OUT是從FPGA內(nèi)部延時的角度來約束端口時序,set_input_delay / set_output_delay則是從系統(tǒng)角度來約束。

3. 典型的I/O時序,包括系統(tǒng)同步、源同步、SDR和DDR等等,在Vivado圖形界面的XDC templates中都有示例。2014.1版后還有一個Timing Constraints Wizard可供使用。

時序例外約束

時 序例外約束包括set_max_delay/set_min_delay,set_multicycle_path,set_false_path等,這 類約束除了要滿足XDC的先后順序優(yōu)先級外,還受到自身優(yōu)先級的限制。一個總的原則就是針對同一條路徑,對約束目標(biāo)描述越具體的優(yōu)先級越高。不同的時序例 外約束以及同一約束中不同條件的優(yōu)先級如下所示:

XDC約束技巧之時鐘篇

舉例來說,依次執(zhí)行如下兩條XDC,盡管第二條最后執(zhí)行,但工具仍然認(rèn)定第一條約束設(shè)定的15為clk1到clk2之間路徑的max delay值。

XDC約束技巧之時鐘篇

再比如,對圖示路徑依次進(jìn)行如下四條時序例外約束,優(yōu)勝者將是第二條。但如果再加入最后一條約束,false path的優(yōu)先級最高,會取代之前所有的時序例外約束。

XDC約束技巧之時鐘篇

高級時鐘約束

約束最終是為了設(shè)計服務(wù),所以要用好XDC就需要深入理解電路結(jié)構(gòu)和設(shè)計需求。接下來我們就以常見FPGA設(shè)計中的時鐘結(jié)構(gòu)來舉例,詳細(xì)闡述XDC的約束技巧。

時序的零起點(diǎn)

用 create_clock定義的主時鐘的起點(diǎn)即時序的"零起點(diǎn)",在這之前的上游路徑延時都被工具自動忽略。所以主時鐘創(chuàng)建在哪個"點(diǎn)"很重要,以下圖所 示結(jié)構(gòu)來舉例,分別于FPGA輸入端口和BUFG輸出端口創(chuàng)建一個主時鐘,在時序報告中體現(xiàn)出的路徑延時完全不同,很明顯sysclk_bad的報告中缺 少了之前一段的延時,時序報告不可信。

XDC約束技巧之時鐘篇XDC約束技巧之時鐘篇

時鐘定義的先后順序

時鐘的定義也遵從XDC/Tcl的一般優(yōu)先級,即:在同一個點(diǎn)上,由用戶定義的時鐘會覆蓋工具自動推導(dǎo)的時鐘,且后定義的時鐘會覆蓋先定義的時鐘。若要二者并存,必須使用 -add 選項(xiàng)。

XDC約束技巧之時鐘篇XDC約束技巧之時鐘篇

上 述例子中BUFG的輸出端由用戶自定義了一個衍生鐘clkbufg,這個衍生鐘便會覆蓋此處原有的sysclk。此外,圖示BUFR工作在bypass模 式,其輸出不會自動創(chuàng)建衍生鐘,但在BUFR的輸出端定義一個衍生鐘clkbufr,并使用-add 和 -master_clock 選項(xiàng)后,這一點(diǎn)上會存在sysclk和clkbufg兩個重疊的時鐘。如下的Tcl命令驗(yàn)證了我們的推論。

XDC約束技巧之時鐘篇

同步時鐘和異步時鐘

XDC約束技巧之時鐘篇

不同于UCF約束,在XDC中,所有的時鐘都會被缺省認(rèn)為是相關(guān)的,也就是說,網(wǎng)表中所有存在的時序路徑都會被Vivado分析。這也意味著FPGA設(shè)計人員必須通過約束告訴工具,哪些路徑是無需分析的,哪些時鐘域之間是異步的。

如上圖所示,兩個主時鐘ssclkin和sysclk由不同的端口進(jìn)入FPGA,再經(jīng)由不同的時鐘網(wǎng)絡(luò)傳遞,要將它們設(shè)成異步時鐘,可以使用如下約束:

XDC約束技巧之時鐘篇

其中,-include_generated_clocks 表示所有衍生鐘自動跟其主時鐘一組,從而與其它組的時鐘之間為異步關(guān)系。不加這個選項(xiàng)則僅僅將時鐘關(guān)系的約束應(yīng)用在主時鐘層面。

重疊(單點(diǎn)多個)時鐘

重疊時鐘是指多個時鐘共享完全相同的時鐘傳輸網(wǎng)絡(luò),例如兩個時鐘經(jīng)過一個MUX選擇后輸出的時鐘,在有多種運(yùn)行模式的設(shè)計中很常見。

如下圖所示,clk125和clk250是clkcore_buf的兩個輸入時鐘,不約束時鐘關(guān)系的情況下,Vivado會對圖示路徑做跨 時鐘域(重疊時鐘之間)分析。這樣的時序報告即便沒有違例,也是不可信的,因?yàn)閏lk125和clk250不可能同時驅(qū)動這條路徑上的時序元件。這么做也 會增加運(yùn)行時間,并影響最終的實(shí)現(xiàn)效果。

XDC約束技巧之時鐘篇XDC約束技巧之時鐘篇

如果clk125和clk250除了通過clkcore_buf后一模一樣的扇出外沒有驅(qū)動其它時序元件,我們要做的僅僅是補(bǔ)齊時鐘關(guān)系的約束。

XDC約束技巧之時鐘篇

在 很多情況下,除了共同的扇出,其中一個時鐘或兩個都還驅(qū)動其它的時序元件,此時建議的做法是在clkcore_buf的輸出端上創(chuàng)建兩個重疊的衍生鐘,并 將其時鐘關(guān)系約束為-physically_exclusive 表示不可能同時通過。這樣做可以最大化約束覆蓋率,也是ISE和UCF中無法做到的。

XDC約束技巧之時鐘篇

其它高級約束

時鐘的約束是XDC的基礎(chǔ),熟練掌握時鐘約束,也是XDC約束技巧的基礎(chǔ)。其它高級約束技巧,包括復(fù)雜的CDC(Clock Domain Crossing)約束和接口時序(SDR、DDR、系統(tǒng)同步接口和源同步接口)約束等方面還有很多值得注意的地方。

這一系列《XDC約束技巧》文章還會繼續(xù)就上述所列方向分篇詳述,敬請關(guān)注作者的后續(xù)更新,以及Xilinx 官方網(wǎng)站和中文論壇上的更多技術(shù)文章。

allyzhou.jpg

Ally Zhou 2014-9-25 于Xilinx上海Office


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。