学习记录1(SV概述和数据类型)

一、SV概述和数据类型
1.为什么大型的数字芯片或者项目不用Verilog进行验证,而使用System Verilog?
(相比于Verilog,SV有哪些优势)
(1)代码量,相较与Verilog,SV的代码量大大减少。
(2)强大的随机验证能力,Verilog也具有验证能力,但是SV的验证能力更加强大,不仅能一次性产生上千万条仿真激励,还集成了断言、覆盖率、进程间通信等强大验证功能。
(3)可复用性,Verilog代码量多,复用起来较为困难,SV通过沿用C/C++的面向对象的编程,通过类、继承、多态三大特性,可以更加灵活的构建可多次复用的验证环境。
(4)丰富的数据类型接口,引入了Verilog中没有的logic、int等数据类型。
2.二值与四值逻辑有什么区别?
二值逻辑只有两个逻辑值,分别是0和1,四值逻辑有四个值,分别是0/1/x/z。四值逻辑由于可选项有四个,这大大增加对验证设备要求。
3.有哪些是二值数据类型,哪些是四值数据类型?分成四类怎么分?
按逻辑值数量:
二值类型数据:bit、bety、int、shortint、longint
四值类型数据:reg、net、logic、integer、time
按符号划分:
有符号类型数据:bety、int、integer、shortint、longint
无符号类型数据:bit、logic、reg、net、time
划分四类:
二值有符号:bety、int、shortint、longint
二值无符号:bit
四值有符号:integer
四值无符号:reg、net、logic、time
明显的观察到,二值数据类型有符号的多,四值数据类型无符号的多,巧记:二值有多,四值无多,bit和integer背叛师门。
4.验证的组件包含哪些,用英文表述是什么?分别承担什么内容?
组件只有四个,分别是激励产生器(stimulus generator)、驱动器(driver)、监视器(monitor)、检查器(checker)。激励产生器负责产生仿真测试所需要的输入激励,驱动器负责将产生信号以时序形式发送个DUT(被测模块),监视器负责监控被测模块的输出信号并记录,检查器负责比较数据。
注:simulue generator产生的激励既有正常的,也有异常的,包含各种可能,主要通过DUT验证是否能达到预期的结果,通过比较器输出比较结果。
5.为什么要用到C/C++中类的概念?
因为在同一验证环境下,不同组件的功能和处理的数据内容不相同,需要重复构建,比较复杂,此外在不同验证环境下,相同的组件的功能和处理的数据是相似的,较难区分,因此需要沿用C/C++中的类来灵活的构建验证环境。
6.SV中如何区分硬件世界和软件世界?
module/interface描述硬件世界
Program/interface描述软件世界。注:都是过程块,有end
7.SV中过程块是如何使用的?
Initial可以在module/interface/program中使用
Always可以在module/interface中使用。
注:interface相当于是将验证环境与DUT连接起来的总线,不用考虑具体信号线的信号类型,大大减少了验证工程师的负担。
8.线程控制的三种控制语句是什么?有什么特点?
分别是fork--join,fork---join_any,fork---join_none
第一种fork---join是指在进入块后,只有所有事件(任务)执行完后才执行块之后的语句(一般以耗时最长的任务为标准,因为所有任务是并行同时进行的)
第二种fork---join_any指的是进入块后任意一个事件(任务)执行完毕后就开始执行块后的语句,耗时较长的块内任务也继续执行。
第三种fork---join_none是指进入块之后将所有任务启动后就执行块后语句,不用等任务执行完。
9.随机激励产生的关键字?
Rand产生随机数,constrain band,constrain约束条件band是约束名,inside表述约束范围
dist表示产生权重,两种方式scr dist {0:=40,[3:1]:=60}(等号权重,每个权重都是60,40+60*3=220)以及dst dist {0:/40,[3:1]:/60}(除号权重,权重等分60/3=20,40+60=100)
10.SV和Verilog中的数据类型有什么区别?
Verilog和SV的数据类型均分为variable类型和net两种,但是SV中还有type和data type两种属性,type表示数据类型(上面的variable和net),data type表示数据是2值还是4值。
注:net只能是4值,variable可以是2值也可以是4值。
11.仿真验证为什么要引入2值逻辑?
(1)大幅提升仿真性能(可选值少,只有01,仿真器负担小)
(2)实现与验证环境的无缝衔接。(1.验证环境与C/C++中的数值类型都是二值,在数据表达上可以互通。2.可通过DPI接口直接调用C/C++中的函数,不会出现4值逻辑,避免了x态的污染)
12.不同类型的数值进行赋值时,位宽不一致可能发生什么?应该怎么做?
Logic对应的是bit类型的四值逻辑,当进行位运算是右端对齐,高位补零。
如果赋值运算符右侧位宽小于左侧位宽,则进行位拓展,复制右侧最高位给扩展位。
四值(例如logic)给二值(例如bit)进行赋值时,先将四值映射成二值,0/x/z都映射成0,1映射成1。
将有符号变量直接赋值给无符号的变量时,以8bit为例,8个比特位(包括最高位)会被原封不动地复制过去,但“符号位”这个身份在赋值给无符号变量后就失效了,无符号变量会把整个8位都当作普通数值来解析。

posted on 2026-07-07 16:14  tuck0603  阅读(0)  评论(0)    收藏  举报

导航