AcceLight Networks recently developed a verification environment and methodology for a complex datapath controller (DPC). To accomplish this task, AcceLight used Denali Software's MMAV and Synopsys' Vera products. The DPC is used in high-speed line cards to provide temporary storage for data packets arriving at one or more of the input ports or destined for one or more of the output ports. As shown in Figure 1, the DPC typically communicates with a traffic management engine (TME) that directs the DPC as to where and when to de-queue a packet to the downstream device.
Figure 1 - System block diagram
Denali's MMAV product, along with Synopsys' Vera, was instrumental in providing a sophisticated and flexible verification testbench. To verify the DPC device under test (DUT), Vera was used to create a behavioral model of the DUT, a bus-functional model of the related devices, a traffic generator, data monitors, and data checkers. The Verilog RTL DPC was used along with Denali memory models to complete the memory subsystem.
Vera provides a shell to link Vera and Verilog together. In addition, it provides mechanisms to call Vera tasks directly from Verilog. Denali's memory models provide a C interface to allow direct communication between the Vera testbench and the memory devices, while maintaining coherency within the Verilog simulation. The following conceptual diagram illustrates how Vera, Denali, and Verilog co-exist in a typical verification environment.
Figure 2 - Denali/Vera logical flow diagram
Memory selection, configuration and integration
Fast Cycle RAM (FCRAM) is a revolutionary DRAM core architecture that achieves SRAM-like performance with DRAM technology by using a proprietary pipeline operation and hidden pre-charge to reduce the random access cycle time. It was chosen for the memory subsystem due to these desired characteristics.
In this design, the DPC required a number of 64-bit memory interfaces for temporary storage of packet information. The memory was implemented using 256Mbit (4M x 4 banks x 16 bit) FCRAM devices. These 16-bit wide devices were combined in groups of four to comprise each separate 64-bit wide memory interface.
Ensuring correct memory behavior while interacting with many separate FCRAM memory devices was a key challenge in developing a robust memory subsystem verification environment. Verifying that the DPC correctly accessed these memory devices, by following the proper protocol and timing requirements, was a necessity. Denali's MMAV provided accurate and robust FCRAM models to ensure the DPC's correctness. Together with accurate protocol and timing checks, Denali's MMAV models also integrate directly into Synopsys' Vera environment.
Synopsys' Vera testbench automation tool was used to accelerate module and s ystem level verification. With Vera, it is easy to quickly model the target environment at a high-level of abstraction, essentially creating a virtual prototype. This target environment included complex data monitors and checkers, traffic generators, and bus functional models of upstream and downstream devices.
Vera includes rich object-oriented constructs and key hardware-oriented concepts like clock timing, asynchronous timing, and signals (including unknown values.) This made it possible to create a Vera behavioral model in less time than a Verilog behavioral model, and with fewer lines of code. This behavioral model allowed us to develop and debug the traffic generators and checkers before the Verilog RTL was completed. By allowing for the concurrent creation of the testbench and Verilog RTL design, the testbench was ready before the RTL description, saving significant time in the schedule.
This combination of Vera behavioral models and RTL descriptions was especially useful for multi-chip sim ulations, where the configuration and connections between various blocks was controlled by Vera scripts. The Vera dynamic signal binding capability allows Vera inputs or outputs to be connected to different RTL signals or nodes at run time, enabling dynamic configuration control.
For stimulus generation, we relied on the native randomization and data packing capabilities in Vera, as well as the Vera class structures that make packet definition straightforward. The data monitors implement a self-checking capability that relies on the Vera mailbox construct to synchronize separate threads of activity and to queue complex data objects.
Another key decision in using Vera was its direct integration with Denali's MMAV. Because of the ability to directly interact with Denali's C-based memory devices from Vera, simulation performance was significantly improved over the usual overhead of PLI within a verilog simulation.
Denali's MMAV provided the capability to group physical me mory devices together to create a logical memory. This feature was used to group four 16-bit FCRAM devices into a single 64-bit logical memory. In this design, several 64-bit logical memories were generated to provide sufficient storage for the DPC.
These logical memories enabled preloading of a 64-bit data image into a single logical memory, instead of separating the data into smaller 16-bit chunks. They provided full data word backdoor read and write capabilities through Vera. And they generated memory access callbacks on the single logical memory, versus multiple individual callbacks on the physical memory instance. These features resulted in a much simpler and cleaner Vera testbench than would have been possible with other memory model alternatives.
Figure 3 illustrates how the logical memories were created using Vera's built-in Denali User Defined Functions (UDFs). In this example, a Verilog task (DenaliFcramBm) is created to generate a Denali logical memory from the already instantiated phy sical FCRAM devices. This task uses the following Vera's Denali UDFs to generate the logical memory configuration:
- $DENALIstartSysMem - Defines a new logical memory instance named "iSysName" that is comprised of the specified number of physical instances wide, deep and interleaved.
- $DENALIaddSysMem - Adds each physical memory instance to the aforementioned logical memory instance (iSysName).
- $DENALIcreateSysMem - Last step in enabling the logical memory instance. This is called once all the physical instances have been added using DENALIaddSysMem.