摘要:

从模块级到系统级,UVM已经成为一个高效、完整的验证环境开发标准。关键原则之一是,UVM可以开发可重复使用的核查组件。获得重用能力的一个方面是在标准模拟器和硬件加速之间重用验证组件和环境。

本文重点研究了通过改变需求,使现有的UVM验证平台实现硬件加速的技术手段。如果在开发UVM环境时考虑到这些因素,将环境迁移到硬件加速器作为性能选项会更容易。本文中提出的建议将使您的UVM验证环境可用于硬件加速。

1导言

通用验证方法已广泛应用于复杂验证环境的开发。如今,许多团队已经开始将以前的验证组件和环境重用到第二代和第三代设计中。当项目验证过程中模拟时间很长时,可以使用硬件加速技术将模拟时间从几个小时缩短到几分钟,或者从几天缩短到几个小时。理想情况下,用户希望将UVM验证环境应用于模拟器仿真和硬件加速模式,并确保只有一个开发流程来管理验证平台。

本文讨论了一种改进的验证方法,其目的是当设计被移植到硬件加速平台时,所开发的UVM验证环境将不再具有负面的性能影响。应考虑以下性能因素:

a:划分顶层模块,使接口、设计和附加同步组件在一个模块中,同时验证平台在单独的模块中。

b:将原来的监控器改造成采集器和监控器。

c:当设计的验证环境已满时,驱动程序/收集器与其余验证交换之间的事务数量最少。分组的东西可以在不与验证环境的其他部分交互的情况下执行。

D:创建同步任务以获取事务、驱动信号,并从信号层的细节重新组装收集器。这些任务可以移植到接口定义中,然后在驱动程序和收集器中调用。因为接口是同步的,所以可以分为硬件范围。

e:从事务中删除计时,并使用另一种方法来指定事务序列内部或之间的延迟。引入定时代理来执行“延迟”序列。在模拟器模拟或硬件加速期间,这些延迟序列将在接口上执行。

f:优化随机化事务,确保不必要的随机化调用无法执行,可能对性别造成严重影响。

硬件加速对于您的UVM验证平台来说是一个好的性能选项吗?

在考虑加速之前,从侧面简要描述验证环境是非常重要的,因为在长期的模拟运行检查中,很大一部分时间都花在了DUT代码检查上。一般来说,当编译模拟所需的时间很长,而DUT编译模拟所需的时间很短时,加速不是验证环境的有效性能选项。但是,当过渡到子系统和系统级身份验证时,身份验证的重点可能不需要详细的身份验证功能,因为它们是模块级和IP级身份验证的重点。这意味着在某些情况下,如果模拟描述显示验证环境编译模拟需要很长时间,则可以应用验证环境优化技术,加速验证环境。

当模拟时间较短时,加速不是验证环境的良好性能选项。

以下是对主要性能因素的考虑和描述:

2.1 UVM环境运行时:

这包括在模拟器中花费的任何时间,例如随机化验证环境、配置和创建验证环境、配置DUT、驱动随机激励、以黄金模型为参考检查接收的数据以及采样覆盖范围。对于长时间的模拟,可以忽略验证环境的配置和创建时间,因为在编译模拟的过程中,它们只在模拟开始时出现一次。

2.2软件/硬件同步:

信号和东西在UVM验证环境和DUT发起的同步事件之间发送,模拟和硬件之间的每次交互都有延迟。此外,当数据需要在模拟器和硬件之间移动时,性能会受到影响,这对于性能开销非常重要。

2.3 DUT运行时间:

这包括在硬件加速期间执行设计的任何方面。因为硬件加速非常快,所以把设计尽可能的移植到硬件的范畴是非常重要的。如下图所示,任何属于硬件类别的警告都必须同步。

图1。相关模拟和加速的运行时间

比如你简单描述一个仿真的操作,验证环境占仿真时间的25%,设计占仿真时间的60%,同步预估计占仿真时间的15%。如果设计时间减少到0,最大性能可以根据以下公式计算:

