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

ตัวกรอง FIR อาจล้มเหลวในการใช้การลงทะเบียนอินพุตบล็อก DSP

สิ่งแวดล้อม

  • Intel® Quartus® II Subscription Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    ปัญหาสำคัญ

    คำอธิบาย

    ตัวกรอง FIR บางตัวซึ่ง FIR Compiler II ผลิตล้มเหลว เพื่อใช้การลงทะเบียนอินพุตบล็อก DSP ที่เหมาะสมทั้งหมด เวลาที่กําหนด ไม่ได้วิเคราะห์ตัวกรอง FIR เหล่านี้อย่างถูกต้อง และปรากฏเป็น พบกับเวลา ที่จริงแล้ว การกําหนดเวลาบนเส้นทางที่ไม่ได้ลงทะเบียนคือ ไม่ได้วิเคราะห์และตัวกรอง FIR เหล่านี้มีแนวโน้มที่จะทําให้เกิดการกําหนดเวลา ข้อผิดพลาดเมื่อนําไปใช้งานในฮาร์ดแวร์ ปัญหานี้มีผลต่อ Stratix V Arria V (ทั้ง GX และ GZ) และอุปกรณ์ Cyclone V ปัญหามีผลกระทบต่อ ตัวกรอง FIR ที่:ใช้โหมด systolic ปรับจํานวนตัวคูณใหม่ ปัญหาไม่ส่งผลกระทบต่อตัวกรอง FIR ที่ต้องการจํานวนเท่าใด ตัวคูณ เลขคี่หรือแม้แต่อ้างอิงถึงจํานวนตัวคูณทางกายภาพ ที่ใช้ตัวกรอง FIR ไม่ใช่จํานวนการแตะที่คุณแต่เดิม ระบุ ตัวกรอง FIR ที่มีจํานวนการแตะที่เท่ากันอาจต้องใช้การก๊อกน้ําคี่ จํานวนตัวคูณทางกายภาพและในทางกลับกัน เมื่อต้องการพิจารณาว่า ตัวกรอง FIR ของฉันได้รับผลกระทบ ให้ทําตามขั้นตอนเหล่านี้:ตรวจสอบที่สร้างขึ้น รหัส VHDL เพื่อตรวจสอบว่ามีตัวคูณแบบ Dummy หรือไม่ A ตัวกรอง systolic FIR ประกอบด้วยความคิดเห็น CHAINMULTADD จํานวนหนึ่ง หากตัวกรอง FIR ของคุณไม่มีความคิดเห็นใดๆ ที่คล้ายกับ หลังจากแสดงความคิดเห็น ตัวกรอง FIR ของคุณไม่ใช่ตัวกรอง Systolic FIR และจะไม่ได้รับผลกระทบ: --u0_m0_wo0_cma0 (CHAINMULTADD,33)@13

    หาก FIR ของคุณมีอย่างน้อยหนึ่งความคิดเห็น CHAINMULTADD ให้ตรวจสอบ รหัส VHDL ที่ตามหลังแต่ละความคิดเห็นดังกล่าว ไม่กี่บรรทัดหลังจาก ความคิดเห็นของ CHAINMULTADD ค้นหากระบวนการ chainmultadd ที่คล้ายกับ รหัสต่อไปนี้:u0_m0_wo0_cma0_chainmultadd: PROCESS (clk, areset) เริ่มต้น IF (areset = '1') แล้วu0_m0_wo0_cma0_a <= (อื่นๆ => (อื่นๆ => '0'); u0_m0_wo0_cma0_b <= (อื่นๆ => (อื่นๆ => '0'); u0_m0_wo0_cma0_c <= (อื่นๆ => (อื่นๆ => '0'); u0_m0_wo0_cma0_anl <= '0' u0_m0_wo0_cma0_s <= (อื่นๆ => (อื่นๆ => '0'); ELSIF(clk'EVENT AND clk = '1') แล้ว IF (d_u0_m0_wo0_compute_q_13_q = "1") แล้ว u0_m0_wo0_cma0_a(0) <= เซ็นชื่อ(ปรับขนาด(SIGNED(u0_m0_wo0_wi0_delayr0_q),17); u0_m0_wo0_cma0_a(1) <= เซ็นชื่อ(ปรับขนาด(เซ็นชื่อ(u0_m0_wo0_wi0_split1_b),17); u0_m0_wo0_cma0_a(2) <= เซ็นชื่อ(ปรับขนาด(เซ็นชื่อ(u0_m0_wo0_wi0_split1_c),17); u0_m0_wo0_cma0_a(3) <= (อื่นๆ => '0'); u0_m0_wo0_cma0_b(0) <= เซ็นชื่อ(ปรับขนาด(เซ็นชื่อ(u0_m0_wo0_wi0_split4_c),17); u0_m0_wo0_cma0_b(1) <= เซ็นชื่อ(ปรับขนาด(เซ็นชื่อ(u0_m0_wo0_wi0_split4_b),17); u0_m0_wo0_cma0_b(2) <= เซ็นชื่อ(ปรับขนาด(เซ็นชื่อ(u0_m0_wo0_cma0_mux_2_q),17); u0_m0_wo0_cma0_b(3) <= (อื่นๆ => '0'); u0_m0_wo0_cma0_c(0) <= ไม่มีการรับรอง (ปรับขนาด(UNSIGNED(u0_m0_wo0_ca2_q),3); u0_m0_wo0_cma0_c(1) <= ไม่มีการรับรอง (ปรับขนาด (UNSIGNED(u0_m0_wo0_ca2_q),3); u0_m0_wo0_cma0_c(2) <= ไม่มีการรับรอง (ปรับขนาด(UNSIGNED(u0_m0_wo0_ca2_q),3); u0_m0_wo0_cma0_c(3) <= (อื่นๆ => '0'); u0_m0_wo0_cma0_anl <= ไม่ (u0_m0_wo0_aseq_q(0)) สิ้นสุดถ้า; IF (d_u0_m0_wo0_compute_q_14_q = "1") แล้ว u0_m0_wo0_cma0_s(0) <= u0_m0_wo0_cma0_y(0) u0_m0_wo0_cma0_z(0) u0_m0_wo0_cma0_s(1) <= u0_m0_wo0_cma0_y(1); u0_m0_wo0_cma0_s(2) <= u0_m0_wo0_cma0_y(2); u0_m0_wo0_cma0_s(3) <= u0_m0_wo0_cma0_y(3); สิ้นสุดถ้า; สิ้นสุดถ้า; กระบวนการสิ้นสุด; เส้นในชุดตัวหนา อินพุตทั้งสองตัวของตัวคูณตัวเดียวกันเป็นศูนย์ ซึ่งเป็นตัวคูณแบบ Dummy และตัวกรอง FIR ของคุณจะได้รับผลกระทบ หากไม่มีกระบวนการ chainmultadd มีตัวคูณแบบ Dummy, FIR ของคุณจะไม่ได้รับผลกระทบ

    ความละเอียด

    การแก้ไขปัญหาชั่วคราว ให้เพิ่มความยาวที่คุณระบุ สําหรับตัวกรอง FIR หากคุณเลือกความยาวที่เหมาะสม การปรับใช้ ไม่จําเป็นต้องมีตัวคูณแบบหรี่ๆ หรืออาจต้องแก้ไขด้วยตนเอง VHDL ที่สร้างขึ้นโดย FIR Compiler II เพื่อเพิ่มการรักษา Quartus II คุณลักษณะของการลงทะเบียนอินพุต DSP การสังเคราะห์ Quartus II ทํา ไม่ถอดการลงทะเบียนอินพุตตัวคูณแบบ Dummy และ Quartus II Fitter บรรจุการลงทะเบียนอินพุตบล็อก DSP ทั้งหมดอย่างถูกต้อง ถึง แก้ไข VHDL ด้วยตนเอง ให้ทําตามขั้นตอนเหล่านี้:ค้นหาการประกาศ ของการลงทะเบียนอินพุต ซึ่งมีลักษณะคล้ายกับรหัสต่อไปนี้: พิมพ์ u0_m0_wo0_cma0_a_typeคืออาร์เรย์(0 ถึง 3) ของ SIGNED(16 ลงถึง 0); สัญญาณ u0_m0_wo0_cma0_a : u0_m0_wo0_cma0_a_type; พิมพ์ u0_m0_wo0_cma0_b_type เป็นอาร์เรย์ (0 ถึง 3) ของ SIGNED(16 ลงถึง 0); u0_m0_wo0_cma0_bสัญญาณ : u0_m0_wo0_cma0_b_type; type u0_m0_wo0_cma0_c_type คืออาร์เรย์(0 ถึง 3) ของ UNSIGNED(2 ถึง 0); u0_m0_wo0_cma0_cสัญญาณ : u0_m0_wo0_cma0_c_type;หาก ตัวกรอง FIR ไม่ได้ใช้ตัวแก้ไข DSP Block\'s, สัญญาณ \'b\' ไม่มีอยู่ เพิ่มรหัสต่อไปนี้: การรักษาคุณลักษณะ : boolean; แอ ตทริ บิวต์ การเก็บรักษาu0_m0_wo0_cma0_a : สัญญาณเป็นจริง รักษาคุณลักษณะ จํานวนu0_m0_wo0_cma0_b : สัญญาณเป็นจริง การเก็บรักษาคุณลักษณะของu0_m0_wo0_cma0_c : สัญญาณเป็นจริง;เพียงเพิ่มคุณลักษณะการเก็บรักษาเท่านั้นที่ควรถูกประกาศ เพียงครั้งเดียว

    ปัญหานี้ได้รับการแก้ไขใน DSP Builder v13.1

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

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

    อุปกรณ์ที่ตั้งโปรแกรมได้ Intel®

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