【路科V0】systemVerilog基础1——数据类型

news/2024/5/19 19:53:32 标签: 数字验证, systemVerilog

数据类型

Verilog语言两种基本的数据类型:

  • 变量类型(variables)【reg,integer和time等变量类型可以用来存储组合逻辑或者时序逻辑的值。
  • 线网类型(nets)【例如wire,wor,wand和其它线网类型用来连接硬件模块,以及提供特殊的线网驱动解决方案。

这两种类型都是四值逻辑,即可表示0、1、X和Z值。

 线网类型(nets)

        线网用于建模硬件设计中的连接线路,而线网的值由线网驱动器所决定。(驱动器可以是门或模块的实例,或者连续赋值的输出。)

        在这个路科课程中,线网类型用的最多的是DUT的输出端口,多数情况下,设计的端口方向是单向的,使用wire类型。

变量类型(variables)

  • 变量类型保存在initial、always、task 和function内赋的值。
  • 变量只能用过程赋值来完成。
  • 类型是integer或time的变量一般像有相同数量位数的reg 一样运转。
  • 在表达式中integer 的值作为有符号数处理,而reg或time的值作为无符号数处理。
  • 用reg描述逻辑,integer描述循环变量和计算,real 在系统模型中使用,time和realtime保存测试装置的仿真时间。

systemVerilog  SV

SV添加了新的数据类型来帮助设计和验证工程师。

SV将硬件信号区分为

  • “类型”:表示该信号为变量(var)或者线网类型(wire) 。
  • “数据类型”:表示该数据是四值逻辑(logic)或者二值逻辑(bit)

四值逻辑 数据类型

Verilog和SV中表示存储的变量:

Verilog中:

        reg:经常用来表示存储组合逻辑或者时序逻辑的变量

        注意:实际上,reg并不一定会被综合为register,它只是用来与线网类型相对,表示存储数据的变量。

SV中:

        logic(数据类型,四值逻辑):实现通用的存储硬件数据

logic resetN;//1位宽的四值逻辑
logic [63:0] data; //64位宽的变量
logic [0:7] array [0: 255];//由8位向量元素构成的数组

        logic虽然只是表示数据类型,而在声明时,它默认会表示变量类型(variable) ,用户也可以显式声明其类型:

var logic [63:0] addr; // 64位宽的变量类型
wire logic [63:0] data; // 64位宽的线网类型

 SV二值逻辑数据类型:

SV添加了二值逻辑数据类型,帮助更高抽象级的建模,例如事务级模型。

二值逻辑数据类型:

  • bit : 1位二值逻辑变量
  • byte : 8位二值逻辑(类似于C语言char类型)
  • shortint : 16位二值逻辑(类似于C语言short类型)
  • int : 32位二值逻辑(类似于C语言int类型)
  • longint : 64位二值逻辑(类似于C语言longlong类型)

 X值和Z值的作用:

在RTL级别,

  • X值用来捕捉设计错误,例如寄存器未初始化,
  • Z值用来表示未连接或者三态的设计逻辑,但是在系统级或者事务级,Z和X很少被使用。

默认为变量类型

  • logic类型默认为变量类型,
  • bit类型默认也为变量类型。

 无符号类型与有符号类型

  • 无符号类型:logic或者bit构成的向量(vector)
  • 有符号类型:integer、 byte、 shortint、int、 longint为。

有符号类型转换成无符号类型:

        可以在有符号类型后添加unsigned来表示无符号类型

举例:

byte//有符号类型,表示的数值范围是[-128,127]。
byte unsigned//表示无符号类型,等同于bit[7:0],表示的数值范围是[0,255]。

 二值逻辑用法:

  • 在构建验证驱动组件时,无需关注硬件底层逻辑(X或者Z值),所以可使用二值逻辑实现。
  • SV在与C在发生交互时,也可以使用二值逻辑来使得两种语言的函数接口参数类型传输更为简单。

