什么是虚拟接口?

当我学习SystemVerilog验证特性时,有一个概念让我困惑——虚拟接口。这些是什么?为什么需要它们?

什么是接口?

从接口开始。快速总结:在Verilog时代,一个模块有端口,这些端口是单独的信号。要连接两个模块,每个模块有9个端口,你必须列出所有9个信号。这很容易出错。

连接模块与个别端口
测试和设计由独立端口信号连接的模块

当你把电视和DVD播放机连接起来时,你是不是连了单独的电线?不,你插入HDMI线,点击,就完成了。你甚至不需要知道HDMI线有多少根线(20根)。在SystemVerilog中,一束连接称为一个接口。在这个图中,SystemVerilog测试模块有一个接口端口,而旧的Verilog设计仍然有单独的端口信号。

将测试模块与接口连接,使用单独的端口进行设计
测试模块有一个接口端口,而设计模块仍然有单独的端口信号

接口包含连接和可合成的方法,用于执行发送和接收事务等操作。接口是RTL,就像您的设计一样。这里是一个有7个信号的接口和一个接收事务的任务。

接口color_ifc;
逻辑r, o, y, g, b,我,v;
任务接收(输出逻辑[31:0]数据);
...
endtask
endinterface

真正的硬件是静态的。如果你的芯片是用3M门制造的,它不可能因为你需要一点提升就突然有4M门。在模拟中,RTL设计是在编译时指定的,不能增加或缩小。同样,您的模拟具有固定数量的接口,在编译时指定,并且不能在运行时更改。

动态Testbenches

SystemVerilog类和对象是动态的。如果需要发送1000个事务,只需构造1000个对象。需要有2000个吗?只是构造更多。如果您的UVM测试台决定它需要2个驱动程序而不是默认的1个驱动程序,那么它只会在运行时创建另一个驱动程序(或代理)。

因为对象是动态的,所以它们不能包含接口。否则,当您在运行时构造第二个驱动程序时,它将创建第二个接口,这是不允许的。

但是对象可以包含指针。例如,代理具有指向驱动程序、监视器等对象的指针(句柄/类变量)。如何制作指向RTL接口的指针?

提示:在SystemVerilog中,关键字“virtual”通常表示指针。虚拟接口只是一个指向接口的指针。

例子

下面是带有颜色接口和驱动程序的测试模块。当它构造驱动程序时,它传递一个指向(物理)接口的指针。

模块测试(colors_ifc c_ifc)司机d;初始开始d = new(c_ifc);//发送接口d.send(42);结束endmodule

驱动类将指针保存在虚拟接口中,以便稍后使用它来驱动信号。

类驱动程序;
虚拟colors_ifc v_ifc;// RTL实例的指针

新功能(输入虚拟colors_ifc c_ifc);
V_ifc = c_ifc;
endfunction

任务发送(输入逻辑[31:0]数据);
v_ifc。R =数据[0];
...
endtask
endclass


好处

Driver类是可重用的,因为它可以指向任何color_ifc。如果您的测试台需要连接到两个接口,它只构造两个Driver对象,传入每个接口实例。

了解更多

您可以了解更多关于这些主题的内容,包括使用Siemens SystemVerilog进行验证的面向编程课程。开云体育平台登录在教练领导格式由我们的行业专家指导,或在一个自定节奏随需应变格式。还可以对其进行定制,以满足您的特定设计目标,并向您展示如何设置用于其他设计的重用环境。此外,您现在可以通过参加我们的数字徽章/ 1级证书高级科目徽章考试.这将使您能够通过在社交媒体和电子邮件签名中显示徽章来展示您对该主题的了解。

留下回复

本文最初发表于西门子数字工业软件博客https://blogs.sw.开云体育平台登录siemens.com/veri开云体育官方下载fic开云体育官网入口ationhorizons/2022/08/21/systemverilog-what-is-a-virtual-interface/
Baidu
map