上期答案
[246] 对于一个单端口读写RAM,有哪些场景需要进行测试?
单端口RAM只有一个读和写端口。因此,它只能在任何给定的时间点进行读或写操作。其他需要考虑验证的设计规范包括RAM大小、地址和数据总线的宽度。基于此,以下是一些需要验证的场景:
- 正确读写行为
- 背靠背读取或写入相同的地址和不同的地址
- 背靠背先读后写同一地址
- 背靠背先写后读同一地址
- 验证内存大小的边界——读和写
- 验证写入数据的所有可能,全0,全1,01交替等。
如果您被进一步要求定义一个验证环境,您可以考虑像上面这样的场景,并定义一个有向或有约束的随机环境是否会更好地工作,以及如何设计激励生成器和检查器。
[247] 单端口和双端口RAM有什么区别?
单个端口RAM只有一个读和写端口。所以它只能在任何给定的时间点进行读或写操作。一个双端口RAM有2个读/写端口,因此允许同时读写。
[248] 一个简单的带有如下所示的方框图的ALU支持两个4位操作数、一个4位结果总线和进位溢出。ALU支持最多8条指令,使用3位操作码或选择行(S2、S1、S0),解码如下。
解释所有需要验证的场景,以确保ALU按照下面的SPEC工作:
以下是需要对这个给定的ALU设计进行验证的场景:
- 通过驱动两个操作数A和B,以及驱动每个操作的选择行,来验证所有单独的操作是否工作(Add、Sub、Increment、AND和OR)。
- 验证如果select行在110-111之间,不发生操作。
- 对于以上每个指令,选择A和B的最小值和最大值以及组合。假设A和B是4位,最大值可能是4 ' b1111
- 验证加法和减法的溢出和下溢情况。如果A和B都是4'b1111,则A加法发生溢出,而如果B的值大于A,则减法发生下溢。
- 验证自增指令的溢出。如果A= 4'b1111,增量应该产生一个0值。
- 一旦验证了各个场景,创建随机的操作码序列,验证一个操作的效果不会影响到下面的操作。检查相同的操作码重复超过一次或不同的操作码以不同的模式重复的序列。
- 为了创建激励,你可以设计一个随机的操作码和操作数生成器以及一个简单的驱动程序。为了检查结果,可以编写一个简单的模型或ALU,并与相同的结果进行比较。
[249] 事件驱动和循环驱动的仿真器有何不同?
「事件驱动」仿真器对每个事件进行设计评估,采用每个事件并通过设计传播变化,直到达到稳定状态。事件是设计元素的任何输入激励的更改。由于输入和下游设计的信号反馈的到达时间不同,一个设计可能在一个周期内被评估多次。
例如:考虑在时钟上运行的两个触发器之间的逻辑路径。组合逻辑路径可以有多个门和反馈路径。在时钟变化时,当第一个触发器的输出发生变化时,它将应用于组合逻辑的输入,并进一步应用于组合逻辑中不同阶段输入的任何变化,这会触发要评估的特定设计。在这个值稳定下来并且不再在那个时钟周期中变化之前,可能需要进行几次评估。大多数业界广泛使用的模拟器都是事件驱动的,比如:来自Mentor的Questa、来自Synopsys的VCS或来自Cadence的Incisive模拟器。这是因为事件驱动模拟器提供了准确的模拟环境。
「基于循环」的模拟器没有时钟周期内的时间概念。它们一次性评估状态元素或端口之间的逻辑。这有助于显著提高仿真速度,因为每个逻辑元素在每个周期中只计算一次。缺点是它不能真正地检测信号中的任何小故障,而且它只在完全同步的逻辑设计上表现正常。由于在仿真期间没有考虑设计的时间安排,因此需要再所有的静态时序分析工具对时序进行单独的验证。基于循环的模拟器在一般设计中不太受欢迎,但在一些开发大型设计(如微处理器)的公司中可以定制和使用。
[250] 什么是事务(transaction?)?基于事务的验证有什么有点?
事务是一组低层信息(如一组信号)的高级抽象。当设计在信号级信息上运行时,testbench需要在信号级与设计接口驱动程序和监视器,而testbench的所有其他方面都可以抽象为事务级。在基于事务的验证方法中,testbench以分层的方式进行架构,其中只有较低层的组件在信号级进行操作,而所有其他组件都基于事务进行操作和通信,如下所示。
- 基于事务的验证的主要优点是在一个项目内或跨不同项目的不同验证环境中重复使用事务性接口开发的组件。例如:参考上面的图表,只有driver, monitor 和 responder需要信号级接口。一旦这些组件将信号级信息分组到一个事务中,其他组件(如stimulus generators, slave models 和 scoreboards)都可以对事务进行操作。
- 由于事务性组件需要由模拟器在事务性边界上进行评估,而不是在每个信号变化上进行评估,因此模拟可能会快一些。
- 如果一个设计改变了接口时序,那么只有驱动和监控组件需要改变,其他组件不受影响。
本期题目
[251] 你使用或者熟悉的仿真调试工具是什么?
[252] 我们什么时候需要参考模型来验证RTL设计?使用参考模型的优点是什么?
[253] 什么是总线功能模型?
[254] 如何跟踪验证项目的进度?使用什么指标?
[255] 如何衡量验证的完整性,或者说何时/如何验证已完成?
正确答案将在下一期公布,或者到下面的文章获取答案