总线功能模型 BFM

最近在看《基于VerilogHDL……设计》这本书时,书上的Testbench这一部分中,讲到了关于总线功能模型BFM(Bus Function Model),不是很理解,于是乎在网上找了找相关的知识,在这里跟大家分享一下:
在软件设计中,经常需要将一些功能实现的细节用函数封装起来,这样上层需要某项功能时直接调用函数即可,无需关心底层的具体实现。Testbench在设计思想上更接近于软件,因此在设计中也常采用这种方法,将底层的接口时序用某种方式封装起来,对上层具体应用来说它只需要调用相关的任务,而不用了解底层的细节,就可以实现底层的接口时序。BFM的核心也就是封装接口时序。

以下一段来自百度百科:
BFM应该描述的是具有某种具体功能的电路。比如说,你的待测电路是一个智能卡,那他的BFM就是读卡器;那你就要根据协议,在BFM中描述出读卡器的具体行为。写BFM就类似于写testbench了。BFM里面有需要主动触发的动作,以及被动接受的动作。主动触发的动作,你写成task,这样方便在testcase中调用。被动触发的动作,你在BFM里面直接写成电路就可以了。当然你可以灵活处理。

BFM接收被测对象的输出信号,同时也向被测对象提供输入信号,核心是模拟实际芯片的接口行为。

以下内容来自CSDN某博主(感谢):
说到BFM,就不得不提验证,只有在验证前提下说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来完成。“分析信号”也是类似的。

猜你喜欢

转载自blog.csdn.net/cclccl941123/article/details/82527831
BFM