Verilog-是否可以基于generate块中的genvar变量将值分配给寄存器

时间:2019-04-22 14:46:06

标签: for-loop verilog assign synthesis

我有一些与此类似的代码(下面是一个示例):

genvar x;
genvar y;
generate
    for (y = -off; y < off; y=y+1) begin
        for (x = -off; x < off; x=x+1) begin
            guassian_kernel[((((y+off)*ks)+x+off+1)*fs)-1:(((y+off)*ks)+x+off)] = x*y; // <- something like this
        end
    end
endgenerate

是否可以做类似的事情:

20'd(x*y) 

等等?

或者除了对所有寄存器值进行硬编码之外,我别无选择吗?在我使用的实际代码中,reg中的值将是x和y的复杂得多的函数。

谢谢!

1 个答案:

答案 0 :(得分:0)

generate块仅用于生成常规Verilog语句,例如模块实例化,总是块,assign语句……这是一种预处理。

因此,您的作业必须是合法的Verilog声明,例如

generate
for (y = -off; y < off; y=y+1) begin
    for (x = -off; x < off; x=x+1) begin
        always @*  // <-- something like this.
             guassian_kernel[((((y+off)*ks)+x+off+1)*fs)-1:(((y+off)*ks)+x+off)] = x*y; 
    end
end
endgenerate