SPRUJ79 November 2024 F29H850TU , F29H859TU-Q1
Figure 3-20 shows a high level view of the dataline buffer scheme. LB1 and LB2 are two data Line Buffers. The buffer is reset by the respective CPUx.SYSRSn reset.
LB1 is loaded with data returned on data read bus 1, while LB2 is loaded with data from data read bus 2. The width of line buffer is 64 bits and has an associated valid bit (Vx) and address tag (ATAGx). ATAGx is a 64-bit aligned address of the data being held in the dataline buffer. The memory controller returns 64 bits of data regardless of the read access size. On every read access, the read address is compared with the ATAGx of LB1 and LB2. When the tag matches, data is returned from the corresponding dataline buffer. Read access to the memory controller is blocked at that time.
Initiators other than the CPU have access to RAM on the device. The dataline buffer is updated on CPU reads only, and the data in the buffer does not hold the latest data if another initiator updated the same address already. Write accesses from other initiators are tracked local to the dataline buffer, as shown by the "Write Access Tracker from Other Initiators" in Figure 3-20. The dataline buffer is marked as invalid upon write access completion from another initiator if the address tag matched the write address. The CPU reads the old data until the time at which the buffer is marked as invalid using the Vx bit.
The CPU can issue a read and write to the same address simultaneously, in which case the dataline buffer detects this and invalidates the dataline buffer when there is an address tag match. An address tag match to a write address does not update the dataline buffer locally. For this, the write is performed to memory first then a read is initiated to fetch the latest data. This is shown by "CPU Write Access Tracker" in Figure 3-20.
The ECC check is done within the CPU. When there is an uncorrectable ECC error detected, the CPU enters a fault state. Dataline buffers of a CPU are invalidated upon any CPU fault.
Dataline buffer needs to be disabled using MEM_DLB_CONFIG register before memory initialization or running test mode to invalidate last buffered data.