“激励的原则”实际上就是解决一件事情:如何保证激励源最大的自由度?
因为只有从环境结构上保证了激励源最大的自由度,我们才有可能在输入一侧提供更丰富的输入组合,有条件地穷历一些测试序列。
按照这个核心原则,我们可以将激励的自由度按照如下去考虑评估:
●接口类型我们一一来看激励在这些方面的表现和评估方法。
●序列颗粒度
●可控性
● 组件独立性
●组合自由度
接口类型(interface type)
首先面对一个设计的输入接口,我们可以先判断接口的类型,如果该设计的接口类型复杂多样,我们也可以通过接口类型划分,化繁为简找到从哪里下手来给出激励。常见的接口类型可以分为如下几种:
●系统控制接口(system control interface):常见的有时钟、复位、安全、电源开关和这些系统控制信号旁生出来的控制信号,例如时钟门控信号(clock gating signal)。
●标准总线接口(standard bus interface):公开的行业标准总线协议,常见的有例如AMBA总线系列协议、OCP、SRAM、MIPI系列协议等,文档详细,有丰富的验证IP提供服务。
●非标准总线接口(non-standard bus interface):公司内部定义的接口,或者根据模块功能需求定义的接口,接口时序相对简单,同时文档也较粗略。公司内部即使有可复用的验证IP,验证IP本身也没有得到充分的质量保证,而且在非标准协议和总线多样性定制的背景中,验证IP的复用性较低。
●测试接口(test interface):该测试接口主要留给可测性(DFT,design for test)功能使用,在功能验证中我们只需要禁用即可。
●其它控制接口(miscellaneous control interface):如果被测设计是处于子系统中的功能模块且与相邻多个模块交互的话,那么该控制接口信号的数量较多、功能较分散还有较高的复杂度;如果该设计是子系统,那么子系统从标准复用的设计角度出发,该种类型的控制接口数量会较少且功能也较集中。
这里我们拿出一个商业总线验证IP举例,该验证IP包会含有基本颗粒层和高级颗粒层来生成不同级别的测试序列,一些情况下验证IP也提供宏颗粒层的定义来满足更高规模的数据传输。这里的抽象级指的是从时序和数据量传输的角度出发,越高的抽象级,越不关注底层的时序而更重视数据量的传输,也是TLM(transaction level model)含义的延伸。当验证人员不能从已有的各种颗粒层中生成自己期望的测试序列时,便会利用已有的基本颗粒层和高级颗粒层来构建自己的颗粒层。
可控性(controllability)
可控性是从对不同颗粒层的控制来出发的,那么按照序列颗粒度的划分,对应的可控性应该是:
从功能验证的周期出发,在初期阶段,我们应该从基本颗粒层中选择,这有利于我们在接口的基本功能中调节和测试不同的总线传输情况,这里的验证点侧重于协议功能和时序检查。随着设计的稳定,我们会逐渐选择高级颗粒层和宏颗粒层,将验证精力逐渐转移到数据量的一致性传输和性能评估上面,而这两层的颗粒控制性也没有像基本颗粒那样可以细致调节到每一个参数变量,它们会同验证重点保持一致,主要提供跟数据量有关的可约束参数。
组件独立性(component independency)
在我们将一个设计的边界信号划分为不同的接口类型,并且创建出对应的接口验证组件之后,我们就应该考虑一下各个组件之间的独立性了。组件的独立性实际上也是协调性的基本保障,因为有了独立性,各个组件之间才会最大程度地不受另外组件的制约,同时又可以通过有效的通讯机制来实现组件之间的协调。我们接下来看看,要实现组件独立性需要考虑的因素:
●必须按照接口类型来划分组件组合自由度(combination space)
●对于系统控制信号组件,尽可能将信号的关系按照实际集成关系做控制,例如多个时钟是否是同步关系,多个复位信号是否可以单独控制等。
●对于总线接口(标准或者非标准),实现一对一的控制关系。例如存在两组相同的总线,那么我们应该引入两个总线组件分别控制,而非建立一个总线组件却拥有两套总线接口,后者对于有悖于可控性和复用性。
●对于其他控制接口,应从实际相邻设计那里准确了解各个信号的使能极性、脉冲有效还是电平有效、是否存在握手关系、时序信息等真实的设计信息,来给予日后更高层集成环境中的控制场景。同时又由于这部分信号偏于杂乱,在尽可能梳理信号的不同来源和功能以后,也需要在接口组件中定义封装好的方法来实现灵活的驱动。
●验证环境中的系统控制信号组件也会跟其他接口组件发生连接,例如提供必要的时钟和复位信息,那么这些连接也应该遵循实际集成的情况,确保组件驱动端的时钟输入与设计的时钟输入端保持同步。
最后一个衡量因素是对上述因素的整体评估,只有通过底层的精细划分,进而建立抽象级更高的颗粒度,通过独立组件之间的协调来给出激励,才会提供较高的组合自由度。在这里,除过组件的独立性以外,我们也需要考虑组件之间的协调方式。一般我们将协调方式分为两种:
●中心统筹式(centrally organized):通过中心的调遣段统一分派给各个接口组件不同的任务,进而产生不同的激励组合场景。通过上述因素,我们可以评定出一个验证环境中各个接口组件之间的组合是否可以提供足够的自由度,最终有可能穷历出预定的激励序列。
●分布事件驱动式(distributed event driven):将激励控制权交给各个接口组件,而通过接口组件之间的通信来实现分布式的事件驱动模式,即组件之间的通讯通过事件(event)、信箱(mailbox)、接口信号(interface signal)等方式实现同步通信。
来源:Robei