首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何构建具有自检功能的测试平台

如何构建具有自检功能的测试平台

测试平台,尤其是经常使用的测试平台或用于一系列项目的测试平台,应具备自检功能和时间无关性。本文将介绍一些最佳测试平台的构建技巧。
作者:William Kafig
高级内容开发工程师
赛灵思公司
bill.kafig@xilinx.com

VHDL 所称的测试平台或者Verilog 所称的测试固件是一种用于 Isim、ModelSim 或者NCsim 等仿真环境的结构。仿真首先使被测单元 (UUT)(一般指可综合的FPGA 设计)连接到虚拟(仿真)组件, 比如存储器、通信设备和/ 或CPU,然后用已知的激励信号集加以驱动。这些激励信号会让 UUT 对虚拟组件做出反应并与虚拟组件互动。在仿真环境中,可通过波形来观察该激励信号和反应。
这里有个简单的例子,说明如何将简单的带复位功能的 8 位拨码开关(up/down) 当作 FPGA 设计 (UUT) 实现一个测试平台。该测试平台能够提供时钟信号、开关信号、使能信号和复位控制信号。图 1 显示的是如何将UUT(中间的灰色方框)连接到测试平台。


图 1 左边的各种功能为 UUT 提供激励信号,随即 UUT 产生一系列波形并显示在仿真环境中。图 2 是可缩放的波形图快照。如何清楚地看到结果? 是否看到值在计数引脚先升后降?放大后是什么样(见圆形局部放大视图)?


现在我们可以看到各种输出的值,但我们必须验证每一个值。这就是说需要验证 256 个增量值和 256个减量值,使能关闭与复位的特例以及这些控制信号影响计数值的方式。虽然这样做对小型设计来说是可行的,但对验证更大型、更复杂的设计来说,显得繁琐和低效。
实际上,验证重大 FPGA 设计比开发可综合的设计更难更费时。对给定的已知激励信号集,设计应一直生成可预测的结果集,不管仿真是行为仿真、网表仿真还是全时序仿真(布局布线后)。
创建激励信号集以及将其用于仿真的方法肯定是多种多样,可以从仿真控制台直接输入,也可以从文本或二进制文件输入,还可以用脚本激励(.do 或.tcl)等(图 3)。


这样问题就变为:在仿真运行后,如何验证仿真是否成功,即生成的输出是否与预计的激励驱动结果相符?当然可以通过观察数十、数百乃至数千个波形来检验,但这样过于繁琐和费时,更不必说其极易出错。也可以将成千行的文本转储到磁盘上,找专人检查每条信息,这同样繁琐且易出错。
甚至可以编写一个测试平台,不厌其烦地描述每一个输出波形,在关键时刻测试波形的特定值。这类测试平台随即可“自动”检测错误。很神奇吧?但令人遗憾的是,这种测试台不仅需要每次在输入变动时大刀阔斧地进行修改,而且时间的意义在仿真环境中也并非始终不变。行为仿真不太关注设计在硬件中的真正实现方法,也不关注布线延迟问题;而网表仿真了解设计的实现方式,但同样忽视布线延迟。只有布局布线后仿真(全时序仿真)才会考虑所有的延迟问题,提供准确的时序模型,但迄今为止这类仿真所需的时间最长。显而易见,对各类仿真而言,不存在一成不变的完全绝对时间。
这就意味着如果测试平台需要查找某个特定时间点对应的特定值( 输出),该值在行为仿真和在布局布线后仿真中所处的时间点很有可能相异。
可以为每类仿真编写独立的验证测试平台,但需要投入大量的时间,更不必说花在找出“正确的”起点所花费的时间。另外, 每次激励信号(测试矢量)发生变化,都需要对波形检查器模块重新编码。当然用户可以将数据文件作为波形检查器的标准,但计算各种值和时间所花的精力依然不菲。
很明显,这种静态的方法已非可取良方。
“时间无关性”自检测试平台
上文介绍一些不需要编写测试平台的方法。下面为“理想的”具备时间无关性自检功能的测试平台设定一些规范。

