เนื่องจากปัญหาในซอฟต์แวร์ Quartus® II การสังเคราะห์ Quartus II อาจสร้างข้อผิดพลาดนี้เมื่อพยายามประเมินการแสดงออกที่เป็นดัชนีใน VHDL ที่อยู่นอกช่วงภายในถ้าเป็นการแสดงออกภายในลูป
คุณอาจเห็นข้อผิดพลาดนี้เมื่อตรงตามเงื่อนไขต่อไปนี้ทั้งหมด:
- คําสั่ง if อยู่ภายในสําหรับลูป
- คําสั่ง if เป็นการเปรียบเทียบการแสดงจํานวนเต็มสองอักขระโดยใช้ , >= หรือ =
- ตัวแปรลูปเกิดขึ้นในการแสดงที่ประเมินโดยคําสั่ง if
- การแสดงออกที่ประเมินโดยคําสั่ง if จะจํากัดอยู่ที่ , -, และ *
นี่เป็นตัวอย่างว่าข้อผิดพลาดนี้จะเกิดขึ้นเมื่อใด:
entity test is
port
(
i1_data_in : in std_logic_vector(3 downto 0);
i_div_pos : in std_logic_vector(7 downto 0);
o_data_out : out std_logic_vector(7 downto 0)
);
END entity test;
architecture rtl of test is
signal idx : integer;
signal lim : NATURAL range 0 to 5;
idx <= to_integer(unsigned(i_div_pos));
lim <= 3;
process(i1_data_in, idx)
variable temp : std_logic_vector(o_data_out\'range);
begin
temp := (others => \'0\');
u1 : for i in 0 to 7 loop
if i <= 3 - lim then
temp(i) := i1_data_in(i);
else
temp(i) := i_div_pos (i);
end if;
end loop;
o_data_out <= temp;
end process;
end rtl;
มีโปรแกรมแก้ไขเพื่อแก้ไขปัญหานี้สําหรับซอฟต์แวร์ Quartus II เวอร์ชั่น 11.0 SP1 ดาวน์โหลดและติดตั้ง Patch 1.40 จากลิงก์ที่เหมาะสมด้านล่าง หลังจากติดตั้งโปรแกรมแก้ไขให้เปิดใช้งานการแก้ไขโดยการสร้างหรือแก้ไขไฟล์ quartus.ini ในไดเรกทอรีโครงการของคุณเพื่อรวมบรรทัดต่อไปนี้:
vrfx_optimize_if_dead_code=on
- ดาวน์โหลดเวอร์ชัน 11.0 SP1 patch 1.40 สําหรับ Windows (.exe)
- ดาวน์โหลดเวอร์ชัน 11.0 SP1 patch 1.40 สําหรับ Linux (.tar)
- ดาวน์โหลด Readme สําหรับซอฟต์แวร์ Quartus II เวอร์ชัน 11.0 SP1 patch 1.40 (.txt)
หากคุณพบข้อผิดพลาดนี้ขณะใช้ซอฟต์แวร์ Quartus II เวอร์ชั่นอื่น ให้ยื่นคําขอบริการโดยใช้ mySupport