verilog中的参数化位域

fun*_*eah 4 verilog fpga register-transfer-level

是否可以参数化verilog中的位字段?基本上我想使用参数或替代来定义位范围.我能想到这样做的唯一方法是使用如下所示的`define,但似乎应该有更好的方法.

`define BITFIELD_SELECT 31:28
foo = bar[BITFIELD_SELECT]
Run Code Online (Sandbox Code Playgroud)

dav*_*idd 6

参数比定义更好(更安全),因为命名空间不是项目的全局.您应该可以使用两个参数执行此操作.

parameter BITFIELD_HIGH = 31;
parameter BITFIELD_LOW = 28;

assign foo = bar[BITFIELD_HIGH:BITFIELD_LOW];
Run Code Online (Sandbox Code Playgroud)

另外

parameter BITFIELD_HIGH = 31;
localparam BITFIELD_LOW = BITFIELD_HIGH-3;

assign foo = bar[BITFIELD_HIGH:BITFIELD_LOW];
Run Code Online (Sandbox Code Playgroud)

  • 如果我曾经定义了上限和下限,我会忘记.很多时候我使用参数来定义矢量的宽度.即:foo [(WIDTH-1):0].它在实践中运行良好,并且与生成语句结合使用非常强大. (2认同)