这种环境下的“时间无关性”是指仿真的类型( 行为仿真、网表仿真、布局布线后仿真)和对应的时序对 UUT 的验证不造成影响。自检功能指测试平台无需用户明确输入便可为每个激励信号集生成有效的输出。
要运用规范性的语言,测试平台必须满足如下条件:不管运行什么类型的仿真,都应具备有效性;应能够运行任何有效的测试矢量集;应能够以清晰易懂的方式报告激励信号集中各种测试的状态。
要实现规范性,可以采用给 UUT创建一个并行流程的方法。激励信号不管来源如何,都同时馈送给 UUT 和并行路径。该并行流程由 UUT 的行为模型以及可调整行为模型和 UUT 之间任何时间差异的后续异步 FIFO 构成。
先用“波形比较器”检测 UUT 的新输出值,然后从行为模型的 FIFO获取下一个值。随后比较这两个值,将结果寄存起来,就可以清晰无误地说明两条路径的相符之处和不符之处。图 4 显示了该类型测试平台的典型模型。


设计的核心
设计的核心包括 UUT 以及该UUT 的已知正确行为模型 (KGBM)。UUT 应足够简单,就是用户力求实现的可综合设计。KGBM 的行为符合UUT 的规范,但其采用行为结构进行编码。

通过使用行为建模技术构建“理想”的 UUT 版本(不必是可综合的版本),用户(或用户的波形比较器)就能够迅速发现 UUT 和 KGBM 输出之间的任何差异。一般来说行为建模更快更易于编码,因为它无需满足严格的综合和时序收敛要求。
应分层构建行为模型。在完成最底层的创建后,应逐个单元地用对应的小测试平台进行仿真,以检验整个模型的行为是否正确,就像仿真可综合的设计一样。这些小测试平台一般不需要具有时间无关性或自检功能。临时性措施(波形手动检查)通常足以胜任它们的验证工作。
创建激励信号
创建激励信号的方法有多种,最直接的是从控制台输入。许多仿真环境都允许用户将值“强制”送入信号中。虽然这种做法适用于某些设计或特定信号,但更大型、更复杂的设计还是采用能方便进行重复输入的方式为宜,因为这样可以更加轻松地进行分析和调试。

根据使用的仿真工具,还可以使用“tcl”或者“do”脚本为激励信号创建脚本。虽然这种方法有诸多优势,但需要考虑馈送到 UUT/KGBM 中的数据类型。脚本创建法特别适用于有一定数量的输入、需要用无法预计的方法进行仿真的情况,比如抖动、伪随机噪声或数据。
体现为简单文本文件的磁盘文件激励法对简单数据流的加载来说是一种理想的方法。ASCII 文本文件只包含准备输入到设计中的值。比如可以使用WaveGen 设计,这是赛灵思提供的参考设计,配套有 ISE® 工具套件,在许多客户培训课程中广为使用。不管激励信号的来源是什么,用户必须将信息转换为 UUT 能够理解的格式。可能需要某种“格式化器”来完成这项工作。由于 KGBM 只需要为行为建模,不需要为 UUT 的实际流程建模,故可以直接使用输入激励。比如,如果 UUT 需要处理包含在以太网包中的数据,则格式化器必须从激励信号源中采集该数据,创建一个包, 然后将这个包发送给UUT。另一方面,KGBM 不需要任何信头信息(除非需要根据信头信息进行决策),而只需要数据本身。这就意味着用户可以将“原始”激励信息直接馈送到 KGBM,且使用格式化器为 UUT封装激励信号。
使用为具体设计编码的 UUT 支持功能模块提供必要的时钟、复位和其它保持 UUT 运行所需的控制信号,以便其处理输入的数据。由于 KGBM 是不可综合的,因此所有的时序信号和复位信号均可保存在模型中,或与 UUT 共享。
异步时序 FIFO
UUT 会受自己的时钟速度和架构时延的约束,但 KGBM 不会。由于KGBM 是作为一个行为模型来构建的,所以重要的是功能而非时序(但任何其它器件使用的输出除外,比如RS-232、以太网等)。因 KGBM 将先于 UUT 生成输出,故需要采取某种机制来调整 UUT 和 KGBM 的输出,以便它们同时馈给到波形比较器模块。异步 FIFO 非常胜任这类工作。

