Vivado使用技巧(13):CSV檔案定義IO Ports

FPGADesigner發表於2018-08-20

定義I/O Ports資訊

每個完整的FPGA設計必然包含I/O Ports定義與配置環節。I/O Ports包含了FPGA內部訊號、管腳、PCB之間的連線關係。常用的設計方法有兩種:

  • RTL工程:完成了RTL設計後,開啟一個設計(如綜合後設計)並換到I/O Planning View Layout,Vivado會自動從設計中讀取I/O埠匯入到I/O Ports視窗中,進行後續設定。
  • I/O Planning工程:可以在設計之前預先建立此工程,只定義I/O埠。此工程還可以讀取包含I/O定義的CSVXDC檔案,將I/O資訊匯入到I/O Ports視窗。此類工程的意義是在設計前就確定好管腳約束資訊,保證硬體設計與RTL設計工作同步展開。

無論是哪種工程,都可以將設計好的I/O埠匯出到CSV格式檔案。CSV檔案是FPGA設計工程師與PCB設計工程師之間交流的一種重要檔案。本文將對該檔案內容及使用方法做詳細介紹。


匯入CSV/XDC檔案

建立I/O Planning工程時,會讓設計者選擇需要匯入的包含I/O資訊的檔案:
這裡寫圖片描述
如果這時選擇了“Do not import I/O ports at this time”,可以在File選單下點選Import->Import I/O Ports:
這裡寫圖片描述
彈出的視窗中選擇要匯入的檔案:
這裡寫圖片描述
CSV是一種用於FPGA和PCB設計者之間交換資訊的標準檔案格式。Vivado需要一種特定的CSV格式來匯入與I/O管腳相關的資料,下文將做詳細介紹,大概檢視如下(可用Excel開啟):
這裡寫圖片描述
Vivado會解析CSV檔案中的資料,如果有不能識別的資訊,會顯示在Package Pins視窗的user columns中。如果需要修改或建立新的與I/O相關的使用者資訊,該視窗右鍵->Set User Column Values:
這裡寫圖片描述
除了CSV檔案,也可以匯入XDC檔案(即為常見的物理約束資訊),但是XDC檔案不包含I/O管腳方向,因此I/O的direction屬性會顯示為undefined,需要人工修改。


匯出I/O管腳與封裝資料

I/O Planning工程和RTL工程都可以將I/O管腳和封裝資訊匯出到檔案中,可以完成如下目標:

  • I/O管腳資訊:匯出I/O Port到檔案中,用於RTL程式碼編寫,或者PCB原理圖符號建立;
  • Package管腳資訊:匯出FPGA的所有管腳資訊到CSV檔案中,可以幫助設計者直接在CSV檔案中完成I/O埠定義。

在File選單下點選Export->Export I/O Ports,開啟如下視窗:
這裡寫圖片描述
選擇需要匯出的檔案格式,點選OK即可。


CSV檔案格式

