深入講解set_multicycle_path多週期約束---實戰篇

設計一個FIFO並且在VIVADO中進行時序約束和時序分析。

1. demo背景
設計一個異步的FIFO;
2. FIFO時鐘的週期約束
create_clock -period 2.500 -name fifo_wr_clk -waveform {0 1.25} [get_ports fifo_wr_clk] ** FIFO寫時鐘爲400MHZ**
create_clock -period 10 -name fifo_rd_clk -waveform {0 5} [get_ports fifo_rd_clk] ** FIFO寫時鐘爲100MHZ**
3. 沒有多週期約束時
(1)從慢時鐘域到快時鐘域的setup分析在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
結論:未加任何約束時,其發射沿爲0ns處,捕獲沿爲2.5ns處。即400MHZ時鐘的第2個上升沿。當然以上路徑是時序是不滿足要求的,它的slack爲負的。
(2)從慢時鐘域到快時鐘域的hold分析
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
結論:未加任何約束時,其發射沿爲0ns處,捕獲沿爲0ns處。
(3)從快時鐘域到慢時鐘域的setup分析
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
結論:未加任何約束時,捕獲沿在目的時鐘的10ns處,發射沿則在源時鐘的7.5ns處,即相對於10ns的前一個時鐘沿。
(4)從快時鐘域到慢時鐘域的hold分析
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
結論:未加任何約束時,其發射沿爲0ns處,捕獲沿爲0ns處。
(5)小結
在這裏插入圖片描述
在這裏插入圖片描述
以上兩張圖可以看到沒有進行多週期約束,時序違規了。
4. 加入多週期約束時
fifo_wr_clk時鐘爲400MHZ而讀時鐘爲100MHZ,所以進行如下約束。
set_multicycle_path 4 -setup -start -from [get_clocks fifo_wr_clk] -to [get_clocks fifo_rd_clk]
set_multicycle_path 3 -hold -start -from [get_clocks fifo_wr_clk] -to [get_clocks fifo_rd_clk]
set_multicycle_path 4 -setup -end -from [get_clocks fifo_rd_clk] -to [get_clocks fifo_wr_clk]
set_multicycle_path 3 -hold -end -from [get_clocks fifo_rd_clk] -to [get_clocks fifo_wr_clk]
(1)從慢時鐘域到快時鐘域的setup分析
在這裏插入圖片描述
結論:加了約束之後,其發射沿爲0ns處,捕獲沿爲10ns處。即400MHZ時鐘的第4個上升沿。可以看到它的slack非常充裕。
(2)從慢時鐘域到快時鐘域的hold分析
在這裏插入圖片描述
結論:加任何約束後,其發射沿爲0ns處,捕獲沿爲0ns處。
(3)從快時鐘域到慢時鐘域的setup分析
在這裏插入圖片描述
結論:加了約束後,捕獲沿在目的時鐘的10ns處,發射沿則在源時鐘的0ns處,其slack也是非常充裕的。
(4)從快時鐘域到慢時鐘域的hold分析
在這裏插入圖片描述
結論:加任何約束後,其發射沿爲0ns處,捕獲沿爲0ns處。
(5)小結
在這裏插入圖片描述
在這裏插入圖片描述
以上兩張圖可以看到加入多週期約束之後,時序沒有違規現象,比較容易滿足。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章