SystemVerilog基本语法总结(下)

2018年IC设计企业笔试题解析-(验证方向)
1、请简述:定宽数组,动态数组,关联数组,队列四种数据类型的各自特点
解析:
(1)定宽数组:其宽度在声明的时候就指定了,故其宽度在编译时就确定了。
(2)动态数组:可以在仿真时分配空间或者调整宽度,这样在仿真中就可以使用最小的存储量。在声明时,其下标为空[ ],使用new[ ]操作符来分配空间。
(3)关联数组:SystemVerilog提供关联数组来保存稀疏矩阵的元素。一般用在对非常大的空间进行寻址,当对一个非常大的地址空间进行寻址时,SystemVerilog只为实际写入的元素分配空间,这样可以节省空间。
(4)队列:结合了链表和数组的优点。可以在队列中额任何位置增加或者删除元素,这类操作在性能上的损失比动态数组小得多,因为动态数组需要分配新的数组并复制所有元素的值。队列也可以通过索引实现对任何一元素的访问。
2、简述在TB中使用interface和clocking block的好处
解析:
(1)由于在设计当中往往含有几百个端口信号,需要数页来声明信号与端口。所有这些连接都是极易出错的。因为一个信号可能流经过几个设计层次,它必须一遍又一遍的声明和互联,最糟糕的是如果你想添加一个新的信号,它必须在多个文件中定义和连接。而通过interface,便可以解决这些问题,interface包含了连接,同步,甚至是两个或者多个块之间的通信,只要在interface里面声明过的信号与端口,在其它模块都可以共用。
(2)使用clocking block,可以保证测试平台在正确的时间点与信号交互,而不只是随着一个同步时钟采样与验证,一个时钟块,可以对应一个时钟域。
3、以下代码中,x取各个值的概率是多少?
x dist {0:=1,[1:3]:=1};
解析:
x取0,1,2,3的概率都为1/4。
4、SV OOP编程中什么需求下必须使用virtual methods(virtual function/ virtual task)
解析:
当你需要对象调用的methods(funtion或者task)可以随着真正的对象的类型去选择method而不是根据句柄的类型去调用methods的时候,你就必须将类里的method声明为Virtual method。
5、factory 实现包含哪三步?使用factory带来什么好处?
解析:
factory的实现包含三步
(1)注册:当定义一个类的时候,必须要对其类型进行注册。
(2)实例化对象:在对component或object型对象进行实例化的时候要使用静态方法create(),不能采用new()去实例化。也就是要用如下实例化格式:
object_name = class_type::type_id::create("object_name",this);
(3)重载override:在需要override的时候,按照类型或者名称去override原来的对象。
Factory的好处是便于创建模块化、可复用的测试平台。同时Factory使得类的重载与复用变得更加简单。
6、analysis port 是否不连或者可以连到多个impport?
解析:
都可以
第一,默认情况下,一个 analysis port( analysis export )可以连接多个 IMP ,也就是说, analysis port( analysis export)与 IMP 之间的通信是一种一对多的通信,而PORT 和 EXPORT 与 IMP 的通信是一种一对一的通信。 analysis port ( analysis export)更像是一个广播。
第二,作为 PORT 和 EXPORT ,有 put, get, transport 操作,虽然如前面所示,一个 PORT 要么是 put_port,要么是 get_port,要么是 transport_port ,不可能是三者兼有,但是毕竟是有这三种操作。但是对于 analysis port( analysis export)来说,它只有一种操作 write 。 write 的意思就是广播一下,剩下的事情就与他无关了。
第三,作为 PORT 和 EXPORT,都有阻塞和非阻塞的区分。相应的 put, get,transport 操作也分成了阻塞和非阻塞的。但是对于 analysis port 和 analysis export 来说, 没有阻塞和非阻塞的概念。 因为它本身就是广播, 不必等待与其相连的其它 port的响应。所以不存在阻塞和非阻塞。
7.请简述一个slave vip的 dataflow
解析:
Driver 向sequencer申请发生请求,然后sequencer通过sequence里面的body产生激励信号再发送给Driver,Driver再把激励信号转换为可以驱动DUV的时序信号。
8.runphase和 mainphase能不能同时存在?为什么?
解析:
可以同时存在,
UVM 把 run_phase 又分割成了 12 个小的 phase, 这 12 个小的 phase各自在执行顺序方面与 run_phase 完全相同,即自下而上的启动,同时运行。
这 12 个动态运行的 phase 与 run_phase 之间有什么关系。从本小节的图中可以看出,这 12 个动态运行的 phase与 run_phase 之间是并列的关系,这是不是也意味着它们之间的执行也是并列的呢?答案是确定的。
9.如果一个模块的寄存器接口由APB变为AXILite,在寄存器模型的使用中需要做什么改变?
解析:
因为AXI-lite相对于APB而言的数据读写通道是分离的,控制和数据通道分离,就可以不等需要的操作完成,就发出下一个操作,流水线操作,所以要从field字段属性,和register属性和registerfile三个方面修改,要创建对应的RAL适配器;
要添加如下的信号:
(1)读地址通道,包含ARVALID, ARADDR, ARREADY信号;
(2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;
(3)写地址通道,包含AWVALID,AWADDR, AWREADY信号;
(4)写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;
(5)写应答通道,包含BVALID, BRESP, BREADY信号;
(6)系统通道,包含:ACLK,ARESETN信号。
10、什么情况使用宏定义,什么情况使用运行时参数?
解析:
Verilog
1)宏
全局作用范围,且可以用于位段或类型定义。当需要局部常量时,可能引起冲突。
2)Parameter
作用范围仅限于单个module
12:cpu在芯片中的主要作用有什么?
解析:
cpu简称中央处理器,它是软硬交互的一个节点,通过写C代码可以控制硬件电路的工作,CPU在这里就是将C代码经过编译器得到的机器码转化为对具体电路的控制和逻辑运算。例如:在C代码里要完成对某soc芯片内部一个寄存器的读写操作,那么在芯片内部中,cpu一般作为总线上的master控制总线,通过对总线的读写操作,进而控制在总线上slave模块的读写控制。
13:arm中执行的c程序如何和uvm的seq进行交互。
解析:
SystemVerilog可以通过DPI,与C/C++语言进行交互。在UVM的Sequence里面通过调用DPI接口,完成交互。arm中的c程序,在硬件里,就是执行一段二进制代码,属于DUV的部分,相当于uvm和duv内部进行交互,获取c程序(实际为2进制程序)执行的中间结果。
posted @ 2019-11-05 12:08  Zhangxianhe  阅读(5203)  评论(0编辑  收藏  举报