XDC約束技巧——時鐘篇

2020-12-08 騰訊網

本文摘自《Vivado使用誤區與進階》,作者為Xilinx工具與方法學應用專家Ally Zhou。

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

原標題:【Vivado使用誤區與進階】XDC約束技巧——時鐘篇

01

XDC的優勢

XDC 是Xilinx Design Constraints 的簡寫,但其基礎語法來源於業界統一的約束規範SDC(最早由Synopsys 公司提出,故名Synopsys DesignConstraints) 。所以SDC、XDC 跟Vivado Tcl 的關係如圖所示。

XDC 的主要優勢包括:

1. 統一了前後端約束格式,便於管理;

2. 可以像命令一樣實時錄入並執行;

3. 允許增量設置約束,加速調試效率;

4. 覆蓋率高,可擴展性好,效率高;

5. 業界統一,兼容性好,可移植性強;

XDC 在本質上就是Tcl 語言,但其僅支持基本的Tcl 語法如變量、列表和運算符等等,對其它複雜的循環以及文件I/O 等語法可以通過在Vivado中source 一個Tcl 文件的方式來補充。(對Tcl 話題感興趣的讀者可以參考作者的另一篇文章《Tcl 在Vivado 中的應用》)XDC 與UCF 的最主要區別有兩點:

1. XDC 可以像UCF 一樣作為一個整體文件被工具讀入,也可以在實現過程中被當作一個個單獨的命令直接執行。這就決定了XDC 也具有Tcl命令的特點,即後面輸入的約束在有衝突的情況下會覆蓋之前輸入的約束(時序例外的優先級會在下節詳述)。另外,不同於UCF 是全部讀入再處理的方式,在XDC 中,約束是讀一條執行一條,所以先後順序很重要,例如要設置IO 約束之前,相對應的clock 一定要先創建好。

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

02

XDC的基本語法

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

XDC的基本語法

時鐘約束必須最早創建。對7 系列FPGA 來說,埠進來的時鐘以及GT 的輸出RXCLK/TXCLK 都必須由用戶使用create_clock 自主創建為主時鐘。如果是差分輸入的時鐘,可以僅僅在差分對的P 側用get_ports獲取埠,並使用create_clock 創建。例如:

Vivado 自動推導的衍生時鐘

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

推薦的做法是,由用戶來指定這類衍生時鐘的名字,其餘頻率等都由Vivado 自動推導。這樣就只需寫明create_generated_clock 的三個option,其餘不寫即可。如上所示。當然,此類情況下用戶也可以選擇完全由自己定義衍生時鐘,只需補上其餘表示頻率/相位關係的option,包括-multiply_by 、-divide_by 等等。需要注意的是,一旦Vivado 在MMCM/PLL/BUFR 的輸出檢測到用戶自定義的衍生時鐘,就會報告一個Warning,提醒用戶這個約束會覆蓋工具自動推導出的衍生時鐘(例外的情況見文章下半段重疊時鐘部分的描述),用戶須保證自己創建的衍生鐘的頻率等屬性正確。

用戶自定義的衍生時鐘

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

03

I/O約束

在設計的初級階段,可以不加I/O 約束,讓工具專注於滿足FPGA 內部的時序要求。當時序要求基本滿足後,再加上I/O 約束跑實現。XDC 中的I/O 約束有以下幾點需要注意:

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

2. XDC 中的set_input_delay / set_output_delay 對應於UCF 中OFFSET IN / OFFSET OUT,但視角相反。OFFSET IN / OFFSET OUT 是從FPGA 內部延時的角度來約束埠時序,set_input_delay /set_output_delay 則是從系統角度來約束。

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

04

時序例外約束

時序例外約束包括(

set_max_delay/set_min_delay

set_multicycle_pat;

set_false_path 等),

這類約束除了要滿足XDC 的先後順序優先級外,還受到自身優先級的限制。一個總的原則就是針對同一條路徑,對約束目標描述越具體的優先級越高。不同的時序例外約束以及同一約束中不同條件的優先級如下所示:

舉例來說,依次執行如下兩條XDC,儘管第二條較晚執行,但工具仍然認定第一條約束設定的15 為clk1到clk2 之間路徑的max delay 值。

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

05

高級時鐘約束

時序的零起點

用create_clock 定義的主時鐘的起點即時序的「零起點」,在這之前的上遊路徑延時都被工具自動忽略。所以主時鐘創建在哪個「點」很重要,以下圖所示結構來舉例,分別於FPGA 輸入埠和BUFG 輸出埠創建一個主時鐘,在時序報告中體現出的路徑延時完全不同,很明顯sysclk_bad 的報告中缺少了之前一段的延時,時序報告不可信。

