System Verilog学习笔记—虚接口(virtual interface)
1.虚接口(virtual interface)
1.1为什么引入虚接口?
我们知道,通过引入interface可以简化模块儿之间的连接,即interface是连接硬件的,其是硬件语言;但对于验证来说,其描述语言往往是软件语言,interface无法在基于OOP的测试平台中实例化,因此我们无法通过interface把激励传送到DUT中;为了解决这个问题,引入了virtual interface,使得基于OOP的验证环境可以通过虚接口把激励传送给DUT。
1.2虚接口如何实现测试平台与DUT的连接?
virtual interface的本质是指向interface的指针,因此其并不是一个真实存在的实体,而interface是一个真实存在的实体;基于OOP的测试平台会通过调用virtual interface来间接操作实际的信号。
1.3示例
现有如下RTL代码,要求搭建一个简单的测试平台:
module counter(input clk,resetn,input [3:0] load_value,input load_valid,output reg [3:0] q);always@(posedge clk or negedge resetn)beginif(!resetn)q<=4d0;else if(load_valid)q<=load_value;elseq<=q+4'd1; end
endmodule
首先创建一个interface简化与DUT的连接:
interface counter_if(input logic clk);logic load_valid;logic [3:0] load_value;
endinterface
其次创建一个transaction用来生成随机激励:
class transaction;//用rand来生成随机化激励rand logic load_valid;rand logic [3:0] load_value;
endclass
然后创建一个driver来驱动激励到DUT上:
class driver;virtual counter_if vif;//生成一个virtual interface句柄function new(input virtual counter_if vif);//该new函数用来使虚接口句柄指向interfacethis.vif=vifendfunctiontransaction tr;task run(int n);//产生n次激励for(int i=0;i<n;i++)begintr=new;assert(tr.randomize());//$display("tr.load_valid=%0d,tr.load_value=%0d",tr.load_valid,tr.load_value);@(posedge vif.clk)begin//在clk上升沿,通过虚接口将transaction中的随机激励传送到interface上vif.load_valid<=tr.load_valid;vif.load_value<=tr.load_value;endendendtask
endclass
最后创建top文件,用来将以上文件整合:
module tb_top;logic clk,rstn;logic[3:0]q;counter_if dutif(clk);//实例化interfacedriver my_driver;//声明句柄counter u_counter(.resetn(rstn),.clk(clk),.load_valid(dutif.load_valid),.load_value(dutif.load_value),.q(out));//实例化DUTinitial beginmy_driver=new(dutif)//实例化驱动,使虚接口句柄指向interfacerepeat(2) @(posedge clk);@(posedge rstn);repeat(5) @(posedge clk);my_driver.run(20);//产生20次随机激励endinitial beign//生成T=10的时钟clk=1'b0;forever #5 clk=~clk;endinitial begin//复位信号的生成rstn=1;repeat(2) @(posedge clk);rstn=0;repeat(5) @(posedge clk);rstn=1;repeat(50) @(posedge clk);$finish;endendmodule
仿真结果:
System Verilog学习笔记—虚接口(virtual interface)相关推荐
- typescript学习笔记1 —— 接口(interface)
typescript是微软出品的,javascript的超集.让javascript的写法很类似java,核心功能是让JavaScript这个弱类型的语言,增加类型检查,更适合编写企业级应用.之前的a ...
- System Verilog学习笔记—接口interface
目录 0.interface的直观理解 1.使用端口的TB与DUT通信 2.使用接口的TB与DUT通信 3.使用modport将interface中的信号分组 4.接口中的clocking block ...
- TypeScript学习笔记之 接口(Interface)
在java中,接口是用来定义一些规范,使用这些接口,就必须实现接口中的方法,而且接口中的属性必须是常量. javascript中是没有接口的概念的.所以TypeScript在编译成 JavaScrip ...
- System Verilog学习笔记—fork...join_xxx的三种用法及wait fork和disable fork
目录 0.前言 1.fork...join 2.fork...join_any 3.fork...join_none 4.其它线程执行语句 4.1wait fork 4.2 disable fork ...
- System Verilog学习笔记—随机化约束的控制
目录 1.控制多个约束块儿constraint_mode() 2.控制随机变量 2.1 rand_mode() 2.2 randomize() with {} 2.3 randomize单独控制变量 ...
- System Verilog学习笔记—随机化约束种类
1.为什么引入随机化? 芯片体积增大,复杂度日渐提高,定向测试已经无法满足验证的需求,而随机测试的比例逐渐提高 定向测试能找到你认为可能存在的缺陷,而随机测试可以找到连你都没有想到的缺陷 随机测试的环 ...
- system generator学习笔记【02】
作者:桂. 时间:2018-05-20 23:28:04 链接:https://www.cnblogs.com/xingshansi/p/9059668.html 前言 继续学习sysgen.接触s ...
- Verilog学习笔记-——Verilog模块例化
Verilog学习笔记---Verilog模块例化 在一个模块中引用另一个模块,对其端口进行相关连接,叫做模块例化.模块例化建立了描述的层次.信号端口可以通过位置或名称关联,端口连接也必须遵循一些规则 ...
- 【Verilog学习笔记】D触发器(门级和行为级)+4位寄存器+一个完整的激励程序
[Verilog学习笔记]D触发器(门级和行为级)+4位寄存器+一个完整的激励程序 首先展示以下完整的程序 `timescale 1ns / 1psmodule hardreg( input wire ...
最新文章
- 计算机一级题资源,计算机一级B考题汇总(珍贵资源)
- Visual Studio 2015 Community连接到Mysql
- 【Leetcode | easy】最长公共前缀
- play框架入门操作
- (Object detection)目标检测从入门到精通——第一部分
- springboot2 - 坑 - 解决put提交接收不到参数的问题
- kd-Tree 【专题@AbandonZHANG】
- Jps介绍以及解决jps无法查看某个已经启动的java进程问题
- 一个可能是世界上最全的 API 接口集合库开源项目
- Atitit 歌词成语提取项目 nlp 人工智能项目 目录 1.1. 流程 首先搜集3w成语词库	1 1.2. 歌词常用成语400个 按照拼音排序	1 1.1.流程 首先搜集3w成语词库 放入m
- 算法与数据结构面试题(6)-腾讯面试题
- Windows密码查看器实现原理
- python实现批量将域名解析成ip
- 编译安装wpa_supplicant
- 电脑能上qq等软件但是浏览器打不开网页
- 渗透实战(周三):Ettercap·ARP毒化MITM中间人攻击
- 免费可用的Android手机传感器数据采集程序(附程序)
- Idea 设置Eclipse快捷键
- JAVA 清理垃圾文件简单实现
- uniapp小程序实现开屏页
热门文章
- 如何在VScode上配置Python开发环境【保姆级】
- boolean mct_object_set_parent(mct_object_t *object, mct_object_t *parent) 有感
- C++练习题20191125
- java边框颜色_边框颜色顺序
- 机器学习中的目标函数、损失函数、代价函数的区别
- 一个小时完成numpy入门(一)
- 记一次jasper的PDF模板父子报表实现功能
- java static 修饰_「static」JAVA static是什么?修饰符总结整理 - seo实验室
- 两小时课程值2000?清晖PMP最后两小时冲刺点题你参加了吗?
- Java中高级核心知识