localparameters 使代码通用以支持不同的数据宽度
localparameters to make code generic to support different data widths
我目前正在设计通用的 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 中的任何其他方式实现此目的?我也有兴趣了解可以实现上述目标的其他方法。
使用条件运算符。变化:
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);
我目前正在设计通用的 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 中的任何其他方式实现此目的?我也有兴趣了解可以实现上述目标的其他方法。
使用条件运算符。变化:
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);