by Nikhil Jain, Mentor Graphics
This article describes how Mentor's verification IP (VIP) for various double-data rate (DDR) memory standards can act as a bus monitor and help yield fast, flexible verification and easy debugging. We discuss how to boost productivity using the inbuilt coverage collector and checking assertions by passively monitoring data on the bus. Mentor provides verification IP that spans multiple engines; simulation, formal and acceleration (emulation) allowing effective test re-use from simulation through to acceleration, but the article focuses on simulation using Questa Verification IP.
Verifying and debugging DDR SDRAM memory designs is challenging because of the speed and complex timing of the signals that need to be acquired and debugged. We can reduce this complexity using the DDRx Questa VIP (QVIP) as a bus monitor. In general, the bus monitor's task is to observe, so it should be configured to be passive and not inject errors. A monitor must have protocol knowledge in order to detect recognizable patterns in signal activity. QVIP has all these features and thus can be a boon to any verification team.
DDRx QVIP is a verification IP built using standard SystemVerilog for UVM environments. This single verification IP supports multiple JEDEC DDR SDRAM memory standards, including DDR2, DDR3, LPDDR2 and LPDDR3.
Exhaustive protocol checks are built in as is functional coverage tracking guided by the coverage test plan. DDRx QVIP provides an exhaustive set of protocol checks (assertions) for each of the supported standards, thus ensuring protocol compliance. Any activity on the bus that violates a specification will result in an error message. It also provides a scoreboard that links activity happening on the bus with information provided by the system and results in error messages if a mismatch occurs.
In general, DDRx QVIP can be connected in the verification environment in the following fashion:
- DDRx QVIP acts as an active memory controller, driving all controller transactions/wires
- DDRx QVIP acts as an active memory device, responding to all transactions from the controller
- DDRx QVIP acts as a bus monitor, providing protocol checks and capturing all bus activity for analysis Here we discuss in detail how to use DDRx QVIP as a bus monitor during verification.
DDRx QVIP is a UVM based multilevel abstraction VIP that provides fast, flexible verification and easy debugging of memory systems. DDRx QVIP uses a single interface instance for multiple memory standards, which can be selected through configurable variables. The design under test (DUT) can be connected to DDRx QVIP in monitor mode, in which case the VIP will simply monitor the interface signals and extract bus transactions. This transaction activity appears in the wave window allowing for debugging with complete history. This data is also fed to various units such as a coverage collector (for coverage), assertion checker (for protocol integrity) etc.
The DDRx QVIP provides a SystemVerilog interface for connecting to the DUT with support of all JEDEC-specified features for the supported standards. This includes:
- all command types, such as read, write, mode registers, pre-charge, activate, refresh, self-refresh, and power down
- auto activation in read/write commands
- All burst lengths and burst mode
- Clock frequency changes during self-refresh/power down based on configurable frequency
- ZQ calibration
- Backdoor access to the memory and scoreboard
Figure 2: Configuring the DDR QVIP monitor in the verification environment
Figure 2 above shows the necessary changes to the SystemVerilog/UVM source code required for the verification environment to monitor the DUT. The QVIP must be configured so its various parameters match those of the DUT.
The DDRx QVIP comes with various configurations that users can configure statically or at runtime. All timers can be adjusted to any value at the start of simulation. Other possible configurations are:
- the single interface instance can be configured as DDR2, DDR3, LPDDR2 or LPDDR3.
- size, width, banks, row address width, column address width, page size and speed grade can be configured according to the selected interface
- column address strobe (CAS) latency, additive latency, etc. can configured to user-defined values
- Initialization can be skipped if the DUT does not support it e) Various timing parameters can be configured to user-specific values, including tWR, tWTR, tRP, tCCD etc.
Figure-3 below shows the timing of the write command. Write data is centered within the data strobes and approximately center-aligned with the clock edges. The write command is initiated by sampling CS, CAS and WE LOW while holding RAS HIGH at the rising edge of the clock. The address inputs determine the starting column address. After the configured write latency finishes the data for this particular write, commands begin to be recognized. After the transaction is recognized on the bus, the monitor translates this into the transaction object and sends it to various analysis components like the coverage collector, scoreboard and checker.
Figure 3: Transaction view for write command
In monitor mode, the DDRx QVIP can be helpful in achieving coverage closure. In coverage-driven verification, an engineer can keep track of which part of the protocol is being verified in each test and combine that into a single view of how much of the protocol has been verified. With coverage in place for a given protocol, an engineer can easily tell what tests need to be written to cover all the features of the device. Since verification is directly related to the time and resources available, most teams focus mainly on the newly added blocks and interfaces in the design. DDRx QVIP shows individual coverage from both the controller and memory instances.
The entire feature list supported by DDRx QVIP is listed in an XML test plan that can be linked to Unified Coverage Database (UCDB). This database is the repository for all coverage information — including code coverage, cover directives, cover points and assertion coverage — collected during the simulation by Questa. Questa allows for merging the XML test plan with all coverage results in the form of UCDB, which is accessible both via log file and GUI.
One can enhance or modify the plan requirements, hence coverage, by adjusting the features required in the DUT. Here's how: After implementing the functional coverage infrastructure, map the plan items to be implemented in the coverage infrastructure. The result is a trackable, predictable verification plan environment that can assess and refocus the verification effort as needed.
Figure 4: Functional coverage results
A critical component of self-checking testbenches is the scoreboard that checks data integrity from input to output. A scoreboard is a TLM component and care should be taken not to activate it on a cycle-by-cycle basis but rather at the transaction level. In OVM/UVM, the scoreboard is usually connected to at least two analysis ports: one from the monitors on the input(s) side and the other on the output(s). It compares the data received in a read transaction with data previously written by a write transaction. If a read transaction is performed without a prior write transaction to the same address, then a warning is issued. If there was a previous write to the address, and there is a mismatch between the data read and the data expected, then an error is issued.
The scoreboard replicates the DDR memory in the form of an associative array. Data stored in the scoreboard for a particular address is updated when a write transaction is performed to that address.
PROTOCOL INTEGRITY IN MONITOR MODE
Assertions play an important role in a unified verification effort. Assertions allow the architect or designer to capture the design intent and assumptions in a manner that can be verified in the implementation either by measuring and controlling the density of assertions or by logging assertion passes and failures.
DDRx QVIP comes with a built-in checker that continuously monitors the bus and fires an assertion or error message whenever illegal activity takes place on the bus. QVIP comes with functionality for enabling or disabling a particular assertion or all assertions using APIs.
ddr_monitor_config.m_bfm.set_config_enable_all_assertions(0);// to disable all assertions
ddr_monitor_config.m_bfm.set_config_enable_assertion_index1(DDR_CONFIG_TWTR_VIOLATION,1'b0);to disable particular assertion
To debug the assertions in the Questa GUI without using waveforms, invoke the assertion browser by selecting it through the menu: view->coverage->assertions.
The assertion browser lists all assertions in the design. Failed assertions are displayed in red, making them easy to identify.
This article describes various techniques for using DDRx QVIP in passive mode, like coverage collection, assertion checking, scoreboarding etc. These techniques can be used in your verification process to save time and improve the quality of results, increasing confidence. Mentor provides verification IP that spans multiple engines; simulation, formal and acceleration. DDRx QVIP is a highly configurable verification IP for SV UVM environments supporting multiple DDR memory standards. Some examples of configurability include the ability to adjust timing parameters and to enable/disable any assertion, any time.
Figure 6: Assertion tracking window
Back to Top