systemVerilog的typedef用法

目录

1. 常用自定义类型

2. 前置定义

3.定义参数化类

4.定义带比特位类型

5.定义数组或队列

6.队列的关联数组

7.在config db的应用


1. 常用自定义类型

typedef int WIDTH_TYPE

2. 前置定义

常用在要用的class还没有定义时,提前typedef一下

1 typedef class B;//typedef B
2 class A;
3     B b;
4     int xx;
5 endclass
6 
7 class B;
8     A a;
9     logic tmp;
10 endclass

如上在定义class A时,使用了class B,但B还没有定义,可以在前面先 typedef class B.也可以直接用typedef B,表示后面会有B的定义。

3.定义参数化类

typedef XYZ;
 
module top;
  XYZ #(8'h3f, real)              xyz0;   // positional parameter override
  XYZ #(.ADDR(8'h60), .T(real))   xyz1;    // named parameter override
endmodule
 
class XYZ #(parameter ADDR = 8'h00, type T = int);
endclass

4.定义带比特位类型

typedef bit [3:0] bit4;
typedef logic [2:0] logic3;
typedef reg [1:0]  reg2;

5.定义数组或队列

typedef int m_int_q[100];

m_int_q m_int;

typedef short m_sh_q[$];
m_sh_q m_sh;

定义了一个100个元素的int数组 m_int;

定义了一个数据类型为short的m_sh队列;

6.队列的关联数组

当关联数组的元素是一个队列的时候,有两种定义方式:

方式一:
int map[string][$]; //map是一个关联数组,下标元素是string,存储元素是int[$]
方式二:
typedef int Queue_INT[$]; Queue_INT map[$];

7.在config db的应用

当使用uvm_config_db在UVM平台中传递信息时,假设需要传递一个数组,这时候uvm_config_db#()括号中的类型该怎么写?

1) 将数组封装在一个类中,uvm_config_db#()的括号中填这个类,这个稍微麻烦了点;

2) 定义一个数组类型,然后就可以这样写

uvm_config_db#(Array_INT)::set(null,”yy”,”zz”,arr)

uvm_config_db#(Array_INT)::get(null,”yy”,”zz”,arr_recv)

其中arr和arr_recv都是Array_INT类型的变量;typedef int Array_INT[100];

该段摘自typedef:定义一个类型https://zhuanlan.zhihu.com/p/370616107

  • 8
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值