HW_TIME = 60% + 60%*15% = 69%

估计加速度值= ) = 3.2x。

在这种情况下,硬件加速可能不是一个好的选择。

如果设计模拟的运行时间增加到85%,总时间成本减少10%,最大性能改进可以通过以下公式计算:

HW_TIME = 85% + 85%*10% = 93.5%

估计加速度值= 100/6.5 = 15.4倍

一旦你构建的设计可以作为很好的加速对象,调整后的性能提升可以远远超过以上数字。通过减少生成随机激励和在硬件和软件类别之间传输数据的时间,可以实现额外的性能加速。

3划分验证环境

建议划分顶层模块,以便DUT和环境的附加同步方面可以放在一个模块中,验证环境可以单独放在一个模块中。这不会影响模拟性能。

图2显示了一个简化的验证环境,它通过环境划分支持硬件模拟加速。

图2。划分DUT和结核病后的核查环境

顶层硬件模块包括DUT的实例化、时钟和复位单元的生成、接口以及用于TB和DUT之间的连接和同步的存储组件。简化验证环境模块包括UVM包、UVM组件包和用于配置和启动验证案例的初始化模块。验证环境的顶层模块的唯一目的是配置虚拟接口,并使用UVM配置数据库调用run_test任务命令。

图3。简化的tb_top模块代码

图4。简化的硬件顶部模块代码

4完成收集器和监视器

UVM建议在每个代理中包括一个监视器,监视器被动地对DUT接口上的信号进行采样,并将采样的信息组装成一个事务;收集覆盖率和性能检查。

对于硬件加速,建议将监控活动分为信号级和事务级活动。这与UVM推荐的模拟用例的创建非常相似。对于生成的模拟案例,UVM在事务级活动和信号级活动之间进行强制分离。

对于监视器,监视器分为低级收集器类和高级监视器,用于收集和检查事务级覆盖率。低级采集器也是一个被动实体,根据从接口到特定协议的处理模式,从接口信号中捕获交易信息。然后,这些东西通过UVM的TML通信端口传输到监视器,监视器可以检查、采样覆盖范围,并将通过检查的东西发送到记分板或任何可访问的验证组件。

图5。带收集器和监控器的推荐UVC结构

图6。监视器和收集器的连接

5尽量减少试验台和DUT之间的互动

部署硬件加速后,DUT和测试平台之间的每次交互都需要一个同步事件,这会对性能产生不利影响。将测试平台和DUT之间的访问权限仅限于驱动程序和收集器是非常重要的。这听起来很直观,但在实践中很难实施这一政策。当设计和验证环境迁移到加速平台以运行加速任务时,除了驱动程序/监视器之外的每个交互都是不可避免的。

例如,在两个常见的地方,当你发现你在等待一个信号改变一系列的事情,或者等待重置。将完成一个简单的UVM时钟和复位代理类,或者可以向UVM验证环境添加一个中断代理,以限制对这些信号和与这些信号相关的事件的访问。

6驱动和监控调节

当用户从模拟迁移到硬件加速时,第一步通常是将UVM验证平台改为模拟器,将DUT放在硬件类别中;为了验证,使用相同的测试用例来运行模拟和加速。

随着基于事物的仿真的加速,部分验证环境也可以放入硬加速器,验证环境和DUT之间的接口由任务调用,而不是单一的信号转换,进一步减少了模拟器和加速器之间的同步次数。这种性能改进是可取的,但需要验证分割环境的任何部分都与硬件端同步。

开发的接口UVC驱动通常包含一个“driver_transfer”任务,它会将一个东西转换成一系列信号,经过一段时间后进行交互,这些信号会通过虚拟接口连接到DUT。类似地,UVC监控器/采集器包含一个“collect_transfer”任务,该任务通过虚拟接口捕获信号电平的详细信息,并重组这些信息以供后续检查、覆盖和分析。