時鐘定義的先後順序

時鐘的定義也遵從XDC/Tcl 的一般優先級,即:在同一個點上,由用戶定義的時鐘會覆蓋工具自動推導的時鐘,且後定義的時鐘會覆蓋先定義的時鐘。若要二者並存,必須使用 -add 選項。

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

06

同步時鐘和異步時鐘

不同於UCF 約束,在XDC 中,所有的時鐘都會被預設認為是相關的,也就是說,網表中所有存在的時序路徑都會被Vivado 分析。這也意味著FPGA 設計人員必須通過約束告訴工具,哪些路徑是無需分析的,哪些時鐘域之間是異步的。

如上圖所示,兩個主時鐘ssclkin 和sysclk 由不同的埠進入FPGA,再經由不同的時鐘網絡傳遞,要將它們設成異步時鐘,可以使用如下約束:

其中,-include_generated_clocks 表示所有衍生鍾自動跟其主時鐘一組,從而與其它組的時鐘之間為異步關係。不加這個選項則僅僅將時鐘關係的約束應用在主時鐘層面。

重疊(單點多個)時鐘

重疊時鐘是指多個時鐘共享完全相同的時鐘傳輸網絡,例如兩個時鐘經過一個MUX 選擇後輸出的時鐘,在有多種運行模式的設計中很常見。Vivado 使用誤區與進階如下圖所示,clk125 和clk250 是clkcore_buf 的兩個輸入時鐘,不約束時鐘關係的情況下,Vivado 會對圖示路徑做跨時鐘域(重疊時鐘之間)分析。這樣的時序報告即便沒有違例,也是不可信的,因為clk125 和clk250 不可能同時驅動這條路徑上的時序元件。這麼做也會增加運行時間,並影響最終的實現效果。

如果clk125 和clk250 除了通過clkcore_buf 後一模一樣的扇出外沒有驅動其它時序元件,我們要做的僅僅是補齊時鐘關係的約束。

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

07

其他高級約束

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

作者:Ally Zhou

整理:碎碎思

版權歸原作者所有

---> END

NOW

