我在顺序逻辑中有一个case语句(一个始终在时钟的posedge激活的块)。该案例正在评估变量var
,其位宽取决于参数PARAM
。我需要涵盖var
可以在case语句中使用的所有可能值,该值根据PARAM
的值而变化。例如,如果PARAM
为32,则var
为5位宽,因此必须有32个案例。如果PARAM
为16,则var
为4位宽,需要16个案例。这个case语句也在if
语句的嵌套中,这使我很难想出一种方法将它带到顺序逻辑之外(我已经考虑过条件generate
语句)。关于如何做到这一点的任何想法?下面是结构的伪代码:
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个案例。
提前致谢。
答案 0 :(得分:0)
如果你解释了val,a,b,c和d是什么,那真的会有所帮助。这是我能做的最好的
always @(posedge clk)
begin
if(...)
begin
if(...)
begin
if (param == 1 && (var inside {a,b}))
branch = var;
else
branch = a_value_that_is_not_a,b,c,d;
case(branch)
a:
b:
c:
d:
default:
endcase
end
end
end