เนื่องจากปัญหาในซอฟต์แวร์ Intel® Quartus® Prime Pro Edition เวอร์ชัน 21.4 และรุ่นก่อนหน้าคุณอาจเห็นข้อผิดพลาดนี้ในระหว่างขั้นตอนการวิเคราะห์และการสังเคราะห์ นี่เป็นเพราะความล้มเหลวของอินเทอร์เฟซที่กําหนดพารามิเตอร์เพื่อแทนที่ตัวแปรลอจิก localparam ของอินเทอร์เฟซ SystemVerilog ด้วยตัวแปร wrapper ระดับบน
ในตัวอย่างด้านล่าง ตัวแปรลอจิก localparam ของอินเทอร์เฟซ ADDR_W และ DATA_W ด้วยพารามิเตอร์ 4 และ 1 จะไม่ถูกแทนที่โดยตัวแปร Wrapper ระดับบน พร้อมพารามิเตอร์ 5 และ 8 ตามลําดับ
เสื้อคลุมระดับบน:
โมดูล mem_wrapper #( ADDR_W int = 5, int DATA_W = 8 )
...
mem_if mem_if #( ADDR_W, DATA_W ) ( i_clk_a );
เมมเมม ( mem_if );
...
Endmodule : mem_wrapper
อิน เทอร์ เฟซ:
mem_if อินเทอร์เฟซ #( ADDR_W t = 4, int DATA_W = 1) ( input clk );
ลอจิก localparam [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
modport mem (input clk, addr, wren, idat, output odat );
อินเทอร์เฟซ : mem_if
Modport:
โมดูล mem ( mem_if.mem mem_if );
ลอจิก [mem_if. DATA_W - 1:0] เมมโม [2 ** mem_if ADDR_W];
เริ่ม ต้น
for(int i = 0; i < 2 ** mem_if ADDR_W; สินค้าคงคลัง (รายงาน) i++)
mem[i] = mem_if. INIT_V[i];
...
endmodule : mem
เพื่อหลีกเลี่ยงข้อผิดพลาดนี้ โปรดอย่าใช้ลอจิก localparam ในอินเทอร์เฟซ SystemVerilog
ตัวอย่างเช่น:
อิน เทอร์ เฟซ:
mem_if อินเทอร์เฟซ #( ADDR_W t = 4, int DATA_W = 1) ( input clk );
ลอจิก [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{ค่าเริ่มต้น: '1};
...
modport mem (input clk, addr, wren, idat, output odat, INIT_V);
อินเทอร์เฟซ : mem_if
ปัญหานี้ได้รับการแก้ไขเริ่มต้นด้วย Intel® Quartus®ซอฟต์แวร์ Prime Pro Edition เวอร์ชัน 22.4