System verilog 如何使用system verilog中的定义形成变量名

System verilog 如何使用system verilog中的定义形成变量名,system-verilog,System Verilog,如何使用系统verilog中的定义来形成变量名,实际上我需要配置我的寄存器(大约100个)。为此,我需要硬编码100语句。是否有任何方法可以使用define(任何其他方法)形成变量?Defines(或勾选Defines)的典型用法。 定义 用法 然而 第22.5.1节“定义”涵盖了可接受参数的文本宏 `define DISPLAY_MACRO1(a=1,b="A",c) $display(a,,b,,c); `DISPLAY_MACRO1(4,5,6); // Expands to $disp

如何使用系统verilog中的定义来形成变量名,实际上我需要配置我的寄存器(大约100个)。为此,我需要硬编码100语句。是否有任何方法可以使用define(任何其他方法)形成变量?

Defines(或勾选Defines)的典型用法。 定义 用法 然而 第22.5.1节“定义”涵盖了可接受参数的文本宏

`define DISPLAY_MACRO1(a=1,b="A",c) $display(a,,b,,c);
`DISPLAY_MACRO1(4,5,6); 
// Expands to $display(4,,5,,6)
可以跳过参数以允许默认值:

`DISPLAY_MACRO1( ,5,6); 
// Expands to $display(1,,5,,6)
宏也可用于创建方程式

 `define TOP(a,b) a + b
 a = `TOP(g ,h)
 // expanding to 
 // a = g + h
这对于创建变量名没有直接的帮助,因为它需要空格来分隔参数,这正是
`
派上用场的地方。它们用于在不使用空格的情况下进行定界

`define MAKE_REG( width, name) reg [ width -1:0] name``_register
`MAKE_REG( 4, enable) ;
//should expand to
//  reg [ 4 -1:0] enable_register ;
定义(或勾选定义)的典型用法。 定义 用法 然而 第22.5.1节“定义”涵盖了可接受参数的文本宏

`define DISPLAY_MACRO1(a=1,b="A",c) $display(a,,b,,c);
`DISPLAY_MACRO1(4,5,6); 
// Expands to $display(4,,5,,6)
可以跳过参数以允许默认值:

`DISPLAY_MACRO1( ,5,6); 
// Expands to $display(1,,5,,6)
宏也可用于创建方程式

 `define TOP(a,b) a + b
 a = `TOP(g ,h)
 // expanding to 
 // a = g + h
这对于创建变量名没有直接的帮助,因为它需要空格来分隔参数,这正是
`
派上用场的地方。它们用于在不使用空格的情况下进行定界

`define MAKE_REG( width, name) reg [ width -1:0] name``_register
`MAKE_REG( 4, enable) ;
//should expand to
//  reg [ 4 -1:0] enable_register ;

`define
中形成标识符的方法是使用
`
将令牌连接到一个令牌中

`define CONCAT(A, B) A``B

int `COCNCAT(X, Y); // defines an **int** XY
有时你会看到

`define myreg(name) \
  int _reg_``name;
所以
`myreg(0)
声明
\u reg\u 0


SystemVerilog中没有循环宏构造,因此如果需要
\u reg\u 0
\u reg\u 1
。。。最好是声明数组或使用generate语句。

`define
中形成标识符的方法是使用
`
将令牌连接到一个令牌中

`define CONCAT(A, B) A``B

int `COCNCAT(X, Y); // defines an **int** XY
define myreg(name) \
  int _reg_``name;
有时你会看到

`define myreg(name) \
  int _reg_``name;
所以
`myreg(0)
声明
\u reg\u 0

SystemVerilog中没有循环宏构造,因此如果需要
\u reg\u 0
\u reg\u 1
。。。最好是声明数组或使用generate语句

define myreg(name) \
  int _reg_``name;
所以
myreg(0)声明了

SystemVerilog中没有循环宏构造,因此如果需要
\u reg\u 0、\u reg\u 1、
最好声明数组或使用generate语句

define myreg(name) \
  int _reg_``name;
在上述声明中, 请说明如何为
req\u 0、req\u 1…

所以
myreg(0)声明了

SystemVerilog中没有循环宏构造,因此如果需要
\u reg\u 0、\u reg\u 1、
最好声明数组或使用generate语句

define myreg(name) \
  int _reg_``name;
在上述声明中, 请说明如何为
req\u 0、req\u 1…