tomako123

导航

1.数据类型-----内建数据类型

内建数据类型:

相比于verilog中的reg和wire之外,sv中新推出了logic类型:

在sv中与logic相对应的是bit类型,他们均可以构建矢量类型(vector),他们的区别在于:
logic为四值逻辑,既可以表示0、1、x、z。
bit为二值逻辑,只可以表示1、0。

为什么sv在一开始做设计的时候有4值了还要引入二值呢?

:::因为sv在一开始设计的时候就期望将硬件的世界与软件的世界分离开。

四值逻辑类型:integer,logic,reg,net-type(例如wire,tri)
二值逻辑类型:byte,shortint,int,longint,bit

如果按照有符号数和无符号的类型进行划分:

有符号类型:byte,shortint,int,longint,integer
无符号类型:bit,logic,reg,net-type(例如wire,tri)

注:这里有符号数的负数需要用补码的方式储存,补码的计算方法:
:::忽略符号位,对剩下的位数1取反再加1

如-127:因为是负数,所以符号位为-1,绝对值为127,所以低7位全部为1,取反后全部为0,再加1,就是000 0001,所以最终结果是1000 0001。

由于一个字节中最高位是符号位,所以,计算机中+0和-0的编码是不一样的,+0的编码是:0000 0000;-0的编码是:1000 0000。于是将1000 0000规定为-128,这样就可以让有符号数多一个有用的数据点。这个值不能用普通的取反加1来计算。

在sv中有多种转换数据的方式:

  1.静态转换:即在需要转化的表达式前加上一个单引号即可:比如此处有一个有符号数a,
  我要将它转化为无符号数b,可以这样:b = unsigned'(a);(在编译时就会告诉你是否成功)
  2.动态转换:$cast(tgt,src)(仿真时才告诉你是否转化成功)
  上面两个转换方式均需要操作符号或者系统函数介入,统称为显示转换。
  而不需要操作符或者函数进行转换的一些操作,我们称之为隐式转换
  ps:如果一个带x的四位数111x隐式转换(直接赋值)给一个三位的bit类型数据,答案一定会是110
     因为四值里面的XZ转换为2值一定是0!!!

所以在做不同数据类型操作的时候一定要注意:
1.逻辑数值类型
2.符号类型
3.矢量位宽

posted on 2024-04-07 21:03  甜豆莎的辣白菜  阅读(4)  评论(0编辑  收藏  举报