Port keluaran transceiver reconfiguration \'reconfig_busy\' mungkin macet, ditegaskan tinggi setelah penegasan reset. Saluran transiver yang terhubung ke kontroler rekonfigurasi yang terpengaruh mungkin juga terjebak dalam reset. Port keluaran \'reconfig_busy\' tetap macet bahkan setelah mengatur ulang pengontrol konfigurasi ulang; hanya memprogram ulang perangkat yang dapat menyelesaikan masalah.
Gejala ini dapat disebabkan oleh struktur pengaturan ulang internal pengonfigurasi Ulang Transceiver. Penyetelan ulang asynchronous pada logika yang mendorong address bus RAM M20K dapat menyebabkan perambatan logika asynchronous. Hal ini dapat menyebabkan beberapa baris alamat ke dalam M20K menjadi tegas secara bersamaan, yang dapat menyebabkan pembagian muatan antara sel bit, merusak konten M20K.
Kerusakan ini memengaruhi perangkat Stratix® V dan Arria® V GZ Transceiver Reconfiguration Controller karena berisi prosesor Nios® II yang digunakan untuk kalibrasi PMA, dan kode program prosesor\'s disimpan dalam RAM M20K. Jika kerusakan terjadi dalam memori program Nios® II, hal ini dapat menyebabkan prosesor terkunci, sehingga port output reconfig_busy menjadi macet. Pemulihan dari situasi ini hanya dapat dilakukan dengan memprogram ulang perangkat, karena konten M20K hanya dimuat selama pemrograman perangkat.
Perbaikan untuk masalah ini akan mengubah kontroler reset internal dan mengatur ulang struktur Transceiver Reconfiguration Controller untuk menggunakan reset sinkron, serta menghapus port clock_enable M20K selama kondisi reset.
Perbaikan akan tersedia dalam versi perangkat lunak Quartus® II di masa mendatang. Patch dapat disediakan untuk versi perangkat lunak Quartus II sebelumnya dengan mengirimkan permintaan layanan di mySupport. Jika diperlukan solusi dengan segera, perbaikan dapat diterapkan secara manual menggunakan instruksi berikut.
Ada 9 file yang perlu ditambahkan atau dimodifikasi:
-
altera_reset_controller_early_ce_mod.v (tambahkan)
-
altera_reset_synchronizer_early_ce_mod.v (tambahkan)
-
File QIP yang terkait dengan Transceiver Reconfiguration Controller (modifikasi)
-
alt_xcvr_reconfig.sv (modifikasi)
-
alt_xcvr_reconfig_soc.sv (modifikasi)
-
alt_xcvr_reconfig_cpu.v (modifikasi)
-
alt_xcvr_reconfig_cpu_ram.sv (modifikasi)
-
sv_xrbasic_lif_csr.sv (modifikasi)
-
sv_xcvr_reconfig_mif_avmm.sv (modifikasi)
9 berkas ini harus berada di direktori tempat Transceiver Reconfiguration Controller dihasilkan.
Unduh altera_reset_controller_early_ce_mod.v dan letakkan di direktori tempat file Transceiver Reconfiguration disimpan:
Download altera_reset_synchronizer_early_ce_mod.v dan letakkan di direktori tempat file Rekonfigurasi Transceiver disimpan:
Untuk menambahkan kedua file ini ke desain Anda, temukan dan modifikasi berkas .qip yang terkait dengan instans Transceiver Reconfiguration Controller dan tambahkan dua baris berikut ke file:
VERILOG_FILE nama -library set_global_assignment "LIBRARY_NAME" [file join $::quartus(qip_path) "LIBRARY_PATH/altera_reset_controller_early_ce_mod.v"]
set_global_assignment VERILOG_FILE -library "LIBRARY_NAME" -library [file join $::quartus(qip_path) "LIBRARY_PATH/altera_reset_synchronizer_early_ce_mod.v"]
Dalam dua baris di atas, modifikasi LIBRARY_NAME dan LIBRARY_PATH untuk mencocokkan entri lain dalam berkas .qip Transceiver Reconfiguration Controller.
Untuk alt_xcvr_reconfig.sv, buat modifikasi berikut:
-
Temukan instantiasi modul alt_xcvr_resync, dan balikkan koneksi antara port 'd' dan 'reset'. Setelah dimodifikasi, instantiasi akan terlihat seperti berikut:
alt_xcvr_resync #(
. INIT_VALUE (1)
) inst_reconfig_reset_sync (
.clk (mgmt_clk_clk ),
.d (mgmt_rst_reset ),
.reset (1\'b0 ),
.q (r_mgmt_rst_reset)
);
Untuk alt_xcvr_reconfig_soc.sv, buat modifikasi berikut:
Tambahkan definisi kawat berikut di dekat bagian atas modul:
cpu_reset_req kawat;
Temukan instantiasi modul alt_xcvr_reconfig_cpu dan tambahkan port berikut:
.ram_ce (cpu_reset_req),
Temukan instantiasi modul alt_xcvr_reconfig_cpu_ram dan tambahkan port berikut:
.ram_ce (cpu_reset_req),
Untuk alt_xcvr_reconfig_cpu.v, buat modifikasi berikut:
-
Tambahkan port berikut ke tingkat atas:
ram_ce kabel keluaran,
-
Tambahkan kode berikut ke modul:
m20k_gate kawat;
altera_ram_clock_enable kawat;
menetapkan altera_ram_clock_enable = ~ m20k_gate;
menetapkan ram_ce = altera_ram_clock_enable;
-
Temukan instantiasi altera_reset_controller dan ubah ini menjadi instantiation dari altera_reset_controller_early_ce_mod. Tambahkan port m20k_gate ke instantiasi ini, dan hubungkan ke sinyal m20k_gate. Setelah membuat modifikasi ini, instantiasi akan terlihat seperti berikut:
altera_reset_controller_early_ce_mod #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("penahan"),
. SYNC_DEPTH (2)
) rst_controller (
.reset_in0 (~reset_reset_n), // reset_in0.reset
.clk (clk_clk), // clk.clk
.reset_out (reconfig_ctrl_reset_reset), // reset_out.reset
.m20k_gate (m20k_gate),
.reset_in1 (1\'b0), // (dihentikan)
.reset_in2 (1\'b0), // (dihentikan)
.reset_in3 (1\'b0), // (dihentikan)
.reset_in4 (1\'b0), // (dihentikan)
.reset_in5 (1\'b0), // (dihentikan)
.reset_in6 (1\'b0), // (dihentikan)
.reset_in7 (1\'b0), // (dihentikan)
.reset_in8 (1\'b0), // (dihentikan)
.reset_in9 (1\'b0), // (dihentikan)
.reset_in10 (1\'b0), // (dihentikan)
.reset_in11 (1\'b0), // (dihentikan)
.reset_in12 (1\'b0), // (dihentikan)
.reset_in13 (1\'b0), // (dihentikan)
.reset_in14 (1\'b0), // (dihentikan)
.reset_in15 (1\'b0) // (dihentikan)
);
Untuk file alt_xcvr_reconfig_cpu_ram.sv , buat modifikasi berikut:
-
Tambahkan port input berikut:
ram_ce input,
-
Temukan instantiasi altsyncram dan modifikasi port clocken0 untuk menghubungkannya ke port input ram_ce baru:
.clocken0 (ram_ce),
-
Modifikasi definisi clock_enable_input/output_a/b defparam sebagai berikut:
altsyncram_component.clock_enable_input_a = "NORMAL",
altsyncram_component.clock_enable_input_b = "NORMAL",
altsyncram_component.clock_enable_output_a = "NORMAL",
altsyncram_component.clock_enable_output_b = "NORMAL",
Untuk file sv_xrbasic_lif_csr.sv , buat modifikasi berikut:
-
Temukan blok selalu berurutan yang mengontrol alamat saluran logis. Blok ini selalu dapat diidentifikasi dengan komentar "//logical channel register" di atasnya. Hapus kondisi reset dari daftar sensitivitas. Setelah dimodifikasi, awal blok selalu akan terlihat seperti berikut:
register saluran logis
selalu @(posedge reconfig_clk) dimulai
jika (reset == 1) dimulai
...
-
Temukan blok selalu berurutan yang mengontrol register alamat rekonfigurasi asli. Blok selalu ini dapat diidentifikasi dengan komentar "//register alamat rekonfigurasi asli, dapat diinterpretasikan sebagai alamat offset kanal, atau alamat fisik" di atasnya. Hapus kondisi reset dari daftar sensitivitas. Setelah dimodifikasi, awal blok selalu akan terlihat seperti berikut:
register alamat rekonfigurasi asli, dapat diinterpretasikan sebagai alamat offset saluran, atau alamat fisik
selalu @(posedge reconfig_clk) dimulai
jika (reset == 1) dimulai
...
Untuk berkas sv_xcvr_reconfig_mif_avmm.sv , perubahan ini hanya diperlukan jika rekonfigurasi saluran atau PLL diaktifkan di Transceiver Reconfiguration Controller Megawizard GUI. Buat modifikasi berikut:
-
Temukan blok selalu berurutan yang memiliki komentar "//Avalon keluaran dan penyimpanan internal" di atasnya dan hapus kondisi reset dari daftar sensitivitas. Setelah dimodifikasi, awal blok selalu akan terlihat seperti berikut:
output Avalon dan penyimpanan internal
selalu @(posedge clk )
Mulai
jika (reset) dimulai
...
Setelah semua perubahan ini dibuat, desain Anda harus dikompresi ulang.