Exploring some more advanced verification constructs
The testing we have done thus far has been pretty simple, even when we used self-checking. There is one construct that I have found very useful over the years. The queue is easy to use and understand.
Introducing SystemVerilog queues
Often, you need to generate an input in a design that will produce an expected output sometime later. Examples of this are parsing engines, data processing engines, and, as we saw in Chapter 10, A Better Way to Display – VGA, the PS/2 interface.
When I modified the ps2_host
module, I decided to upgrade the testbench for it using queues. I had to create a structure to define what I wanted to store in the queue:
typedef struct packed
{
logic [7:0] data;
logic parity;
} ps2_rx_data_t;
This structure will store our expected data as we generate data in the ps2_host
for testing.
A queue is defined as follows:
ps2_rx_data_t ps2_rx_data[$];
It looks much...