【问题标题】:How do you select specific bits from a Verilog define macro?如何从 Verilog 定义宏中选择特定位?
【发布时间】:2021-03-24 17:47:20
【问题描述】:

我最初有一个“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 "[": 语法错误,意外的'['。

如果您能说明我可能遗漏的内容,我们将不胜感激。

【问题讨论】:

    标签: verilog system-verilog modelsim


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多