Untuk beberapa kombinasi parameter, simulator, dan gaya pengkodean RTL, latensi blok ini dalam simulasi menyimpang dari latensi yang diharapkan oleh , - satu clock. Perangkat keras aktual menunjukkan latensi yang diharapkan.
Perilaku ini akan terlihat, misalnya, jika clock yang menggerakkan blok DSP adalah versi clock yang tertunda yang menghasilkan data input, sehingga memperkenalkan lebih banyak penundaan simulasi untuk clock input daripada untuk data yang diinput.
Untuk mengatasi masalah ini, Anda harus memastikan bahwa keterlambatan antara clock yang menghasilkan data input ke blok DSP, dan clock input blok DSP, diseimbangkan dengan penundaan pada data yang diinput. Atau, pastikan data input tiba pada waktu absolut nanti, atau waktu tunda delta simulasi di kemudian hari, dibandingkan dengan clock input blok DSP.
Perhatikan bahwa hal-hal seperti pernyataan penugasan yang lebih banyak pada jalur clock vs. jalur data akan menyebabkan perbedaan penundaan delta simulasi di antara jalur tersebut.
Untuk mencapai hal ini, modifikasi testbench Anda untuk:
- Pastikan clock menghasilkan input ke blok DSP Asli adalah sinyal yang persis sama dengan input clock ke blok DSP Asli.
- Jika #1 tidak memungkinkan, tunda data input relatif terhadap clock.
Misalnya, pertimbangkan kode RTL asli berikut:
RTL asli:
clk_gen: proses
Mulai
clk_orig <= \'0\';
menunggu 5 ns;
clk_orig <= \'1\';
menunggu 5 ns;
proses akhir;
...
jika (rising_edge(clk_orig)) maka
ax <= ax 1;
ay <= ay - 1;
akhir jika
mac_test_bad_style: mult_acc
peta port (
...
ax => std_logic_vector(ax), -- [in]
ay => std_logic_vector(ay), -- [in]
clk => ("00" & clk_orig), -- [in]
resulta => resulta2, -- [out]
...
);
resulta2 akan menunjukkan satu clock kurang latensi dari yang diharapkan. Perhatikan bahwa penggabungan "00 & clk" dalam penetapan port clk multiplier\' menambahkan penundaan delta simulasi dari "clk_orig" yang menghasilkan data input.
Kemungkinan penanganan masalah meliputi:
Contoh 1, Rekomendasi: Gunakan clock 3-bit di seluruh area
Anda dapat menghasilkan clock 3-bit multiplier\ secara langsung dan menggunakan bit aktif untuk clock data yang diinput:
clk_gen: proses
Mulai
< clk3bit= \'000\';
menunggu 5 ns;
< clk3bit= \'001\';
menunggu 5 ns;
proses akhir;
...
jika (rising_edge(clk3bit(0)) maka
ax <= ax 1;
ay <= ay - 1;
akhir jika
mac_test_bad_style: mult_acc
peta port (
...
ax => std_logic_vector(ax), -- [in]
ay => std_logic_vector(ay), -- [in]
clk => (clk_3bit), -- [in]
resulta => resulta2, -- [out]
...
);
Contoh 2, Rekomendasi Alternatif: tambahkan penundaan terkait ke data yang diinput
Pernyataan \'clk => ("00" & clk_orig)\' menyebabkan port \'clk" memiliki penundaan delta simulasi tambahan dari \'clk_orig\' yang\'s mendorong data. Untuk mengatasi hal ini, Anda dapat menggunakan proses clk_gen asli dan menambahkan penundaan delta simulasi ke data dengan pernyataan penugasan.
clk_gen: proses (sama seperti aslinya)
ax_del <= kapak;
ay_del<=ay;
mac_test_bad_style: mult_acc
peta port (
...
ax => std_logic_vector(ax_del), -- [in]
ay => std_logic_vector(ay_del), -- [in]
clk => ("00" & clk_orig), -- [in]
resulta => resulta2, -- [out]
...
);