是否可以在verilog中参数化位域?本质上,我想使用参数或替代方法来定义位范围。我能想到的唯一方法是使用如下所示的定义,但似乎应该有更好的方法。
`define BITFIELD_SELECT 31:28
foo = bar[BITFIELD_SELECT]
是否可以在verilog中参数化位域?本质上,我想使用参数或替代方法来定义位范围。我能想到的唯一方法是使用如下所示的定义,但似乎应该有更好的方法。
`define BITFIELD_SELECT 31:28
foo = bar[BITFIELD_SELECT]
参数比定义更好(更安全),因为命名空间对项目来说不是全局的。您应该能够使用两个参数来执行此操作。
parameter BITFIELD_HIGH = 31;
parameter BITFIELD_LOW = 28;
assign foo = bar[BITFIELD_HIGH:BITFIELD_LOW];
或者
parameter BITFIELD_HIGH = 31;
localparam BITFIELD_LOW = BITFIELD_HIGH-3;
assign foo = bar[BITFIELD_HIGH:BITFIELD_LOW];
如果您使用宏(定义)在调用宏时包含“`”
`define BITFIELD_SELECT 31:28
foo = bar[`BITFIELD_SELECT]; // `BITFIELD_SELECT