BFM(Bus Functional Model )--总线功能模型

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

  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值