SystemVerilog学习
关于SystemVerilog,准备买入路科验证V1的课程进行学习,同时看SystemVerilog的官方文档,快速掌握基本语法规则
等语法规则掌握之后,尝试进行实战,从今天开始,以后每天进行Update --3.28
路科V1
1.1 SV的历史背景
1.2 SV数据类型
回顾Verilog的数据类型
- 变量类型(variables) 和线网类型(nets),皆为四值逻辑 0、1、 X、 Z
- reg、integer、time等变量类型可存储组合逻辑或时序逻辑的值
- wire、wor、wand等线网类型用于连接硬件模块
- reg 被综合为寄存器flip-flop和latch锁存器(case写default value,if写else来避免)
Verilog的线网类型
- 线网用于建模结构化描述中的连接线路和总线线网的值由线网驱动器决定
- 驱动器可是门、模块实例或连续赋值的输出
Verilog的变量类型
- 变量类型由initial、always、task和function等过程语句块进行赋值
- integer和time类型变量和reg型变量运作方式相同,integer的值作为有符号数处理,reg、time值作为无符号数处理
- reg用于描述逻辑,integer描述循环变量和计算,real在系统模型中使用,time和realtime保存测试装置的仿真时间
SV新添加的数据类型
- SV将硬件信号区分为类型和数据类型
- 类型中包含有变量(variables)var或线网类型(nets)wire
- 线网类型赋值只能用连续赋值语句assign
- 变量类型赋值可使用连续赋值或过程赋值
- 数据类型包含四值逻辑(logic)和二值逻辑(bit)两种,而Verilog中无数据类型,都是四值逻辑
- 在tb中可大量使用logic类型变量,少用wire,仅当多于一个驱动源或端口是双向(inout)时用wire
- 拿到一个信号,判断它的类型、数据类型、有无符号这三方面
四值逻辑数据类型
- SV将硬件信号区分为类型和数据类型
- 类型中包含有变量(variables)var或线网类型(nets)wire
- 线网类型赋值只能用连续赋值语句assign
- 变量类型赋值可使用连续赋值或过程赋值
- 数据类型包含四值逻辑(logic)和二值逻辑(bit)两种,而Verilog中无数据类型,都是四值逻辑
- 在tb中可大量使用logic类型变量,少用wire,仅当多于一个驱动源或端口是双向(inout)时用wire
- 拿到一个信号,判断它的类型、数据类型、有无符号这三方面
- SV中logic数据类型可以通用存储硬件数据
- logic虽然只表示数据类型,但声明时会默认类型为变量类型var
二值逻辑数据类型
- SV添加了二值逻辑数据类型,用来对比RTL更高抽象级的模型建模:bit、byte、shortint(16 bit)、int(32bit)、longint(64bit)
- 在RTL级别,X用来捕捉设计错误,如寄存器未初始化,Z值用来表示未连接或三态逻辑
- 和logic类似,bit类型默认也为变量类型
- 在tb中可大量使用logic类型变量,少用wire,仅当多于一个驱动源或端口是双向(inout)时用wire
- 拿到一个信号,判断它的类型、数据类型、有无符号这三方面
- SV中logic数据类型可以通用存储硬件数据
- logic虽然只表示数据类型,但声明时会默认类型为变量类型var
有符号和无符号类型
- logic或bit构成的向量(vector)是无符号类型
- 在integer、byte、shortint、int、longint为有符号类型
- 在有符号类型后添加unsigned表示无符号类型:byte的数值范围[-128:127], byte unsigned [0,255]
- 构建验证环境总线功能模型(BFM,BUS-Functional Model)时,即在对硬件做测试发送激励时无需关注硬件底层逻辑(X/Z),可用二值逻辑
- SV在与C语言发生交互时也可以使用 二值逻辑使数据传输更简单
内建数据类型
- 四值逻辑类型:integer、logic、reg、net-type(wire、tri)
- 二值逻辑类型:byte、shortint、int、longint、bit
- 有符号类型:byte、shortint、int、longint、integer
- 无符号类型:bit、logic、reg、net-type(wire、tri)
仿真行为
- 四值逻辑变量如reg、logic或者integer在仿真开始时初值为X
- 二值逻辑变量如bit在仿真开始时初值为0
- 四值逻辑和二值逻辑数据类型之间转换时,Z/X换为0
- 二值逻辑综合出来的电路可能和仿真结果不一致
其他类型
- void表示空类型,经常用在函数定义时不会返回数值,跟C语言的使用方法类似
- shortreal表示32位单精度浮点类型,同C语言的float
- Verilog中的real类型表示双精度浮点类型,同C语言的double
浙公网安备 33010602011771号