Forum Discussion

SCLAY's avatar
SCLAY
Icon for New Contributor rankNew Contributor
4 years ago

Apparent error in Agilex DDR4 EMIF IP model - "maximumPendingReadTransactions" is "1"

Hello!
The Agilex DDR4 EMIF IP model for Platform Designer (qpro20.4.0.72) appears to have an error in the AvMM parameters, namely, that the “maximumPendingReadTransactions” parameter is set to “1” (see attached screen capture). I have run the DDR4 EMIF example design simulation, and can see that the parameter should be at least 16, as I can see that the EMIF accepts at least 16 outstanding reads during that simulation.
The AvMM spec has this to say about this case of accepting more reads than indicated by “maximumPendingReadTransactions” :
If a slave interface accepts more read transfers than allowed, the interconnect pending read FIFO may overflow with unpredictable results. The slave may lose readdata or route readdata to the wrong master interface. Or, the system may lock up. The slave interface must assert waitrequest to prevent this overflow.
The effect of this is that in the AvMM interconnect in our design, Platform Designer is only making the “agent_rsp_fifo” 2 deep, but has enabled FIFO overflow protection. My understanding is that the interconnect will therefore throttle the AvMM masters, including writes, after the EMIF slave accepts 2 reads (one more than is “legal” for its "maximumPendingReadTransactions”).
While this should “work” as far as functionality is concerned, it will not “work" for our application, as more than 2 outstanding reads are required to achieve the required read bandwidth from DDR. Furthermore, blocking all writes with only 2 reads are outstanding will throttle performance on the write side, as well.
As an experiment, I changed the “maximumPendingReadTransactions” parameter in the relevant places in the .qsys and .ip files, and regenerated the RTL in Platform Designer. In that case the “agent_rsp_fifo” was changed to 17 deep, which confirms that the incorrect value for that parameter is the problem.

Thanks!

7 Replies

  • Hi

    I created the example design from Agilex DDR4 EMIF IP GUI and see the Maximum pending read transaction parameter is set to 64 as attaching. I am not sure where this changes comes from.

    • SCLAY's avatar
      SCLAY
      Icon for New Contributor rankNew Contributor

      Yes, that looks great. Same screenshot of my example design is attached - it is set to "1". What tool version are you running?

      Info: Version 20.4.0 Build 72 12/14/2020 SC Pro Edition

      Thanks!

      • SCLAY's avatar
        SCLAY
        Icon for New Contributor rankNew Contributor

        Update - I created an empty project, added the EMIF, and wrote the EMIF example design without doing any configuration. The parameter is set to "64". The parameter may be changing due to either configuration or context. I'll need to do more investigation.