인텔® Quartus® Prime Pro Edition 소프트웨어 버전 21.4 이하의 문제로 인해 분석 및 합성 단계에서 이 오류가 발생할 수 있습니다. 이는 매개변수화된 인터페이스가 SystemVerilog 인터페이스 localparam 논리 변수를 최상위 래퍼 변수로 재정의하지 못하기 때문입니다.
아래 예에서 인터페이스 localparam 논리 변수 ADDR_W 및 DATA_W는 매개 변수가 4와 1인 최상위 래퍼 변수(각각 매개 변수 5 및 8)에 의해 재정의되지 않습니다.
최상위 래퍼:
모듈 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 );
...
endmodule : mem_wrapper
인터페이스:
인터페이스 mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( 입력 clk );
localparam 논리 [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{기본값: '1};
...
modport mem (입력 clk, addr, wren, idat, 출력 odat);
최종 인터페이스 : mem_if
모드포트:
모듈 메모리 ( mem_if.mem mem_if );
논리 [mem_if. DATA_W - 1:0] mem [2 ** mem_if. ADDR_W];
초기
for(int i = 0; i < 2 ** mem_if. ADDR_W; i++)
mem[i] = mem_if입니다. INIT_V[나는];
...
endmodule : mem
이 오류를 방지하려면 SystemVerilog 인터페이스에서 localparam 논리를 사용하지 마십시오.
예를 들어:
인터페이스:
인터페이스 mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( 입력 clk );
논리 [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{기본값: '1};
...
모드 포트 메모리 (입력 clk, addr, wren, idat, 출력 odat, INIT_V);
최종 인터페이스 : mem_if
이 문제는 인텔® Quartus® Prime Pro Edition 소프트웨어 버전 22.4부터 해결됩니다.