在 UUT 馈给输出(在时间上迟于KGBM 的输出)时,波形比较器模块将从缓存 KGBM 数据的 FIFO 中读取下一条数据。通过这种方式,UUT 和KGBM 之间的相对性能差异变得无关,因此无论 UUT 运行的是源级代码仿真、网表仿真还是布局布线后设计仿真均无大碍。UUT 的性能可自动得到补偿,用户在改变 UUT 仿真的类型时无需修改测试平台。
波形比较器
与激励信号一样,用户可能需要补偿输出的格式。WaveGen 样例可将RS-232 流格式作为主要的输出。KGBM 则能够输出“字符”格式。这就意味着需要在波形比较器内部构建某种类型的 UART 接收器或等效的“反格式化器”(图 5)。


根据 UUT 和 KGBM 馈给的信
息,波形比较器可检查两者的信息是否相符。如果相符,则将数据标注为“成功”,写出为仿真器控制台输出或者磁盘文件。如果 UUT 和 KGBM的输出不相符,则比较器会显示适当的出错消息, 提醒用户注意这种差异。如同使用正确数据一样,用户可以立即在控制台上观察到这种不相符,也可将其存储为 ASCII 磁盘文件,供后续分析使用。不管是通过控制台还是通过 ASCII 文件,文本输出的优势在于可能进行数据过滤。一般来说,用户只关心仿真是否成功。如
果仿真不成功,文本文件有助于对仿真中何时出现不相符的情况进行锁定,便于用户从波形图采集更加深入的信息。一般来说,应向控制台发送简单且高度相关的信息,将更详细的信息存储为文本文件。这样便于用户迅速浏览控制台的输出,查看哪些通过了测试,哪些没有。随后可阅读文本文件以了解详细情况。

用户也可以在发现不符的时候将仿真挂起。该功能可通过波形检查器模块实现。
对那些乐此不疲查看波形的用户,ISim 仿真器工具和大多数其它仿真器都默认以图形方式显示仿真状态。这种图形化的表示可以为调试工作提供更丰富的信息,因为在仿真器运行的每个周期它都包含全部受监测的信息。正是由于发送给控制台和磁盘的文本信息中包含大量数据,用户才能够更快地“看到”成功的结果或锁定任何不符之处。
WAVEGEN 示例
WaveGen 参考设计是一种简单的设计,用于阐明 FPGA 开发工作中使用的多个重要概念,比如交叉时域、异步数据同步化以及多周期路径等。WaveGen 设计的基本功能是将一个模式载入存储器中,然后以不同速率“回放”,从而构成一个简单的波形生成器。对具备此功能的演示板,可以音频速率用扬声器播放输出。

WaveGen 设计通过 RS-232 输入端接收 ASCII 文本命令和数据。因此激励文件需要包含完成下列功能的一套命令:将模式存储到存储器中,读出部分模式(以验证数据是否正确地存入存储器),配置“回放”速率,初始化自动回放。表 1 是 WaveGen 测试平台所需的 VHDL 与 Verilog 模块。


简化编码工作
测试平台,尤其是经常使用的测试平台或用于一系列项目的测试平台,应具备自检功能与时间无关性。自检的方法是从文件或脚本提供激励信号(输入),为测试平台提供一致的、可重复的、可记录的输入,随后使用波形比较器对设计的已知正确行为模型的输出与设计的 UUT 的输出进行比较。这种比较可以自动进行,并可向控制台或以文本文件的形式(或者两者同时采用)报告各套输入的成功与失败,便于设计人员迅速地检查成败情况。

用户可采用行为建模方式(而不是完全可综合的结构)编写 KGBM 代码。用这种方式编写代码比较简单(因为这种模型比 UUT 的开发时间短得多),而且能够在不给仿真时间造成显著影响的情况下较 UUT 更容易生成输出。理论上,KGBM 和 UUT 的输出值应与每个输入集相符,这样就便于检测和报告差异。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表