寒武纪 验证方向笔试真题·含解析

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 por(t 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 进制程序)执行的中间结果。

😎 更多IC岗笔面真题资源会陆续分享给大家的!整理不易!点个👍

#寒武纪##笔试题目##校招##社招##芯片设计工程师##深度学习#
全部评论
很久之前就看过了,能不能整点新货
1 回复 分享
发布于 2022-04-26 20:49

相关推荐

程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
6
56
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务