ซอฟต์แวร์ Quartus® II เวอร์ชั่น 6.0 และ 6.0 SP1 ประมวลผลบิตจากตัวแปรที่ลงชื่ออย่างไม่ถูกต้องเนื่องจากปัญหาซอฟต์แวร์ที่ทราบ โค้ด Verilog ที่เกี่ยวข้องกับบิตที่เลือกจากตัวแปรที่มีลายเซ็นควรส่งคืนค่าที่ไม่ได้รับการรับรองตามที่ระบุไว้ใน Verilog LRM (Std 1364-2001 Version C, Sec 4.5.1)
ปัญหานี้ไม่มีอยู่ในเวอร์ชั่น 5.1 หรือก่อนหน้า ปัญหาได้รับการแก้ไขเริ่มต้นด้วยซอฟต์แวร์ Quartus II เวอร์ชั่น 6.1
ดังตัวอย่างของปัญหานี้ ซอฟต์แวร์ Quartus II เวอร์ชั่น 6.0 ประมวลผลตัวอย่างรหัสต่อไปนี้อย่างไม่ถูกต้อง:
reg [7:0] unrounded; reg [6:0] rounded; always @ (posedge clk) begin rounded <= unrounded[7:1] unrounded[0];
ซอฟต์แวร์ควรขยายสัญญาณเป็นศูนย์[0] เพื่อให้แน่ใจว่ามีการเพิ่มค่าบิตหนึ่งไปยังส่วนบิตของunrounded[7:1]
ซอฟต์แวร์ Quartus II เวอร์ชั่น 6.0 และ 6.0 SP1 จะขยายสัญญาณ unrounded[0]
แทนการขยายสัญญาณเป็นศูนย์ ในตัวอย่าง หาก unrounded[0]
สัญญาณเป็นค่า 1 ซอฟต์แวร์จะแปลง 1 เป็นเครื่องหมายของตัวเลข และแปลงเป็นการแสดง -1 แบบ 7 บิตแทนค่าที่ไม่มีลายเซ็น ดังนั้นซอฟต์แวร์จึงเพิ่ม -1 ไปยัง unrounded[7:1]
แทนที่จะเพิ่ม 1
เพื่อหลีกเลี่ยงปัญหานี้ (ในเวอร์ชัน 6.0 หรือ 6.0 SP1) ให้เลือกทําอย่างใดอย่างหนึ่งต่อไปนี้:
- ติดต่อ mySupport เพื่อขอโปรแกรมแก้ไข 1.20 สําหรับซอฟต์แวร์ Quartus II เวอร์ชั่น 6.0 SP1
- ใส่วง่นรอบตัวแปรใดตัวแปรหนึ่งและบังคับให้ทั้งการแสดงมีการประเมินว่าไม่มีเครื่องหมายโดยใช้ฟังก์ชัน Verilog-2001 :
rounded <= (unrounded[7:1]) unrounded[0]
- ใส่ศูนย์นําหน้าด้วยตนเองดังนี้ (กล่าวคือ ระบุบิตชั้นนําอย่างชัดแจ้งควรเป็น 0):
rounded <= unrounded[7:1] {{6{1'b 0}}, unrounded[0]};