总线功能模型(System Verilog)
Bus Functional Models (System Verilog)
我想为 SPI 和 UART 总线设计一个总线功能模型。首先,我想了解一下我对总线功能模型的看法是否正确。
它应该模拟总线事务,而不用担心底层实现细节。
例如,
如果我要为 SPI 总线构建 BFM,该设计应该能够模拟 SPI 上的事务,作为基于某种协议的主机,例如从文件中读取指令,然后相应地在模拟器上显示它们,
例如,通用数据传输指令,如 send_write(0x0c, 0x0f),将数据字节 0c 发送到从地址 0f,应将芯片 Select 线驱动为低电平并发送基于SPI模式在时钟边沿相应的数据位,在这种情况下我对BFM的理解是否正确?
现在我不明白的是,它有什么用?
BFM 位于 DUT 和 TestBench 之间的哪个位置,它如何帮助系统设计人员。
我也想知道是否有任何已构建和测试的参考 BFM 可供研究,
如果有人能帮我举个例子,最好是在 System Verilog 中,我将不胜感激。
所以不得不对此进行大量研究,所以我想我会回答,但这里有一个想法,
想一想模拟总线事务的总线功能模型 (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 示例是从中派生出来的。
下图是我从 Bergeron 的书中收集到的关于如何将 BFM 放置在测试框架中的图像。
希望这能让您对什么是 BFM 有一个基本的了解。当然编写一个并让它运行起来很困难,但是这些基本知识可以让你对它有一个高层次的了解。
书籍参考:
J. Bergeron(n.d)。在 System Verilog 中编写测试平台。施普林格
BFM 是具有双重角色的 VIP。它可以充当驱动程序或 Monitor/Receiver。在驱动程序角色中,它打包事务并使用接口句柄使其在信号级别上驱动,否则 DUT 无法接受事务(它只有信号接口)。作为接收方,它将来自接口句柄的信号位解包到交易并将其发送到 Scoreboard/Checker。在某些情况下,它还可以充当协议检查器。
您可以在此处获得 BFM 用法的一个很好的示例
http://www.testbench.in/SL_00_INDEX.html
我想为 SPI 和 UART 总线设计一个总线功能模型。首先,我想了解一下我对总线功能模型的看法是否正确。
它应该模拟总线事务,而不用担心底层实现细节。
例如, 如果我要为 SPI 总线构建 BFM,该设计应该能够模拟 SPI 上的事务,作为基于某种协议的主机,例如从文件中读取指令,然后相应地在模拟器上显示它们,
例如,通用数据传输指令,如 send_write(0x0c, 0x0f),将数据字节 0c 发送到从地址 0f,应将芯片 Select 线驱动为低电平并发送基于SPI模式在时钟边沿相应的数据位,在这种情况下我对BFM的理解是否正确?
现在我不明白的是,它有什么用? BFM 位于 DUT 和 TestBench 之间的哪个位置,它如何帮助系统设计人员。
我也想知道是否有任何已构建和测试的参考 BFM 可供研究,
如果有人能帮我举个例子,最好是在 System Verilog 中,我将不胜感激。
所以不得不对此进行大量研究,所以我想我会回答,但这里有一个想法,
想一想模拟总线事务的总线功能模型 (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 示例是从中派生出来的。
下图是我从 Bergeron 的书中收集到的关于如何将 BFM 放置在测试框架中的图像。
希望这能让您对什么是 BFM 有一个基本的了解。当然编写一个并让它运行起来很困难,但是这些基本知识可以让你对它有一个高层次的了解。
书籍参考: J. Bergeron(n.d)。在 System Verilog 中编写测试平台。施普林格
BFM 是具有双重角色的 VIP。它可以充当驱动程序或 Monitor/Receiver。在驱动程序角色中,它打包事务并使用接口句柄使其在信号级别上驱动,否则 DUT 无法接受事务(它只有信号接口)。作为接收方,它将来自接口句柄的信号位解包到交易并将其发送到 Scoreboard/Checker。在某些情况下,它还可以充当协议检查器。
您可以在此处获得 BFM 用法的一个很好的示例 http://www.testbench.in/SL_00_INDEX.html