首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
crawfd
电子科技大学 IC验证工程师
发布于四川
关注
已关注
取消关注
@火车驶向云外(材料转验证):
转行上岸年薪40W+学长吐血整理:IC面试之UVM/C等
1、 uvm的主要(树)结构 2、解释uvm里面的factory机制和其优势 ①factory机制也叫工厂机制,其存在的意义就是为了能够方便的替换TB中的实例或者已注册的类型。一般而言,在搭建完TB后,我们如果需要对TB进行更改配置或者相关的类信息,我们可以通过使用factory机制进行覆盖,达到替换的效果,从而大大提高TB的可重用性和灵活性。 ②要使用factory机制先要进行: 1)将类注册到factory表中 2)创建对象,使用对应的语句 (type_id::create) 3)编写相应的类对基类进行覆盖。 ③override 3、 sequence,sequencer, driver的通信机制 ①driver中的seq_item_port和Sequencer的seq_item_export的连接方式(和普通的TLM端口类似) ②在sequence中,发送完数据包后,需要通过get_response(req)来获取响应。 在driver中,将数据包下发dut后,需要先构造一个rsp,再获取req的id信息,最后将rsp反馈给sequence。 具体实现如下图所示: 4、在class中为啥要用virtual interface 而不能用interface?(常问) Interface在编译阶段就要分配空间,而class是运行时是通过创建才会分配空间,所以不能在class里声明interface,必须加virtual把它声明成句柄,运行时再指向句柄。 5、 phase有哪些,9大phase加上12分支phase都要求说 ①9大phase:同一component顺序执行,不同component并行执行 ②12分支phase:并行执行 1、pre_reset_phase/reset_phase/post_reset_phase (复位) 2、pre_configure_phase/configure_phase/post_configure_phase(配置) 3、pre_main_phase/main_phase/post_main_phase(主要测试内容) 4、pre_shutdown_phase/shutdown_phase/post_shutdown_phase(等待DUT完成测试) 6、 寄存器模型里,update()和mirror()方法的作用 ①mirror()不会返回读回的值,但是会将对应的镜像值修改。在修改镜像值之前,用户还可以选择是否将读回的值与模型中的原镜像值进行比较; ②当寄存器的期望值与镜像值不相同时,可以通过update()方法来将不相同的寄存器通过前门访问或者后门访问的方式做全部修改。 7、 Callback介绍一下 ①callback机制作用 1)在UVM验证平台,最大用处就是为了提高验证平台的可重用性; 2)在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例; 3)还可以通过Callback机制构建异常的测试用例; ②callback机制步骤 1)在UVM组件中内嵌callback函数或任务; 2)声明一个UVM callback空壳类; 3)从UVM callback空壳类中扩展UVM callback类; 4)在验证环境中创建并登记UVM callback实例。 8、covergroup在哪里定义,哪里例化,有哪些,分别怎么做采样,根据什么来写 9、说一下pre_randomize, post_randomize, randomize; 10、学过什么脚本,学到什么程度 11、C中的静态变量,动态变量怎么样;C中有关指针的问题 12、C中,预编译的方法怎么用(好像是define,还有其他的) 13、工厂机制有什么用 14、sequence和virtual sequence有什么不一样 15、config怎么用,利用config怎么给sequence配置 16、 聊一聊UVM整个验证环境的层次,还有验证步骤 ①UVM验证环境层次 ②读和理解spec->制定验证策略和方法—>提出验证点和写验证计划—>搭建验证平台—>回归测试—>收集覆盖率 17、object和component有什么区别 UVM中component也是由object派生出来的,不过相比于object, component有很多其没有的属性,例如phase机制和树形结构等。在UVM中,不仅仅需要component这种较为复杂的类,进行TB的层次化搭建,也需要object这种基础类进行TB的事务搭建和一些环境配置等 18.uvm验证环境的构成、uvm每个组件的作用、agent的作用 ①uvm_sequencer sequencer,即测序器。该组件就如同一根管道。从这个管道中会产生连续的激励事务,并最终通过TLM端口送至driver一侧。它也是一个参数类。sequencer既管理着sequence,同时也将sequence中产生的transaction item传送到driver的一侧。 ② uvm_driver driver,即驱动。该类会从uvm_sequencer类中获取事务(transaction),经过转化进而在接口(interface)中对DUT进行时序激励。任何继承于uvm_driver的类都需要注意的是:该类是参数化的类,因此在定义时需要声明参数的类型。uvm_driver类的定义如下: class uvm_driver #(type REQ = uvm_sequence_item, type RSP = REQ) extends uvm_component;可以看出,默认的参数类型是uvm_sequence_item类的句柄,所以在声明时要注意传入子类句柄,否则会造成无法访问子类成员变量。 driver类与sequencer类之间的通信就是为了获取新的transaction,而这一操作是通过其上的TLM端口的pull的方式,从sequencer一侧get到的。 ③ uvm_monitor monitor,即监控器。该类是为了监测接口数据。任何需要用户自定义数据监测行为的monitor都应当继承于该类。 uvm_monitor组件类通常执行的功能包括: (1)观测DUT的接口,并且收集总线信息; (2)永远保持PASSIVE模式:即永远不会驱动DUT; (3)在总线协议或者内部信号协议的观察时,可以做一些功能和时序的检查; (4)对于更复杂的检查要求,它们可以将数据发送至其它验证组件,如scoreboard、reference model等。 ④ uvm_agent agent,即代理。该组件是一个容器类,是一个标准的验证环境“单元”,里面通常包含一个driver、一个monitor以及一个sequencer。 有时为了复用,uvm_agent中只需要包含一个monitor,而不需要driver和sequencer。此时可以通过设置变量 is_active 来进行有条件的例化: uvm_active_passive_enum is_active = UVM_ACTIVE; 当is_active的值为 UVM_ACTIVE 时,表示处于active模式的agent需要例化driver、sequencer和monitor。如果值为 UVM_PASSIVE,则表示agent是passive模式,只可以例化monitor。即:active模式的agent既能激励DUT,也可以监测它;passive模式则只有监测功能。 ⑤ uvm_scoreboard scoreboard,即记分板。该组件用于进行数据的比对报告:对来自monitor的数据和来自reference_model的数据进行比对,看结果是否一致。通常会在scoreboard中声明TLM端口以供monitor传输数据。 ⑥ uvm_env env,即环境。该组件是一个结构化的容器,它可以容纳其它组件,也可以作为子环境在更高层次中被嵌入。其中例化了多个uvm_agent和其它组件,这些不同组件共同构成一个完整的验证环境。 ⑦uvm_test uvm_test为用户自定义类的顶层结构,是验证环境建立的唯一入口。只有通过uvm_test才能正常运转UVM的phase机制,进而控制整个验证平台的有序运行。它不但决定着验证环境的结构和连接关系,也决定着使用哪一个测试序列。所有的test类都应该继承于uvm_test,否则将无法启动test的运行。 19、sequencer和driver握手的过程 20、uvm有哪些phase,各个phase的作用、12个小的phase 21、Field automation机制 22、Configure DB机制、顶层传参,传到sequence里面,怎么传? 23、UVM各个component之间的通信机、UVM TILM通信,解释一下 ①通信分为,单向通信,双向通信和多向通信 · 单向通信:指的是从initiator到target之间的数据流向是单一方向的 · 双向通信:双向通信的两端也分为initiator和target,但是数据流向在端对端之间是双向的 · 多向通信:仍然是两个组件之间的通信,是指initiator与target之间的相同TLM端口数目超过一个时的处理解决办法。 · 通信端口按照类型可以划分为三种: 1)port:通信请求方initiator的发起端,initiator凭借port端口才可以访问target。 2)export:作为initiator和target中间层次的端口。 3)imp:只能作为target接收请求的响应端,它无法作为中间层次的端口,所以imp的连接无法再次延伸。 ②blocking阻塞传输的方法包含: · Put():initiator先生成数据Tt,同时将该数据传送至target。 · Get():initiator从target获取数据Tt,而target中的该数据Tt则应消耗。 · Peek(): initiator从target获取数据Tt,而target中的该数据Tt还应保留。 ③通信管道: · TLM FIFO:可以进行数据缓存,功能类似于mailbox,不同的地方在于uvm_tlm_fifo提供了各种端口(put、get、peek)供用户使用 · analysis port:一端对多端,用于多个组件同时对一个数据进行处理,如果这个数据是从同一个源的TLM端口发出到达不同组件,则要求该端口能够满足一端到多端,如果数据源端发生变化需要通知跟它关联的多个组件时,我们可以利用软件的设计模式之一观察者模式实现,即广播模式 · analysis TLM FIFO 1)由于analysis端口提出实现了一端到多端的TLM数据传输,而一个新的数据缓存组件类uvm_tlm_analysis_fifo为用户们提供了可以搭配uvm_analysis_port端口uvm_analysis_imp端口和write()函数。 2)uvm_tlm_analysis_fifo类继承于uvm_tlm_fifo,这表明它本身具有面向单一TLM端口的数据缓存特性,而同时该类又有一个uvm_analysis_imp端口analysis_export并且实现了write()函数: · request & response通信管道 双向通信端口transport,即通过在target端实现transport()方法可以在一次传输中既发送request又可以接收response。 24、代码覆盖率有哪几种、项目里面哪些印象比较深.说一下学习验证的时候哪一部分感觉比较困难 25、sequence item在哪里定义,如何产生 26、sequence的启动在哪里,启动方式 27、除了m_sequencer,p_sequencer之外还了解过其他的方式吗 28、factory工厂机制 new 和create区别 29、phase机制,run_phase、要详细讲 顺序 功能等 30、sequence机制在不在UVM树中 31、testbeach中怎么设置run_test() 32、sequence、sequencer、driver之间握手机制 33、怎么检查checker中的Reference model或者说怎么确定写的refmod是正确的 34、在哪里设置agent的形式 35、config中,顶层做什么,底层做什么,他们的第三个参数是什么, 36、聊聊AHB,APB 37、.TLM通信都要讲 多个port能不能给一个imp? 一个port能不能给多个imp? 38、几个agent? agent功能详细讲 39、激励的产生,激励如何配置,如何启动 40、start 和uvm_do uvm_do讲清楚都实现了什么功能 41、chnl和scordboard之间如何传输信息讲清楚 42、get put peek都什么功能讲清楚 peek是查看端口内部的数据事务但是不删除,get是获取后立即删除。我们一般会先使用peek进行获取数据,但不删除(保证put端不会立马又发送一个数据),处理完毕后再用get删除。 43、sequence driver sequencer之间联系及功能 44、懂不懂C、懂不懂phython 45、master agent你是怎么写的、agent怎么写的,driver说一下怎么实现的 46、virtual sequence怎么获取apb的read数据 47、讲讲uvm重载, ①set-type_override_by_name(initial_type_name,override_type_name bit replease=1): 在队列m_type_override[$]中放入override信息 ②set_inst_override_by_type(initial_type,override_type full_inst_path) 这个是路径替换,特定UVM路径下类的替换 48、phase自顶向下怎么理解 49、scoreboard怎么比对的 50、AHB总线burst有什么限制,AHB和AHB_lite有什么区别 51、介绍AHB总线,decode有什么作用,什么信号表示数据开始传输,ready信号是谁发出来的 52、框图并说说怎么工作的。接口是什么接口,寄存器是怎么配置的,然后covergroup是怎么定义的 53、object和component有什么区别
点赞 5
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 17:18
科大讯飞_教育BG_后端开发(准入职员工)
AI Coding实战技巧
提示词首先是提示词编写,可以套用模板1. 基础代码生成模板 请用【语言/框架】编写【功能名称】 要求: 1. 输入:【明确输入参数/数据】 2. 输出:【明确输出格式/结果】 3. 约束:【简洁/注释完整/无冗余/兼容XX版本】 4. 额外:【添加测试用例/错误处理/日志】 2. 代码修复 / 排查模板 这是我的【语言】代码,运行时报错【错误信息】 代码: 【粘贴代码】 请: 1. 定位错误原因 2. 给出完整可运行的修复代码 3. 解释修改点和原理 3. 代码优化 / 重构模板 请优化这段【语言】代码,目标: 1. 提升可读性/性能/可维护性 2. 符合行业最佳实践 3. 保留原有所有功能 ...
点赞
评论
收藏
分享
03-31 22:12
广西大学 算法工程师
腾讯 AI应用开发 一面
1. 你最近在学哪些课程或技术方向?2. 你有没有使用过 AI 相关工具?有,用过 Cursor 和 ChatGPT。主要是辅助写一些重复性代码、补测试用例、解释报错、查 API 用法,也会用来做知识点对比,比如 synchronized 和 ReentrantLock 的区别,或者分析 SQL 为什么慢。一般我会把它当辅助工具,不会直接照搬结果。3. 你用 Cursor 的时候遇到过什么问题?最大的问题是上下文理解不一定完整,尤其是跨文件和跨模块的时候,生成的代码可能能跑,但不一定适合当前项目。还有就是它有时会忽略边界条件,比如空值、并发安全、事务失效这些问题,所以关键逻辑我还是会自己过一遍...
AI-Agent面试实战...
点赞
评论
收藏
分享
03-26 08:58
已编辑
门头沟学院 Java
快手暑期实习(附面经攒人品
ttl: 3.19一面晚上过3.20二面3.23oc3.25offerbase:末9有一段中小厂实习一面面经:(总体时长一个小时二十分钟左右没什么八股,主要都是问项目和场景题1.实习(问了有四十分钟,感觉面试官很看重实习这一块,一直在拷打,问到后面我都要疯了,好在准备得比较充分1️⃣用的是什么中间件,有参与技术选型吗,实习的项目里为什么选这个RabbitMQ而不是kafka,为什么不用RocketMQ,为什么放弃异步,自己的项目里面使用的是kafka,那你觉得项目和实习的中间件选型有差异的原因是什么,他们之间的区别在哪里,底层的原因知道吗(高柱到这里已经快疯了,但是硬着头皮答完了,主要是从一致性吞吐量和框架的契合度答,面试官说答得挺好的,应该是没什么问题,这一块就问了快半个小时,到这里我已经快疯了2️⃣项目怎么对接上下游3️⃣介绍项目的难点重点4️⃣微服务(高柱实习是单体项目没涉及这一块5️⃣Redis的使用2.项目:1️⃣智能客服是怎么应用在项目里的(langchain4j➕rag➕functioncalling)2️⃣RAG了解多少3️⃣文本向量化的难点是什么,了解哪些大模型的知识(我一点不懂,纯瞎扯,但貌似扯对了4️⃣对ai的态度是什么,aicoding相关5️⃣怎么保证多节点下Caffeine缓存里面数据都是一致的(答的是短ttl,面试官不是很满意,但是我确实不太懂这个怎么保证,后来查了还是不懂怎么保证6️⃣Redis的使用,和你的实习项目的使用有区别吗,还有一些引申问题3.八股(含量不高,就是走个过场1️⃣进程的内存布局2️⃣Redis三剑客3️⃣微服务相关知识(高柱已经忘得差不多了…勉强答上来4️⃣JVM5️⃣线程状态6️⃣线程安全,在你的实习项目里怎么保证线程安全的(又绕回来了4.智商题找异常球5.手撕:1️⃣五道sql,不难2️⃣力扣不重叠的滑动窗口数组,贪心➕双指针秒了强度拉满了这个一面,高柱到后面人都是傻的二面面经:(就半个小时实习拷打,简历上写了几点就问了几点,问完就结束了,无手撕
ParadoxMin...:
我也是今天下午二面,但是现在还没通知,感觉🈚️了
查看19道真题和解析
点赞
评论
收藏
分享
03-12 15:35
嘉应学院 Python
双非春招只有小微的命吗
快说谢谢牛牛精灵:
说不定就是下一个寒武纪!
点赞
评论
收藏
分享
03-27 20:56
东北大学 嵌入式工程师
2.6 操作系统 并发与互斥
一、同步与异步同步:用来保证调用方和被调用方顺序执行。调用方需要等待被调用方执行完成之后,自身才能继续执行,调用方的逻辑控制流被阻塞。同步不一定要阻塞,只是逻辑控制流被阻塞。阻塞只是同步最常用的手段。异步:调用方和被调用方各自执行。调用方发出请求之后,无需等待被调用方执行完毕就可以继续执行,被调用方的执行结果通过回调、信号等方式返回给调用方。核心区别:调用方的逻辑控制流是否阻塞等待被调用方执行结束。二、同步:有锁、无锁、无等待锁的概念:核心目的是解决并发(多个操作同时进行)时,争抢共享资源(如数据、文件等)导致的混乱问题。上锁(加锁):申请独占使用权。如果资源空闲,就可获得锁并开始操作。解锁(...
C++/嵌入式开发 秋招...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
Vibe Coding开发前的 7 个关键步骤
1.2W
2
...
笔试做完两周没动静,我查了进度才知道不是挂了
4579
3
...
AIcoding上线了!你确定不来刷刷?
4035
4
...
我放弃互联网大厂了。。
3492
5
...
4.1 美团后端暑期实习面经
3339
6
...
必看实用VibeCoding项目
2684
7
...
美团后端暑期实习一面
2557
8
...
如何把面试主动权握在手里?Ai岗面试焚诀!
2549
9
...
京东零售平台产品与研发中心一面
2549
10
...
腾讯前端暑期实习一面
2475
创作者周榜
更多
正在热议
更多
#
你觉得大几开始实习最合适?
#
15227次浏览
172人参与
#
uu们,春招你还来吗?
#
52680次浏览
304人参与
#
厦门银行科技岗值不值得投
#
13774次浏览
311人参与
#
面试被问到不会的问题,你怎么应对?
#
12727次浏览
162人参与
#
面试中,你被问过哪些奇葩问题?
#
92258次浏览
891人参与
#
Claude Code泄露源码
#
7075次浏览
111人参与
#
开放七大实习专项,百度暑期实习值得冲吗
#
35268次浏览
615人参与
#
恒生电子笔试
#
17517次浏览
135人参与
#
2023年不发年终奖的公司盘点
#
30294次浏览
174人参与
#
你都用vibe coding做过什么?
#
9185次浏览
385人参与
#
AI Coding实战技巧
#
7815次浏览
172人参与
#
26届春招投递记录
#
1496次浏览
24人参与
#
你现在一天AI几次?
#
6546次浏览
87人参与
#
七猫笔试
#
6352次浏览
46人参与
#
做完笔试后你收到面试了吗?
#
14215次浏览
164人参与
#
四大天坑是哪四家?
#
111162次浏览
241人参与
#
你见过哪些招聘隐形歧视?
#
10994次浏览
98人参与
#
机械人你知道哪些单休企业
#
101811次浏览
476人参与
#
Vibe Coding 会干掉初级岗位吗?
#
12297次浏览
168人参与
#
大厂实习和小厂实习最大的区别是什么?
#
24926次浏览
192人参与
#
如果人生可以debug你会改哪一行?
#
5633次浏览
102人参与
#
网易游戏雷火笔试
#
3950次浏览
66人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务