This README provides detailed information about the DDR design and how to debug it. In this design Manual debugger is used for debugging this design.
I. Logic Analyzer:
- The manual debugger enables debugging through a logic analyzer, allowing modification of input parameters such as ALEN, burst counter, test start enable, start address, end address, and reset.
II. Virtual I/O:
- Virtual I/O is used to define the input as a source and output as a probe. The design generates a debug file (edb_top) where input values are converted into output and vice versa.
- Instantiate debugger file's input and output in the top design file.
III. DDR3 Configuration:
- DDR3 is used as per the VAAMAN board, with the memory chip being K4B4G1646D-BYK0.
- DDR operates at 533.33 MHz, while the AXI clock runs at 100 MHz.
-
Top Module: DdrControllerDebug
- Includes sub-modules: ddr_reset_sequencer, DdrTest (DdrWrCtrl, DdrData, DdrRdCtrl, AxiFullDuplex), DdrTestStatic, and edb_top.
- Ram2Axi module contains DdrWrCtrl, DdrRdCtrl, and AxiFullDuplex.
-
DdrData Module:
- Generates data and addresses using the generate block and data generation is dependent on the address.
-
DdrTest Module:
- Contains sub-modules DdrWrCtrl for controlling write addresses, testing some write signals, DdrRdCtrl for controlling read addresses, AxiFullDuplex. The address incrementation is based on the test length; address control is done through cfg_test_mode as well as RdBurstEn.
-
Ram2Axi Module:
- This module contains DdrWrCtrl, DdrRdCtrl, and AxiFullDuplex modules, in which AxiFullDuplex converts the full duplex into half duplex at the DDR Phy side.
Note : DDR3 Phy supports maximun 533.33MHz.
- In the final design, a random address module LFSR( Linear Feedback Shift Register) is used. After generating a 32-bit random address, ensure proper alignment.
- If random addresses are not required, the DDR_data module can be utilized in order to generate the address.
-
Default parameters on the logic analyzer:
burstcnt = 80000000
,ALEN = 1F
,start address = 1000
,end address = ffffff
. -
Use
testmode = 3
in the logic analyzer forsimultaneous read and write operations
. -
Upon receiving the read and write requests, the initial step involves completing the write operation before initiating the read operation. To commence the read operation, the RREADY and RVALID signals are enabled, and the ATYPE is set to zero. This results in an approximate initial read latency of 17 clock cycles.
-
After the first write, the next write and read address becomes valid. Basically, Concurrent read and write operation (first address of read data and next write data) is generated.
-
Changes in Bank address and Row address can impact latency on read and write operaton as compare to change in only column address or bank address.
-
Particularly greater number of ALEN and the bundle of changes in burst addresses which is inclining the latency.
-
testmode = 1
, use forcontinuous read operation
. -
In the burst read operation, for new read request, latency of 2 cycles is observed between
RREADY
andRVALID
. -
testmode = 2
, use forcontinuous write operation
. -
In the burst write operation, for new write request, latency of 4 to 5 cycles observed between
AVALID
andWREADY
.
- The design has been tested using two different address mapping, including BA - Row - Col, Row - Col-High - BA - Col-Low, ALEN, burstcnt, and random addresses starting from
0131BC00
and seed address is also same.
- For counting the clock cycle for read data:
-
Axi0 transfers 256 bits per cycle, thereby achieves
3200MB/sec
at100MHz
. -
DDR3 transfers
800 Mb per pin
, thereby achieves12800 Mb/sec (1600 MB/sec)
at400MHz
. -
The ratio of throughput between Axi and DDR data is
2
. -
Number of clock cycles to read in burst mode is
ratio * burst length
. -
Axi0 clock is
100 MHz
and DDR3 clock is533.33 MHz
achieves throughput of3200MB/sec
and2132MB/sec
resulting in a throughput ratio of1.5
. -
Opting for this configuration minimizes number of cycles in read burst.
-
- Tested the design at different settings:
- ALEN = 3, Axi clock = 100 MHz, DDR clock = 533.33 MHz, address mapping:
BA - Row - Col
, read operation takes6
clock cycles. -image - ALEN = 3, Axi clock = 100 MHz, DDR clock = 533.33 MHz, address mapping:
BA - Row - Col
(write operation only), write latency is4-5
clock cycles. -image - ALEN = 3, Axi clock = 100 MHz, DDR clock = 533.33 MHz, address mapping:
BA - Row - Col
(read operation only), read data takes6
clock cycles, with additional latency of14-15
cycles for the next read address. -image
- ALEN = 3, Axi clock = 100 MHz, DDR clock = 533.33 MHz, address mapping:
Parameter | ALEN = 7 | ALEN = F |
---|---|---|
Axi Clock | 100 MHz | 100 MHz |
DDR Clock | 533.33 MHz | 533.33 MHz |
Address mapping | BA - Row - Col | BA - Row - Col |
Latency (Read) | 16 to 17 cycles | 15 cycles |
read data clock cycle | 12 cycles (per burst) | 23 to 25 cycles (per burst) |
- When DDR3 is operated at 533.33 MHz, number of read cycles in the burst poperation is decreased as compare to 400MHz clock cycle.
- Less delay cycles is observed between the burst transfers for smaller burst length.
- For continuous write burst ALEN = 7 is the optimum choice.