CSV檔案中的每一列定義了與I/O埠和封裝引腳相關的資訊,下面給出具體介紹:

  • I/O Bank:規定了管腳所處的I/O bank。匯出的CSV檔案中,Vivado會為FPGA的所有管腳設定此值。匯入的CSV檔案中不需要此屬性。
  • Pin Number:規定了封裝管腳的位置。匯出的CSV檔案中,Vivado會為FPGA的所有管腳設定此值。匯入的CSV檔案中此屬性用於定義I/O埠的佈局。
  • Site:規定了封裝管腳的可替代名稱。該值由Vivado設定,匯入的CSV檔案中不需要此屬性。2016.1之前的Vivado版本中該屬性稱作IOB Alias。
  • Site Type:規定了FPGA datasheet中的管腳名稱。該值由Vivado設定,匯入的CSV檔案中不需要此屬性。
  • Min/Max Trace Delay(ps):規定了鋼模襯墊(pad site of the die)與封裝球之間的延遲(ball on the package),以ps為單位。該值由Vivado設定,該屬性只能出現在匯出的CSV檔案中。
  • Prohibit:I/O設定了Prohibit屬性後,可以阻止使用者I/O被賦值到該I/O。合理使用該屬性可以有效地減少訊號之間的交叉干擾、避免易犯的板級佈線問題。
  • Interface:使用者可以將任意使用者I/O(包括匯流排)分為一組,稱作介面(Interface)。比如可以將記憶體的資料、地址、使能訊號放在一個介面內,建立之間的聯絡。
  • Signal Name:FPGA設計中使用的使用者I/O名稱。
  • Direction:訊號的方向,輸入IN、輸出OUT、雙向INOUT。
  • Diffpair Type:用於差分訊號定義,值為P或N,指示了該管腳為差分對的P極還是N極。
  • Diffpair Signal:規定了該管腳在差分對中的另一個管腳的名稱。
  • IO Standard:規定了使用者I/O所使用的I/O標準。如果為空,Vivado會根據FPGA選擇一個合適的預設值。
  • Drive:使用者I/O在指定I/O標準下的驅動強度,不是所有的I/O標準都可以設定驅動強度。如果為空Vivado會使用預設值。
  • Slew Rate:使用者I/O在指定I/O標準下的壓擺率,不是所有的I/O標準都可以設定壓擺率。如果為空Vivado會使用預設值。值可以選為FAST或SLOW,UltraScale系列還可以選擇MEDIUM。
  • OUTPUT_IMPEDANCE:規定了用於匹配特徵阻抗的驅動阻抗,定義了驅動器源端的端接值。只適用於UltraScale架構。
  • PER_EMPHASIS:允許一些I/O標準的預加強,通過減少碼間干擾和最小化傳輸線損失影響,提高高頻訊號的訊號完整性。只適用於UltraScale架構。
  • LVDS_PRE_EMPHASIS:允許LVDS I/O標準的預加強,通過減少碼間干擾和最小化傳輸線損失影響,提高高頻訊號的訊號完整性。只適用於UltraScale架構。
  • Pull Type:規定了埠的上下拉型別,當使用3態輸出(OBUFT)或雙向快取器(IOBUF)時,輸出可以配置一個弱上拉電阻、弱下拉電阻或弱保持電路。對於輸入快取器(IBUF),輸入可以配置一個弱上拉電阻或弱下拉電阻。
  • IN_TERM/OUT_TERM:定義可選的IN_TERM或OUT_TERM驅動阻抗,大多數情況下此值為空,因為目前FPGA產品還不支援該屬性的設定。只適用於7系列FPGA。
  • DQS_BIAS:定義偽差分輸入和真差分IO標準輸入的可選DC偏置。只適用於UltraScale結構。
  • DIFF_TERM:開啟或關閉內部的差分端接。
  • OFFCHIP_TERM:規定了I/O外部PCB上用到的端接。設定此值主要為了用於SSN分析(參考本系列第16篇)。
  • Board Signal:規定了由PCB進入到FPGA I/O所使用的訊號名稱,Signal Name是FPGA內部設計所使用的名稱,兩者本質所指物件相同)。
  • Board Voltage:規定了由PCB進入到FPGA I/O的訊號的電壓等級。
  • ODT:報告了設計的可選片上端接,只適用於UltraScale架構。

接下來再介紹下在CSV檔案中定義差分訊號的幾種方法:

  1. 直接定義,兩個埠的DiffPair Signal屬性分別指向對方的Signal Name,且二者的DiffPair Type屬性互補,一個為P,一個為N。Vivado還會檢查I/O Standard等屬性是否與差分對相容。

  2. 單向連線定義,兩個埠有互補的DiffPair Type,一個為N,一個為P,但是隻有一個埠的DiffPair Signal指向另一個埠的Signal Name。如果Vivado檢查到其它屬性都相容,也會建立差分對。

  3. 單埠定義,CSV檔案中定義了一個帶有差分I/O標準、DiffPair Type、DiffPair Signal的埠,但是沒有定義另一個埠。Vivado會建立與此屬性相匹配、DiffPair Type互補的另一個差分埠。

  4. 推測法定義,兩個埠帶有差分I/O標準(如DIFF_HSTL、DIFF_SSTL),訊號名稱分別帶有N和P,如果Vivado檢查到其它屬性都相容,也會建立差分對。

相關文章