If you have been involved in either software or advanced verification for any length of time, then you probably have heard the term Design Patterns. In fact, the literature for many of today’s testbench verification methodologies (such as UVM) often reference various software or object-oriented related patterns in their discussions. For example, the UVM Cookbook (available out on the Verification Academy) references the observer pattern when discussing the Analysis Port. One problem with the discussion of patterns in existing publications is that they are generally difficult to search, reference, and leverage the solutions these patterns provide since these publications are distributed across multiple heterogeneous platforms and databases and documented using multiple varied formats. In addition, most of the published examples of design patterns deal more with the software implementation details of constructing a testbench. To address these concerns, we have decided to extend the application of patterns across the entire domain of verification (i.e., from specification to methodology to implementation—and across multiple verification engines such as formal, simulation, and emulation.) and have just released a comprehensive pattern library out on the Verification Academy.
But first, we should answer the question, “What is a pattern?” In the process of designing something (e.g., a building, a software program, or an airplane) the designer often makes numerous decisions about how to solve specific problems. It would be nice if the knowledge gained from solving a specific problem could be shared, and this is where patterns help out. That is, if the designer can identify common attributes contributing to the derived solution in such a way that it can be applied to other similar recurring problems, then the resulting generalized problem-solution pair is known as a pattern. Documenting patterns provides a method of describing good design practices within a field of expertise and enables designers to improve the quality in their own designs by reusing a proven solution on a recurring problem. And that is precisely what the Verification Academy Patterns Library is all about? Sharing provable solutions to recurring problems in an easily discoverable, referenceable, and relatable format.
Design patterns are not a new concept. In fact, they originated as a contemporary architectural concept from Christopher Alexander in 1977, and they have been applied to the design of buildings and urban planning. In 1987, Kent Beck and Ward Cunningham proposed the idea of applying patterns to programming. However, it was Gamma et al., also known as the Gang of Four (GoF) who popularized the concept of patterns in computer science after publishing their book Design Patterns: Elements of Reusable Object-Oriented Software in 1994.
How We Decided to Organized Our Patterns Library
Our Verification Academy Pattern Library contains a collection of pattern entries—where each documented pattern entry provides a solution to a single problem. To facilitate learning, ease of use, and quick access when searching for verification pattern content, we gave careful thought into organizing the library into searchable categories whose patterns solutions are related and exhibit similar characteristics. Since our goal in creating verification patterns is to broaden the application of patterns beyond the software domain, we decided that our categories should align from a high level with the digital design and verification process. Hence, we have identified two main verification pattern categories, which should be familiar to any design and verification engineer working in this domain. That is, Specification Patterns and Implementation Patterns, as illustrated in the following figure.
Creating a Community of Pattern Expertise
For the Verification Academy Patterns Library, we felt it important to set goals on the pattern creation process and how to effectively populate the library. The reality is that verification is a diverse field, and it often requires expertise in varied areas, such as methodologies, technologies, tools, and languages. No single person is a master in every aspect of verification. Thus, to create patterns across the broad field of verification, we built a team made up from experts in assertion-based verification, formal verification, constrained-random and coverage-driven verification, UVM, hardware-assisted verification, and emulation. However, even with this diverse team of experts we recognize that there is still additional verification expertise required for solving verification problems in specific application domains. Hence, for our verification patterns library, we set a goal that the pattern creation process should harness the power of online social communities made up from a diverse set of verification experts that work in multiple application domains. In turn, this community of experts would foster collective problem solving for the creation of novel patterns and provide alternative, optimized solutions for existing pattern content. To achieve these goals, we developed a web-based infrastructure that allows new content to be contributed in a consistent format from this community of experts, and decided to release our library out on the Verification Academy, since it consists of an existing online social community with over 35,000 design and verification engineers. In addition, the Verification Academy provides us an existing online infrastructure, which enabled the creation of a patterns knowledge base that is easily discoverable, referenceable, and relatable.
To learn more about the Verification Academy Patterns Library, check out www.verificationacademy.com.