说我有以下代码:
genvar i,j;
generate
for(i = 0; i < MAX; i = i + 1) begin: gen_blah
for(j = 0; j < MAX; j = j + 1) begin: gen_foo
assign match[i] = entry[j] = i;
end
end
endgenerate
这是一个可综合的表达吗?它似乎应该是因为它将展开成一堆比较常数分配。如果没有,我将如何写这个来实现这个目标?
答案 0 :(得分:1)
没有。想象一下,展开它并手动输入。前两行将导致多重驱动网:
assign match[0] = (entry[0] == 0);
assign match[0] = (entry[1] == 0);
但是,如果你摆脱了生成并使用循环内部的循环执行此操作,那么它将起作用:
always_comb begin
for(int i = 0; i < MAX; i = i + 1) begin: gen_blah
for(int j = 0; j < MAX; j = j + 1) begin: gen_foo
match[i] = (entry[j] == i);
end
end
end
在此块中,您可以获得相同值的多个赋值,但最后一个赋值为“wins”。我不确定你要用你的代码完成什么,所以这可能实际上并没有执行你正在寻找的功能。如果您要查看是否有任何条目等于i
,那么您应将其更改为:
always_comb begin
for(int i = 0; i < MAX; i = i + 1) begin: gen_blah
match[i]=0;
for(int j = 0; j < MAX; j = j + 1) begin: gen_foo
match[i] = match[i] || (entry[j] == i);
end
end
end