大家好,欢迎来到IT知识分享网。
BFM 的作用是将低层总线的时序封装起来, 对高层提供一个调用接口,使得高层不用关心低层的实现细节, 专注于 testcase 的设计。这一点类似 C++ 中面向 对象的概念, 在 C++ 里, 对象相当于命令或调用 , 而对象的成员函数实现具体的功能, 外部无须关心类内部的细节。
BFM 就是针对特定设计单元的总线接口模型, 例如微处理器的总线接口模型。 它不包括 RTL 或门级单元内部的细节。
BFM 的目的是为了使验证代码的仿真速度更快, 行为建模更容易, 并且模型更易使用。
验证就是送激励给DUV(design under verification),然后对DUV输出的信号(或内部信号)进行分析。即
“激励产生” -> “送激励” -> DUV -> “接收信号” -> “分析信号”
那么,BFM就是“送激励”和“接收信号”。在上面的数据流中,带有时序的部分,就是DUV和“送激励”、“接收信号”三部分。说白了,BFM,最大特点就是带有时序的模块,1拍1拍的把数据送给DUV,或者1拍1拍的把数据从DUV接收下来。BFM分为发送bfm和接收bfm。
对于发送bfm,将产生好的激励,在时钟控制下送给DUV,这里的激励,是通过没有时钟的模块产生的,用verilog,c,都可以。
对于接收bfm,将来自DUV的数据事先存在一个大的memory或者reg中,然后在某个时刻触发分析数据的事件,调用“分析信号”模块,从而达到分析DUV输出数据的目的。
“激励产生”和“分析信号”都是不带时序的,如果用verilog语言来写,最大的特点就是要用许多task来完成。“分析信号”也是类似的。
APB_BFM示例:
当测试台需要执行任务,例如想写一个特定的地址,它要求BFM在该地址写入数据,这是一个黑盒子,用于测试台,同时负责处理时间。它可以由可以由测试台加载的文件驱动,也可以由测试台用于执行事务的一堆任务来驱动。
被测设计(DUT)对BFM交易的响应是测试人员对设计感兴趣的。有人可能会争辩说,BFM可能会根据DUT而改变,这就是每个人所说的更好的BFM的区别。
如果BFM可以有一个可以加载的配置向量,以根据DUT规范进行初始化和行为,那么它可以帮助测试其他设计
BFM可以定义为抽象的虚拟函数(在SV中),它可以基于DUT进一步具体实现。将基本的读写操作进行了封装,
virtual class apb_bfm; pure virtual task writeData(int unsigned addr, int unsigned data); pure virtual task readData (int unsigned addr, output int unsigned data); pure virtual task initializeSignals(); endclass
上面BFM抽象是对于APB bus,每个这些的低级别的细节必须由接口被封装并以具有时钟的健全性以及计时块的任务抽象接口类型。
参考链接:
Verilog_Testbench设计技巧和策略 – 豆丁网
总线功能模型 BFM_总会有钱的的博客-CSDN博客_总线功能模型
总线功能模型(系统Verilog) – VoidCC
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/149791.html