SV刷题Day 9

224 阅读1分钟

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


  1. System Verilog中引进了一种新的数据类型---队列,它结合了链表和数组的优点。队列和链表相似,可以在有一个队列中的任何地方增加或删除元素。下面选项中关于队列说法错误的是()?
A. 队列可以通过索引实现对任一元素的访问
B. 队列的声明是使用带有美元符号的下标:[$]
C. 队列中的元素是连续存放的,所以在队列中间增加或者删除元素非常方便,无论队列有多大,这种操作所耗费的时间都是一样的
D. 队列的常量只有大括号而没有数组常量中开头的单引号

本题答案选C,
队列中的元素是连续存放的,所以在队列的前面或者后面存取数据非常方便。无论队列有多大,存取数据这种操作所耗费的时间都是一样的
在队列中间增加或删除元素需要对已经存在的数据进行搬移以便腾出空间,相应操作所耗费的时间会随队列的大小线性增加。 2. Verilog和OOP都具有例化的概念,但是在细节方面却存在一些区别。下面的选项中关于Verilog和OOP中例化的概念说法错误的是()?

A. Verilog中的例化是动态的
B. System Verilog类在使用前必须先例化
C. Verilog的实例名只可以指向一个实例
D. System Verilog句柄可以指向很多对象,当然一次只能指向一个

本题答案选A,
Verilog的例化是静态的,就像硬件一样在仿真的时候不会变化,只有信号值在改变。因此,A选项是错误的。

image.png

  • 宏具有全局作用范围并且可以用于位段和类型定义
  • System Verilog支持const修饰符,允许在变量声明时对其进行初始化,但不能在过程代码中改变其值
  • 宏定义需要使用'`'符号,这样它才能被编译器识别和扩展
  • Verilog-2001增加了带类型的parameter,但其有限的作用范围仍然使得它无法获得广泛的应用

image.png #10 a = b+c; 表示延迟10个时钟单位后,将10时刻的b+c的值赋予a
a = #10 b+c; 表示延迟10个时钟单位后,将0时刻的b+c的值赋予a。 对于这种延迟,b+c的值在执行分配时被存储,但是直到延迟期之后,该值才被分配给a,而不管b或c在该时间内是否发生了变化。

image.png 函数可以包含范围声明、返回类型声明、参数声明、输入参数声明、寄存器声明和事件声明.和任务一样,函数分为静态的和动态的

  • 没有范围或返回类型声明的函数返回一个1bit的值
  • 任何表达式都可以用作函数参数
  • 函数不能包含任何时间控制的语句,也不能调用任务;
  • 函数只能返回一个值

image.png

image.png

  • a |-> ##1 b[*4]; 表示连续四个时钟都为1.
  • a |-> ##[1:4] b;表示接下来的四个时钟内有一个满足即可。
  • a |->##[0:3] b; 表示当前时钟和后续的三个时钟有一个满足即可。
  • a |-> ##1 b[=4]; 只需要后续b有4个时钟为1即可,不要求连续。

image.png

  • 在断言中不能使用变量。
  • $rose是检测上升沿的系统函数。
  • ##[4:6] 表示4个或者5个或者6个时钟,只要满足一个即可