ID บทความ: 000085194 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 12/06/2013

ทําไมเอาต์พุตreconfig_busyของคอนโทรลเลอร์การกําหนดค่าตัวรับส่งสัญญาณใหม่จึงติดอยู่สูงหลังจากรีเซ็ต

สิ่งแวดล้อม

    Intel® Quartus® II Subscription Edition
BUILT IN - ARTICLE INTRO SECOND COMPONENT
คำอธิบาย

พอร์ตเอาต์พุตของตัวรับส่งสัญญาณใหม่ \'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) เสมอ
เริ่ม ต้น
ถ้า (รีเซ็ต) เริ่มต้น
...

เมื่อมีการเปลี่ยนแปลงเหล่านี้แล้ว การออกแบบของคุณจะต้องถูกคอมไพล์ใหม่

ผลิตภัณฑ์ที่เกี่ยวข้อง

บทความนี้จะนำไปใช้กับ 2 ผลิตภัณฑ์

Stratix® V GX FPGA
Arria® V GZ FPGA

1

เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทําขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรพึ่งพาความสมบูรณ์หรือความถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคําแปล เวอร์ชันภาษาอังกฤษจะมีผลบังคับและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้