【发布时间】:2011-06-23 19:22:34
【问题描述】:
是否可以在 verilog 中参数化位域?本质上,我想使用参数或替代方法来定义位范围。我能想到的唯一方法是使用如下所示的`define,但似乎应该有更好的方法。
`define BITFIELD_SELECT 31:28
foo = bar[BITFIELD_SELECT]
【问题讨论】:
标签: verilog fpga register-transfer-level
是否可以在 verilog 中参数化位域?本质上,我想使用参数或替代方法来定义位范围。我能想到的唯一方法是使用如下所示的`define,但似乎应该有更好的方法。
`define BITFIELD_SELECT 31:28
foo = bar[BITFIELD_SELECT]
【问题讨论】:
标签: verilog fpga register-transfer-level
参数比定义更好(更安全),因为命名空间对项目来说不是全局的。您应该可以使用两个参数来执行此操作。
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
【讨论】:
paramter WIDTH = 8; /*...*/ foo = bar[(WIDTH-1):0]