我目前正在设计Verilog逻辑,这是通用的,这样我就可以根据作为输入传递给模块的参数修改寄存器的宽度。参数为:RWIDTH
、BWIDTH
。目前我正在测试两种情况
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);