其實在FPGA的開發中理想情況下FPGA之間的資料要通過暫存器輸入、輸出,這樣才能使得延時最小,從而更容易滿足建立時間要求。我們在FPGA內部硬體結構中得知,IOB內是有暫存器的,且IOB內的暫存器比FPGA內部的暫存器更靠近外部的輸出管腳,這樣就能夠得到更小的延時,從而使時序更好。我們可以看到在沒有指定的情況下暫存器的對映都是隨機的,那麼問題來了,如何才能指定暫存器對映到IOB中呢?我們依然用非同步復位D觸發器的例子來給大家演示。
如圖1所示,我們回到工程介面點選“Assignment Editor”圖示來約束暫存器對映的位置。
圖 1
如圖2所示,在開啟的“Assignment Editor”介面中點選“To”下面的“<<new>>”新增要約束的項。
圖 2
點選如圖3所示的望遠鏡圖示,開啟“Node Finder”。
圖 3
在開啟的“Node Finder”介面中我們找到訊號的輸入key_in,如圖4所示,根據序號順序,在①處的“Named :”選項框中輸入“*”,點選 ②處的“List”,在③處的“Node Found :”列表中就會列出名為key_in 的訊號,雙擊③處的key_in 訊號或點選圖示④,key_in 訊號就被新增到⑤處的“Selected Nodes:”中了。如果我們想取消⑤處選擇的訊號則在“Selected Nodes:”選中該訊號後點選圖示⑥即可。設定完畢後點選“OK”退出。
圖 4
如圖5所示,設定“Assignment Name”,下拉選單找到“Fast Input Register(Accepts wildcards/groups)”,這是設定將暫存器對映在輸入IOB中的約束,如果設定將暫存器對映在輸出IOB中則選擇“Fast Output Register(Accepts wildcards/groups)”。
圖 5
如圖7所示,設定“Value”的值為“on”。
圖 6
全部設定完成後的結果如圖 22-90所示。
圖 7
點選“Start Compilation”圖示全編譯進行佈局佈線,否則無法重新對映資源。此時會彈出如圖8所示的對話方塊,提示是否要儲存更改,選擇“Yes”後會執行佈局佈線。
圖 8
當佈局佈線重新完成對映後我們再來看看Chip Planner檢視,如圖9所示,我們發現整個檢視都沒有什麼明顯的變化,難道是對映失敗了?
圖 9
如圖10所示,既然不能用肉眼直接看到,那我們可以在Chip Planner介面右上角紅色框處的“Find what”處搜尋定位訊號在版圖模型中的位置,如果沒有找到“Find what”搜尋框,按住鍵盤“Ctrl + F”就會自動出現。
圖 10
在圖11中紅色區域中的“Find what”搜尋RTL程式碼中的訊號名“key_in”,然後點選“List”。
圖 11
點選圖12所示的“key_in”可以看到在版圖模型的對應位置高亮顯示,這個位置就是FPGA的IOB區域。
圖 12
如圖13所示,將對映的IOB區域放大,其中①為我們key_in的輸入端,而②則是暫存器所對映的新位置。
圖 13
如圖14所示,我們雙擊②處的暫存器,觀察其內部結構,發現IOB中的暫存器已經高亮顯示了,說明真的對映上了,實現了我們的要求。
圖 14
歡迎加入FPGA技術學習交流群,本群致力於為廣大FPGAer提供良好的學習交流環境,不定期提供各種本行業相關資料!QQ交流群號:450843130