平头哥笔试题
-
Systemverilog 里面有哪些是四值变量?
Verilog-1995中有两种基本的数据类型:
变量和线网(net)。所谓四值变量是指他们有四种取值0,1,Z和X。
reg(单比特或多比特的无符号数)
wire(线网)
time(64比特的无符号数)
interger(32比特的有符号数)
logic(sv改进的reg)
-
sv里面动态数组、关联数组、队列各自的优缺点,应用场景。
特点:
动态数组:可以在仿真时分配空间或者调整宽度,这样仿真中就可以使用最小的存储空间。
关联数组:用来保存稀疏矩阵的元素,当一个非常大的地址空间进行寻址时,sv只对实际写入的元素分配空间,比定宽数组和动态数组所占用的空间要小得对。
队列:结合了链表和数组的优点,可以在队列的任意位置增加或者删除元素,这类操作在性能上比动态数组小得多,可以通过索引对任意元素进行访问。
应用场景:
动态数组:随机事务不确定位宽大小;
关联数组:需要建立一个超大容量数组,用关联数组来存放稀疏矩阵的元素;
队列:增加元素或者删除元素方便。
-
function和task的区别
函数(function) 任务(task) 函数能调用另一个函数,但不能调用任务 任务能调用另一个任务,也能调用另一个函数 函数总是在仿真时刻0就开始执行 任务可以在非零时刻执行 函数一定不能包含任何延迟、事件或者时序控制声明语句 任务可以包含延迟、事件或者时序控制声明语句 函数至少有一个输入变量,可以有多个输入变量 任务可以没有或者多个输入(input)、输出(output)和双向(inout)变量 函数只能返回一个值,函数不能有输出(output)或者双向(inout)变量 任务不返回任何值,任务可以通过输出(output)或者双向(inout)变量传递多个值 -
数据类型怎么转换,静态强制类型转换和动态强制转换有什么区别?
静态转换:转换时指定目标类型,并在需要转换的表达式前加上单引号即可;
动态转换:使用函数 $cast
区别:静态类型转换操作不对转换值进行检查,具有一定的危险性;而动态类型转换在运行时将进行检查,如果转换失败会产生运行时错误。
-
virtual interface作用
- interface只能在module中声明,在class中要用virtual interface;
- virtual interface是在仿真运行时才连接到DUT上,如果只是interface,在编译时就必须进行连接,在class中时是automatic,在运行的时候产生;
- virtual interface主要完成接口的动态分配,只要在top层定义virtua