Vivado使用技巧(32):IO延遲的約束方法
上一篇講述了對時鐘的約束方法,時鐘不僅對設計很重要,約束情況也很多、很複雜,需要一定的經驗。本文將講述另一種重要的約束:I/O延遲,但與時鐘約束相比就簡單的多,本文篇幅也相對較少。
為了對設計外部的時序情況進行精確建模,設計者必須設定輸入和輸出埠的時序資訊。Vivado只能識別出FPGA器件範圍內的時序,因此必須使用set_input_delay和set_output_delay命令來設定FPGA範圍外的延遲值。兩者在含義、約束命令等方面有很多地方是相似的,只不過一個是輸入,一個是輸出,本文還是分開對兩者進行講述。
輸入延遲
set_input_delay命令設定輸入埠上相對於設計介面時鐘邊沿的輸入路徑延遲。輸入延遲既指資料從外部晶片經過板級傳輸到FPGA輸入管腳間的相位差,也指相對參考板級時鐘間的相位差。輸入延遲值可以是正的,也可以是負的,由時鐘和資料在FPGA介面處的相對相位決定。
約束時的相對時鐘可以是一個設計時鐘,也可以是一個虛擬時鐘。輸入延遲命令的選項包括:
- -min和-max:-min設定的值用於最小延遲分析(保持時間、移除時間);-max設定的值用於最大延遲分析(建立時間、恢復時間)。如果約束命令中沒有使用這兩個選項,輸入延遲值會同時應用於min和max。
- -clock_fall:用於指定由相對時鐘的下降沿啟動的時序路徑上的輸入延遲約束。如果沒有這個選項,Vivado只假定使用相對時鐘的上升沿。
- -add_delay:該選項通常用於約束與多個時鐘沿相關的輸入埠(比如DDR介面),而且必須已經存在一個最大或最小輸入延遲約束,設計者使用該命令為同一埠設定其它相對時鐘沿的最大或最小輸入延遲約束。
輸入延遲約束只能應用於輸入埠或雙向埠(不包括時鐘輸入埠),不能用於設計內部的管腳。下面給出幾個使用輸入延遲約束的典型例子。
1.示例一
create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 2 [get_ports DIN]
定義一個主時鐘sysClk作為輸入延遲的相對時鐘,設定的值同時作為最小值(min)分析和最大值(max)分析。
2.示例二
create_clock -name clk_port_virt -period 10 set_input_delay -clock clk_port_virt 2 [get_ports DIN]
該例子約束目的與上例相同,只是相對時鐘換為一個虛擬時鐘。使用虛擬時鐘的好處是可以在不改變內部設計時鐘的情況下,設定任意的抖動和延遲。
3.示例三
create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk -max 4 [get_ports DIN]
set_input_delay -clock sysClk -min 1 [get_ports DIN]
該例中最小值分析和最大值分析採用不同的輸入延遲值。
4.示例四
create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 4 [get_ports DIN]
set_output_delay -clock sysClk 1 [get_ports DOUT]
第30篇中介紹過用虛擬時鐘對純組合邏輯進行約束的相關知識,這裡給出一個例子。如果兩個I/O埠之間僅有組合邏輯路徑,沒有任何時序單元,必須相對於虛擬時鐘為I/O埠定義輸入與輸出延遲。上例中DIN和DOUT之間的組合邏輯路徑約束為5ns(10-1-4)。
5.示例五
create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_input_delay -clock clk_ddr -max 2.1 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -max 1.9 [get_ports DDR_IN] -clock_fall -add_delay
set_input_delay -clock clk_ddr -min 0.9 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -min 1.1 [get_ports DDR_IN] -clock_fall -add_delay
這裡相對時鐘為DDR的時鐘,最小值分析和最大值分析採用不同的輸入延遲值。約束的一端是器件外部時鐘的上升沿和下降沿啟動的資料,另一端是器件內部同時對上升沿和下降沿敏感的觸發器的輸入資料。
輸出延遲
set_output_delay命令設定輸出埠上相對於設計介面時鐘邊沿的輸出路徑延遲。輸出延遲既指資料從FPGA的輸出管腳通過板級傳輸到另一個器件間的相位差,也指相對參考板級時鐘間的相位差。輸出延遲值同樣也可以是正的或負的,由時鐘和資料在FPGA器件外的相對相位決定。
約束時的相對時鐘可以是一個設計時鐘,也可以是一個虛擬時鐘。輸出延遲命令的選項基本與輸入延遲約束相同,還是陳列如下:
- -min和-max:-min設定的值用於最小延遲分析(保持時間、移除時間);-max設定的值用於最大延遲分析(建立時間、恢復時間)。如果約束命令中沒有使用這兩個選項,輸入延遲值會同時應用於min和max。
- -clock_fall:用於指定由相對時鐘的下降沿捕獲的時序路徑上的輸出延遲約束。如果沒有這個選項,Vivado只假定使用相對時鐘的上升沿。
- -add_delay:該選項通常用於約束與多個時鐘沿相關的輸出埠(比如DDR介面同時使用上升沿和下降沿,或者輸出埠與幾個使用不同時鐘的器件相連),而且必須已經存在一個最大或最小輸入延遲約束,設計者使用該命令為同一埠設定其它相對時鐘沿的最大或最小輸入延遲約束。
同樣,輸出延遲約束只能應用於輸出埠或雙向埠,不能用於設計內部的管腳。下面給出幾個使用輸出延遲約束的典型例子。
1.示例一
create_clock -name sysClk -period 10 [get_ports CLK0]
set_output_delay -clock sysClk 6 [get_ports DOUT]
定義一個主時鐘sysClk作為輸出延遲的相對時鐘,設定的值同時作為最小值(min)分析和最大值(max)分析。
2.示例二
create_clock -name clk_port_virt -period 10
set_output_delay -clock clk_port_virt 6 [get_ports DOUT]
該例子約束目的與上例相同,只是相對時鐘換為一個虛擬時鐘。使用虛擬時鐘的好處是可以在不改變內部設計時鐘的情況下,設定任意的抖動和延遲。
3.示例三
create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_output_delay -clock clk_ddr -max 2.1 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -max 1.9 [get_ports DDR_OUT] -clock_fall -add_delay
set_output_delay -clock clk_ddr -min 0.9 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -min 1.1 [get_ports DDR_OUT] -clock_fall -add_delay
這裡相對時鐘為DDR的時鐘,最小值分析和最大值分析採用不同的輸出延遲值。約束的一端是器件外部時鐘的上升沿和下降沿啟動的資料,另一端是器件內部同時對上升沿和下降沿敏感的觸發器的輸出資料。
最後再補充一句,雖然上面說輸入延遲約束和輸出延遲約束不能應用於FPGA內部管腳,但也有特例。UltraScale+系列FPGA的STARTUPE3內部管腳就可以進行輸入延遲和輸出延遲約束。不過博主連UltraScale+的晶片都沒摸過,本文便不做介紹。
相關推薦
Vivado使用技巧(32):IO延遲的約束方法
上一篇講述了對時鐘的約束方法,時鐘不僅對設計很重要,約束情況也很多、很複雜,需要一定的經驗。本文將講述另一種重要的約束:I/O延遲,但與時鐘約束相比就簡單的多,本文篇幅也相對較少。 為了對設計外部的時序情況進行精確建模,設計者必須設定輸入和輸出埠的時序資訊。Vi
Vivado使用技巧(9):COE檔案使用方法
COE檔案 在某些IP核的配置中,需要使用COE(Coefficient)檔案來傳遞引數,正如《FPGA數字訊號處理系列》中我多次使用MATLAB自動生成FIR濾波器所需的濾波係數檔案。 COE檔案是一種ASCII文字檔案,檔案頭部定義資料基數(Radix)
Vivado使用技巧(29):約束功能概述
設計約束概述 設計約束就是定義編譯過程中必須滿足的需求,只有這樣才能保證在板子上工作時功能正確。但不是全部約束在所有過程中都會使用,比如物理約束只用在佈局和佈線過程中。Vivado工具的綜合和實現演算法時時序驅動型的,因此必須建立合適的時序約束。我們必須根據應用
Vivado使用技巧(27):RAM編寫技巧
Vivado綜合可以理解多種多樣的RAM編寫方式,將其對映到分散式RAM或塊RAM中。兩種實現方法在向RAM寫入資料時都是採取同步方式,區別在於從RAM讀取資料時,分散式RAM採用非同步方式,塊RAM採用同步方式。使用RAM_STYLE屬性可以強制規定使用哪種方
Vivado使用技巧(10):編輯與改寫IP核原始檔
有些時候,根據設計需求可能會想要修改IP核生成的原始檔(只能修改未加密檔案),包括HDL檔案和XDC約束檔案。 這種修改不能直接修改原始檔,因為在後續設計流程中,IP可能會復位或重新生成,導致修改操作被複原。本文將介紹編輯與改寫IP核原始檔的方法,不過仍然需要注
Vivado使用技巧(1):使用Tcl在Shell中進行FPGA開發
概述 通常我們使用的是Vivado IDE進行FPGA的開發,IDE提供了圖形化的介面和自動化管理方案,我們只需要點選幾個按鈕就會得到結果。有時候還會用到另外一種開發方式:在Vivado Tcl Shell中使用Tcl命令的方式控制開發設計流程。使用Tcl
Vivado使用技巧(34):路徑分割現象
上文提到,進行最小/最大延遲約束時,set_max_delay和set_min_delay命令要設定-from和-to選項。但是如果起點和終點設定的不合理(具體見第33篇),便會導致出現路徑分割(Path Segmentation)。 非法的起點 下面舉一個例
Vivado使用技巧(2):封裝自己設計的IP核
概述 Vivado在設計時可以感覺到一種趨勢,它鼓勵用IP核的方式進行設計。“IP Integrator”提供了原理圖設計的方式,只需要在其中呼叫設計好的IP核連線。IP核一部分來自於Xilinx官方IP;一部分來自於第三方IP,其中有的是在網路上開源的;
Vivado使用技巧(25):Block Synthesis技術
本系列第22~24篇介紹了Vivado綜合技術中的各個方面,這裡先概述一下:Vivado綜合支援使用多種策略(Strategy)和全域性設定(Setting)。在RTL或XDC檔案中,可以用綜合屬性來改寫某些設定選項。目前設計越複雜,全域性設定方式限制了設計的潛
Vivado使用技巧(26):HDL編寫技巧
在Vivado中進行HDL程式碼設計,不僅需要描述數字邏輯電路中的常用功能,還要考慮如何發揮Xilinx器件的架構優勢。目前常用的HDL語言有三種。VHDL語言的優勢有: 語法規則更加嚴格; 在HDL原始碼中初始化RAM元件更容易; 支援package; 自
Vivado使用技巧(19):使用Vivado Simulator
Vivado Simulator基本操作 Vivado Simulator是一款硬體描述語言事件驅動的模擬器,支援功能模擬和時序模擬,支援VHDL、Verilog、SystemVerilog和混合語言模擬。點選執行模擬後,工具欄中顯示了控制模擬過程的常用功能按
Java開發小技巧(四):配置文件敏感信息處理
加載 gem 加密解密 -i false valid ges enc factory 前言 不知道在上一篇文章中你有沒有發現,jdbc.properties中的數據庫密碼配置是這樣寫的: jdbc.password=5EF28C5A9A0CE86C2D231A526ED5
Linux日常管理技巧(2):free,ps,netstat命令和抓包工具
情況下 路由器配置 傳輸協議 method ups lis red field 保存 一、free命令 free命令可以顯示當前系統未使用的和已使用的內存數目,還可以顯示被內核使用的內存緩沖區。用法: free [選項] 選項: -b:以Byte為單位顯示內存使用情況;-
Linux日常管理技巧(3):Linux網絡相關和防火墻
127.0.0.1 網絡 修改網卡 cal 網卡ip lis oot back col 一、Linux網絡相關 1. ifconfig 查看網卡IP ifconfig命令被用於配置和顯示Linux內核中網絡接口的網絡參數。用ifconfig命令配置的網卡信息,在網卡重啟後機
C#實戰小技巧(九):List<string>和string[]的相互轉換
List是string型別列表,string[]是string型別陣列,二者可以互相轉換。 1.string[]轉List string[] strArray = {"a", "ab", "abc"}; List<string> strList = new List<s
Microsoft Visual Studio除錯技巧(二):Visual Stdio 2010清理除錯生成的快取檔案
使用Visual Stdio 2010程式設計時,會發現硬碟的空閒空間快速不斷減少,這是因為VS2010在除錯時,會生成快取檔案,字尾名iTrace,很佔空間,需要定期手動清理。 IDE中,在“工具→選項→IntelliTrace→高階→IntelliTrace記錄的位置”可以配置儲存i
C#實戰小技巧(八):將剪下板中的內容儲存為圖片
進行C#開發時,可以將複製到剪下板中的內容轉為HTML檔案,再將HTML頁面轉為圖片進行儲存,示例效果如下。 被複制的Excel表格: 生成的圖片: 實現上述功能的主要程式碼如下,能夠將從Word、Excel、網頁等地方複製的內容匯出,並儲存為圖片。 程式碼:
eclipse使用技巧(一):快捷鍵
1、shift+alt+a,會將所選中的文字括起來,滑鼠會變成十字圖示,可以選中多個行的一部分 2、Ctrl+2,為物件設定變數 3、Ctrl+a,快速outline,檢視當前類的方法或某個特定方法 4、alt+shift+l,將一段程式碼設定變數 5、shift+home(end),用來選
開發日常小結(32):HashMap 原始碼分析
2018年10月05日 目錄 1、Java資料結構圖 Java中有幾種常用的資料結構,主要分為Collection和map兩個主要介面(介面只提供方法,並不提供實現),而程式中最終使用的資料結構是繼承自這些介面的資料結構類
Java開發小技巧(五):HttpClient工具類
前言 大多數Java應用程式都會通過HTTP協議來呼叫介面訪問各種網路資源,JDK也提供了相應的HTTP工具包,但是使用起來不夠方便靈活,所以我們可以利用Apache的HttpClient來封裝一個具有訪問HTTP協議基本功能的高效工具類,為後續開發使用提供方便。 文章要點: HttpClient使用流程