c语言sscanf函数的用法是什么
287
2022-11-23
使用功能覆盖执行端到端流量可追溯性
大多数时候,定义功能覆盖目标是在测试计划准备过程中完成的。对于要验证的被测设备 (DUT) 的每个功能特性,所有可能的激励生成都是通过测试用例并在记分板、模型、检查器和断言的帮助下开发的。我们通过检查该刺激的响应来确认 DUT 的正确性。为了确保我们创建了足够多的输入场景和 DUT 响应组合,根据覆盖组、覆盖点和断言覆盖为每个特征定义了覆盖目标,这让我们对验证特定特征的彻底程度充满信心。
DUT 的 RTL 块进入从覆盖类别分数定义的变量中,并在具有不同值命中的交叉覆盖组中使用这些变量将确认输入事务是否遵循指定的设计输出路径。出于几个原因,这非常重要。首先,功能验证记分板确实进行端到端事务检查,但它不确认 DUT 流量路径激励已遵循。其次,单个覆盖组或 UVM RAL Regmodel 功能覆盖或断言覆盖将有助于单个刺激覆盖,但组合使用将确保功能路径的正确性。让我们详细看看我们如何使用功能覆盖来确认从输入到输出端口的流量穿过所需的数据和控制路径。
执行流量追溯
很多时候,仅仅涵盖单个特征和交叉特征是不够的。通过遍历不同数据块、各种控制逻辑和不同 DUT 配置的所有可能组合来检查输入接口的流量是否已到达另一端的输出接口,这是一个基本要求。
使用交叉覆盖,在覆盖类之外定义并用于存储来自各种写入方法的事务的变量上,可以确保这些变量的不同值被命中并跟踪设计的 DUT 路径。覆盖组也将在覆盖类之外定义。
设想
让我们考虑一个场景,如图 1 所示。在一个高度配置的 DUT 中,一个输入……一个数据包可以通过选择的数据路径和控制路径块以及通过基于寄存器配置的选择的数据包路由器端口路由到输出端口。带有字段 RT=2‘b01 的寄存器 CTRNL_RUT 使用 Cntrl_plan1、交换机 1(图中未显示)决定从输入端口 1 到 DataPath_blk1 并到路由器端口 1 并最终到输出端口 1 的数据包路径。但是,寄存器 CTRNL_RUT.RT= 2’b10 将使用 Cntrl_plan2 和路由器端口 2 通过 DataPath_blk2 更改新传入数据包的路由。
在这种情况下,为 datapath_block1、控制路径(即 Cntrl_plane1)和寄存器字段 RT 定义的覆盖组将分别覆盖激励值。但是,如果变量定义在覆盖类范围之外,保存来自这些接口的信号值,并且如果在具有有趣值的交叉覆盖中使用,则可以确认数据包已通过正确的路径并实现数据包可追溯性。
图 1 : 在每个点获取信息的交通跟踪
覆盖实施
在测试平台中,环境类通常具有在其中实例化的所有接口代理、功能覆盖和记分板。IO 和控制接口监视器的分析端口连接到功能覆盖类的出口,以获取接口数据包和事务。所需资源,如 regmodel,将使用 uvm_condig_db 构造将不同的配置对象设置为覆盖类。覆盖实现方面,定义变量、覆盖类之外的数据包存储元素,并使用它们复制重要接口信号、控制信号和数据包字段的值。这些在覆盖类之外定义的变量将用于交叉覆盖。
如上图 1 所示,覆盖类之外定义的变量将用于保存数据包 ID 等信息,对 DataPath_blk1 有效。对于控制平面,保存准备就绪、状态、目标 ID、路由通道号等信息。可以将 CTRNL_RUT.RT 值等字段的寄存器值与这些变量交叉,以确保如果 RT 的字段值为 01,则 Datapath_blk1 字段和控制计划信号具有感兴趣的值。使用上述方法实现功能覆盖将很有帮助,尤其是在块和集群级别验证的情况下。覆盖类的独立实现探索了具有类似 DUT 接口的项目之间的可重用性选项。
代码示例
结论
基于将验证事务或数据包的重要接口信号,可以定义覆盖类范围之外的全局变量并用于复制这些信号。每个接口信号、控制信号也可以这样做,并且可以在一个覆盖组中使用许多全局变量,这将定义这些变量的交叉覆盖。这就是您可以确认从输入到输出端口的流量通过所需数据和控制路径的方式。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~