From: Berk on
Hey everyone,

I have been struggling to use the MIG to generate a memory interface
to the DDR2 device. First some background info: I am using the Xilinx®
Spartan®-3A DSP XtremeDSP™ Starter Platform. I am using ISE 10.1 with
MIG v2.3.

I have created the MIG from GUI and played around with it. I also
edited the UCF file (just changed the locations basically, did not
mess around with timings). I cannot do any simulation because I am
using Windows 7 and apparently, simulation doesn't work (or maybe some
other problem).

Anyway, the thing is I can download the code to the device and I can
see all the signals go up and down in correct times. (like init_done,
user_cmd_ack, user_data_valid etc.) Then I try to write some data to
the memory, I can see user_cmd_ack go high, then I assert burst_done,
then I can see user_cmd_ack go low. (which means write is succesful,
right?) However, whenever I try to 'read' from the memory, I always
get x"00000000" no matter what the address is. What can be wrong with
it?

Thanks for the help.
From: Gabor on
On Apr 26, 9:17 am, Berk <berkgura...(a)gmail.com> wrote:
> Hey everyone,
>
> I have been struggling to use the MIG to generate a memory interface
> to the DDR2 device. First some background info: I am using the Xilinx®
> Spartan®-3A DSP XtremeDSP™ Starter Platform. I am using ISE 10.1 with
> MIG v2.3.
>
> I have created the MIG from GUI and played around with it. I also
> edited the UCF file (just changed the locations basically, did not
> mess around with timings). I cannot do any simulation because I am
> using Windows 7 and apparently, simulation doesn't work (or maybe some
> other problem).
>
> Anyway, the thing is I can download the code to the device and I can
> see all the signals go up and down in correct times. (like init_done,
> user_cmd_ack, user_data_valid etc.) Then I try to write some data to
> the memory, I can see user_cmd_ack go high, then I assert burst_done,
> then I can see user_cmd_ack go low. (which means write is succesful,
> right?) However, whenever I try to 'read' from the memory, I always
> get x"00000000" no matter what the address is. What can be wrong with
> it?
>
> Thanks for the help.

DDR2 timing is not easy to meet in the Spartan parts, so you really
can't just muck around with the pinouts. If you changed the location
of any memory pins you need to re-run the MIG configuration GUI and
use the option to "Verify UCF". This tells MIG to generate new
timing and directed routing constraints based on the pin locations
from your actual design.

By the way I thought that the Starter boards come with a pre-built
version of the MIG design. Have you looked into that?

Regards,
Gabor
From: Berk on
On 26 Nisan, 16:39, Gabor <ga...(a)alacron.com> wrote:
> On Apr 26, 9:17 am, Berk <berkgura...(a)gmail.com> wrote:
>
>
>
>
>
> > Hey everyone,
>
> > I have been struggling to use the MIG to generate a memory interface
> > to the DDR2 device. First some background info: I am using the Xilinx®
> > Spartan®-3A DSP XtremeDSP™ Starter Platform. I am using ISE 10.1 with
> > MIG v2.3.
>
> > I have created the MIG from GUI and played around with it. I also
> > edited the UCF file (just changed the locations basically, did not
> > mess around with timings). I cannot do any simulation because I am
> > using Windows 7 and apparently, simulation doesn't work (or maybe some
> > other problem).
>
> > Anyway, the thing is I can download the code to the device and I can
> > see all the signals go up and down in correct times. (like init_done,
> > user_cmd_ack, user_data_valid etc.) Then I try to write some data to
> > the memory, I can see user_cmd_ack go high, then I assert burst_done,
> > then I can see user_cmd_ack go low. (which means write is succesful,
> > right?) However, whenever I try to 'read' from the memory, I always
> > get x"00000000" no matter what the address is. What can be wrong with
> > it?
>
> > Thanks for the help.

Hello,

> DDR2 timing is not easy to meet in the Spartan parts, so you really
> can't just muck around with the pinouts.  If you changed the location
> of any memory pins you need to re-run the MIG configuration GUI and
> use the option to "Verify UCF".  This tells MIG to generate new
> timing and directed routing constraints based on the pin locations
> from your actual design.

Actually, I did just that. First, I let MIG create a 'wrong' UCF file.
Then I changed the pinouts correctly. Then I
selected "Update Design" and pointed it to my newly edited UCF file.
Then, it changed the pinouts and timings.
But there is no change in the output. By the way I am changing the UCF
file under the user_design folder. I think
this is correct. How can I verify if I'm having a UCF error or
something else?

> By the way I thought that the Starter boards come with a pre-built
> version of the MIG design.  Have you looked into that?
> Regards,
> Gabor

Yeah, I did that but my Starter board is not supported.

Thanks a lot.



