RapidIO Intel FPGA IP User Guide

ID 683884
Date 9/15/2021
Public
Document Table of Contents

7.8. Doorbell and Write Transactions With Transaction Order Preservation

The following figure shows the testbench for checking transaction order preservation. The test generates write transactions and Doorbell messages, and compares the transaction order before and after the transactions are transmitted on the RapidIO link. If a Doorbell module and I/O slave port are instantiated in the DUT, and in non- Intel® Arria® 10 and Intel® Cyclone® 10 GX variations Prevent doorbell messages from passing write transactions is turned on in the RapidIO parameter editor, the extra hardware is generated in the testbench.
Figure 40. Transaction Order Preservation Testbench

The transaction ordering test has two parts. The first part checks that transaction order is preserved among I/O write requests and Doorbell messages. The second part injects errors in the write transactions to force transaction cancellation, to test the integrity of the COMPLETED_OR_CANCELLED_WRITES field of the Input/Output Slave RapidIO Write Requests register. Because the behavior of the write transactions themselves is not under test, but only the preservation of transaction ordering between Doorbell messages and write requests, each part of the transaction ordering test generates only one type of write transaction.

In the first part of this test, the bfm_drbell_master sends a Doorbell message one clock cycle after the bfm_io_write_master sends a write request. Write requests are sent and checked according to the test sequence, and Doorbell messages are sent and checked according to the test sequence. The additional hardware shown in the figure is used to compare the transaction order before and after transmission on the RapidIO link. Each queue has 40 bits of FIFO data. In each queue, the current entry is set to 0 for a write request and to 1 for a Doorbell message. The comparator compares bit by bit, checking for an exact match.

In the second part of this test, the DUT asserts an invalid byteenable value on the I/O slave port for a single NWRITE_R transaction, and then transmits 32 NWRITE_R transactions with a target address set out of bounds. After the bfm_io_write_master initiates the sequence of NWRITE_R transactions, the bfm_drbell_master generates transactions. Each Doorbell transaction is sent to the DUT immediately following a different NWRITE_R transaction. In addition to checking for data integrity and for transaction order preservation despite the tracking complication of canceled transactions, the testbench checks that the I/O Slave Interrupt register reflects each cancelled transaction correctly.