พอร์ตเอาต์พุตของตัวรับส่งสัญญาณใหม่ \'reconfig_busy\' อาจติดอยู่ และถูกยืนยันไว้สูงหลังจากการยืนยันการรีเซ็ต แชนเนลตัวรับส่งสัญญาณที่เชื่อมต่อกับคอนโทรลเลอร์การกําหนดค่าใหม่ที่ได้รับผลกระทบอาจติดอยู่ในการรีเซ็ต พอร์ตเอาต์พุต \'reconfig_busy\' ยังคงติดอยู่ แม้ว่าหลังจากรีเซ็ตคอนโทรลเลอร์การกําหนดค่าใหม่แล้ว ก็ตาม มีเพียงการตั้งโปรแกรมใหม่อุปกรณ์เท่านั้นที่สามารถแก้ไขปัญหาได้
อาการนี้อาจเกิดจากโครงสร้างรีเซ็ตภายในของคอนโทรลเลอร์การกําหนดค่าตัวรับส่งสัญญาณใหม่ การตรวจสอบการรีเซ็ตแบบอะซิงโครนัสกับตรรกะที่ขับเคลื่อนบัสแอดเดรสของ M20K RAM อาจทําให้เกิดการเผยแพร่ลอจิกแบบอสมวาร ซึ่งอาจทําให้เกิดบรรทัดที่อยู่หลายบรรทัดใน M20K เพื่อให้มั่นใจได้พร้อมกัน ซึ่งอาจทําให้เกิดการชาร์จร่วมกันระหว่างเซลล์บิตทําให้เกิดความเสียหายต่อเนื้อหาของ M20K
ความเสียหายนี้มีผลต่อStratix® V และ Arria® V GZ Devices Transceguration Controller เนื่องจากมีโปรเซสเซอร์ Nios® II ที่ใช้สําหรับการสอบเทียบ PMA และรหัสโปรแกรมของโปรเซสเซอร์จะถูกจัดเก็บไว้ใน M20K RAM หากความเสียหายเกิดขึ้นภายในหน่วยความจําของโปรแกรม Nios® II อาจทําให้โปรเซสเซอร์ล็อกได้ ส่งผลให้พอร์ตเอาต์พุตreconfig_busyค้างอยู่ในระดับสูง การกู้คืนจากสถานการณ์นี้ทําได้โดยการตั้งโปรแกรมใหม่อุปกรณ์เท่านั้น เนื่องจากเนื้อหา M20K จะถูกโหลดในระหว่างการตั้งโปรแกรมอุปกรณ์เท่านั้น
การแก้ไขสําหรับปัญหานี้จะเปลี่ยนคอนโทรลเลอร์รีเซ็ตภายในและโครงสร้างรีเซ็ตของคอนโทรลเลอร์การกําหนดค่าตัวรับส่งสัญญาณใหม่เพื่อใช้การรีเซ็ตแบบซิงโครนัส รวมถึงการลบพอร์ต M20K clock_enableล่วงหน้าในระหว่างเงื่อนไขการรีเซ็ต
การแก้ไขจะพร้อมใช้งานในซอฟต์แวร์ Quartus® II เวอร์ชันในอนาคต คุณสามารถจัดเตรียมโปรแกรมแก้ไขสําหรับซอฟต์แวร์ Quartus II เวอร์ชันก่อนหน้าได้โดยส่งคําขอรับบริการใน mySupport หากจําเป็นต้องมีโซลูชันในทันที สามารถนําการแก้ไขไปใช้ด้วยตนเองได้ตามคําแนะนําต่อไปนี้
มี 9 ไฟล์ที่จําเป็นต้องเพิ่มหรือแก้ไข:
-
altera_reset_controller_early_ce_mod.v (เพิ่ม)
-
altera_reset_synchronizer_early_ce_mod.v (เพิ่ม)
-
ไฟล์ QIP ที่เชื่อมโยงกับคอนโทรลเลอร์การกําหนดค่าตัวรับส่งสัญญาณใหม่ (ปรับเปลี่ยน)
-
alt_xcvr_reconfig.sv (ปรับเปลี่ยน)
-
alt_xcvr_reconfig_soc.sv (ปรับเปลี่ยน)
-
alt_xcvr_reconfig_cpu.v (ปรับเปลี่ยน)
-
alt_xcvr_reconfig_cpu_ram.sv (ปรับเปลี่ยน)
-
sv_xrbasic_lif_csr.sv (ปรับเปลี่ยน)
-
sv_xcvr_reconfig_mif_avmm.sv (ปรับเปลี่ยน)
ไฟล์ 9 เหล่านี้ควรอยู่ในไดเรกทอรีที่มีการสร้างคอนโทรลเลอร์การกําหนดค่าตัวรับส่งสัญญาณใหม่
ดาวน์โหลด altera_reset_controller_early_ce_mod.v และวางลงในไดเรกทอรีที่เก็บไฟล์กําหนดค่าตัวรับส่งสัญญาณใหม่:
ดาวน์โหลด altera_reset_synchronizer_early_ce_mod.v และวางไฟล์ไว้ในไดเรกทอรีที่มีการเก็บรักษาไฟล์กําหนดค่าใหม่ของตัวรับส่งสัญญาณ:
ในการเพิ่มไฟล์ทั้งสองนี้ไปยังการออกแบบของคุณ ให้ค้นหาและปรับเปลี่ยนไฟล์ .qip ที่เกี่ยวข้องกับอินสแตนซ์คอนโทรลเลอร์การกําหนดค่าตัวรับส่งสัญญาณใหม่ และเพิ่มสองบรรทัดต่อไปนี้ให้กับไฟล์:
set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [file join $::quartus(qip_path) "LIBRARY_PATH/altera_reset_controller_early_ce_mod.v"]
set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [file join $::quartus(qip_path) "LIBRARY_PATH/altera_reset_synchronizer_early_ce_mod.v"]
ในสองบรรทัดด้านบน ให้ปรับเปลี่ยนLIBRARY_NAMEและLIBRARY_PATHให้ตรงกับรายการอื่นในไฟล์ .qip ของคอนโทรลเลอร์การกําหนดค่าใหม่ของตัวรับส่งสัญญาณ
สําหรับ alt_xcvr_reconfig.sv ให้ทําการแก้ไขต่อไปนี้:
-
ค้นหาการสร้างอินสแตนซ์ของโมดูล alt_xcvr_resync และย้อนกลับการเชื่อมต่อระหว่างพอร์ต 'd' และ 'รีเซ็ต' เมื่อแก้ไขแล้ว การสร้างอินสแตนซ์ควรมีลักษณะดังนี้:
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 )
);
สําหรับ alt_xcvr_reconfig_soc.sv ให้ทําการแก้ไขต่อไปนี้:
เพิ่มคําจํากัดความของสายต่อไปนี้ใกล้กับด้านบนของโมดูล:
cpu_reset_reqสายไฟ
ค้นหาการสร้างอินสแตนซ์ของโมดูล alt_xcvr_reconfig_cpu และเพิ่มพอร์ตต่อไปนี้:
.ram_ce (cpu_reset_req)
ค้นหาการสร้างอินสแตนซ์ของโมดูล alt_xcvr_reconfig_cpu_ram และเพิ่มพอร์ตต่อไปนี้:
.ram_ce (cpu_reset_req)
สําหรับ alt_xcvr_reconfig_cpu.v ให้ทําการแก้ไขต่อไปนี้:
-
เพิ่มพอร์ตต่อไปนี้ไปยังระดับบนสุด:
เอาต์พุตram_ceสายไฟ
-
เพิ่มรหัสต่อไปนี้ไปยังโมดูล:
m20k_gateสายไฟ
altera_ram_clock_enableสายไฟ
กําหนดaltera_ram_clock_enable = ~ m20k_gate;
มอบหมายram_ce = altera_ram_clock_enable;
-
ค้นหาการสร้างอินสแตนซ์ของaltera_reset_controllerและเปลี่ยนเป็นการสร้างอินสแตนซ์ของaltera_reset_controller_early_ce_mod เพิ่มพอร์ตm20k_gateไปยังการสร้างอินสแตนซ์นี้และเชื่อมต่อเข้ากับสัญญาณm20k_gate หลังจากทําการปรับเปลี่ยนแล้ว การสร้างอินสแตนซ์ควรมีลักษณะดังนี้:
altera_reset_controller_early_ce_mod #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert")
. 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), // (ยกเลิก)
.reset_in2 (1\'b0), // (ยกเลิก)
.reset_in3 (1\'b0), // (ยกเลิก)
.reset_in4 (1\'b0), // (ยกเลิก)
.reset_in5 (1\'b0), // (ยกเลิก)
.reset_in6 (1\'b0), // (ยกเลิก)
.reset_in7 (1\'b0), // (ยกเลิก)
.reset_in8 (1\'b0), // (ยกเลิก)
.reset_in9 (1\'b0), // (ยกเลิก)
.reset_in10 (1\'b0), // (ยกเลิก)
.reset_in11 (1\'b0), // (ยกเลิก)
.reset_in12 (1\'b0), // (ยกเลิก)
.reset_in13 (1\'b0), // (ยกเลิก)
.reset_in14 (1\'b0), // (ยกเลิก)
.reset_in15 (1\'b0) // (ยกเลิก)
);
สําหรับไฟล์ alt_xcvr_reconfig_cpu_ram.sv ให้ทําการแก้ไขต่อไปนี้:
-
เพิ่มพอร์ตอินพุตต่อไปนี้:
อินพุตram_ce
-
ค้นหาการสร้างอินสแตนซ์ altsyncram และปรับเปลี่ยนพอร์ต clocken0 เพื่อเชื่อมต่อกับพอร์ตอินพุตram_ceใหม่:
.clocken0 (ram_ce),
-
ปรับเปลี่ยนคําจํากัดความ defparam clock_enable_input/output_a/b ดังนี้:
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"
สําหรับไฟล์ sv_xrbasic_lif_csr.sv ให้ทําการแก้ไขต่อไปนี้:
-
หาบล็อกตามลําดับเสมอที่จะควบคุมที่อยู่ช่องทางลอจิก บล็อกนี้สามารถระบุได้ด้วยความคิดเห็น "// การลงทะเบียนช่องทางลอจิคัล" ที่อยู่ด้านบนเสมอ ลบเงื่อนไขการรีเซ็ตออกจากรายการความไว เมื่อแก้ไขแล้ว การเริ่มต้นบล็อกเสมอควรมีลักษณะดังนี้:
การลงทะเบียนช่องทางลอจิก
@(posedge reconfig_clk) จะเริ่มขึ้นเสมอ
ถ้า (reset == 1) เริ่มต้น
...
-
ค้นหาบล็อกตามลําดับเสมอที่ควบคุมการลงทะเบียนที่อยู่กําหนดค่าใหม่แบบเนทีฟ บล็อกนี้สามารถระบุได้ด้วยความคิดเห็น "// การลงทะเบียนที่อยู่กําหนดค่าใหม่แบบเนทีฟ สามารถตีความได้ว่าเป็นที่อยู่ชดเชยของช่องสัญญาณหรือที่อยู่ทางกายภาพ" ที่อยู่ด้านบน ลบเงื่อนไขการรีเซ็ตออกจากรายการความไว เมื่อแก้ไขแล้ว การเริ่มต้นบล็อกเสมอควรมีลักษณะดังนี้:
สามารถตีความได้ว่าเป็นที่อยู่ออฟเซ็ตของช่องสัญญาณ หรือที่อยู่ทางกายภาพได้
@(posedge reconfig_clk) จะเริ่มขึ้นเสมอ
ถ้า (reset == 1) เริ่มต้น
...
สําหรับไฟล์ sv_xcvr_reconfig_mif_avmm.sv การเปลี่ยนแปลงนี้จําเป็นเฉพาะเมื่อมีการเปิดใช้งานการกําหนดค่าแชนแนลหรือ PLL ใหม่ใน GuI คอนโทรลเลอร์การกําหนดค่าใหม่ของตัวรับส่งสัญญาณ ทําการแก้ไขต่อไปนี้:
-
ค้นหาบล็อกตามลําดับเสมอที่มีความคิดเห็น "// Avalonเอาต์พุตและที่เก็บข้อมูลภายใน" อยู่ด้านบนและลบเงื่อนไขการรีเซ็ตออกจากรายการความไว เมื่อแก้ไขแล้ว การเริ่มต้นบล็อกเสมอควรมีลักษณะดังนี้:
เอาต์พุตAvalonและอุปกรณ์จัดเก็บข้อมูลภายใน
@(posedge clk) เสมอ
เริ่ม ต้น
ถ้า (รีเซ็ต) เริ่มต้น
...
เมื่อมีการเปลี่ยนแปลงเหล่านี้แล้ว การออกแบบของคุณจะต้องถูกคอมไพล์ใหม่