SoC芯片设计验证(二)

作者:郑威

阅读前一篇:SoC芯片设计验证(一)


04、功能验证

功能验证的目标是确认SoC设计在功能场景及其应用场景中的预期功能。一个用例场景可以映射到一个或多个功能测试场景。例如,为了验证模块的加法功能,可能有三种测试情况:第一种是验证输入操作数,第二种是验证与输入相对应的输出结果,第三种是检查加法器的进位操作。基本上,SoC设计包含不同功能的多个块,这些块彼此互连和/或共享总线,多个块在该总线上交互,或者一个块按照标准协议运行。在这种情况下,SoC的功能验证包括模拟(a)块到块接口验证,(b)总线争用验证,以及(c)协议和符合性验证。


05、验证方法

有三种类型的设计验证。它们是黑盒、白盒和灰盒验证。通过采用这些方法的不同组合来验证SoC设计。

黑盒验证
这是一种验证方法,其中设计实现的内部细节不会暴露给验证。通过仅访问暴露的接口信号而不访问内部状态或信号来完成验证,从而使其实现独立。显然,验证对于设计的内部实现细节或系统状态是不可见的。这种方法最适合发现解释级别的问题,如字节序检查、协议误解和互操作性测试。

白盒验证
在这种验证方法中,测试平台模块可以访问设计的内部状态、信号和接口。在这种情况下,调试任何设计问题都非常容易,因为测试平台可以根据预期跟踪信号驱动器。这种方法最适合于检查低层次的特定于实现的场景和设计角落,在那里他们可以针对具有潜在问题的场景进行设计并调试它们。这种情况的一个例子是FIFO指针翻转、计数器溢出等。在这种方法中,断言最适合检查内部设计行为。这种方法完全是对黑盒验证方法的补充。

灰盒验证
这种方法介于黑盒和白盒验证技术之间。在这种方法中,测试环境在接口层验证系统,在顶层验证IOs,并根据需要基本(如设计角)访问测试和调试的设计内部。通常,第一级测试使用黑盒方法作为目标,并评估功能覆盖率。为了提高覆盖率,如果需要,通过白盒方法,测试场景被测试。


06、验证设计

随着SoC设计方法向系统级或架构级发展,在跨子系统的事务级验证系统功能至关重要。然而,SoC设计主要是集成预先设计或预先验证的IP核,这更像是内部IP的黑盒验证。此外,复杂的SoC设计正趋向于验证友好,其中内部状态和关键信号被锁存,并可供软件通过主接口读取,从而预测问题的根本原因。这在“黑盒”或“灰盒”验证中很有用。功能验证在不同的环境中以不同的方式进行。在RTL级别,开发了测试平台和一组测试用例,并使用模拟器进行模拟,以查看SoC是否按预期运行。通过观察接口或模块/块级输入和输出的波形来检查功能正确性。

在基于FPGA的硬件验证中,将RTL形式的待测设计移植到板上的FPGA,运行有限的软件,将实际激励馈入SoC输入,并在开发环境中观察输出。

在开发环境上,基于子模块的开发平台设计开发了与最终SoC接近的接口,并用一些更复杂的软件进行了验证。

RTL级别的测试环境或测试台代表SoC最有可能使用的环境。所有的环境都被开发来接受尽可能接近真实世界输入的刺激。典型的RTL试验环境(也称为试验台)是一个封闭的系统,因为它代表了一个完整的环境,包括通过行为总线功能模型(BFM)的输入刺激和输出控制。

外围模块
这些模块是在应用环境中完成SoC验证所需的支持模块。它们是外围功能的验证IP或IP,如外部存储器、数据转换器和实时传感器模型。

输入激励和公共功能模型(BFM)
输入激励代表在实际应用场景中被验证的SoC从外部世界馈入的输入信号。它可以是系统设计信号,如来自参考晶振的时钟、复位信号、传感器输入或来自SoC外部模块或验证IP的数据输入。SoC所需的来自不同源的激励的产生是自动的(当参考时钟被馈送到PLL模块时,它自动产生SoC所需频率的系统时钟,如所配置的)或半自动的,具有手动触发或有条件的。它们通过接口馈入SoC设计,通过总线功能模型(BFM)遵循设计的时序要求。

输出BFM
该输出BFM通过其输出接口捕捉特定激励输入时SoC的响应。将响应进行比较并写入文件,以便与预期输出进行比较,或者实时检查预期。该模块或者是具有文件比较功能的检查器,或者是波形数据库发生器,而SoC设计通过测试输入条件受到特定场景的影响,设计人员在图形查看器上查看这些输入条件并判断其正确性。

连续监视器
这些是环境中的附加检查点,它们是SoC正常运行的指示器。例如,在产生1-s时钟的定时器SoC中,很容易连续监控1-ms信号,该信号预计会连续滴答以产生1-s时钟。在测试环境中,测试块是非常模块化的,结果被自动检查,并作出通过/失败的决定,因此它们是自动化友好的。测试环境能够分析功能、代码和FSM覆盖率的设计。

测试环境模块的简要描述如下。

SoC DUT
SoC DUT是待验证的测试中的SoC设计。

