localparameters使代码泛型以支持不同的数据宽度



我目前正在设计Verilog逻辑,这是通用的,这样我就可以根据作为输入传递给模块的参数修改寄存器的宽度。参数为:RWIDTHBWIDTH。目前我正在测试两种情况

RWIDTH=16, BWIDTH=16

RWIDTH=20, BWIDTH=16

我有一些问题,使代码适应不同的宽度。下面是一小部分代码:

localparam DIFF = RWIDTH-BWIDTH;
localparam BYTE_LENGTH = 8
localparam ROUND_2_BYTE = BYTE_LENGTH-DIFF;

RWIDTH=16, BWIDTH=16,我想让ROUND_2_BYTE等于0

但是当RWIDTH=20, BWIDTH=16,我想让ROUND_2_BYTE等于4

请注意,ROUND_2_BYTE将用于计算进一步的参数,为了简单起见,我没有显示这些参数。

我如何在Verilog中使用localparams或任何其他方式实现这一点?我也很想听听其他可以实现上述目标的方法。

使用条件运算符。变化:

localparam ROUND_2_BYTE = BYTE_LENGTH-DIFF;

:

localparam ROUND_2_BYTE = (DIFF == 0) ? 0 : BYTE_LENGTH-DIFF;

如果不能将参数放入单个方程中,可以使用函数调用来放置设置参数所需的任何代码。函数输入参数必须全部为常量或其他形参

function integer R2B(integer R,B);
case (1)
R==16 && B==16: R2B = 0;
R==20 && B==16: R2B = 4;
endcase
endfunction
localparam ROUND_2_BYTE = R2B(RWIDTH, BWIDTH);

相关内容

  • 没有找到相关文章

最新更新