前言
對於包含PS和PL的設計,兩者的數據交互PL必然會用到PS端的時鍾。
對於FCLK(PS端時鍾輸入到PL端)的約束,此時鍾的基礎約束已在IP中產生。以下想約束其異步時鍾的時鍾組特性。
注意事項:FCLK的名字在綜合時不可見,在適配階段才可見,所以對於約束文件的屬性需要選擇只在適配階段有效,否則綜合時報警告(感覺無傷大雅)。
但PL中又有別的時鍾,與FCLK是異步的,而且這些時鍾之間並不需要進行時序分析。
則有兩種選擇,(1)約束false路徑。但時鍾之間的路徑是雙向的,則需要正着約束一下,反着也要約束,比較麻煩。
(2)使用clock group約束。可以划分時鍾域,時序分析只會分析時鍾域中的情況,不會分析跨時鍾域部分。
而跨時鍾域部分通常由開發者代碼保證不會產生亞穩態。
流程
(1)首先我們並不清楚fclk在綜合編譯后叫啥名字,所以首先就是需要獲取fclk名字。
打開適配后的設計,點擊編輯時序約束。
找尋時鍾。
在下圖中點擊Find查找所有時鍾,左下角就會顯示出時鍾名,添加到右側,就得到了command中的名字。當然也可直接使用圖形工具進行相應的約束操作。
約束語句如下:三個時鍾組互不相關,跨時鍾域處理需要代碼保證。
set_clock_groups -async -group [get_clocks -include_generated_clock i_clk] \
-group [get_clocks -include_generated_clock i_adc_dclk_p] -group [get_clocks clk_fpga_0]
含義說明:i_clk和i_adc_dclk_p調用了兩個不同的pll,兩者的輸出時鍾不曉得名字就可以用上述語法進行約束。
(2)設置時序約束文件只在適配階段才起作用。
(3)重編譯檢查勞動成果。對時鍾相關性進行分析,可以看到異步路徑已經被STA忽略。
以上。