SV刷题Day 2

245 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路


  1. 对于systemverilog的函数和任务(function / task)  ,描述不正确的是
A. 任务没有返回值
B. 任务和函数中没有任何执行语句也是不会报错的
C. 任务和函数的参数还可以指定位缺省
D. 当任务/函数运行到 endtask/endfunction的时候才会退出

本题答案选D,function可以使用 return语句在任意一点退出子程序

image.png 关于断言的知识点总结: 考察知识点:SVA的分类

  • 并发断言:并发断言基于时钟周期进行可以放置于procedural block(过程块)、module、interface及program中。在静态(形式)验证及动态仿真工具中均可以应用。 eg: property中是一个sequence
a_cc:assert property ((@posedge clk) not(a&&b));
  • 立即断言:立即断言基于事件,必须放置在程序块中,只能用于动态仿真,没有时间的概念。立即断言与并发断言关键字区分在于“property”。像Verilog的连续赋值块,当a或b变化时,a_ia会执行,当a和b都为高时断言成功,否则断言失败。

image.png

这一题做对也是有点懵的感觉。 就是== 表示 只要数值相等 即可认为ture ===表示 要类型和数值全部相等 才为ture ==? 没见过,这里是不是也可以看成是将不区分x,只判断值相等即认为True.

image.png SV 有如下优点: 同时支持设计和验证的标准语言支持约束随机的产生支持覆盖率统计分析 ; 支持断言验证

  1. 下面的选项中说法错误的是()?
A. System Verilog不能回收一个被句柄引用的对象
B. 如果对象包含有从一个线程派生出来的程序,那么只要该线程仍在运行,这个对象的空间就不会被释放
C. System Verilog中,可以通过预增量(pre-increment)操作来改变一个无类型指针
D. 任何被一个子线程所使用对象在该线程没有结束之前不会被解除分配

本题答案选C,System Verilog的句柄只能指向一种类型,即所谓的”安全类型“。在C中,一个典型的无类型指针只是内存中的一个地址,你可以将它设为任何数值,还可以通过预增量操作来改变它。System Verilog不允许对句柄作和C类似的改变,也不允许将一种类型的句柄指向另一种类型

image.png 在foreach语句中,对a[10]进行初始化赋值。a = '{0,1,0,1,0,1,0,1,0,1}. 对一个单bit的数组求和,结果也是单bit,所以直接显示 a.sum ,或者 b=a.sum。结果是1。而c的整形数据,a中有五个1,所以c=a.sum,c的值是5.因为c是int类型。所以是32bit的,这样的话c的值是5.

  1. 以下关于类的描述,正确的是:
A. 基类指针不能指向派生类对象
B. 派生类指针不能指向基类对象
C. 派生类不能有指针对象
D. 基类不能有指针对象

本题答案选B,System verilog不允许派生类(即子类)指针指向基类(即父类)对象,而基类指针可以指向派生类对象。基类和派生类都可以有指针对象。


OOP这一块的核心思想还是要好好学习,感觉自己还是基础不牢啊!