때로는 슬라이스의 너비가 0이 아닌 경우 배열 슬라이스를 점검하려는 상황이 매개 변수화 된 코드로 나타납니다. 나는 다음과 같이 쓸 수 있습니다 :도달 할 수없는 평가에서 Verilog 널/유효하지 않은 슬라이스 범위
parameter SLICE_WIDTH;
parameter SLICE_BASE;
logic [my_array_size : 0] my_array;
//...
always_ff @ (posedge clk) begin
if (SLICE_WIDTH==0 || my_array[SLICE_BASE+:SLICE_WIDTH]==0) begin
//alternately "if (SLICE_WIDTH==0 || my_array[SLICE_WIDTH+SLICE_BASE-1:SLICE_BASE]==0) begin"
//do something
end
else begin
//do something else
end
end
이것은 VHDL을 작성할 때 이러한 상황을 처리 한 방법입니다. 유효하지 않은 배열 범위가 평가되는 것을 방지하기 위해 상수 평가에서 단락에 의존합니다. 작성된 시스템 Verilog에서 QuestaSim의 "range select of parted is reversed"오류 및 "range width is zero"오류가 발생합니다.
//do something
의 내용을 여러 개의 if-generate 구문으로 복제하지 않고 대부분의 도구에서 허용하는 null 범위를 명확하게 처리 할 수있는 방법이 있습니까? 당신이 할 수있는 일
이 인스턴스에 대해 마스킹의 변형을 사용할 수 있었지만, 일반적으로 더 깨끗한 사례는 없다는 것이 유감입니다. 순차 논리의 여러 행을 복제하지 않고 중간 넷에 조건을 결합하여 응축하는 데 생성을 사용할 수 있다고 가정합니다. – QuantumRipple