對於一些參數、模擬器和 RTL 編碼樣式的組合,此模組在模擬中的延遲偏離了預期的延遲:一個頻率。實際的硬體會顯示預期的延遲。
舉例來說,如果驅動 DSP 區塊的頻率是產生輸入資料的頻率延遲版本,那麼輸入頻率的模擬延遲會比輸入資料多。
若要解決此問題,您必須確保產生 DSP 區塊輸入資料的頻率與 DSP 區塊的輸入頻率之間的延遲會因輸入資料上的延遲而平衡。或者,相較于 DSP 區塊的輸入頻率,確保輸入資料在稍後的絕對時間到達,或是較晚的模擬三角延遲時間。
請注意,與資料路徑相比,頻率路徑上的作業陳述較多,這些路徑之間的模擬三角延遲差異。
若要達成此目標,請修改您的測試台:
- 確保 產生原始 DSP 區塊輸入的頻率與輸入原生 DSP 區塊的頻率訊號完全相同。
- 如果 #1 不可行,請 延遲 相對於頻率的輸入資料。
例如,請考慮下列原始 RTL 代碼:
原始 RTL:
clk_gen:程式
開始
clk_orig <= \'0\';
等待 5 ns;
clk_orig <= \'1\';
等待 5 ns;
結束程式;
...
如果 (rising_edge (clk_orig)) 然後
ax <= ax 1;
ay <= ay - 1;
結束,如果
mac_test_bad_style:mult_acc
埠地圖 (
...
ax => std_logic_vector(ax),--[in]
ay => std_logic_vector(ay),--[in]
clk => (「00」 &clk_orig),--[in]
結果 =>結果a2, -- [輸出]
...
);
結果會顯示比預期少一個頻率的延遲。請注意,倍增器\的 clk 埠作業中「00 &clk」的組別,從產生輸入資料的「clk_orig」中增加了模擬三角延遲。
可能的解決方法包括:
範例 1,建議:在整個過程中使用 3 位頻率
您可以直接產生倍增器\的 3 位頻率,並使用主動位來計時輸入資料:
clk_gen:程式
開始
clk3bit <= \'000\';
等待 5 ns;
clk3bit <= \'001\';
等待 5 ns;
結束程式;
...
如果 (rising_edge (clk3bit (0)) 然後
ax <= ax 1;
ay <= ay - 1;
結束,如果
mac_test_bad_style:mult_acc
埠地圖 (
...
ax => std_logic_vector(ax),--[in]
ay => std_logic_vector(ay),--[in]
clk => (clk_3bit),-- [in]
結果 =>結果a2, -- [輸出]
...
);
範例 2,替代建議:在輸入資料中加入對應的延遲
\'clk => (「00」 &clk_orig)\' 聲明使 \'clk」埠有額外的模擬三角延遲,因為 \'clk_orig\'即驅動資料。為了克服此問題,您可以使用原始的clk_gen程式,並且僅透過分配對帳單將模擬三角延遲新增到資料中。
clk_gen:程式(與原始程式相同)
ax_del <= ax;
ay_del<=ay;
mac_test_bad_style:mult_acc
埠地圖 (
...
ax => std_logic_vector(ax_del),--[in]
ay => std_logic_vector(ay_del),--[in]
clk => (「00」 &clk_orig),--[in]
結果 =>結果a2, -- [輸出]
...
);