相關焦點

  • 數字設計中的時鐘與約束
    做完了synopsys的DC workshop,涉及到時鐘的建模/約束,這裡就來聊聊數字中的時鐘(與建模)吧。主要內容如下所示:    補充:時鐘分配策略首先來談談同步電路與異步電路。那麼首先就要知道什麼是同步電路、什麼是異步電路?
  • FPGA設計小技巧(時鐘/性能/編程)
    打開APP FPGA設計小技巧(時鐘/性能/編程) FPGA技術聯盟 發表於 2020-12-11 10:26:44 時鐘篇 選用全局時鐘緩衝區(BUFG)作為時鐘輸入信號,BUFG是最穩定的時鐘輸入源,可以避免誤差。
  • FPGA設計開發軟體Quartus II的使用技巧之: 約束及配置工程
    設計好工程文件後,首先要進行工程的約束。約束主要包括器件選擇、管腳分配及時序約束等。時序約束屬於較為高級的應用,通過時序約束可以使工程設計文件的綜合更加優化。下面對這幾種約束方式進行介紹。5.7.3 時序約束分配管腳後,在執行完全編譯(Full Compilation)之前,可以利用「Assignments Editor」和「Settings」菜單的「Timing Requirements Options」對系統信號的時序特性進行設置,也可以使用「Timing wizard」嚮導來設置時序約束條件。
  • 約束、時序分析的概念介紹
    很多人詢問關於約束、時序分析的問題,比如:如何設置setup,hold時間?如何使用全局時鐘和第二全局時鐘(長線資源)?如何進行分組約束?如何約束某部分組合邏輯?如何通過約束保證異步時鐘域之間的數據交換可靠?如何使用I/O邏輯單元內部的寄存器資源?如何進行物理區域約束,完成物理綜合和物理實現?為了解決大家的疑難,我們將逐一討論這些問題。
  • Altera FPGA/CPLD設計 基礎篇+高級篇(附隨書光碟)
    《Altera FPGA/CPLD設計(基礎篇)》是王誠、蔡海寧、吳繼華編著的一本圖書。 2687.4 小結 2807.5 問題與思考 280高級篇介紹       本書介紹了Altera器件的高級應用,討論了時序約束與靜態時序分析方法,Altera的可編程器件的高級設計工具與系統級設計技巧。
  • ISE時序約束筆記7——Path-Specific Timing Constraints
    時鐘上升沿和下降沿之間的時序約束本文引用地址:http://www.eepw.com.cn/article/271120.htm  周期約束可以自動計算兩個沿的的約束——包括調整非50%佔空比的時鐘。  例:一個CLK時鐘周期約束為10ns,能夠應用5ns的約束到兩個寄存器之間。
  • 2018北京事業單位行測技巧:行測行程問題之時鐘問題解法
    事業單位行測技巧:中公事業單位考試網為考生提供事業單位備考素材,包括行測技巧、申論技巧、面試技巧、公共基礎知識練習、時政熱點等。事業單位考試網為廣大考生整理了2018北京事業單位行測技巧:行測行程問題之時鐘問題解法。了解更多事業單位招聘信息,請點擊事業單位考試網。
  • ISE 約束文件 *.ucf的寫法
    後來才發現,原來是約束的問題,看來對於FPGA設計來說,約束真的很重要啊。本文引用地址:http://www.eepw.com.cn/article/201611/319314.htm下面介紹幾種常用的約束語句,以備查閱。
  • Xilinx Vivado I/O延遲約束介紹
    Xilinx Vivado I/O延遲約束介紹 FPGA開源工作室 發表於 2020-11-29 10:01:16   要在設計中精確建模外部時序,必須為輸入和輸出埠提供時序信息
  • DS1302時鐘晶片介紹_DS1302的使用技巧和特點詳解
    DS1302 是DALLAS 公司推出的涓流充電時鐘晶片,內含有一個實時時鐘/日曆和31 字節靜態RAM,通過簡單的串行接口與單片機進行通信。實時時鐘/日曆電路提供秒、分、時、日、日期、月、年的信息,每月的天數和閏年的天數可自動調整,時鐘操作可通過AM/PM 指示決定採用24 或12 小時格式。
  • FPGA時序分析—vivado篇
    時序分析的基本步驟:一個合理的時序約束可以分為以下步驟:時序約束整體的思路與之前我說的方法基本一致。整體的思路如下:先是約束時鐘,讓軟體先解決內部時序問題;(在這一步驟中可以適當加入時序例外,以便時序通過)然後再加入IO的延遲約束;最後針對沒有過的時序,添加時序例外。
  • 小技巧:教你玩轉Win7系統時鐘
    windows7中有許多的小技巧不斷被廣大用戶所發掘,不知道你是否了解,windows7的系統時鐘也有很多可玩性,本文就是要給大家介紹這方面。2、改用12小時制通常情況下我們不喜歡將下午1點稱之為13點,所以12小時制似乎更適合大家的日常習慣,那你可以將windows7的系統時鐘改成
  • 電腦時鐘設置多時區圖文教程,附加時鐘顯示多地區國外日期時間
    大家好,我是老蓋,感謝觀看本篇文章,本文做的也有視頻,也可以看我發布的視頻。今天給大家講一下電腦添加多地區的時間,多個時鐘顯示。對著屏幕右下角時間點一下,會出現日期時間的界面,點擊更改日期和時間設置。在日期和時間中,點擊附加時鐘,選擇顯示此時鐘,這裡我添加了一個倫敦的時間,並且輸入了顯示名字倫敦方便測試。應用之後,滑鼠放在右下角,日期時間會顯示本地時間和倫敦時間兩個時間。再次點擊右下角的日期時間,會出現兩個始終,多了一個倫敦的時鐘。
  • 下一代時鐘網絡
    利用自由空間中的雷射連接來同步時鐘,可以使不確定度降至前所未有的飛秒級別。1905 年,愛因斯坦在他的論文中第一次介紹了狹義相對論。在文章的第一段中,他將時間定義為「表上小指針的位置」,就是說時鐘表示的時間只是在表周圍緊鄰的範圍內才是正確的。然後,他討論了利用電磁波信號交換來同步遠程時鐘的可能性,並意識到時鐘網絡可以用來提供空間和時間的信息。
  • 一文搞定時鐘相關的概念(時鐘頻率、波特率、分頻因子、預分頻因子、倍頻)
    時鐘分為內部時鐘和外部時鐘,即提供時鐘的源是片上還是片外的問題。     晶振即為外部時鐘,晶片可以做內部時鐘,但一般不如內部時鐘穩定可靠。     時鐘振蕩的快慢頻次即為此時鐘的時鐘頻率,它就相當類似人的心臟,是一種計時基準,有了此基準,通過分頻等方式就可適配不同的外設。