SV中的数据类型

Verilog-1995中规定的数据类型有:变量(reg), 线网(wire), 32位有符号数(integer), 64位无符号数(time), 浮点数(real)。

 

SV扩展了reg类型为logic,除了reg类型的功能外,可以用在连续赋值,门单元和模块所驱动。但是不能用在双向总线建模,不能有多点驱动。

其他数据类型:无符号双状态  bit,

                    有符号双状态32位   int,

                    有符号双状态8位     byte,                            //可以用内置函数  $isunknown

                    有符号四状态32位   integer,

                    无符号四状态64位   time,

                    有符号双状态浮点64位    real.

$isunknown()----在操作数中存在X、Z时,返回1。

$bits(expression)----返回expression占的位宽。

对于四状态类型的数据,缺省值为X,双状态类型的数据,缺省值是0.

很多SV仿真器在存放数据元素的时候都是使用32bit的字边界。所以byte、shortint、int都是存放在一个字中,longint则存放在两个字中。

对于四状态的数据,SV仿真器通常使用两个连续的字或更多的连续的双字来存放它们的值,所以四状态的变量会消耗双倍的空间。

连续的双字,一个字存放数据的0/1值,另一个字存放x/z状态。

 

foreach可以进行多维数据的递归调用,foreach(A[i,j])

 

定宽数组:

        (pack)合并数组:将数组大小的定义放在等式左边            bit [3:0][7:0] bytes;          //4个字节组成一个字,储存空间一个字。

        (unpack)非合并数组:将数组大小的定义放在等式右边         bit [7:0] bytes [4];            //4个字节,这个仍是合并数组,但是4个存储空间不连续,这是非合并数组

    unpacked array会被认为是一个vector,packed array会被认为是一个scalar。

    unpacked array的声明有两种方式:

      1. int array [0:7][0:31];  array delaration using ranges

      2. int array [8][32];        array delaration using size

        当需要和标量进行数据交换时,使用合并数组很方便,而且@操作符的数据只能是标量和合并数组。所以推荐使用合并数组,还节省空间。

        bit [3:0][7:0] barray[3];   //当使用@操作符时,只能使用@(barray[0] or barray[1] or barray[2])不能使用整个barray。

        bit [31:0] src[5] = `{0,1,2,3,4},   dst[5] = `{5,4,3,2,1};                       //数组的直接初始化

        if(src == dst)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值