ฉันใช้ Icarus iVerilog เพื่อสังเคราะห์และทดสอบโค้ดของฉัน แต่ฉันได้รับค่าที่ไม่รู้จักเมื่อค่า 1 ควรปรากฏขึ้นตามตรรกะ นี่คือตัวอย่างสิ่งที่ฉันพยายามทำ
reg [8:0] a = 000110100;
wire [8:0] b = 0;
generate
genvar i;
for (i = 8; i > -1; i = i - 1)
begin:loop
assign b[i] = |a[8:i];
end
endgenerate
สิ่งนี้ควรสร้างประตูบางส่วนในรูปแบบของ
b[8] = a[8];
b[7] = a[8] | a[7];
b[6] = a[8] | a[7] | a[6];
b[5] = a[8] | a[7] | a[6] | a[5];
...
ผลลัพธ์ที่คาดหวังของฉันคือ
000111111
ฉันได้รับจริงๆ
000xxxxxx
ฉันไม่พบสาเหตุใด ๆ สำหรับ x's และฉันเริ่มสงสัยว่าเป็นปัญหากับ iVerilog
i>=0
แทนi>-1
และ 2) นับไปข้างหน้าจาก 0 แทนที่จะย้อนกลับจาก 8 - person teadotjay   schedule 01.08.2016