仿真行为

 四值逻辑和二值逻辑仿真开始的初值:

  • 四值逻辑变量(例如reg、 logic或者integer等),在仿真开始时的初值为X。
  • 二值逻辑变量(例如bit等),在仿真开始时的初值为0。

四值逻辑赋值给二值逻辑,会有什么情况: 

        如果四值逻辑与二值逻辑的数据类型之间发生的默认转换,那么Z和X值将转换为0

问题:二值逻辑是否可以用来综合电路?会有什么样的情况
        二值逻辑也可以用来实现可综合电路,只是二值逻辑由于没有X和Z值,因此可能会出现仿真行为同综合电路结果不一致的情况。

SV的 其他数据类型

  • SV添加void类型来表示空类型,经常用在函数定义时表示不会返回数值,同C语言的void使用方法。
  •  SV添加shortreal表示32位单精度浮点类型,同C语言的float;而Verilog的real类型表示双精度浮点类型,同C语言的double。

http://www.niftyadmin.cn/n/586983.html

相关文章

final 有哪些用法

以下都是Java的基础面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答,建议收藏,经常温习查阅。 文章目录final 有哪些用法10道不得不会的Java基础面试题fina…

伸缩布局等份flex

响应式的布局&#xff0c;跟着浏览器的变化而变化 1.给父元素设置flex布局 <section><div></div><div></div><div></div> </section> //CSS section {display: flex;width:800px;height: 100px; } section div:nth-child(1…

spring cloud设置GlobalException

背景 使用spring cloud搭建微服务时&#xff0c;我们会定义自己的返回对象&#xff0c;设置返回code&#xff0c;msg&#xff0c;data&#xff0c;便于调用方解析&#xff0c;统一格式也便于为大型项目编写client库。正常返回时没问题&#xff0c;那如果接口服务抛exception&a…

Mac 使用感受以及一些技巧、工具推荐

写在前面&#xff0c; Mac 使用感受&#xff0c;纯粹的个人偏见&#xff0c;看官大可直接跳到下面的工具推荐阅读。 17年底&#xff0c;鄙人跳槽进入一家互联网金融公司&#xff0c;公司配备的笔记本是16年款 MacBook Pro&#xff0c;8G。对于之前只使用 Windows 系统和开发环…

DataGrip 使用经验之谈

总结 JetBrains 出品&#xff0c;必属精品。 简介 DataGrip 出自JetBrains公司&#xff0c;是一款跨平台的数据库管理客户端工具&#xff0c;可在Windows&#xff0c;OS X 和 Linux上使用&#xff1b;同时支持多种数据库&#xff1a;SQL Server&#xff0c;Oracle&#xff0c;P…

【路科V0】systemVerilog基础2——自定义类型

自定义类型 通过用户自定义类型&#xff0c;以往Verilog的代码将可以通过更少的代码来表示更多的功能。 用户自定义类型使得代码的可读性更好。 自定义类型的方法&#xff1a; 通过typedef来创建用户自定义类型。通过enum来创建枚举类型。通过struct来创建结构体类型。 typ…

python3 urllib调用spring cloud服务报urllib.error.HTTPError: HTTP Error 400: Bad Request排查

背景 使用python3的urllib调用spring cloud服务接口&#xff0c;一直报错 File "E:\github\workspace\dbfree\src\test\common\test_paas_api_base.py", line 49, in test_zjkresp urllib.request.urlopen(req, timeout5)File "C:\Users\zhangjikuan\AppData\…

JavaScript学习一(alert console prompt ,数据类型)

1.alert(“”)&#xff1b;弹出输入框 2.console.log(“”)&#xff0c;向浏览器的控制台输出一句话&#xff0c;在审查元素的console中显示内容&#xff0c;&#xff0c;&#xff0c;用来调试程序 3.prompt(“”) 弹出输入框&#xff0c;用来给用户提供输入信息的位置 二.直接…