使用UVM的NoC平台的可重用验证环境
摘要:片上网络(NoC)已成为现代数字系统的互连解决方案,特别是对于片上系统(SoC),因为系统中需要通信的IP数量很多。已经引入了各种系统和路由器;因此需要制作可重复使用的验证环境来测试单个路由器和网络。在本文中,我们使用通用验证方法(UVM)为NoC平台提供可重用的验证环境,该方法以易于修改的方式测试和验证路由器和网络,以适应各种路由器和网络。环境还评估性能参数,例如注入速率,吞吐量和延迟。
关键词:通用验证方法论(UVM);片上网络(NoC);片上系统(SoC);
IEEE EUROCON 2017, 6–8 JULY 2017, OHRID, R. MACEDONIA
发表于:IEEE EUROCON 2017 -17智能技术国际会议
https://ieeexplore.ieee.org/document/8011112/authors#authors
1.引言
已经引入了多核架构和平台以满足现代应用的异构性质。在这样的系统中,许多不同的处理元件需要交换数据。因此,随着同一芯片上IP数量的增加,通信或互连成为现代数字系统[1]性能的主要瓶颈,而不是其逻辑或存储器。数字系统中的大部分功率在驱动导线时都会丢失,并且大部分时钟周期不会花在门延迟上,而是花在线延迟上[2]。所有这些因素使互连成为现代数字系统的限制因素。
片上网络(NoC)为现代SoC应用提供了可扩展,灵活且带宽节省的解决方案,并成为传统总线架构的强大替代品,例如:AMBA,Avalon,CoreConnect,STBus。这使得NoC成为在片上系统(SoC)内构建互连的新范例。
由于NoC系统的复杂性,生成有效的验证环境以测试和比较各种NoC方面非常关键。
出现了许多方法来标准化验证并提供可重用的体系结构。最新的开源方法是通用验证方法(UVM)[3]。
已经存在几种NoC验证和仿真平台。在[4]中,使用SystemVerilog开发了一个验证和评估NoC性能的工具。然后,该工具用于比较不同的拓扑,路由算法和测试方案。在[5]中,使用SystemC开发了一个模拟和验证平台。该平台仅限于拓扑和路由算法的修改。该平台还允许用户开发其他拓扑和路由算法。但是,这些平台都没有使用UVM,与其他方法相比,它可以提供更多的模块化,可扩展性和可重用性。
这是[6]中应用的平台除外。一方面,它确实使用UVM进行验证,而另一方面,它使用高级高性能总线(AHB),它具有传统总线在性能计算和功耗方面的缺陷和缺点。
在本文的第二部分,我们提出了一种用于验证单个路由器的UVM架构。在第三节中,我们实施了一个网络验证环境。在第四节中,我们讨论了在我们的架构上实现的测试,在V中讨论了相应的结果。最后,我们的结论载于第六节。
2推荐用于路由器验证的UVM环境
在本节中,我们将介绍单个路由器的UVM环境。讨论了两种方法,即基于预测器的方法和基于参考模型的方法。
A.基于预测器的方法如图1所示,该体系结构由agent,记分板,虚拟序列和virtual sequencer组成。被测设计(DUT,如路由器)通过接口连接到环境。
①agent
在我们的方法中,agent根据网络拓扑分配到路由器的每个端口。例如,如果我们正在验证一个网状拓扑结构的中心路由器,那么验证环境对于路由器的5个端口应该有5个agent。agent的目的是生成和监视transaction。每个agent包含以下组件:
- Driver
Driver程序负责在DUT中注入数据并对其进行响应。为此,每个端口的driver应遵循与DUT相同的发送和接收数据包的协议。 - Sequencer
agent的sequencer负责为driver提供sequence。从virtual sequencer中实例化的sub_sequence取到这些transaction。 - Monitors
每个agent包含两个monitor;一个monitor的输入来自DUT的端口输出,另一个monitor的输入来自driver端口输入。monitor收集的transaction通过analysis端口发送到记分板以进行评估。 - Configuration file
通过添加配置文件,agent的modules可以切换到passive或active,以允许对网络进行可配置的测试,并简化测试用例的实现。
②Virtual Sequence and Virtual Sequencers
Virtual Sequence提供层次化的sequence。顶层sequence不向DUT发送任何transaction或sequence item,它仅启动子序列和基元序列,子序列和基元序列又将transaction发送到driver并从那里发送到DUT。该机制的目的是提供sequence的模块化,这些sequence被发送到DUT并且仅允许通过改变sequence来添加不同的测试用例。
virtual sequencer与各env的sequencer连接在一起。
图1.单个路由器的建议UVM环境(基于预测器的方法)
③Scoreboard
记分板收集从各种monitor发送的transaction,然后自动执行对比过程。如果从DUT获得的输出与预测器的预期输出匹配,则验证过程成功完成。记分板通过analysis ports得到从每个active agent的monitor发来的transaction。记分板分为两个区域:预测和评估。
预测器在行为上模仿DUT的功能。从每个monitor_input(输入数据包)获得的transaction都被传递到预测器,以确定应该将数据包分配给哪个输出端口,并确定数据包的输出格式是否应该更改。然后将数据包存储在与分配的输出端口对应的阵列中。另一方面,从每个monitor_output(输出包)获得的每个事务直接存储在与从其收集的输出端口相对应的数组中。
在成功注入和收集所有数据包之后,将所有相应的输入和输出数组进行比较。如果所有数据包都正确匹配,则表示所有数据包都通过DUT正确发送和接收。
可以根据不同的测试场景和测试平台架构来配置记分板,以验证DUT并执行端到端检查。
B.基于参考模型的方法
当时序成为变量参数时,基于预测器的方法将是不够的。另一种方法是为DUT实现一个具有相同时钟级别的模型。这样可以获得更准确的结果,并允许测试预测器可能无法测试的所有方面和隐藏的情况。
除了一些微小的修改之外,该方法使用与基于预测器的方法相同的组件。如图3所示,参考模型在顶层实例化,并通过用于DUT的相同接口连接到环境中的agent。它也由与DUT相同的输入驱动。但是,monitor_input将替换为monitor_RM,它通过接口收集参考模型的输出transaction。记分板的工作方式与之前的方法相同,但是不需要再存储并传递transaction给预测器,而是直接从monitor和参考模型获取transaction进行对比。
图2.单个路由器的建议UVM环境(基于参考模型的方法)
3为网络验证提出的UVM环境
为了测试真实的网络,重新使用单个路由器的环境,如图3所示。为网络中的每个路由器创建路由器的环境。所有路由器的环境都连接在测试层中创建的名为“Env_Top”的全局环境中。例如,如果要测试2x2网状网络,则会创建四个相同的环境。每个环境包含与以前相同的agent,sequence和记分板。网络中数据包的注入和收集只能通过使其agent成为网络中唯一的active agent在本地端口完成。同时,剩余端口的agent使用配置文件置为passive,并且它们的端口连接到相邻路由器的端口,以根据所选拓扑构建网络。
记分板在“Env_Top”层中实现,以在网络上执行端到端检查。
图3. NoC中多个路由器的建议UVM环境
记分板通过analysis ports连接到网络中每个路由器本地端口的输入和输出monitor。相同的比较方案用于存储和比较数据包,但是,这次操作仅在本地端口上执行。记分板的预测器分析每个路由器的本地端口注入的数据包,确定该数据包最终应该到达哪个路由器,计算数据包的最终格式(如果它改变),并将它们存储在与预测输出端口相对应的阵列中。由于单路由器环境具有相同的行为,记分板将输出数据包存储在数组中,并将它们与相应的输入数组进行比较。这应验证所有注入的数据包是否以正确的格式到达正确的目的地。
评估记分板还用于测量网络的性能参数。每个路由器的本地端口中的每个driver都会将数据包注入网络。注入的数据包具有随机目标地址,具有统一的分布流量模式。数据包通过环境传播并终止于指定路由器的本地输出端口。从网络注入和收集的所有数据包都被传递到评估记分板。然后记分板分析所有数据包以计算NoC性能参数。其他流量模式也可以通过本地端口driver中的修改来应用。
4测试和仿真
为了测试我们的UVM环境,在[7]中实现的基础路由器被用作DUT。基础路由器有五个端口,四个连接到四个相邻路由器中的每一个,第五个连接到处理元件。基础路由器及其IO的框图如图4所示。
图4.基础路由器框图
每个数据包包括其源和目标地址,用于路由计算。路由器使用固定的XY路由并更新数据包的源字段。在多个数据包寻求相同输出端口的情况下,循环仲裁用于确定哪个数据包通过。
我们的UVM环境中的测试层涵盖了单个路由器和网络的多个测试场景。其中一个测试场景是UVM环境重置DUT(路由器),将某些数据包驱动到某个输入端口并等待数据包到达输出端口。另一种情况是;同时驱动几个数据包并等待它们到达其输出端口,检查它们的到达顺序。
路由器中的测试层管理序列中的不同任务,以创建不同的测试情况,如图5所示。有几个任务,比如填充某个端口的输入缓冲区,让所有地址指向同一个输出端口。
图5.路由器测试场景
测试层结合了多个序列或状态描述了整个网络,而不仅仅是路由器。虽然网络测试层会控制所有路由器的driver,但这可以深入了解整个网络状态。例如某个区域拥挤的情况。
重用相同的路由器sequences且改变路由器sequence item的ID,可以产生网络的sequences。驱动到输入端口的数据包将被驱动到路由器注入器,对于不同的路由器,该序列将重复多次。创建更复杂的序列,例如拥塞网络的部分,将通过填充相邻的路由器输入缓冲区。现在,测试层可以通过在这些序列之间进行更改来在某些网络状态之间切换,从而实现更有效的验证过程。
错误注入器将通过将错误的地址包推送到不同的路由器端口,连同有效的地址包并监视输出端口。这里,transaction的地址被设置为某个无效的端口地址。网络环境中的路由器也可以这样做。
5结果
该环境用于测试和验证由基础路由器组成的NxN 2-D网状网络。它计算每个处理单元每个周期的数据包的平均吞吐量和周期的平均延迟。两者都是根据每个处理元件的每个周期的包中测量的注入速率范围来确定的。
6结论
在本文中,提出了一种可扩展和可重用的使用UVM的NoC平台的验证环境。讨论了拟议环境中的不同设计方法。详细解释了每种方法的目的及其对环境可重用性的影响。设计了用于验证单个路由器的必要组件,然后重用这些组件来开发完整的网络验证环境。最后,环境对现有NoC平台进行了实际测试验证,给出了关键性能参数。