SV刷题Day 1

495 阅读2分钟

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


  1. System Verilog可以通过在变量名后面指定维度的方式来创建多维定宽数组。假设现在有一个四状态类型的数组,例如是logic。如果代码试图从一个越界的地址中读取数据,那么System Verilog返回的值是()?
A. 0 
B. 1
C. X
D. Z

本题答案选C,因为这里的logic是四值逻辑的;对于索引越界,返回的是缺省值,而四值逻辑缺省值是X,二值逻辑缺省值是0.


官网参考解析: 如果你的代码试图从一个越界的地址中读取数据,那么System Verilog将返回数组元素类型的缺省值。也就是说,对于一个元素为四状态类型的数组,例如logic,返回的是X,而对于双状态类型例如int或bit,则返回0。这适用于所有的数组类型,包括定宽数组、动态数组、关联数组和队列,也同时适用于地址中含有X或者Z的情况。线网在没有驱动的时候输出是Z。

image.png 这里需要注意:对于SV中数组的定位方法中的返回值通常是一个队列

image.png

  1. 和Verilog相比,System Verilog提供了很多该改进的数据结构。下面选项中,不属于System Verilog引进的一些新的数据类型的是()?
A. 双状态数据类型
B. 字符串
C. 类和结构
D. 浮点数(real)

本题答案选D;我错以为类和结构不是数据类型。 System Verilog引进了一些新的数据类型,如下:
双状态数据类型(bit,byte,shortint,int,longint)
队列、动态和关联数组
类和结构
联合和合并结构
字符串
枚举类型

  1. 在systemverilog中,如果要产生一个随机数a,使 -50≤a<100,以下写法正确的是:
A. int a; a= $urandom_range (150,0) - 50;
B. int a; a= $random_range (-50,100);
C. int a; a= $urandom_range()%50 - 50;
D. int a; a= $random_range [-50,100);

本题选A,但是这个结果还是不太对,需要将题目更改为a小于等于100才合适。 解析:system verilog中没有$random_range() 函数,只有$random()$urandom_range()函数$urandom_range的上限大于下限,系统会自动调换。随机的值包括上下界
$random():平均分布,返回32位有符号随机数
$urandom():平均分布,返回32位无符号随机数
$urandom_range():在指定范围内的平均分布