【博客導航】 【導航】FPGA相關html
參考《插入IO寄存器和位置約束---lattice&diamond》,推薦的方法是:後端
一、在strategy設置【Map Design-IO Registering】爲Autoapp
二、修改代碼接口描述,添加/* synthesis syn_useioff = 1*/語句(也能夠不加,見第3條),如:ide
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,
三、確保輸入信號不被優化,可以使用/* 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 */;
方法一、打開【Tools-Spreadsheet View】,點擊「Cell Mapping」選項卡,查看對應輸入輸出管腳的PIO Register是否爲True。post
方法二、也可使用Follrpaln和Physical View查看:優化
一、在Map以後,打開Floorplan View,使用Ctrl+f進行net的查找,能夠按 video_input_top_16b_inst0/video_in_inst/hdmi_dat_d0 方式,從TOP層層下去找到第一級寄存器信號名。spa
二、找到net以後,右鍵,使用Physical View查看。設計
管腳VSRC_0_D[4]旁邊的後綴爲MGIOL的模塊,就是PIO Register。若沒放入IOB,則前綴IOL_的模塊不是藍色。code
在Physical View,查找某個PIN腳信號,好比VSRC_1_CLK(類型選擇component),而後點擊該模塊下邊的net,右鍵Pin Pair Delay可查看該信號延時。
參考官網的幫助文檔,Timing Closure 3.10。
該文檔102頁,關於時序收斂的一些建議:
一、綜合Syplify Pro設置:
二、查看Synplify Pro的報告,關注時鐘頻率的估計值。
三、Map設置:檢測未約束的鏈接和路徑;設置full name;Report Style選擇Error Timing Report,這樣只顯示error的路徑,方便快速定位問題。
四、第36頁給出優化時序的建議:
五、使用GSR資源。Syplify設置裏建議關閉,在MAP設置裏打開。
六、使用PAR_ADJ關鍵字,使得在PAR階段按過約束的頻率進行P&R,但在TRACE分析時按正常頻率分析(第46頁、71頁)。
七、嘗試將關鍵路徑UGROUP(第82頁),以及97頁的Packing相關邏輯。
八、關注logic levels是否過多。
進一步的詳細幫助信息,可下載13.8M的《Lattice_Diamond_3_10_3_Help.pdf》。
《Lattice_Diamond_3_10_3_Help.pdf》第496頁,給出UGROUP的具體用法,參考該方法進行位置約束以下:
297M高速設計幾點原則:
一、FIFO或RAM要設置輸出寄存(Lattice默認打1拍,寄存後,至關於打2拍輸出)
二、涉及大位寬比較時,使用減法器替代加法器,就只用和0進行比較。
三、後端約束使用位置約束(Lattice使用UGROUP)
四、計數器不能大於11bit,大於的就只能拆分。
五、一些相對固定的變量,好比分辨率res_mode,顯示模式disp_mode,能夠在後端約束裏,用BLOCK將其進行時序忽略。
=======================
by NicoWei
2019-3-16 22:20:08
=======================