本文已参与「新人创作礼」活动,一起开启掘金创作之路!
System Verilog不允许在没有进行显式类型转换的情况下把整形变量赋给枚举变量。System Verilog要求显式类型转换的目的在于让你意识到可能存在的数值越界的情况。\
int = enum (枚举类型)
enum = T'(int)
驱动器驱动了待测设计的输入,所以A选项是驱动器的概念。
检验器负责比较来自监视器和记分板的命令,所以B选项是检验器的概念。
断言穿过命令层和信号层,负责监视独立的信号以寻找穿越整个命令的信号变化,所以D选项是断言的概念。
综上,应该选择C选项。
- 三种常用验证手段: 白盒、 黑盒和灰盒验证,下面对于黑盒验证,错误的是:
A. 黑盒验证中, 可以不需要参考模型
B. 很难验证和设计相关的特点
C. 只通过其边界信号来验证一个模块或者设计的功能
D. 是否使用黑盒验证取决于被测的复杂度
本题的答案选A,白盒验证中, 可以不需要参考模型, 黑盒无法通过添加断言和监控等到被测设计,因此需要参考模型
- 黑盒验证: 一般用于子系统以及系统级别的验证;只通过其边界信号来验证一个模块或者设计的功能;很难验证和设计相关的特点;缺点:难定位问题
- 灰盒验证: 模块测试(数字验证工程师的工作所在);
- 白盒验证:单元测试(UT);缺点:成本较高,难发现系统问题
【这题需要注意ref与this等的区分】
this关键词的作用是:如果在类的深处,想要引用类一级的变量, 可以通过this关键字很方便的做到。this关键字被用来明确地引用当前实例的类属性或类方法。
extern关键词的作用是:System Verilog中,可以将类的方法的原型定义(方法名和参数)放在类的内部,而方法的程序体放在类的外部。通过关键字extern可以实现方法的声明,然后通过作用域操作符::来表名这个函数作用于哪个类。
protected关键词的作用是:一个被标识成protected的类属性或方法具有local成员的所有特性,但是它可以被继承以及对子类可见。
ref关键词的作用是: 当调用一个带有标量变量(不是数组,也不是对象)的方法时,SV传递该变量的地址,如果想让方法也可以修改标量变量的值,就可以使用该方法。
fork...join_none块被分割成两个部分。带初始化的自动变量声明在for循环里的线程中运行。在每轮循环中,k的一个拷贝被创建并且被设置为j的当前值,然后fork...join_none(
$write)被调度,包括k的拷贝。在循环完成后,#0阻塞了当前线程,因此三个线程一起运行,打印出各自拷贝值k。当线程运行完毕后,在当前时间片已经没有其他时间残留,这时System Verilog就会前进到下一个语句执行$display。因此,最后的输出为“0 1 2”
- 对于systemverilog的队列,描述不正确的是
A. 队列是一个大小可变, 具有任意数据类型成员的有序集合
B. 可以在队列的尾部和头部插入和删除成员
C. 可以使用索引、比较操作符进行处理
D. 如果声明时没有提供初始值, 那么队列变量被初始化成一个空队列
本题答案选A,队列是一个大小可变, 具有相同数据类型成员的有序集合,一个队列只能有一个数据类型
参考解析:流操作符用于把其后的数据打包成一个比特流。<<把数据从右至左变成流。
int a[3][][];声明了一个三维的动态数组,其中第二维第三维还没确定深度。
a[0] = new[4];为a[0]分配了四个元素。分别为a[0][0],a[0][1],a[0][2],a[0][3]。
因此可以访问a[0][0]。选项a[0][0] = new[2]合法;为a[0][0]分配两个元素。
选项a[0][] = new[2];不符合语法。
a[1]尚未分配元素。a[1][0] 不合法。
同理,a[0][0]尚未分配元素a[0][0][1]不合法。