SV刷题Day 4

204 阅读2分钟

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


image.png

A. a的值是 1110
B. a的值是 11100
C. c的值是 0001
D. c的值是 1101

本题选C.
在system verilog的赋值语句中,如果将超过变量位数的值赋予某一个变量,则会自动截去高位,只保留地位。a的值是 1100.
当位数不足时,将数值赋予变量的低位,对于无符号数高位为0. 对于有符号数,高位补充符号位。c是无符号数,所以c的值是0001.

  1. 下面哪一个语句可以在program中定义或者添加()
A. initial
B. always
C. interface
D. module

本题选A,
program属于软件的范畴不能出现硬件的描述,如always,可以定义initial,进行多个初始化.
initial软件领域,always硬件领域,interface软硬件接口领域,module硬件领域 image.png 本题选B,
考虑静态函数和动态函数的值的累积问题,得到
niu1=1;
niu2=1;
niu1=count1(niu1); 此处niu1=1 r=1
niu2=count1(niu2); 此处niu2=2 r =2
niu2=count2(niu2); 此处niu2=2 r为动态变量,值清空
niu1=count2(niu1); 此处niu1=1 r为动态变量,值清空

image.png

image.png 4. 对于systemverilog的动态数组,描述错误的是:

A. 系统函数$size() 可以返回动态数组大小
B. 动态数组拥有内置函数size() ,其不能用于静态数组
C. int men[2][]  固定大小的非压缩数组中带 2个动态的整型子数组
D. 空间大小在运行中确定,如向其写入5个bit来确定其当前的大小

本题答案选D,
动态数组拥有内置函数size() ,其不能用于静态数组
注意区分系统函数和内置函数,AB都正确,描述的不是一个函数
动态数组初始定义时是空的, 没有分配任何空间, 使用前必须通过调用new[] , 并在“ [ ] ” 中输入期望的长度数值来分配空间。不是有输入数据决定的.

image.png

image.png 在for循环中使用了fork...join_none。System Verilog首先对fork...join_none里的线程进行调度,但是由于#0时延的存在,这些线程要在原始代码块之后执行。所以打印出来的是“3 3 3”,即循环终止时索引变量j的值。 这一题需要重点理解一下