转行上岸年薪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有什么区别


#数字IC设计工程师##芯片IC验证工程师##数字IC##求职##面经笔经#
全部评论
很实用,感谢楼主的分享
1 回复
分享
发布于 2022-07-26 21:58

相关推荐

5 101 评论
分享
牛客网
牛客企业服务