总线功能模型(系统Verilog)

时间:2017-07-17 00:05:03

标签: system-verilog uart spi

我正在设计SPI和UART总线的总线功能模型。首先,我想了解我对总线功能模型的看法是否正确。

它应该模拟总线事务,而不必担心底层实现细节。

例如, 如果我要为SPI总线构建一个BFM,那么设计应该能够根据一些协议模拟作为主机的SPI上的事务,例如从文件读取指令,然后在模拟器上显示它们,

例如,将数据字节0c发送到从地址0f的通用数据传输指令(如send_write(0x0c,0x0f))应将芯片选择线驱动为低电平,并根据时钟边沿相应地发送数据位。 SPI模式,在这种情况下我对BFM的理解是正确的吗?

现在我不明白这是什么,它有什么用? 在DUT和Te​​stBench之间进行BFM,它对系统设计师有何帮助。

我还想知道是否有任何已经构建和测试的参考BFM可供学习,

如果有人可以帮我提供一个例子,我很感激,最好是在System Verilog中。

2 个答案:

答案 0 :(得分:1)

所以不得不对此进行很多研究,所以我想我会回答,但这里有一个关于它是什么的想法,

考虑一个模拟总线事务的总线功能模型(BFM),如READ和WRITE,可以减少测试平台的开销,以便对其进行时序分析。对BFM有更多的解释,BFM通常通过使其更加关注数据来减少测试平台的工作。

好的,这是一个高级答案,让我们深入挖掘一下,

将BFM视为一个整体位于测试平台块内的块,当测试平台需要执行任务时,例如,想要在特定地址写入,它要求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 Master的,它完成上述任务,每个的低级细节必须由接口和时钟块封装,以便具有时钟和抽象接口类型的健全性。我在本节中引用了一本书,它精美地描述了如何构建测试平台和设计事务级别模型(TLM)。阅读本文将使您更好地理解如何设计一个。

这个关于抽象BFM的paper也很好地说明了如何为好的设计建模BFM。 APB示例源于此。

以下关于如何将BFM放置在测试框架中的图像是我可以从Bergeron的书中收集的。

An implementation of how a BFM could sit in between the test-bench and the Design Under Test

希望能够基本了解BFM是什么。当然,编写一个并使其工作很困难,但是这些基本知识可以让你对它有一个高水平的描述。

图书参考: Bergeron,J。(n.d。)。在System Verilog中编写TestBenches。斯普林格。

答案 1 :(得分:0)

BFM是具有双重角色的VIP。它可以充当驱动程序或监视器/接收器。在Driver角色中,它使用接口句柄打包事务并使其在信号级别上驱动,否则DUT无法接受事务(它只有信号接口)。作为接收器,它将通过接口句柄发送的信号位解包到事务处并将其发送到记分板/检查器。在某些情况下,它还可以充当协议检查器。

您可以在这里获得一个很好的BFM使用示例 http://www.testbench.in/SL_00_INDEX.html