第三章 其他

接下来介绍一些验证方向之外的知识,原因有两点:一方面验证人员要对一些设计结构有个大概了解,不能什么都不知道,另一方面是笔试会经常考这些东西。

跨时钟域

当两个不同时钟频率的模块进行通信时,需要进行跨时钟域处理,否则会导致亚稳态、数据丢失等问题。

这里我直接推荐学习资料:知乎搜索“李虹江”老师,进入主页找他的文章“CDC的那些事”,这是个系列文章,看完之后基本就能搞清楚跨时钟域,我当时就是跟着这个文章学会的。或者腾讯课堂搜索“异步电路设计”,老师叫“goodman2046”,课程很便宜,一顿饭钱。

静态时序分析

笔试题经常会给出一个电路图,让你计算最大频率或者问是否存在保持时间违例。STA的知识并不难,只要记住公式的推导过程以及一些概念性的东西,基本都能做全对。

首先推荐“IC创新学院”搜索“静态时序分析”,邸志雄老师的课程,讲的非常细,看完一遍基本遇到STA的笔试题都不怕了。不过这个网站最近不知道出了什么问题一直进不去,没关系,B站也有同款视频,搜索“数字集成电路静态时序分析基础”,up主“讲芯片的邸老师”。另外一个就是腾讯课堂里的“FPGA静态时序分析精讲”,V3学院的免费课,讲的也是很不错的。

总线协议

总线协议是验证工程师必会的知识点,在实际项目中经常接触,并且也是面试官常考的问题。

先总结:AMBA总线必须学,至少要会AHB和APB,有能力的就把AXI也掌握了,其次UART、SPI、I2C、I2S、CAN协议比较简单,可以选择性的学习,最后如果有机会的话,USB、PCIe协议也可以了解一下。

AMBA协议文档方面我优先推荐的是看官方的文档,其次是网上的中文资料。原因是英文原版表达出来的意思不会偏差,而网上中文翻译的文档都会多少带着翻译人自己的理解,而且看英文文档能锻炼阅读能力。同时找一些带着AMBA接口的项目做一下,跑一跑波形,对着波形图去理解,在实践中学习。

UART、I2C等协议也是一样的方法。

记住实践很重要,只对着文档看而不去操作,是无法深入理解的。

题库

这里是一些我亲身经历的IC验证岗位的笔试面试题,并附上了我的实际回答情况,可能有错误或不全面的地方,如果发现欢迎指正。

由于笔试题存在很多非验证题目,而且笔者没有怎么整理过笔试题,所以最终选择的合适的笔试题数量不多,更多的题目可以在牛客网搜索。面试题目也只是整理了一些适合读者借鉴的题目,并且进行了筛选,和我个人简历或者项目相关的题目我都省略了。

笔试题

  • SV中类默认的成员属性是

A. Local

B. Private

C. Public

D. Automatic

答案:C。声明成员时如果没有指明,则默认类型为Public,子类和外部都可以访问;如果是local,那么只有该类可以访问,子类和外部无法访问;如果是protected,那么该类和其子类可以访问,外部无法访问。

  • 一段程序如下,请问在45这个时刻上,A B的值各是多少

A. 1,1

B. 0,1

C. 0,0

D. 1,0

答案:C。begin end块里顺序执行,因此每个延迟都是叠加的,不是具体的时刻。fork join块里并行执行,因此这两个begin end块同时开始,并且没有握手通信,互不干扰。所以在45时刻,两个begin end块都执行了“#20 A/B = 0;”,直到50时刻才被赋1,所以结果都是0。

  • 在SV中,调用$write可以自动地在输出后进行换行

A. 正确

B. 错误

答案:B。$display打印会自动换行,$write不会。

  • 以下SV程序的运行结果为

A. 32’hFFFFFFFF

B. 32’h00000000

C. X

D. 32’h00000001

答案:B。该例中定义了一个Test类,并例化出句柄t,调用new函数创建对象,并传入了一个参数值“32'h1”,这个“32'h1”赋值给了new函数中的addr,将addr的值“32'h1”赋值给“另一个”addr,但这并不是另一个addr,不是Test类中定义的addr,而是new函数自己的参数。知识点:在函数中索引一个变量名,会优先“就近寻找”,比如该例中的new函数中的addr就是形式参数addr,想要指向类中的变量,是需要this关键词指示的,比如“this.addr”,因此t句柄指向对象中的addr仍然为初始值,bit是二值逻辑,因此addr的初始值为0。在打印消息时,调用了display_addr方法,该方法中的addr同样就近寻找,发现function中没有定义addr,则继续向上一层寻找,找到类中的addr,并进行打印。因此最终打印结果为0。

  • 关于uvm sequence常用宏,以下说法不正确的是

A. uvm_do_on_pri可指定transaction发送时采用的sequencer,同时指定优先级

B. uvm_do_on可指定transaction发送时采用的sequencer

C. uvm_do_with可添加激励约束

D. uvm_do可指定transaction发送时采用的sequencer,同时添加激励约束

答案:D。宏里有“on”表示可以选择采用的sequencer,有“with”表示可以添加约束,带“pri”表示可以指定该trans的优先级。

面试题

  • 模块级和系统级验证的关注点有什么不一样

模块级验证更加注重模块接口及内部的细节,包括接口时序、代码覆盖率、边界情况等,例如模块能否处理错误的接口时序、工作时复位状态机能否正常跳回、未执行的代码分支的原因

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

数字IC验证成长录 文章被收录于专栏

本文主要讲一下我在从接触IC行业到应聘数字IC验证岗位的成长经验,为对该岗位有兴趣或准备应聘该岗位的同学介绍需要学习和掌握的知识,希望能帮助各位同学。

全部评论
感谢大佬的整理
点赞 回复 分享
发布于 2023-10-25 15:22 北京
还有别的笔试和面试题目吗?
点赞 回复 分享
发布于 2023-10-25 15:26 湖北
厉害了啊,大佬
点赞 回复 分享
发布于 2023-10-25 15:27 浙江
😉😉😉
点赞 回复 分享
发布于 2023-10-25 15:31 重庆
感觉挺难的呢
点赞 回复 分享
发布于 2023-10-25 15:34 重庆
😃😃😃
点赞 回复 分享
发布于 2023-10-25 15:38 浙江
真牛啊,大佬
点赞 回复 分享
发布于 2023-10-25 15:42 陕西
不错,真的优秀
点赞 回复 分享
发布于 2023-10-25 15:45 天津
😄😄😄
点赞 回复 分享
发布于 2023-10-25 15:48 江苏
真的强啊 厉害
点赞 回复 分享
发布于 2023-10-25 15:52 陕西
不愧是牛人
点赞 回复 分享
发布于 2023-10-25 15:54 广东
😄😄😄
点赞 回复 分享
发布于 2023-10-25 15:56 广东
🥰真羡慕
点赞 回复 分享
发布于 2023-10-25 15:58 山东
😉😉😉😉
点赞 回复 分享
发布于 2023-10-25 16:05 山东
😉真不戳
点赞 回复 分享
发布于 2023-10-25 16:09 浙江
有点难度哇
点赞 回复 分享
发布于 2023-10-25 16:11 山东
😍😍😍
点赞 回复 分享
发布于 2023-10-25 16:14 重庆
很经典的题目!
点赞 回复 分享
发布于 2023-10-25 16:16 河北

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
23 4 评论
分享
牛客网
牛客企业服务