순차 논리 내부에 case 문이 있습니다 (항상 블록이 clock의 posedge에서 활성화 됨). 이 케이스는 매개 변수 PARAM
에 따라 비트 폭이 다른 변수 var
을 평가합니다. var
가능한 값을 모두 커버해야 case 문에 걸릴 수 있으며 값은 PARAM
에 따라 다릅니다. 예를 들어, PARAM
이 32이면 var
은 5 비트이므로 32 개가 있어야합니다. PARAM
이 16 인 경우 var
은 4 비트이며 16 개의 사례가 필요합니다. 이 case 문은 또한 if
문이 중첩되어 있기 때문에 순차 논리 외부로 가져 오는 방법을 생각하기가 어렵습니다 (조건부 generate
문에 대해 이미 생각했습니다). 이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 아래의 구조에 대한 의사 코드이다 : PARAM
은 기본 값을 취하는 경우, 위의 예에서SystemVerilog의 매개 변수 종속적 case 문
module a
#(parameter PARAM = 8,
parameter WIDTH = $clog2(PARAM)
)
...
input logic [WIDTH-1:0] var
...
always @(posedge clk)
begin
if(...)
begin
if(...)
begin
case(var)
3'd0:
3'd1:
3'd2:
3'd3:
3'd4:
3'd5:
3'd6:
3'd7:
default:
endcase
end
end
end
는, (8), (8) 경우가있을 것이다. 그러나 인스턴스화시 PARAM
이 4 인 경우 4 개의 사례 만 있어야합니다.
미리 감사드립니다.
코드가 어떻게 생겼는지에 대한 예를 제시해야합니다. 각 사례 항목의 코드를 어떻게 매개 변수화합니까? –
Verilog에는 그런 것이 없습니다. 대부분의 경우 문제에 대한 다른 해결책이있을 수 있지만 이해하기 위해 예제를 제공해야합니다. 최악의 경우 스크립트 나 다른 방법을 사용하여 Verilog 코드를 생성 할 수 있습니다. – Serge
좋은 답변을 원하면 IP를 제거한 예를 보여 주려고 노력해야합니다. –