I observed differences between the sdram test project compared to the description in the tutorial.
And precisely in the parts:
[code]// The OODR2 is used to output the FPGA clock to
// an output pin because a clock can’t be directly
// routed as an output.
xil_ODDR2 oddr (
#DDR_ALIGNMENT (“NONE”),
#INIT (0),
#SRTYPE (“SYNC”)
);
// The IODELAY2 is used to delay the clock a bit
// in order to align the data with the clock edge.
// These settings assume a 100MHz clock and the
// SDRAM Shield being stacked next to the Mojo.
xil_IODELAY2 iodelay (
#IDELAY_VALUE (0),
#IDELAY_MODE (“NORMAL”),
#ODELAY_VALUE (ODELAY_VALUE),
#IDELAY_TYPE (“FIXED”),
#DELAY_SRC (“ODATAIN”),
#DATA_RATE (“DDR”)
);[/code]
and in the parameters passed to these directives.
[code]// Connections for the IODELAY2
iodelay.ODATAIN = oddr.Q; // use the ODDR2 output as the source
iodelay.IDATAIN = 0;
iodelay.T = 0;
iodelay.CAL = 0;
iodelay.IOCLK0 = clk;
iodelay.IOCLK1 = ~ clk;
iodelay.CLK = clk;
iodelay.INC = 0;
iodelay.CE = 0;
iodelay.RST = 0;
// Connections for the ODDR2
oddr.C0 = clk;
oddr.C1 = ~ clk;
oddr.CE = 1;
oddr.D0 = 0; // using 0 for D0 and 1 for D1 inverts the clock
oddr.D1 = 1; // because D0 is output on the rising edge of C0
oddr.R = 0;
oddr.S = 0;[/code]
These are the ones in the tutorial:
[code]// The OODR2 is used to output the FPGA clock to
// an output pin because a clock can’t be directly
// routed as an output.
xil_ODDR2 oddr (
#DDR_ALIGNMENT (“NONE”),
#INIT (0),
#SRTYPE (“SYNC”)
);
// The IODELAY2 is used to delay the clock a bit
// in order to align the data with the clock edge.
// These settings assume a 100MHz clock and the
// SDRAM Shield being stacked next to the Mojo.
xil_IODELAY2 iodelay (
#IDELAY_VALUE (0),
#IDELAY_MODE (“NORMAL”),
#ODELAY_VALUE (100),
#IDELAY_TYPE (“FIXED”),
#DELAY_SRC (“ODATAIN”),
#DATA_RATE (“SDR”)
);
// Connections for the IODELAY2
iodelay.ODATAIN = oddr.Q; // use the ODDR2 output as the source
iodelay.IDATAIN = 0;
iodelay.T = 0;
iodelay.CAL = 0;
iodelay.IOCLK0 = 0;
iodelay.IOCLK1 = 0;
iodelay.CLK = 0;
iodelay.INC = 0;
iodelay.CE = 0;
iodelay.RST = 0;
// Connections for the ODDR2
oddr.C0 = clk;
oddr.C1 = ~ clk;
oddr.CE = 1;
oddr.D0 = 0; // using 0 for D0 and 1 for D1 inverts the clock
oddr.D1 = 1; // because D0 is output on the rising edge of C0
oddr.R = 0;
oddr.S = 0;[/code]
Which are the correct ones?
[hr]
I built the project with mojo IDE 1.3.6 and the leds behave correctly all off except one flashing.
There is something wrong when compiling build test project in Alchitry.