赞
踩
问题1:设计人员和验证人员他们的协作关系体现在哪些地方?
1.设计人员和验证人员都需要围绕功能描述文档开展工作
2.设计只有经过充分量化验证,才有信心去流片
3.验证人员需要懂设计才能很好地向设计人员反馈设计漏洞
4.设计初步实现后即需要验证工作的加入
5.在系统由低向高的集成过程中,验证与设计需在每一层展开工作,确保每一个阶段的充分性
问题2:为什么芯片验证的重要性目前越来越高?
答:早期的芯片开发工作由于晶体管数目少,电路规模也小,因而搭设电路时的难度和精度不是很高,且所需的成本以及纠错能力要求不是很高。随着现代集成电路设计技术的不断推进,尤其到了7纳米5纳米这种关键技术节点,电路的规模和复杂程度空前,且流片失败的代价非常高昂,这时在完整的产品出库之前保证它的质量精度就显得额外重要。而芯片验证的工作目标即在于此。所以芯片验证的重要性目前越来越高了。
问题3:在一个完成的验证周期中,有哪些工作需要完成?
1.完成模块功能描述;2.创建验证计划;3.开发验证的环境;4.调试环境和HDL文件;
5.进行递归测试;6.进行硅后系统测试;7.进行逃逸分析。
问题1:四值逻辑的数据类型应该在哪些地方声明,例如硬件部分,还是软件部分,或者在其它结构中?为什么需要这么做?
四值逻辑的数据类型一般在描述硬件部分的代码中声明,用于描述逻辑电路的行为和状态。
四值逻辑有0 1 X Z四种状态,相比二值逻辑能更好的模拟实际电路的状态,使仿真结果更加接近实际的电路综合结果。
问题2:在处理枚举类型变量和整形变量的相互赋值情况中,应该注意哪些容易出错的地方?在从整形到枚举类型转换的过程中,有哪些方法?
整形变量不能直接赋值给枚举类型变量,需先将整形变量转为枚举类型,而且注意整形变量的值不应超出枚举类型变量的范围值。
方法:‘利用()或者$cast(T,S)。
问题3:在状态机或者组合电路中的case语句中的default分支或者if-else中的else分支语句,有时会把变量赋值为‘x’,这实际上只会影响仿真,但对综合电路不产生影响,试问这么做是为什么?不影响电路综合可能是由于什么原因?
添加default以及else语句是为了避免在硬件电路中综合出锁存器,这样可以避免浪费更多资源还有一些静态时序错误。不影响电路综合的原因可能是在条件描述完备时不会出现其他情况,且在实际的电路中并不存在x信号。
问题1:模块和接口之间的相近的地方有哪些?又有哪些差别?
相近:定义形式上相似,例化方式相同,都可以声明变量和线网类型。
区别:模块可以例化模块和接口,但接口只能例化接口;模块具有各种功能,接口只负责连线的分配;接口中的变量或者线网类型可以使用modport约束方向。
问题2:结构体和接口之间的联系和差别有哪些地方?
结构体和接口中都可以包含许多例如线网变量等诸多信号,这些信号用在两个模块的连接时,结构体中并不能规定这些信号的方向,而在接口中,可以利用modport约束信号的方向,可降低模块连接错误。接口能够整合多个信号变成单一端口并应用于多个模块,有利于设计复用。
问题3:在顶层连接DUT,interface,TB需要的步骤:
1.例化interface;2.例化DUT和TB等各个实例;3.声明所需变量;4.设计端口的映射连接关系
问题1:激励器(stimulator)对于它所生成的激励,有什么办法将其所有激励数据保存下来?
问题2:对于实验中的DUT设计,验证环境组件checker比较器数据正确的逻辑是什么?如何利用monitor_in(监测输入接口)和monitor_out(监测输出接口)采取到的数据呢?
问题3:为什么大多数的功能都应该在模块级验证完成呢?
问题4:function和task的比较?
问题5:参数方向有哪些?差别在哪里?
1.可以通过接口缓存保存,用于后续查看使用,如monitor的采样功能,此外还可以存放在monitor或checker内部,而后通过monitor与checker之间的通信实现数据传输。
2.用compare函数对比较payload[
]
队
列
(
用
来
参
考
的
数
据
)
和
p
k
t
2
c
m
p
p
a
y
l
o
a
d
[
]队列(用来参考的数据)和pkt2cmp_payload[
]队列(用来参考的数据)和pkt2cmppayload[]队列取样的数据)中存储的数据来验证接收到的payload是否正确。
将monitor采集到的数据装入数据对象trans,通过定义方法mon_trans()和put_trans()监视和传输有效数据,并在checker中使用。
3.模块具有完整的功能,符合灰盒验证思路。若对多模块系统作为整体进行验证,会有以下问题
a. 会有错误定位,在内部的定位需要连接monitor
b. 整体工作量并没有减少
c. 内部模块难以充分激励
4.function内不消耗仿真时间,task可能消耗仿真时间。即function只能用于与纯粹的数字或逻辑运算,而task则可能会被运用于需要耗时的信号采集或驱动场景。
function不能调用task,task可以调用function。
function可以有单一的返回值也可以没有返回值。
有返回值的function可以作为表达式中的操作数。
5.input是从外部复制传入的形式参数,output是由被调用方法产生并复制传递给外部的形式参数,inout表示的是进入方法和退出方法时分别被复制两次,ref类似软件中的指针,在调用方式时不会有任何复制行为,而是直接引用或修改外部传入的数据对象。
inout和ref类型均可使得形式参数在方法中被调用,并且将输出给外部,不同的是,inout只有在方法结束之后才传递到外部,而ref可以在方法执行过程中直接修改数据对象无须等到方法执行结束。
问题1:链表和SV中的哪些数组类型(定长数组、动态数组、队列、关联数组)相似,相似的特性有哪些?
链表与SV中的队列类似。
实际上,SV中的队列是一种结合了链表和数组优点的数据类型,SV中的队列既可以像数组一样通过索引实现对任意元素的访问,又可以像链表一样在任意位置插入或删除元素。
但本质上,SV中的队列中的元素是连续存放的(基于数组实现),所以在队列的头或者尾存取元素很快,而如果需要在队列中间插入或者删减元素,则需要额外的时间进行数据搬移。
问题1:类和结构体的联系和差别有哪些?
联系:类和结构体都可以封装成员变量
差别:类还可以封装成员方法,类需要使用new()来创建对象
问题2:类和模块的联系和差别有哪些?
联系:
1.类和模块内都可以包含方法和数据变量。
2.类和模块都可以被例化调用。
区别:
1.类中不可以有过程块语句;2.类中的成员变量和方法默认是动态的,而模块默认是静态的;3.类声明后必须创建(new)才能够使用,而模块声明/例化后就可以使用;4.类可以进行赋值以及拷贝,模块不行;5.子类可以继承父类,并且可以扩展,模块不行。
问题3:为什么类的静态方法不能访问类的非静态成员变量?
静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。非静态成员变量属于实例对象,只有在对象实例化之后才存在,然后通过类的对象去访问。
类的非静态成员存在前类的静态方法已经存在了,无法用静态方法去访问一个不存在的非静态成员。
问题4:如果有同名的模块,那么在编译过程中应该怎么解决“同名”问题?
Class的对象中允许同名成员出现,因为在调用构建函数时会使用新的空间,就算是复制也是新建对象后Copy,而使用时则需要注意索引的问题。
①this关键字可明确索引当前所在对象的成员,但是仅限非静态成员,约束,覆盖组使用。正常索引原则为由近到远,即会索引最近的同名成员(方法成员),加入this后会变成指向类成员。
②super关键字可访问当前对象其父类成员。
③local、protected关键字可以保护成员,分别只能由本身、本身及其子类访问,限制了程序中的索引。
问题1:随机测试相比于定向测试,就你目前的认识,你认为有哪些优缺点?
优点:对于较大规模的设计,随机测试相比定向测试可以产生更完备的测试向量,测试的覆盖范围更大,能够找出预料不到的漏洞。
缺点:随机测试的环境复杂度更高,带来了更高的封装要求,同时建立随机测试环境周期也更长。
问题1:我们在使用信箱mailbox时,如何可以限定其容量为8,并且只能存放string类型呢?那么,是否类似的方法也可以限定一个存放字符串的队列其最大容量为8呢?
可以采用typedef mailbox #(string)string_mailbox;string_mailbox sm = new(8);
不能用类似的方法限定一个存放字符串的队列的最大容量,因为队列空间是动态的,自动分配的。
问题2:用bit key=0来实现的类似旗语的功能,来保护对共享资源的访问,是否有不安全的地方?
在旗语进程和钥匙数目少的情况下可使用,但存在明显安全隐患。该操作用数字表示key的个数而非对key进行实例化,钥匙不具有独立性,仅仅是强制改变钥匙数量,从而无法实现阻塞式和非阻塞式操作,同时也无法保证程序中钥匙的总数是合法值。
问题1:对于目前的DUT,要完成对它的功能测试,从接口时序、路由功能来看,需要考虑哪些功能和对应的测试场景?
需要考虑的功能:1.各个输入端能否正确发送到任意输出端;2.每个输入端是否互不干扰;3.输出端是否支持多个不同源的包
需要考虑的测试场景:1.单通道输入,单通道输出;2.多通道输入,多通道输出;3.多通道输入,单通道输出;4.单通道输入,多通道输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。