嵌入式学习小组
直播中

刘耀清

7年用户 213经验值
私信 关注

基于C的测试和验证套件集成到常规UVM测试平台的方法

Systemverilog [1]和 UVM [2]为验证团队提供结构和规则。它使得在许多测试中能获得一致的结果,并可以在团队之间共享验证。许多验证团队都在使用由C代码编写的验证套件。本文将讨论将基于C的测试和验证套件集成到常规UVM测试平台的各种方法。

回帖(8)

白桦

2020-12-11 11:13:42

  • 引言

本文将演示把DPI-C与标准UVM Testbench一起使用的技术和方法。 C代码将应用于底层事务生成器,高级事务生成器,记分板和监视器等模块中。 UVM测试台将同步运行-例如,UVM测试可能正在总线上传输后台流量,而C代码在创建正在测试的特定总线事务。

UVM与C之间的问题
UVM被广泛用于测试平台创建,覆盖率收集和监测。使用SystemVerilog和UVM已成为提高验证团队生产力的一种方法。
除了UVM原生的随机化和约束功能之外,验证团队还需要创建或重用C程序。这些C程序可能用来产生激励、检查标准结果,也可能用来收集统计数据。使用System Verilog的DPI-C是将这两个世界连接在一起的方法。
问题是使用DPI-C有时会很困难,并且DPI代码与“作用域”密切相关。作用域可以是模块(module)实例,接口(interface)实例或全局根(root)作用域。这些作用域为DPI提供了一个从System Verilog来回调用的连接点。
UVM测试平台几乎没有这些作用域。 UVM测试台是基于动态类的结构,而不是基于静态实例的结构。

解决方案:虚拟接口
有许多可轻松连接UVM和C的解决方案。本文将探讨最简单的方法–利用与代理相关联的接口(虚拟接口)。
举报

笪琳琳

2020-12-11 11:13:54

  • 背景

UVM测试平台通常是通过代理(Agent)附带一个System Verilog接口来构建的。该接口连接到被测设备(design under test,DUT)端口。为了给DUT发送消息,UVM利用驱动(driver)来控制引脚的时序波形。为了从DUT接收消息,UVM利用监视器(Monitor)来收集引脚的时序波形。接口实例是我们用来承载DPI-C调用的理想场所。

图1 - 典型的Agent与DUT之间利用接口链接

如图2所示,通过DPI-C添加C代码。

图2 - 单个的Agent与C代码连接

可以将多个Agent(如图3所示)连接到C代码,无论是否线程化。 C代码不是特定于实例的。可能存在与某些接口关联的某些C代码(例如AHB与AXI)。

图3 - C代码与多个Agent相连
举报

张喆

2020-12-11 11:14:06
SystemVerilog 接口
SystemVerilog接口是一个收集信号的地方,这些信号被认为是一个整体,就像总线一样。它可以包含许多其他内容,包括modports和时钟模块,以及其他接口等。SystemVerilog接口可以像模块一样被“实例化”,并且可以连接到该接口。
就我们的目的而言,我们只关心接口提供托管的DPI导入和导出范围的能力。



上面的界面是一个简单的界面,其中包含导入和导出。它可以包含许多其他项目。辅助函数的作用是将调用简单地转发到接口中已连接的序列发生器(sequencer)上。在界面中仅建议使用简单的封装。将功能保留在sequencer或agent代码中。
举报

马占云

2020-12-11 11:14:15
UVM Agent
我们在此解决方案中使用的Agent就是常规的Agent。Transaction,Driver、Monitor或Agent的程序本身没有任何变化。任何调用DPI代码的sequence都将需要改动,sequencer也将需要改动。
Agent需要处理一件新的任务。它在Sequencer中初始化虚拟接口句柄,并在虚拟接口中初始化Sequencer句柄。这就是将接口连接到Sequencer以及将Sequencer连接到接口的魔法。Agent负责将接口和Sequncer连接在一起。
从接口可以进行Sequencer调用,而从Sequencer可以进行接口调用。


Agent通常具有该功能,在build_phase中,我们添加了另外两行。

这两行代码连接虚拟接口和Sequencer。这是从“常规”的Agent到启用DPI-C的Agent中唯一添加或改动的地方。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分