Vivado使用技巧(14):IO規劃方法詳解

FPGADesigner發表於2018-08-20

本系列第13篇簡單介紹了使用RTL工程IO佈局工程兩種方法定義IO Ports。在I/O Planning View Layout中(IO佈局工程中是Default Layout),顯示了FPGA器件資源、封裝管腳、I/O Ports等詳細資訊。設計者藉助這些資訊來完成I/O規劃。


建立單端/差分I/O Ports

RTL工程會直接從RTL設計中獲取I/O埠資訊;IO佈局工程可以從CSV/XDC檔案中匯入I/O埠資訊,或者人工建立I/O埠(RTL工程不允許人工建立)。在I/O Ports視窗中右鍵->Create I/O Ports,彈出視窗:
這裡寫圖片描述
設定埠名稱、方向、是否是差分對、是否是匯流排、I/O標準、上下拉型別、埠位置等資訊,當方向為Output時還可設定驅動強度和壓擺率。

如果希望將I/O Ports視窗中已有的單端I/O組合為一對差分訊號,選中兩者,右鍵->Make Diff Pair
這裡寫圖片描述
點選Swap可以交換差分對的P端和N端。差分訊號在I/O Ports視窗中只顯示在一行裡中(只會顯示P端訊號,N端訊號顯示在Neg Diff Pair屬性欄中)。如過希望將一組差分訊號拆成兩個單端訊號,右鍵->Split Diff Pair即可。上述功能只能在I/O規劃工程中使用,不能在RTL工程中使用。

上述功能操作所對應的Tcl命令如下:

create_port port_1 -direction in  #建立一個單端I/O
create_port port_2 -direction in -diff_pair #建立一個差分I/O
make_diff_pair_ports port_1 port_2 #組合一個差分對
split_diff_pair_ports port_1 port_2 #拆開一個差分對

配置I/O Ports

Xilinx的FPGA器件支援可配置的SelectIO介面驅動器和接收器,支援多種標準介面。這些標準介面包含如下功能:可程式設計的輸出強度和壓擺率控制、使用DCI的片內端接、生成內部參考電壓。

配置可以直接在I/O Ports視窗的屬性列中進行,也可以點選右鍵->Configure Ports,在下面視窗中配置:
這裡寫圖片描述
其中Pull type包括弱上拉PULLUP、弱下拉PULLDOWN和保持KEEPER和NONE四種,前兩種讓三態輸出或雙向埠在不被驅動時可以避免浮動,KEEPER可以讓其保持當前的值。

每一個埠都有Fixed屬性,表明該邏輯埠是由使用者賦值的。埠必須保持鎖定狀態,才能避免生成位元流時不會發生錯誤。選中I/O埠,右鍵選單中通過Fix PortsUnfix Ports來切換埠狀態。

RTL工程中,埠的方向只能從RTL原始檔中獲取,不能人工定義;在I/O規劃工程中,需要人工定義I/O的方向。對於7系列、Zynq系列、UltraScale系列FPGA而言,所有I/O埠PACKAGE_PIN和IOSTANDARD屬性必須有明確的值,否則不能生成bit流檔案。


I/O Port介面的使用

Vivado提供了介面(Interface)用於管理有功能關係的一組I/O和匯流排。一組介面的屬性可以同時賦值,減輕工作量,也有助於將介面隔離在某一時鐘區域或PCB佈線範圍內。

在I/O Ports中選中所有需要組合在一起的訊號,右鍵->Create I/O Port Interface,在新視窗中選中介面名稱:
這裡寫圖片描述
建立好的介面會按一定層次關係顯示在I/O Ports視窗中:
這裡寫圖片描述
新增其它I/O埠到介面中,選中I/O,右鍵->Assign to Interface,選中需要新增的介面即可;如果要從介面中移除某些I/O,右鍵->Unassign from Interface

如果要刪除某一介面,選中該介面右鍵->Delete或之間按鍵盤上的Delete按鍵,彈出如下視窗中,只選擇介面點選OK即可。
這裡寫圖片描述


Prohibit屬性的使用

Vivado提供了Prohibit屬性,設定了該屬性的I/O管腳或I/O Bank會遮蔽掉埠布局。在Package Pin視窗中選中需要遮蔽的I/O,勾選中Prohibit:
這裡寫圖片描述
在Device和Package視窗中相應的管腳會顯示為帶斜槓的圈:
這裡寫圖片描述
上述功能操作所對應的示例Tcl命令如下:

set_property PROHIBIT 1 [get_sites U17]  #遮蔽一個I/O的佈局
set_property PROHIBIT 0 [get_sites U17]  #解除遮蔽

I/O Ports佈局

如果已經提前知道了I/O埠和封裝管腳之間的聯絡,直接在I/O Ports中填寫即可。如果需要進行I/O Ports佈局,Vivado提供瞭如下三種方法:

  1. 順序佈局:選中需要佈局的I/O,右鍵->Place I/O Ports Sequentially,在Device視窗中依次點選,選擇佈局的位置,直到所有I/O全部佈局完成。
  2. I/O Bank佈局:選中需要佈局的I/O,右鍵-> Place I/O Ports in an I/O Bank,在Device視窗中點選一個管腳位置,Vivado會盡可能的將I/O佈局在該管腳所在的Bank中。如果還有I/O沒有賦值,需要繼續點選選擇位置,直到所有I/O全部佈局完成。
  3. 區域佈局:選中需要佈局的I/O,右鍵->Place I/O Ports in a Defined Area,箭頭變為十字,在Device視窗中拖動一個矩形區域,Vivado會盡可能的將I/O佈局在該區域中。如果還有I/O沒有賦值,需要繼續選擇區域,直到所有I/O全部佈局完成。
    注意,所有佈局方式所用的佈局順序都與埠在I/O Ports視窗中排列的順序有關,如有需要應該在佈局前先調整I/O在I/O Ports中的順序。

除了人工佈局外,Vivado還提供了自動佈局功能。Vivado可以根據I/O標準和差分對規則,自動將I/O埠賦值到封裝管腳上。在I/O Ports視窗中選擇需要佈局的I/O,在Tools選單欄中點選I/O Planning->Auto-place I/O Ports
這裡寫圖片描述
選擇佈局全部I/O或僅佈局選中I/O,點選下一步:
這裡寫圖片描述
如果選中的I/O中有部分已經賦值,會出現如上視窗,選擇保持原有賦值或尋找新的賦值位置,點選下一步,再點選Finish即可執行自動佈局。接下來再介紹I/O佈局過程中可能會用到的兩個小操作:

  • 交換佈局位置:選中需要交換位置的兩個I/O,右鍵->Swap Location;
  • 移除已經完成的佈局:選中需要刪除佈局的I/O,右鍵->Unplace;

I/O規劃工程遷移為RTL工程

已經完成的I/O規劃工程可以直接遷移為RTL工程,埠定義會用於建立RTL設計中的頂層模組(該過程不可逆,RTL工程不可遷回I/O規劃工程)。在File選單或Flow Navigator中點選Migrate to RTL
這裡寫圖片描述
Top RTL file設定頂層模組檔案;Netlist format選中Verilog或VHDL;選中write diff buffers會將差分對快取器保留在頂層模組定義中。點選OK遷移完成後,即可以RTL工程為基礎完成FPGA設計,工程中有一個包含I/O約束的XDC檔案。

相關文章