Hi,
I have some problems with a FPGA/HPS – DDR3 interface and I could probably use some help from people who have experience on this kind of interferences. I think there is a problem between the HPS and the DDR3 interfere that appears after reset.
SOC FPGA – HPS
The SoC FPGA [Cyclone V - 5CSEBA5U23C7S] contains a (High-Speed Sync) HSSRx and a Streaming component. The HSSRx receives the serial 64MHz data from the ECU and drives the data to the Streaming in parallel (means that the HSSRx use a s/p shift register) additional to a single bit signal, the Valid signal. The Streaming takes the parallel data and with the use of State Machine creates an Avalon-MM interface with the HPS for the Valid data, at the frequency of 100MHz. Then the HPS interfere with the DDR3 (400MHz). With the use of terminal emulator, Tera Term, the DDR3-1600 [IS43/46TR85120AL] is monitored.
Testing
The test environment I have created is the that a Microcontroller (MPC) tell the Master (ECU) to send different data on specific addresses to the SoC FPGA. The SoC FPGA passes the data/addresses to the HPS (which I read from the Signal Tap). The data/addresses arrive in HPS,and then to DDR3(which I read from the Tera Term), read back from the MPC (through the Soc FPGA, back to the ECU and then to MPC). MPC compares the data/addresses have been received from the HPS with those that originally sent. If the received data/addresses are the same with those had been sent, then the MPC resets the ECU FPGA and the process starts again. This process goes for ever until the MPC reads different data/addresses of those MPC original sent to the HPS/DDR3.
The whole process goes around for some loops (loop: MPC reads back correct data/addresses, resets ECU FPGA and sends again new data). When the data/addresses are written correct in the DDR3, they can be confirmed by the Tera Term monitoring (see Figure 1).
The only known data are the inverted x“13D813D8” at the position 1 (1h) and that at position 0 (0h) it is always coming “00000000”, as it shown in Figure 2. The x“13D813D8” are the last data the MPC sends. Then it reset the ECU and starts again.
After some loops (different time of loops every time) and after the MPC resets the ECU FPGA; the DDR3 read wrong data and the loop stops.
Note: The Signal Tap always shows the correct data and addresses, no matter if the wrong data are written in the DDR3 (Tera Term).
The different cases of DDR3 error readings are:
Most of the times, the data/addresses come correct when I reset the Soc FPGA through the Tera Term (see Figure 6), but this is not a solution.
Checked