一、前言
無論是FPGA應用開發(fā)還是數(shù)字IC設計,時序約束和靜態(tài)時序分析(STA)都是十分重要的設計環(huán)節(jié)。在FPGA設計中,可以在綜合后和實現(xiàn)后進行STA來查看設計是否能滿足時序上的要求。本文闡述基本的時序約束和STA操作流程。內(nèi)容主要來源于《Vivado從此開始》這本書,我只是知識的搬運工。
二、時序約束與XDC腳本
時序約束的目的就是告訴工具當前的時序狀態(tài),以讓工具盡量優(yōu)化時序并給出詳細的分析報告。一般在行為仿真后、綜合前即創(chuàng)建基本的時序約束。Vivado使用SDC基礎上的XDC腳本以文本形式約束。以下討論如何進行最基本時序約束相關腳本。
1 時序約束首要任務是創(chuàng)建主時鐘,主時鐘即為時鐘引腳進入時鐘信號或高速收發(fā)器生成時鐘。[create_clock]
create_clock -name clk_name -period N-waveform {pos_time neg_time}[get_ports port_name](劃線部分可選)
創(chuàng)建兩個異步的主時鐘:
create_clock -name clk_a -period 10 [get_ports clk_a]
create_clock -name clk_b -period 15 [get_ports clk_b]
set_clock_groups -asynchronous -group clk_a -group clk_b
當兩個主時鐘是異步關系,它們生成時鐘同樣是異步關系:
set_clock_groups -asynchronous -group [get_clocks clk_a -include_generated_clocks]
-group [get_clocks clk_b -include_generated_clocks]
差分時鐘僅約束P端口:
create_clock -name clk -period 10 [get_ports clk_p]
高速收發(fā)器生成時鐘作為主時鐘:
create_clock -name gt0_txclk -period 8 [get_pins GT0/.../TXOUTCLK]
有一種特殊情況無需與具體引腳綁定,即創(chuàng)建虛擬時鐘。該約束用于設定輸入/輸出延遲。需要創(chuàng)建虛擬時鐘的場景是輸入FPGA的數(shù)據(jù)由FPGA內(nèi)部產(chǎn)生時鐘采樣,如串口通信。
create_clock -name clk_v -period 5
2 創(chuàng)建主時鐘后,需要約束生成時鐘:[create_generated_clock]
生成時鐘分為兩種。由PLL MMCM等專用時鐘單元生成產(chǎn)生的時鐘信號,Vivado會自動產(chǎn)生相關約束。還有一種是自定義生成時鐘,一般為邏輯分頻得到。
時鐘源是時鐘端口:
create_generated_clock -name clk_div -source [get_ports clk] -divide_by 2 [get_pins rega/Q] 意思是在rega單元的Q引腳上的時鐘信號clk_div是由clk經(jīng)過2分頻得到的生成時鐘。
時鐘源是引腳:
create_generated_clock -name clk_div -source [get_pins rega/C] -divide_by 2 [get_pins rega/Q]
除了使用-divide_by -multiply_by表示主時鐘和生成時鐘的頻率關系,也可以用 -edges實現(xiàn)更精確的表達:
create_generated_clock -name clk_div -source [get_pins rega/C] -edges {1 3 5} [get_pins rega/Q]
相移關系使用-edge_shift命令描述。
該約束命令還常用于重命名時鐘信號:
create_generated_clock -name clk_rename [get_pins clk_gen/.../CLKOUT0]
3 創(chuàng)建時鐘組:[set_clock_groups]
a. 異步時鐘情況:
set_clock_groups -asynchronous -group clk_a -group clk_b clk_a和clk_b是異步時鐘。
b. 物理互斥情況:
create_clock -name clk_a -period 10 [get_ports clk]
create_clock -name clk_b -period 8 [get_ports clk] -add
create_clock -name clk_c -period 5 [get_ports clk] -add
set_clock_groups -physically_exclusive -group clk_a -group clk_b -group clk_c
該種情況僅是為了觀察clk引腳時鐘信號周期依次為10ns 8ns和5ns時,時序是否收斂。因此這三個時鐘物理上不同時存在。
c. 邏輯互斥情況:
set_clock_groups -logically_exclusive
-group [get_clocks -of [get_pins clk_core/.../CLKOUT0]] -group [get_clocks -of [get_pins clk_core/.../CLKOUT1]]
clkout0和clkout1送入到BUFGMUX中,后續(xù)根據(jù)sel信號確定選擇哪一個作為工作時鐘。此時clkout0和clkout1同時存在電路中,但僅有一個會作為后續(xù)電路工作時鐘,因此邏輯上互斥。
特殊用法:當asynchronous 的group只有一個,說明改組內(nèi)時鐘是同步的,但與其他所以時鐘異步。
4 設置偽路徑:[set_false_path]
設置偽路徑后,不再對特殊路徑進行時序分析。特殊路徑如測試邏輯、添加同步電路后的跨時鐘域路徑等。在兩個時鐘域之間應該相互設置為set_false:
set_false_path -from [get_clocks clk_a] -to [get_clocks clk_b]
set_false_path -from [get_clocks clk_b] -to [get_clocks clk_a]
5 常用時鐘相關命令:
report_clocks:查看創(chuàng)建的所有時鐘
report_property [get_clocks
report_clock_network:查看時鐘的生成關系網(wǎng)絡
report_clock_interaction:查看時鐘交互關系
其中最后一項非常重要,經(jīng)常被用于查看異步時鐘域之間的路徑是否安全。若存在不安全路徑,需要添加同步、握手或FIFO后,設置為異步時鐘組或false_path。
鍵入該命令后,會生成時鐘交互矩陣。對角線是每個時鐘內(nèi)部路徑,其他非黑色部分即為存在對應兩個時鐘的跨時鐘域路徑。紅色部分是非安全路徑,若不處理會產(chǎn)生亞穩(wěn)態(tài)。
三、查看時序報告(STA)
本節(jié)以一個有很多時序問題的工程為例進行講解。在綜合后即可打開時序概要查看時序報告。
打開后有如下界面:
其中Design Timing Summary是時序概況,包括最大延遲分析、最小延遲分析以及脈沖寬度三個部分。其中WNS或WHS為負數(shù),說明當前設計無法滿足建立時間或保持時間要求,也就是說數(shù)據(jù)無法被穩(wěn)定采樣。
Clock Summary內(nèi)的信息與使用report_clocks TCL腳本調(diào)出來的信息相似,包含了全部已創(chuàng)建的時鐘信號。Check Timing部分則包含了未被約束的部分,我們可以根據(jù)該部分信息進一步添加必要的約束。Intra-Clock Paths和Inter-Clock Paths則分別描述了同步和異步電路時序路徑的裕量參數(shù)。
點擊WNS或WHS后的數(shù)值可以直接找到時序裕量最差的路徑:
雙擊路徑信息所在行任意位置,界面會跳轉到該路徑的詳細信息界面:
四類時序路徑中,除了FPGA輸入端口到輸出端口這一特殊情況外,其他時序路徑均由源時鐘路徑、數(shù)據(jù)路徑和目的時鐘路徑三部分構成。上表中各項的具體解釋見官方文檔UG908.
本文說明了時序約束和STA的關系,基本時序約束情形及相應的XDC腳本。之后簡單介紹了如何在VIVADO中查看時序報告來分析時序問題。后續(xù)會以網(wǎng)絡通信中常見的RGMII接口設計實例闡述I/O延遲約束部分。
審核編輯 :李倩
-
時序
+關注
關注
5文章
392瀏覽量
37442 -
Vivado
+關注
關注
19文章
815瀏覽量
66911
原文標題:VIVADO時序約束及STA基礎
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
FPGA主時鐘約束詳解 Vivado添加時序約束方法
![FPGA主時鐘<b class='flag-5'>約束</b>詳解 <b class='flag-5'>Vivado</b>添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>方法](https://file1.elecfans.com/web2/M00/89/44/wKgZomR-_LyAXydsAAC63BOnXvo730.jpg)
vivado:時序分析與約束優(yōu)化
Vivado中的靜態(tài)時序分析工具Timing Report的使用與規(guī)范
![<b class='flag-5'>Vivado</b>中的靜態(tài)<b class='flag-5'>時序</b>分析工具Timing Report的使用與規(guī)范](https://file1.elecfans.com//web2/M00/A6/EA/wKgZomUMQT2AdIGwAAAygowafWg279.png)
【時序約束資料包】培訓課程Timing VIVADO
FPGA時序約束的建立和保持時間方法
![FPGA<b class='flag-5'>時序</b><b class='flag-5'>約束</b>的建立和保持時間方法](https://file.elecfans.com/web1/M00/B1/3A/pIYBAF3zYJmACvW7AAFZhG4kYs4363.png)
基本的時序約束和STA操作流程
![基本的<b class='flag-5'>時序</b><b class='flag-5'>約束</b>和<b class='flag-5'>STA</b>操作流程](https://file.elecfans.com/web2/M00/0F/2C/pYYBAGER1s2ARBycAAAQ5IsqT2w902.png)
評論