User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 323
UG585 (v1.11) September 27, 2016
Chapter 10: DDR Memory Controller
Sends the corrected data to the core as part of the read data.
Sends the ECC error information to the register interface for logging.
Performs a RMW operation to correct the data present in the DRAM (only if ECC scrubbing is
enabled (reg_ddrc_dis_scrub = 0). This RMW operation is invisible to the core. Only one scrub
RMW command can be outstanding in the controller at any time. No scrub is performed on
single-bit ECC errors that occur while the controller is processing another scrub RMW.
When the controller detects an uncorrectable error, it does the following:
Sends the uncorrectable data with an error response to the core. This results in an AXI SLVERR
response on the AXI interface along with the corrupted data. An AXI SLVERR response will be
returned to the transaction master to be handled – potentially generating L2/DMA interrupts,
CPU prefetch/data exceptions, or being forwarded directly to a PL AXI master.
Sends the ECC error information to the register module for logging.
10.8.3 Data Mask During ECC Mode
ECC is calculated over a byte of data and hence any data byte can be masked if necessary with ECC
enabled. This alleviates the need for the controller to perform a RMW operation when byte masking
occurs.
10.8.4 ECC Programming Model
The following details the ECC programming requirements. Note that these configurations are in
addition to the regular DDR initialization programming. Also note that initialization of the whole
DDR space before reading any data from it is recommended, to prevent ECC error generation as a
result of accessing uninitialized areas of memory. Refer to section 10.8.1 ECC Initialization section
for further details.
Enabling ECC operation (Switching from Non-ECC Mode to ECC Mode)
1. Program reg_ddrc_soft_rstb to 0 (resets the controller)
2. Program the ECC mode by programming reg_ddrc_ecc_mode to 3'b100
3. Program reg_ddrc_dis_scrub to 1'b0
4. Program reg_ddrc_data_bus_width to 2'b0
5. Program reg_ddrc_soft_rstb to 1 (takes the controller out of reset)
Note that re-initialization of the whole DDR space before reading any data from it is recommended
to prevent ECC error generation as a result of accessing uninitialized areas of memory.
Disabling the ECC Operation (Switching from ECC Mode to Non-ECC Mode)
1. Program the reg_ddrc_soft_rstb to 0 (resets the controller)
2. Program the ECC mode by programming the reg_ddrc_ecc_mode to 3'b000
3. Program the reg_ddrc_dis_scrub to 1'b1
4. Program the reg_ddrc_data_bus_width to 2'b00