Maintenance Commands - 1.0 English

Versal Adaptive SoC Soft DDR4 SDRAM Memory Controller LogiCORE IP Product Guide (PG353)

Document ID
PG353
Release Date
2023-10-18
Version
1.0 English

The UI can be configured by the Vivado IDE to enable two DRAM Refresh modes. The default mode configures the UI and the Memory Controller to automatically generate DRAM Refresh and ZQCS commands, meeting all DRAM protocol and timing requirements. The controller interrupts normal system traffic on a regular basis to issue these maintenance commands on the DRAM bus.

The User mode is enabled by checking the Enable User Refresh and ZQCS Input option in the Vivado IDE. In this mode, you are responsible for issuing Refresh and ZQCS commands at the rate required by the DRAM component specification after init_calib_complete asserts High. You use the app_ref_req and app_zq_req signals on the UI to request Refresh and ZQCS commands, and monitor app_ref_ack and app_zq_ack to know when the commands have completed. The controller manages all DRAM timing and protocol for these commands, other than the overall Refresh or ZQCS rate, just as it does for the default DRAM Refresh mode. These request/ack ports operate independently of the other UI command ports, like app_cmd and app_en.

The controller might not preserve the exact ordering of maintenance transactions presented to the UI on relative to regular read and write transactions. When you request a Refresh or ZQCS, the controller interrupts system traffic, just as in the default mode, and inserts the maintenance commands. To take the best advantage of this mode, you should request maintenance commands when the controller is idle or at least not very busy, keeping in mind that the DRAM Refresh rate and ZQCS rate requirements cannot be violated.

The following figure shows how the User mode ports are used and how they affect the DRAM command bus. This diagram shows the general idea about this mode of operation and is not timing accurate. Assuming the DRAM is idle with all banks closed, a short time after app_ref_req or app_zq_req signals are asserted High for one system clock cycle, the controller issues the requested commands on the DRAM command bus. The app_ref_req and app_zq_req signals can be asserted on the same cycle or different cycles, and they do not have to be asserted at the same rate. After a request signal is asserted High for one system clock, you must keep it deasserted until the acknowledge signal asserts.

Figure 1. User Mode Ports on DRAM Command Bus Timing Diagram

The following figure shows when the app_en is asserted and read transactions are presented continuously to the UI when the app_ref_req and app_zq_req are asserted. The controller interrupts the DRAM traffic following DRAM protocol and timing requirements, issues the Refresh and ZQCS, and then continues issuing the read transactions. Note that the app_rdy signal deasserts during this sequence. It is likely to deassert during a sequence like this because the controller command queue can easily fill up during tRFC or tZQCS. After the maintenance commands are issued and normal traffic resumes on the bus, the app_rdy signal asserts and new transactions are accepted again into the controller.

Figure 2. Read Transaction on User Interface Timing Diagram

The previous figure also shows the operation for a single-rank. In a multi-rank system, a single refresh request generates a DRAM Refresh command to each rank, in series, staggered by tRFC / 2. The Refresh commands are staggered because they are relatively high power consumption operations. A ZQCS command request generates a ZQCS command to all ranks in parallel.