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

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