System verilog 如何使用system verilog中的定义形成变量名
如何使用系统verilog中的定义来形成变量名,实际上我需要配置我的寄存器(大约100个)。为此,我需要硬编码100语句。是否有任何方法可以使用define(任何其他方法)形成变量?Defines(或勾选Defines)的典型用法。 定义 用法 然而 第22.5.1节“定义”涵盖了可接受参数的文本宏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
`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…