From: Gabor on
On Apr 26, 10:10 am, Berk <berkgura...(a)gmail.com> wrote:
> On 26 Nisan, 16:39, Gabor <ga...(a)alacron.com> wrote:
>
>
>
> > On Apr 26, 9:17 am, Berk <berkgura...(a)gmail.com> wrote:
>
> > > Hey everyone,
>
> > > I have been struggling to use the MIG to generate a memory interface
> > > to the DDR2 device. First some background info: I am using the Xilinx®
> > > Spartan®-3A DSP XtremeDSP™ Starter Platform. I am using ISE 10.1 with
> > > MIG v2.3.
>
> > > I have created the MIG from GUI and played around with it. I also
> > > edited the UCF file (just changed the locations basically, did not
> > > mess around with timings). I cannot do any simulation because I am
> > > using Windows 7 and apparently, simulation doesn't work (or maybe some
> > > other problem).
>
> > > Anyway, the thing is I can download the code to the device and I can
> > > see all the signals go up and down in correct times. (like init_done,
> > > user_cmd_ack, user_data_valid etc.) Then I try to write some data to
> > > the memory, I can see user_cmd_ack go high, then I assert burst_done,
> > > then I can see user_cmd_ack go low. (which means write is succesful,
> > > right?) However, whenever I try to 'read' from the memory, I always
> > > get x"00000000" no matter what the address is. What can be wrong with
> > > it?
>
> > > Thanks for the help.
>
> Hello,
>
> > DDR2 timing is not easy to meet in the Spartan parts, so you really
> > can't just muck around with the pinouts.  If you changed the location
> > of any memory pins you need to re-run the MIG configuration GUI and
> > use the option to "Verify UCF".  This tells MIG to generate new
> > timing and directed routing constraints based on the pin locations
> > from your actual design.
>
> Actually, I did just that. First, I let MIG create a 'wrong' UCF file.
> Then I changed the pinouts correctly. Then I
> selected "Update Design" and pointed it to my newly edited UCF file.
> Then, it changed the pinouts and timings.
> But there is no change in the output. By the way I am changing the UCF
> file under the user_design folder. I think
> this is correct. How can I verify if I'm having a UCF error or
> something else?
>
> > By the way I thought that the Starter boards come with a pre-built
> > version of the MIG design.  Have you looked into that?
> > Regards,
> > Gabor
>
> Yeah, I did that but my Starter board is not supported.
>
> Thanks a lot.

Well the obvious thing you can do is check the pad report
to make sure the correct pinout is in use. You can also go
into the FPGA editor and check that your MIG-related pins
have all the appropriate registers in the IOB tiles.

Then there's the obvious stuff like checking your clock
and reset inputs to be sure they're hooked up properly.
I've often started going down a head-scratching path
with DDR designs only to find that the active-low
reset input was connected to an active high reset signal,
or that the DCM was being reset be a register clocked
on its own output (this doesn't work with DCM's because
the CLK0 output shuts off when reset is active).

HTH,
Gabor
From: RCIngham on
>On Apr 26, 10:10=A0am, Berk <berkgura...(a)gmail.com> wrote:
>> On 26 Nisan, 16:39, Gabor <ga...(a)alacron.com> wrote:
>>
>>
>>
>> > On Apr 26, 9:17=A0am, Berk <berkgura...(a)gmail.com> wrote:
>>
>> > > Hey everyone,
>>
>> > > I have been struggling to use the MIG to generate a memory
interface
>> > > to the DDR2 device. First some background info: I am using the
Xilinx=
>=AE
>> > > Spartan=AE-3A DSP XtremeDSP=99 Starter Platform. I am using ISE 10.1
=
>with
>> > > MIG v2.3.
>>
>> > > I have created the MIG from GUI and played around with it. I also
>> > > edited the UCF file (just changed the locations basically, did not
>> > > mess around with timings). I cannot do any simulation because I am
>> > > using Windows 7 and apparently, simulation doesn't work (or maybe
some
>> > > other problem).

There is another thread about that, see:
http://www.fpgarelated.com/usenet/fpga/show/92403-1.php

>>
>> > > Anyway, the thing is I can download the code to the device and I
can
>> > > see all the signals go up and down in correct times. (like
init_done,
>> > > user_cmd_ack, user_data_valid etc.) Then I try to write some data
to
>> > > the memory, I can see user_cmd_ack go high, then I assert
burst_done,
>> > > then I can see user_cmd_ack go low. (which means write is
succesful,
>> > > right?) However, whenever I try to 'read' from the memory, I always
>> > > get x"00000000" no matter what the address is. What can be wrong
with
>> > > it?
>>
>> > > Thanks for the help.
>>
>> Hello,
>>
>> > DDR2 timing is not easy to meet in the Spartan parts, so you really
>> > can't just muck around with the pinouts. =A0If you changed the
location
>> > of any memory pins you need to re-run the MIG configuration GUI and
>> > use the option to "Verify UCF". =A0This tells MIG to generate new
>> > timing and directed routing constraints based on the pin locations
>> > from your actual design.
>>
>> Actually, I did just that. First, I let MIG create a 'wrong' UCF file.
>> Then I changed the pinouts correctly. Then I
>> selected "Update Design" and pointed it to my newly edited UCF file.
>> Then, it changed the pinouts and timings.
>> But there is no change in the output. By the way I am changing the UCF
>> file under the user_design folder. I think
>> this is correct. How can I verify if I'm having a UCF error or
>> something else?
>>
>> > By the way I thought that the Starter boards come with a pre-built
>> > version of the MIG design. =A0Have you looked into that?
>> > Regards,
>> > Gabor
>>
>> Yeah, I did that but my Starter board is not supported.
>>
>> Thanks a lot.
>
>Well the obvious thing you can do is check the pad report
>to make sure the correct pinout is in use. You can also go
>into the FPGA editor and check that your MIG-related pins
>have all the appropriate registers in the IOB tiles.
>
>Then there's the obvious stuff like checking your clock
>and reset inputs to be sure they're hooked up properly.
>I've often started going down a head-scratching path
>with DDR designs only to find that the active-low
>reset input was connected to an active high reset signal,
>or that the DCM was being reset be a register clocked
>on its own output (this doesn't work with DCM's because
>the CLK0 output shuts off when reset is active).
>
>HTH,
>Gabor
>

Which is why I have found simulation to be so useful.

But beware the odd case when the simulation model doesn't match the
synthesised behaviour! In my experience, MiG 2.3 DDR2 controllers seem to
be ok for Virtex-4.



---------------------------------------
Posted through http://www.FPGARelated.com
 |  Next  |  Last
Pages: 1 2
Prev: Virtex 4 ICAP partial reconfiguration
Next: data2mem