您如何 select Verilog 中的特定位定义宏?

How do you select specific bits from a Verilog define macro?

我最初有一个 'params_list.v' 文件,其中列出了多个全局约束

// params_list.v file

localparam
 parameter1   = 18'h00AB,
 parameter2   = 18'h00CD;

参数在特定模块中使用如下所示

// design_main_ORIGINAL.v file

module my_module

`include "params_list.v"

assign reg1 = parameter1[4:0];
assign reg2 = parameter2[4:0];

endmodule

原始 'params_list.v' 文件被分成多个头文件 'header1.vh'、'header2.vh'、

其中一个文件的定义如下所示

// header1.vh

`ifndef _header1_vh_
`define _header1_vh_

`define param1 18'h00AB
`define param2 18'h00CD

`endif   

然后使用以下行将头文件包含在主设计文件 (*.v) 中

// design_main_NEW.v file

`include “header1.vh”
`include “header2.vh”

module module_xyz(

 assign reg1 = param1[4:0];
 assign reg2 = param2[4:0];

);
endmodule

编译时一直出现如下错误

** 错误:(vlog-13069) C:/my_path/main_module.v(440): near "[": 语法错误,意外的 '['.

如果您能说明我可能遗漏了什么,将不胜感激。

如果你想 select 文字的一部分,你需要将它包含在一个连接中

assign reg1 = {`param1}[4:0];
assign reg2 = {`param2}[4:0];

这只适用于 SystemVerilog。但是如果 reg1reg2 已经是 5 位变量,则不需要执行任何这些操作。它将被自动截断。