Pattern Name: The BFM Notification Pattern
The BFM Notification Pattern is an Analysis Pattern to facilitate the design of transactors for dual domain partitioned testbenches that provide effective and efficient notifications of protocol transaction occurrences, and any other interesting protocol and design events and conditions, for testbench control and analysis.
In accordance with the established analysis connection topology of a modern testbench, and for optimal performance in a dual domain testbench with partitioned HVL and HDL module hierarchies, HDL BFM interfaces or modules should autonomously observe protocol transactions, and any signal-level protocol and design events and conditions, and push out corresponding notifications (interrupt occurred, reset asserted, transaction completed, etc.) to their respective HVL class proxies where these notifications can be further broadcasted to the upper testbench layers, for instance using standard TLM-based communication semantics. This is in contrast with the upper testbench layers initiating such monitoring activity, through the proxies, by polling for transactions, or signal or state changes, which is unnatural and generally inefficient.
The BFM Notification Pattern is applicable in any situation demanding a common dual domain partitioned testbench architecture (i.e., separated HVL and HDL module hierarchies) for both simulation and emulation, and across verification engines in general.
The following diagram illustrates the BFM push behavior advocated by this pattern.
A transactor following the prescribed BFM Notification Pattern to provide sampled transactions for control and analysis (such as a monitor) or, in general, notifying relevant event occurrences or status information, implements an HDL BFM and HVL proxy according to the BFM-Proxy Pair Pattern, with the BFM (not the proxy) initiating the required cross-domain data transfer via dedicated proxy class member function calls.
A BFM Notification Pattern source code example for a UVM monitor is provided below.
The outbound communication – i.e. HDL to HVL – encouraged by this BFM Notification Pattern is unidirectional and “passive”, and generally essential for performance in comparison with the alternative of HVL proxy initiated communication which is inevitably bidirectional.
A prerequisite for this BFM Notification Pattern is the BFM-Proxy Pair Pattern. Additionally, the BFM Notification Pattern resembles the observer pattern as one of the behavioral patterns of the Gang-of-Four’s OOP design patterns (though applying instead from a static interface or module to a dynamic object).
Hans van der Schoot, based on the following works:
“UVM & Emulation: How to Get Your Ultimate Testbench Acceleration Speed-up,” H. van der Schoot and A. Yehia, in Proc. of DVCon Europe 2015, Munich, Germany, November 2015
“Off to the Races with Your Accelerated SystemVerilog Testbench,” H. van der Schoot, A. Saha, A. Garg and K. Suresh, in Proc. of DVCon 2011, San Jose, CA, USA, March 2011
February 25, 2016
Corrections and Suggestions:
To improve the quality of the Verification Academy Patterns Library we welcome your comments, suggestions, and corrections. Please contact us at: https://verificationacademy.com/contact