数字验证每日十问--(2)

1. component和object的区别?item是component还是object?

component也是由object派生出来的,不过相比于object, component有很多其没有的属性,例如phase机制和树形结构等。

在UVM中,不仅仅需要component这种较为复杂的类,进行TB的层次化搭建,也需要object这种基础类进行TB的事务搭建和一些环境配置等。uvm_sequence_item是object;

2.virtual sequencer 和sequencer的区别?

virtual sequencer是面向多个sequencer的多个sequence群,而sequencer是面向一个sequencer 的sequence群。

virtual sequencer桥接着所有底层的sequencer的句柄,其本身不需要传递item,不需要和driver连接。只需要将其内部的底层sequencer句柄和sequencer 实体对象连接。

3. sequence,sequencer,driver之间的通信

无论是sequence还是driver,它们通信的对象都是sequencer。当多个sequence尝试挂载到同一个sequencer上时,会涉及到sequencer的仲裁功能。sequencer作为sequence与driver之间握手的桥梁,扮演着重要的角色。我们将重点分析sequencer是如何通过以下三个类的主要方法,演示出完整的TLM(事务级模型)通信过程:

1. `create_item()` - 序列项的创建。

2. `start_item()` - 序列项的开始,尝试从sequencer获取执行权限。

3. `randomization` - 序列项的随机化。

4. `get_next_item()` - 当driver一侧没有item可以使用时,尝试从sequencer获取item。

5. `finish_item()` - 序列项完成,通知sequencer。

6. `get item` - 确认获取到item。

7. `item_done(RSP)` - 表示driver与sequence完成了一次item的握手传输,RSP可能作为状态返回值。

8. `get item-response(RSP)` - 从driver获取返回的数据对象。

9. `pin level drive` - 驱动到与DUT(Device Under Test)连接的接口。

10. `loop finished` - 循环完成。

对于sequence来说,无论是flat sequence还是hierarchical sequence,流向sequencer的都是sequence item。每个item的"成长周期"起始于`create_item()`,然后通过`start_item()`尝试从sequencer获取执行权限。sequencer的仲裁机制和使用方法在此略过。driver一侧通常处于"吃不饱"的状态,如果没有item可用,将调用`get_next_item()`尝试从sequencer获取item。在sequencer将权限交给底层的sequence前,目标sequence中的item应该完成随机化,然后在获取sequencer的权限后执行`finish_item()`。

接下来,sequence中的item将穿过sequencer到达driver一侧,这标志着sequencer第一次充当通信桥梁的角色完成。driver在得到新的item后,提取有效数据信息并驱动到与DUT连接的接口上。完成驱动后,driver通过`item_done()`告知sequence数据传送完成,sequence在获取该消息后表示driver与sequence双方完成了这次item的握手传输。在此过程中,driver可以选择将RSP作为状态返回值传递给sequence,而sequence也可以选择调用`get_response(RSP)`等待从driver一侧获取返回的数据对象。

4.代码覆盖率、功能覆盖率和断言覆盖率的区别?

a. 代码覆盖率是针对RTL设计代码的运行完备度的体现,包括行覆盖率、条件覆盖率、FSM覆盖率、跳转覆盖率、分支覆盖率;

b. 功能覆盖率用于与spec比较来判断design是否行为正确,需要按verification plan来比较进度。用来衡量哪些设计特征已经被测试程序测试过的一个指标;验证的目的就是确保设计在实际环境中的行为正确。设计规范里详细说明了设备应该如何运行,而验证计划里则列出了相应的功能应该如何激励、验证和测量

c. 断言覆盖率:用于检查几个信号之间的关系,常用在查找错误,主要是检查时序上的错误,测量断言被触发的频繁程度。

5.设计流程和验证流程?

验证流程:

阅读功能描述文档à准备验证计划à提取验证功能点à绘制验证结构à搭建验证环境à编写测试用例à定义功能覆盖率à发现缺陷和验证计划修复à回归测试-收集覆盖率à分析覆盖率、修改或添加测试用例

最终全面通过回归测试和满足覆盖率要求

设计流程:

a.芯片架构: 定义芯片的高层架构,包括不同的功能模块和它们之间的接口。

b.RTL设计: 使用硬件描述语言(如Verilog或VHDL)进行寄存器传输级(RTL)的设计。

c.功能仿真: 对RTL设计进行仿真,以验证其是否满足预期的功能。

d.综合&扫描链的插入(DFT): 将RTL代码转换为门级或更低层次的表示,同时进行可测试性设计(DFT),例如插入扫描链。

e.等价性检查: 确保综合后的网表与原始RTL设计在功能上是等价的。

f.形式验证: 使用形式化方法验证设计满足规范要求,如属性检查。

g.静态时序分析(STA): 检查设计是否满足时序要求,确保信号在规定的时间内稳定。

h.布局规划: 确定芯片上不同模块的物理位置,优化性能、功耗和面积。

i.布局布线: 实际地在硅片上放置电路元件并连接它们。

j.布线图和原理图比较: 将布线后的版图与原理图进行比较,确保它们匹配。

k.设计规则检查(DRC): 检查版图是否符合制造工艺的设计规则。

l.GDII: 应为GDSII,是芯片版图数据的最终输出格式,用于制造。

6. 断言的概念和作用,立即断言和并行断言?

断言是设计的属性描述。如果在一个仿真中被检查的属性不像我们期望的那样表现,那么这个断言将失败;如果一个被禁止在设计中出现的属性在仿真中出现,那么这个断言将失败。

立即断言(immediate assertion) :非时序的,可以在initial/always过程块或者task/function中使用;

并行断言(concurrent assertion ):时序性的。关键词property用来区分立即断言和并行断言。之所以称之为并行,是因为它们与设计模块一同并行执行;

equence 是用来表示在一个或多个时钟内的时序描述。


7.什么是形式验证?

形式验证使用数学方法来证明硬件设计的正确性。它不依赖于仿真的测试向量,而是使用算法来检查设计的所有可能状态。

形式验证方法分为等价性验证、模型检验和定理证明等。

应用:a.RTL代码与规范的一致性;b.综合后网表与RTL的等价性;

c.不同综合优化级别下的网表比较;d.时钟树综合后的网表与原始网表的等价性

8. Break;continue;return的含义,return之后,function里剩下的语句会执行吗?

break 语句结束整个循环;

continue 立即结束本次循环,继续执行下一次循环;

return语句会终止函数的执行并返回函数的值(如果有返回值的话);

return之后,function里剩下的语句不能执行,其是终止函数的执行,并返回函数的值;

9. 断言$past, $stable, $fell, $rose,$isunknow的用法

          $rose()  0到1 变化

          $fell()  1到0 变化

          $stable()   稳定没有变化

          $past(a,2)表示a信号前2个周期的信号值; 

          $isunknow()表示检测信号值是否存在X态或Z态;

10. Rand 和randc的区别?

rand修饰符:rand修饰的变量,每次随机时,都在取值范围内随机取一个值,每个值被随机到的概率是一样的,就想掷骰子一样。

randc修饰符:randc表示周期性随机,即所有可能的值都取到过后,才会重复取值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值