设计和验证断言
测试中的设计和验证测试环境可以有断言来提高验证的有效性。断言是用于检查设计中同步信号的时间关系以确保模块正确运行的语句。设计断言,如果被支持,由测试工作台检查器模块跟踪,以查看它是否已经被触发,并且被评估正确性。例如,考虑逻辑设计的一部分,其中功能是检查接收的分组是否正确,并且接收的分组由packet_valid信号验证。显而易见,每当产生packet_correct或packet_error信号时,packet_valid信号应被设置为高电平。在这种情况下,写一个检查packet_error和packet_valid或packet_correct和packet valid信号同时出现的设计断言是有意义的,如果触发了该断言,则可以验证设计意图。在所示的例子中,设计断言被写入以查看packet_valid和packet_correct或packet_valid和packet_error信号是否不同时出现。如果这个断言被触发,那么这个设计就是有缺陷的。
可以在DUT事务的事务级别编写类似的断言,并对设计的正确性进行跟踪。

时钟/复位模块
时钟复位模块根据SoC设计的要求产生所需的时钟和复位信号。

配置
该模块将DUT和测试台设置为需要测试DUT的配置。

激励发生器
该模块在测试台中产生输入激励。通常,该模块根据SoC功能以所需的顺序和次序产生信号。这可能是一个复杂的IP验证。

总线功能模块(BFM)
总线功能模块遵循接口规范向SoC DUT提供激励。总线接口有多少,BFM就有多少。如果SoC设计支持UART、USB和PCI Express接口,则应该有一个对应于这些接口的BFMs来管理符合这些协议的事务。

邮筒
这些是系统Verilog测试平台中的通信机制,允许在进程之间交换消息。希望与另一个进程对话的进程将消息发送到mailbox,mailbox将消息临时存储在系统定义的内存对象中,然后将消息传递给所需的进程。创建的邮箱具有绑定或未绑定的队列大小。当绑定邮箱包含的邮件达到定义的最大数量时,该邮箱就会变满。试图将邮件放入已满邮箱的进程应被挂起,直到邮箱队列中有足够的可用空间。基本上,邮箱是一种同步不同进程技术。该过程可以是checker,如本例所示。一旦邮箱有了一组预定义的消息,它们就可以启动一个检查器来检查内容并判断其正确性。

棋子
Checker检查所有过程,如将DUT响应与预期、断言和监视器进行比较,以决定测试场景的通过/失败标准。

测试程序接口(TPI)
这是用户界面,它接受用户输入作为参数,并编译选项来触发测试场景和执行模拟。TPI支持许多带有可选参数的命令,以在测试场景中逐个执行模拟,并生成合并的结果。这被称为回归测试。


07、验证示例

在本节中,我们将介绍一个简单的十进制计数器设计的仿真,以便更好地理解验证过程。

十进制计数器的设计功能:十进制计数器在时钟的每个有效边沿计数数字0、1、2、3、4、5、6、7、8、9、0。设计要求每当计数器计数到5时就产生一个输出信号。

设计文件保存为decade-counter.v,测试台文件保存为tb_dcounter.v(。v代表Verilog文件)。为了模拟设计文件,使用了模拟器。大多数使用的模拟器是基于循环的模拟器。基于周期的仿真器对信号进行采样,并在每个时钟周期计算设计响应。模拟器首先分析RTL代码,并在模拟设计之前进行阐述。

执行模拟时,观察终端上显示的错误和警告日志消息。如果有任何错误/警告,需要在设计文件中纠正它们。对于设计示例中的模块,不应该有任何警告或错误,模拟会成功终止。如果您在当前的工作目录中观察,会发现模拟运行生成了许多输出文件。它们是命令日志文件、名为decade_counter.vcd的波形转储文件。decade_counter.vcd文件可以用波形查看器工具打开。当在波形查看器工具中打开该文件时,可以观察到输入输出信号和内部网络的逻辑状态变化。有关运行仿真和使用波形查看器工具的更多信息,可以参考相应的用户手册。通过观察设计信号clock,reset_n和out_5,count_out来验证设计行为。

验证流程可以扩展到任何复杂程度的设计。本节中解释的下一个设计示例演示了这一点。阐述了利用扰码器设计作为验证IP的自同步解扰器在测试平台上的验证。考虑多项式g(x) = 1 + x13 + x33的自同步扰频器的设计。如果输入数据是具有零DC偏移的0或1的长序列,则在通信中使用自同步加扰器模块来加扰输入数据。在发送器使用相同的多项式对数据进行加扰,并在接收器端使用相同的多项式对数据进行解扰以恢复发送的原始数据。自同步解扰器中解扰器的功能属性,因为它不需要由初始化向量初始化来实现同步。

加扰器-解扰器的同步被定义为加扰器和解扰器的LFSRs保持相同的模式,因此,当数据被馈送到解扰器时,它可以生成加扰器数据的输入。

被测模块是解扰器。为了测试解扰器是否与加扰器同步,需要将解扰器LFSR重置为任何初始值。随机模式通过加扰器输入,加扰后的数据作为输入激励输入解扰器。将验证解扰器在某个时间点将能够解码输入的数据。您可能会注意到,测试平台没有任何端口,因为这将是一个独立的测试模块环境。

试验台由以下部分组成:

测试平台的第一部分是激励产生,包括时钟、复位、使能和数据产生。

第二部分是加扰器模块,用作标准验证IP。

第三部分是模块实例化。

第四部分是输出读取器和波形转储,用于调试和用户验证。

一个典型的SoC测试平台将具有多个时钟(OCC)生成模块和标准PLL、多个所需的VIP,以及控制状态机,这些状态机将使这些模块中的每一个能够用于多种测试场景。输出读取器和波形转储部分可以是复杂的模块,可以根据SoC验证要求自动验证功能的正确性。

未完待续……


本文转自:TUV北德工业服务,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。

最新文章