我在时序逻辑中有一个case语句(在时钟的posedge处激活一个always块)。该案例正在评估一个变量var
,其位宽取决于参数PARAM
。我需要涵盖var
在案例陈述中可能采用的所有可能值,该值根据PARAM
的值而不同。例如,如果PARAM
是32,var
是5位宽,所以必须有32个情况。如果PARAM
是16,则var
是4位宽,需要16个案例。这种情况下的陈述也嵌入了一系列陈述中,使我很难想出一种将它带入时序逻辑之外的方法(我已经考虑过有条件的generate
陈述了)。任何想法如何做到这一点?下面是结构的伪代码: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
在上面的例子中,如果PARAM
需要它的默认值(8),应该有8例。但是,如果PARAM
在实例化时为4,则应该只有4个例子。
在此先感谢。
你将需要展示一个代码的样子。如何参数化每个案例项目中的代码? –
Verilog中没有这样的东西。您的问题很可能有不同的解决方案,但您需要提供一个示例来了解它。在最糟糕的情况下,您可能会使用脚本或其他方法生成verilog代码。 – Serge
如果你想要一个很好的答案,你将不得不付出一些努力来展示一个剥离IP的例子。 –