描述
本設(shè)計(jì)咨詢主要介紹一個(gè)錯(cuò)誤的時(shí)鐘偏移計(jì)算導(dǎo)致錯(cuò)誤時(shí)序收斂的問題。
出現(xiàn)問題的情況:
這可能會(huì)影響使用生成時(shí)鐘的設(shè)計(jì),其具有以下特征:
- 使用 Vivado 2018.2.x 及更早版本。
- 用戶生成的時(shí)鐘沒有使用‘-master_clock’定義
- 在同一時(shí)鐘網(wǎng)絡(luò)的并行分支上的層級(jí)引腳上創(chuàng)建的主時(shí)鐘或生成的時(shí)鐘連接至上述用戶生成的時(shí)鐘源引腳
在上述情況下,時(shí)序引擎可能會(huì)為生成的時(shí)鐘選擇錯(cuò)誤的主時(shí)鐘,這可能會(huì)導(dǎo)致在路徑上報(bào)告的不正確時(shí)鐘偏移。
在 Vivado 2018.3 中,定時(shí)器使用正確的主時(shí)鐘,這會(huì)導(dǎo)致相同路徑上不同的時(shí)鐘偏移和不同的簽收時(shí)序。
注:如果用戶生成的時(shí)鐘用‘-master_clock’創(chuàng)建并指向正確的主時(shí)鐘,該問題就不會(huì)出現(xiàn)。
該問題的示例:
在本示例中,datapath 通過 LUT 循環(huán)回到相同的寄存器。寄存器和 LUT 都放在同一個(gè) SLICE 中。
示例時(shí)鐘拓?fù)洌?/p>
示例 Datapath 拓?fù)洌?/p>
請注意,由于缺少源時(shí)鐘路徑,2.560nS 的路徑偏移過大。
由于選擇了錯(cuò)誤的主時(shí)鐘進(jìn)行時(shí)序分析,因此在工具選擇的主時(shí)鐘和用戶生成的時(shí)鐘之間沒有路徑,從而導(dǎo)致較大的時(shí)鐘偏移。
這將迫使路由器在路徑上通過一個(gè)較長的路由繞道來修復(fù)保持違規(guī)。
該路徑通過在 Vivado 2018.3 中重新加載路由后檢查點(diǎn)來顯示違規(guī):
在 Vivado 2018.3 中,由于可以計(jì)算源時(shí)鐘延遲,因此路徑偏移要小得多。
時(shí)鐘偏移會(huì)導(dǎo)致設(shè)置違規(guī),這是由于在該路徑上為了修復(fù) Vivado 2018.2.x 及更早版本中出現(xiàn)的保持違規(guī)而繞道了很長的路由路徑。
可能會(huì)出現(xiàn)問題的典型情況:
在本實(shí)例中,在層級(jí)引腳上創(chuàng)建的主時(shí)鐘不正確。
有問題的時(shí)鐘約束來自輸入時(shí)鐘源選項(xiàng)被設(shè)置為“單端時(shí)鐘支持引腳(默認(rèn))”或“差分時(shí)鐘支持引腳”而 IP 時(shí)鐘輸入沒有連接至頂層輸入端口的時(shí)鐘向?qū)А?/p>
####################################################################################
# Constraints from file : 'pfm_top_clkwiz_kernel_0.xdc'
####################################################################################
current_instance -quiet
current_instance pfm_top_i/static_region/slr1/base_clocking/clkwiz_kernel/inst
create_clock -period 10.000 [get_ports -scoped_to_current_instance clk_in1]
set_input_jitter [get_clocks -of_objects [get_ports -scoped_to_current_instance clk_in1]] 0.100
在時(shí)鐘向?qū)л斎霑r(shí)鐘源設(shè)置為“全緩沖”或“無緩沖”時(shí),層級(jí)引腳上沒有創(chuàng)建主時(shí)鐘。
確認(rèn):
上述問題由‘report_methodology’檢測報(bào)告。
建議始終運(yùn)行“report_methodology”并處理報(bào)告的違規(guī):
TIMING-6#1 Warning
No common primary clock between related clocks
The clocks pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q and microblaze_0_Clk are related (timed together) but they have no common primary clock. The design could fail in hardware. To find a timing path between these clocks, run the following command: report_timing -from [get_clocks pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q] -to [get_clocks microblaze_0_Clk]
Related violations:
TIMING-30#1 Warning
Sub-optimal master source pin selection for generated clock
The generated clock pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q has a sub-optimal master source pin selection, timing can be pessimistic
Related violations:
TIMING-36#1 Warning
Invalid Generated Clock due to missing edge propagation
There is no rising/falling edge propagation between master clock pfm_top_i/static_region/slr1/base_clocking/clkwiz_pcie/inst/clk_in1 to generated clock pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q
Related violations:
Vivado 2018.2.x 和 2018.3 中也會(huì)報(bào)告 TIMING-27 違規(guī)。
TIMING-27 檢查指向?qū)蛹?jí)引腳上不正確的主時(shí)鐘定義,這可能會(huì)導(dǎo)致不安全的時(shí)序。
TIMING-27#1 Warning
Invalid primary clock on hierarchical pin
A primary clock pfm_top_i/static_region/slr1/base_clocking/clkwiz_kernel/inst/clk_in1 is created on an inappropriate internal pin pfm_top_i/static_region/slr1/base_clocking/clkwiz_kernel/inst/clk_in1. It is not recommended to create a primary clock on a hierarchical pin when its driver pin has a fanout connected to multiple clock pins
Related violations:
此外,在 Vivado 2018.2 中,‘report_clock_interaction’也會(huì)顯示不安全的時(shí)鐘對,但在 2018.3 版中不會(huì):
‘check_timing’報(bào)告了一個(gè)在 2018.2.x 中生成的時(shí)鐘的問題:
‘report_clock’報(bào)告 Vivado 為用戶生成的時(shí)鐘使用的實(shí)際主時(shí)鐘。
雖然時(shí)鐘 microblaze_0_Clk 傳播至所生成時(shí)鐘的源引腳,但‘report_clocks’會(huì)按照主時(shí)鐘報(bào)告 pfm_top_i/static_region/slr1/base_clocking/clkwiz_pcie/inst/clk_in1:
Vivado 2018.2.x:
report_clocks pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q
Generated Clock : pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q
Master Source : pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/C
Master Clock : pfm_top_i/static_region/slr1/base_clocking/clkwiz_pcie/inst/clk_in1
Divide By : 8
Generated Sources : {pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q}
Vivado 2018.3:
report_clocks pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q
Generated Clock : pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q
Master Source : pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/C
Master Clock : microblaze_0_Clk
Divide By : 8
Generated Sources : {pfm_top_i/static_region/slr1/mgmt_debug_bridge/inst/axi_jtag/inst/u_jtag_proc/tck_i_reg/Q}
解決方案
該問題將在 Vivado 2018.3 中修復(fù)。
出現(xiàn)該問題時(shí),通常的解決方法是在創(chuàng)建用戶生成的時(shí)鐘時(shí)指定主時(shí)鐘名:
create_generated_clock -source [get_pins -filter REF_PIN_NAME=~C -of_objects [get_cells -hierarchical -filter {NAME =~ "*/u_jtag_proc/tck_i_reg*"}]] -divide_by 8 [get_pins -filter REF_PIN_NAME=~Q -of_objects [get_cells -hierarchical -filter {NAME =~ "*/u_jtag_proc/tck_i_reg*"}]] -master_clock microblaze_0_Clk
但在本示例設(shè)計(jì)中,最初的問題是沒有正確配置時(shí)鐘向?qū)А?/p>
對于該設(shè)計(jì),需要重新運(yùn)行時(shí)鐘向?qū)Р⒓m正配置。
常見問題解答:
1) 該問題會(huì)影響 Vivado 的哪些版本?
該問題會(huì)影響 Vivado 2018.2 及更早版本。
2) 如果一個(gè)設(shè)計(jì)使用 2018.2 及更早 Vivado 版本符合時(shí)序要求,那用戶對時(shí)序覆蓋范圍應(yīng)該有多大的信心?(如果他們不想升級(jí)至最新 Vivado 版本,即 2018.3)
該漏洞主要針對錯(cuò)誤的/部分時(shí)鐘定義。因此,如果設(shè)計(jì)有適當(dāng)?shù)募s束,并且符合時(shí)序要求,那就不應(yīng)該有問題。
要進(jìn)行完整性檢查,您可以運(yùn)行以下命令并查找與時(shí)序相關(guān)的警告/重要警告。
- 運(yùn)行‘report_clock’命令并驗(yàn)證 所有主時(shí)鐘(‘create_clock’約束)是否都在 I/O 端口上。
- 運(yùn)行‘report_method’命令并驗(yàn)證在設(shè)計(jì)中是不是沒有 Timing-6、Timing-27、Timing-30 和 Timing-36 警告。
- 建議使用‘master_clock’選項(xiàng)編輯‘generated_clock’約束。
注:請參閱 (UG903) 和 (UG835),了解更多詳情。
3) 在 Vivado 2018.3 中,用戶是需要為生成的時(shí)鐘約束使用‘master_clock’選項(xiàng),還是這只是在早期 Vivado 版本中避免該問題的解決方法?
該問題已在 Vivado 2018.3 中修復(fù)。
根據(jù) Xilinx 方法指南,始終建議為‘generated_clock’約束使用‘master_clock’選項(xiàng)。這個(gè)建議不僅僅只針對早期的 Vivado 版本。
4) 將設(shè)計(jì)從 Vivado 2018.2 及更早版本升級(jí)至 Vivado 2018.3 版有多安全?
該問題已在 Vivado 2018.3 中修復(fù)。
將設(shè)計(jì)從舊 Vivado 版本升級(jí)至最新的 Vivado 版本(即 2018.3)沒有風(fēng)險(xiǎn)。
5) 在我的設(shè)計(jì)中有一個(gè)上述警告,但是電路板上一切正常,時(shí)序得分為 0,忽略該警告安全嗎?
Xilinx 建議搞清楚警告的根本原因并正確修復(fù)。
重要通知:
Timing-6:如果該警告發(fā)生在介紹部分列出的條件下,就需要應(yīng)用上述解決方法來解決該問題。
-
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120006 -
路由器
+關(guān)注
關(guān)注
22文章
3707瀏覽量
113536 -
Slice
+關(guān)注
關(guān)注
0文章
7瀏覽量
8055 -
Vivado
+關(guān)注
關(guān)注
19文章
808瀏覽量
66326 -
時(shí)鐘網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
16瀏覽量
6561
發(fā)布評論請先 登錄
相關(guān)推薦
評論