IOB約束
參考《插入IO暫存器和位置約束---lattice&diamond》,推薦的方法是:
1、在strategy設定【Map Design-IO Registering】為Auto
2、修改程式碼介面描述,新增/* synthesis syn_useioff = 1*/語句(也可以不加,見第3條),如:
1 input VSRC_CLK /* synthesis syn_useioff = 1*/,//I1,
2 output wire VSRC_RESET /* synthesis syn_useioff = 1*/,//O1,
3 input VSRC_VS /* synthesis syn_useioff = 1*/,//I1,
4 input VSRC_DE /* synthesis syn_useioff = 1*/,//I1,
5 input [15:0] VSRC_D /* synthesis syn_useioff = 1*/,//I16,
3、確保輸入訊號不被優化,可使用/* synthesis syn_preserve=1 */,將輸入打拍的訊號保留住。(注:這個才是關鍵,工具有時不理解為何要將輸入訊號多打幾拍,就擅自幫我們將訊號給優化了,這些需要保留的訊號,都要使用preserve進行保留。)
1 //---------------------------------------------------------------------------- 2 // Register & Wire Definition 3 //---------------------------------------------------------------------------- 4 reg [5:0] hdmi_vs_dy,hdmi_hs_dy,hdmi_de_dy; 5 reg [15:0] hdmi_dat_d0/* synthesis syn_preserve=1 */; 6 reg [15:0] hdmi_dat_d1/* synthesis syn_preserve=1 */; 7 reg [15:0] hdmi_dat_d2/* synthesis syn_preserve=1 */;
檢查IOB是否符合預期
方法1、開啟【Tools-Spreadsheet View】,點選“Cell Mapping”選項卡,檢視對應輸入輸出管腳的PIO Register是否為True。
方法2、也可以使用Follrpaln和Physical View檢視:
1、在Map之後,開啟Floorplan View,使用Ctrl+f進行net的查詢,可以按 video_input_top_16b_inst0/video_in_inst/hdmi_dat_d0 方式,從TOP層層下去找到第一級暫存器訊號名。
2、找到net之後,右鍵,使用Physical View檢視。
管腳VSRC_0_D[4]旁邊的字尾為MGIOL的模組,就是PIO Register。若沒放入IOB,則字首IOL_的模組不是藍色。
檢視訊號延時
在Physical View,查詢某個PIN腳訊號,比如VSRC_1_CLK(型別選擇component),然後點選該模組下邊的net,右鍵Pin Pair Delay可檢視該訊號延時。
關於時序收斂
參考官網的幫助文件,Timing Closure 3.10。
該文件102頁,關於時序收斂的一些建議:
1、綜合Syplify Pro設定:
- 開啟Pipelining and retiming
- 關閉Resource Sharing
- 可以使用sdc檔案
2、檢視Synplify Pro的報告,關注時脈頻率的估計值。
3、Map設定:檢測未約束的連線和路徑;設定full name;Report Style選擇Error Timing Report,這樣只顯示error的路徑,方便快速定位問題。
4、第36頁給出優化時序的建議:
5、使用GSR資源。Syplify設定裡建議關閉,在MAP設定裡開啟。
6、使用PAR_ADJ關鍵字,使得在PAR階段按過約束的頻率進行P&R,但在TRACE分析時按正常頻率分析(第46頁、71頁)。
7、嘗試將關鍵路徑UGROUP(第82頁),以及97頁的Packing相關邏輯。
8、關注logic levels是否過多。
進一步的詳細幫助資訊,可下載13.8M的《Lattice_Diamond_3_10_3_Help.pdf》。
《Lattice_Diamond_3_10_3_Help.pdf》第496頁,給出UGROUP的具體用法,參考該方法進行位置約束如下:
297M高速設計幾點原則:
1、FIFO或RAM要設定輸出寄存(Lattice預設打1拍,寄存後,相當於打2拍輸出)
2、涉及大位寬比較時,使用減法器替代加法器,就只用和0進行比較。
3、後端約束使用位置約束(Lattice使用UGROUP)
4、計數器不能大於11bit,大於的就只能拆分。
5、一些相對固定的變數,比如解析度res_mode,顯示模式disp_mode,可以在後端約束裡,用BLOCK將其進行時序忽略。
=======================
by NicoWei
2019-3-16 22:20:08
=======================