您如何 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。但是如果 reg1
和 reg2
已经是 5 位变量,则不需要执行任何这些操作。它将被自动截断。
我最初有一个 '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。但是如果 reg1
和 reg2
已经是 5 位变量,则不需要执行任何这些操作。它将被自动截断。