图7描绘了传统的UVC结构。信号由虚拟接口句柄驱动,时钟信号由驱动器和采集器参考。

图7。传统UVC结构

对于硬件加速,建议开发同步的“驱动程序传输”和“收集器传输”任务,以便它们可以包含在硬件顶部模块的DUT接口中。或者,对于模拟或加速,这些方法可以放入界面中。将这些任务从驱动程序类转移到接口的唯一缺点是UVM的工厂机制不能用来覆盖重载这些任务的默认行为。在UVM验证环境中,这种要求很少见。

图8描绘了具有硬件加速功能的UVC结构。其中驱动程序和收集器通过虚拟接口句柄调用接口中耗时的任务。信号驱动和时钟参考可以直接在接口中。

图8。加速UVC结构

7时钟和复位

对于加速,时钟和复位是设计的重要部分。因为时钟信号的频繁切换会导致不希望的同步事件。因此,建议完成一个简单的可重用UVM代理类,其中时钟信号是按顺序配置和启动的,复位信号是初始化的,来自UVM验证环境的延迟序列是执行的。时钟产生、延迟和复位信号的细节将在硬件类的SV接口和时钟产生模块中完成。下图描述了UVM时钟和重置代理的体系结构图。

图9。可重复使用的时钟&重置代理

下面显示的代码是一个简单的可重用数据对象,它可以控制DUT的时钟和复位信号。

图10。时钟重置东西

在驱动程序的connect_phase中,驱动程序可以从配置数据库中获取接口,然后在run_phase中,它获取时钟重置的东西,并使用控制信息来调用接口中定义的时钟和重置任务。

下图SV代码描述的技术细节是利用驱动中的clk_reset_item事务信息调用接口中合适的任务。

图11时钟复位信号驱动和连接

为了确保时钟能够被正确识别,时钟生成结构被放置在模块中。通过接口将适当的控制信号传递给模块,以控制处理并生成时钟。

加速环境下的处理超时问题尤为令人担忧。通常需要检查特定的事件、事物或中断是否在特定的时间段内发生。如果时钟参考放在类端,就需要在模拟器和加速器之间频繁同步。为了避免这种情况,时钟/复位UVC中内置了一个定时器和序列,当设置的时间超时到达时,序列将返回相应的超时信息。在模拟测试完成之前,当尚未达到超时时,设置字段可能会导致错误。对于同时导致的超时请求,计时器可以同时处理这些超时请求。

上面的sv代码演示了一个简单的例子。如果一个设计想要在将来被重用,时钟和重置代理可以跨项目和团队使用。

8从事物的顺序中去掉时间顺序

为了获得最佳性能,确保验证环境中没有时序信息非常重要。这包括所涉及的时钟信号,#延迟和等待DUT信号的转变,以及在事物序列之间或之内使用指定延迟的替代方法。定时代理可以执行“延迟”序列。并且这些序列会在模拟和加速时在硬件端的接口上执行。

时钟和复位代理类还包括一个序列,该序列可以配置为等待用户基于可变时钟数定义的延迟。该序列也可用于虚拟序列。例如,下图中的sv代码显示:

图12。通过虚拟事务序列执行时间序列

下图中被替换的代码可以在虚拟事物的序列中找到。

图13。带时序信息的虚拟物序体任务

9随机化调整

确保约束随机化尽可能简单。如果您在加速模式下运行测试用例,并且不需要随机化,请确保您的UVC接口中包含的事情序列不会调用随机化。

10摘要

提前花时间构建一个易于移植到硬件加速模拟的UVM环境,可以带来巨大的性能优势。因此,建议升级和加强UVM环境的结构,以便模拟和硬件加速都使用验证环境。

感谢您关注《路加验证》。也欢迎大家分享转发真正的技术价值。您的支持是我们不断前进的动力。

1.《hwsw UVM验证平台的加速考量》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《hwsw UVM验证平台的加速考量》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/1665937.html