Do sự cố trong Phần mềm Intel® Quartus® Prime Pro Edition phiên bản 21.4 trở về trước, bạn có thể thấy lỗi này trong giai đoạn Phân tích & Tổng hợp. Điều này là do các giao diện được tham số hóa không thể ghi đè lên các biến logic localparam của giao diện SystemVerilog với các biến wrapper cấp cao nhất.
Trong ví dụ dưới đây, các biến logic localparam giao diện ADDR_W và DATA_W, với các tham số 4 và 1, không bị ghi đè bởi các biến wrapper cấp cao nhất, với các tham số lần lượt là 5 và 8.
Trình bao bọc cấp cao nhất:
Mô-đun mem_wrapper #( int ADDR_W = 5, int DATA_W = 8 )
...
mem_if #( ADDR_W, DATA_W ) mem_if ( i_clk_a );
mem mem ( mem_if );
...
Mô-đun cuối: mem_wrapper
Giao diện:
giao diện mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( clk đầu vào );
logic localparam [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{mặc định: '1};
...
modport mem (đầu vào clk, addr, wren, idat, odat đầu ra);
Giao diện cuối : mem_if
Modport:
mô-đun mem ( mem_if.mem mem_if );
logic [mem_if. DATA_W - 1:0] mem [2 ** mem_if. ADDR_W];
Đầu tiên
for(int i = 0; i < 2 ** mem_if. ADDR_W; i++)
mem[i] = mem_if. INIT_V[i];
...
Mô-đun cuối : MEM
Để tránh lỗi này, không sử dụng logic localparam trong giao diện SystemVerilog.
Ví dụ:
Giao diện:
giao diện mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( clk đầu vào );
logic [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{mặc định: '1};
...
modport mem ( đầu vào clk, addr, wren, idat, odat đầu ra, INIT_V);
Giao diện cuối : mem_if
Sự cố này được khắc phục bắt đầu từ Phần mềm Intel® Quartus® Prime Pro Edition phiên bản 22.4.