Read Transfers

Reading data from a peripheral is identical to writing, but the direction of data is reversed.

Basic Read Timing

The Master drives Address and Control (PWRITE=0). The Slave drives PRDATA when PREADY is High.

        T1 (SETUP)      T2 (ACCESS)     T3 (DONE)
PCLK   : __/``\_______/``\_______/``\__
PADDR  :   < A >          < A >           < - >
PWRITE :   < 0 >          < 0 >           < - >
PSEL   : __/``````````````````````\____
PENABLE: _____________ /``````````\____
PRDATA :   < Z >          < D >           < - >
PREADY : ------------- 1 -------------
        ^              ^              ^
     Start Setup    Sample Data     Complete

SVA Check for Read Data

If PREADY is low, the Slave CAN change PRDATA (unlike the Master which must hold PWDATA stable). However, the PRDATA is only valid when PREADY is HIGH.

// Ensure Unknown ('X') is not propagated on valid read
property p_valid_read_data;
    @(posedge pclk) disable iff (!presetn)
    (psel && penable && pready && !pwrite) |-> !$isunknown(prdata);
endproperty

assert property(p_valid_read_data);