SV数据类型一

背景

数据类型是学好一门语言的基础,sv的数据类型有时候让人疑惑,在这里进行一个详细的解释

核心内容
1. sv的数据类型有哪些
2. 各个数据类型之间有什么区别
3. wire和logic

我的理解

想要学好一门语言,就得将它的基础学好。如果想学英语,你就先得知道26个英文字母;如果要学中文,你就得学会横竖撇捺点。数据类型就是一门语言基础中的基础。

System Verilog脱胎于Verilog,最初的作用是用来描述电路,所以SV语言保留了一些电路的特性。

比如你想要描述一个1 bit的数据,你其实有这几种选择
bit   a;
logic b;
reg   c;
wire  d;
你甚至用一种看起来不太合理的写法:
int  f;
f[0]也能表示1 bit。

那这几种表达方式究竟有什么不同?

根据《SystemVerilog验证测试平台编写指南》(以下简称绿皮书)第2.1.1和2.1.2两节的内容,我进行以下总结:

bit            a;      //双状态,单比特
bit[31:0]      b;      //双状态,32比特无符号整数
int unsigned   c;      //双状态,32比特无符号整数
int            d;     //双状态,32比特有符号整数
byte           e;      //双状态,8比特有符号整数
shortint       f;      //双状态,16比特有符号整数
longint        g;      //双状态,64比特有符号整数
integer        h;      //四状态,32比特有符号整数
time           i;      //四状态,64比特无符号整数
real           j;      //双状态,双精度浮点数
wire           k;      //线网的一种,用于逻辑门的驱动或连续赋值的驱动
reg            l;      //Verilog中的变量,只用于过程赋值的左侧变量
logic          m;      //SystemVerilog中对于reg的更新,可以使用线网的地方也可以使用logic

logic还有一个限制是不能有多个结构性的驱动,如果有多个驱动,则编译的时候就会出现错误。现在SystemVerilog中基本已经完全抛弃了reg的使用,logic可以覆盖所有使用reg的场景。在和DUT直连的场景中,基本上都可以使用logic来声明接口,只有在多个驱动的场景下使用wire。

而在TB的主体内部,基本可以不使用wire/reg/logic类型,而用bit替代,但当被检查的信号存在不确定态时,要使用logic来替代bit,否则会错失一些信号的变化。

还有就是在logic类型的信号进行比对时,要用`===`而非`==`,否则比对也无法发现错误。

实战要点


- 工作中可以这么用:在interface中都用logic和wire,在scb中用少量logic和wire,其他不和DUT直连的地方都用其他数据类型
- 容易踩的坑:要非常注意不要把从DUT抓来的信号赋值给双状态的数据类型,出现x态和z态不容易debug

一句话总结


integer/time/logic/wire四状态,其余都是双状态;多驱用wire,单驱用logic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值