DSPRelated.com
Forums

EMIF Memory

Started by Werner du Toit August 18, 2003
Hi All

Can anyone please correct me if I'm wrong, but if I write ce2[0x5]=0x31; with
int *ce2 =(int *) (0xA0000000); to emif on 6711DSK then on the address lines I
must see the following:
EA2 = 3.3V (1)
EA3 = 0V (0)
EA4 = 3.3V (1)

and

ED0 = 3.3V (1)
ED1 = 0V (0)
ED2 = 0V (0)
ED3 = 0V (0)
ED4 = 3.3V (1)
ED5 = 3.3V (1)

Am I correct in saying this? If not can you please refer me to any documents to
read up on this?

I get the correct values on the databus but not on the address bus, what am I
doing wrong????

Thanks
Werner



Werner-

> Can anyone please correct me if I'm wrong, but if I write ce2[0x5]=0x31; with
int *ce2 =(int *) (0xA0000000); to emif on 6711DSK then on the address lines I
must see the following:
> EA2 = 3.3V (1)
> EA3 = 0V (0)
> EA4 = 3.3V (1)

Is ce2 an array of int? If so then by accessing index 5, the address lines
should be
20, or:

A0 A1 A2 A3 A4
--------------
1 0 1 0 0

And if you say *ce2++ = 0x31, then ce2 will increase by 4.

Jeff Brower
system engineer
Signalogic

> and
>
> ED0 = 3.3V (1)
> ED1 = 0V (0)
> ED2 = 0V (0)
> ED3 = 0V (0)
> ED4 = 3.3V (1)
> ED5 = 3.3V (1)
>
> Am I correct in saying this? If not can you please refer me to any documents
to read up on this?
>
> I get the correct values on the databus but not on the address bus, what am I
doing wrong????
>
> Thanks
> Werner



Werner-

> No, ce2 is not an array of int. I just want to write 0100b on the address
> lines. What lines do I use? The DSK has only address pins numbered EA2 and
> up. What happened to 0 and 1????

0 and 1 are not connected because the C6x11 cannot physically perform byte and
short
int accesses. It only makes physical 32-bit accesses, so the lower 2 address
lines
are not needed.

-Jeff > ----- Original Message -----
> From: "Jeff Brower" <>
> To: "Werner du Toit" <>
> Cc: <>
> Sent: Monday, August 18, 2003 4:48 PM
> Subject: Re: [c6x] EMIF Memory
>
> > Werner-
> >
> > > Can anyone please correct me if I'm wrong, but if I write ce2[0x5]=0x31;
> with int *ce2 =(int *) (0xA0000000); to emif on 6711DSK then on the address
> lines I must see the following:
> > > EA2 = 3.3V (1)
> > > EA3 = 0V (0)
> > > EA4 = 3.3V (1)
> >
> > Is ce2 an array of int? If so then by accessing index 5, the address
> lines should be
> > 20, or:
> >
> > A0 A1 A2 A3 A4
> > --------------
> > 1 0 1 0 0
> >
> > And if you say *ce2++ = 0x31, then ce2 will increase by 4.
> >
> > Jeff Brower
> > system engineer
> > Signalogic
> >
> > > and
> > >
> > > ED0 = 3.3V (1)
> > > ED1 = 0V (0)
> > > ED2 = 0V (0)
> > > ED3 = 0V (0)
> > > ED4 = 3.3V (1)
> > > ED5 = 3.3V (1)
> > >
> > > Am I correct in saying this? If not can you please refer me to any
> documents to read up on this?
> > >
> > > I get the correct values on the databus but not on the address bus, what
> am I doing wrong????
> > >
> > > Thanks
> > > Werner
> >
> >




Werner and Jeff,
 
The 6x11 can r/w bytes, halfwords or words [6711 can read double words] on any boundary [if the external h/w supports it].
 
The two "missing address bits" are decoded [2:4] as byte enables 0-3.  If the task is to address bytes, halfwords or words you must have logic or hardware capable of selecting sets of 8 bits.
 
If you just want a data pattern of '4' or '5' on address pins EA2,3 and 4, you must multiply the desired value by 4 [or shift left 2].
 
I hope this helps.
 
mikedunn

Jeff Brower <j...@signalogic.com> wrote:
Werner-

> No, ce2 is not an array of int. I just want to write 0100b on the address
> lines. What lines do I use? The DSK has only address pins numbered EA2 and
> up. What happened to 0 and 1????

0 and 1 are not connected because the C6x11 cannot physically perform byte and short
int accesses. It only makes physical 32-bit accesses, so the lower 2 address lines
are not needed.

-Jeff> ----- Original Message -----
> From: "Jeff Brower"
> To: "Werner du Toit"
> Cc:
> Sent: Monday, August 18, 2003 4:48 PM
> Subject: Re: [c6x] EMIF Memory
>
> > Werner-
> >
> > > Can anyone please correct me if I'm wrong, but if I write ce2[0x5]=0x31;
> with int *ce2 =(int *) (0xA0000000); to emif on 6711DSK then on the address
> lines I must see the following:
> > > EA2 = 3.3V (1)
> > > EA3 = 0V (0)
> > > EA4 = 3.3V (1)
> >
> > Is ce2 an array of int? If so then by accessing index 5, the address
> lines should be
> > 20, or:
> >
> > A0 A1 A2 A3 A4
> > --------------
> > 1 0 1 0 0
> >
> > And if you say *ce2++ = 0x31, then ce2 will increase by 4.
> >
> > Jeff Brower
> > system engineer
> > Signalogic
> >
> > > and
> > >
> > > ED0 = 3.3V (1)
> > > ED1 = 0V (0)
> > > ED2 = 0V (0)
> > > ED3 = 0V (0)
> > > ED4 = 3.3V (1)
> > > ED5 = 3.3V (1)
> > >
> > > Am I correct in saying this? If not can you please refer me to any
> documents to read up on this?
> > >
> > > I get the correct values on the databus but not on the address bus, what
> am I doing wrong????
> > >
> > > Thanks
> > > Werner
> >
> >

_____________________________________
Note: If you do a simple "reply" with your email client, only the author of this message will receive your answer. You need to do a "reply all" if you want your answer to be distributed to the entire group.

_____________________________________
About this discussion group:

To Join: Send an email to c...@yahoogroups.com

To Post: Send an email to c...@yahoogroups.com

To Leave: Send an email to c...@yahoogroups.com

Archives: http://www.yahoogroups.com/group/c6x

Other Groups: http://www.dsprelated.com



Werner-

> Without having external memory connected I have the write instruction *(int
> *)(0xA0000010) = 0x31;. This writes 110001b to the address 0100b. When I
> display this on a scope there are some unwanted noise in my address lines at
> 61MHz with a Vp-p of 5V and a duration of 9ns. Do you know anything about
> this or could it be that I just have a noisy source??

That's hard to tell. Not connecting the address lines is not a valid test for
noise
measurement; you could see things that turn out to be not relevant and also not
see
some things that could be significant. You will have to connect the SDRAM
devices
and place the address lines under load and make noise measurements then.

-Jeff

> ----- Original Message -----
> From: "Jeff Brower" <>
> To: "Werner du Toit" <>; <>
> Sent: Monday, August 18, 2003 5:49 PM
> Subject: Re: [c6x] EMIF Memory
>
> > Werner-
> >
> > > No, ce2 is not an array of int. I just want to write 0100b on the
> address
> > > lines. What lines do I use? The DSK has only address pins numbered EA2
> and
> > > up. What happened to 0 and 1????
> >
> > 0 and 1 are not connected because the C6x11 cannot physically perform byte
> and short
> > int accesses. It only makes physical 32-bit accesses, so the lower 2
> address lines
> > are not needed.
> >
> > -Jeff
> >
> >
> > > ----- Original Message -----
> > > From: "Jeff Brower" <>
> > > To: "Werner du Toit" <>
> > > Cc: <>
> > > Sent: Monday, August 18, 2003 4:48 PM
> > > Subject: Re: [c6x] EMIF Memory
> > >
> > > > Werner-
> > > >
> > > > > Can anyone please correct me if I'm wrong, but if I write
> ce2[0x5]=0x31;
> > > with int *ce2 =(int *) (0xA0000000); to emif on 6711DSK then on the
> address
> > > lines I must see the following:
> > > > > EA2 = 3.3V (1)
> > > > > EA3 = 0V (0)
> > > > > EA4 = 3.3V (1)
> > > >
> > > > Is ce2 an array of int? If so then by accessing index 5, the address
> > > lines should be
> > > > 20, or:
> > > >
> > > > A0 A1 A2 A3 A4
> > > > --------------
> > > > 1 0 1 0 0
> > > >
> > > > And if you say *ce2++ = 0x31, then ce2 will increase by 4.
> > > >
> > > > Jeff Brower
> > > > system engineer
> > > > Signalogic
> > > >
> > > > > and
> > > > >
> > > > > ED0 = 3.3V (1)
> > > > > ED1 = 0V (0)
> > > > > ED2 = 0V (0)
> > > > > ED3 = 0V (0)
> > > > > ED4 = 3.3V (1)
> > > > > ED5 = 3.3V (1)
> > > > >
> > > > > Am I correct in saying this? If not can you please refer me to any
> > > documents to read up on this?
> > > > >
> > > > > I get the correct values on the databus but not on the address bus,
> what
> > > am I doing wrong????
> > > > >
> > > > > Thanks
> > > > > Werner
> > > >
> > > >
> >
> >




At 11:19 AM 8/19/2003, you wrote:
>Werner-
>
> > Without having external memory connected I have the write instruction *(int
> > *)(0xA0000010) = 0x31;. This writes 110001b to the address 0100b. When I
> > display this on a scope there are some unwanted noise in my address
> lines at
> > 61MHz with a Vp-p of 5V and a duration of 9ns. Do you know anything about
> > this or could it be that I just have a noisy source??
>
>That's hard to tell. Not connecting the address lines is not a valid test
>for noise
>measurement; you could see things that turn out to be not relevant and
>also not see
>some things that could be significant. You will have to connect the SDRAM
>devices
>and place the address lines under load and make noise measurements then.
>
>-Jeff

The OP may have made a typo when he posted that he had a 5 Vpp signal on
his address lines. I expect this really is a 0.5 Vpp signal which is
nothing to worry about as long as the signal remains above 2.4 V or below
0.4 V from the driver or 2.0 V and 0.8 V at the receiver.

To have a 5 Vpp signal on *any* signal in your system would be very
unusual, and I mean *VERY*. Most devices in a system are not even
connected to a 5 V supply.
Rick Collins
Arius - A Signal Processing Solutions Company
Specializing in DSP and FPGA design http://www.arius.com
4 King Ave 301-682-7772 Voice
Frederick, MD 21701-3110 301-682-7666 FAX


Mike-

> The 6x11 can r/w bytes, halfwords or words [6711 can read
> double words] on any boundary [if the external h/w supports it].
> The two "missing address bits" are decoded [2:4] as byte enables 0-3.
> If the task is to address bytes, halfwords or words you must have
> logic or hardware capable of selecting sets of 8 bits. If you just
> want a data pattern of '4' or '5' on address pins EA2,3 and
> 4, you must multiply the desired value by 4 [or shift left 2].

My understanding is that regardless of the byte enable values, the processor
still
does not truly operate on "any boundary" and the byte enables are byte lane
on/off
signals and nothing more. For example, if code does a STW instruction at
address 1,
the processor will not make 2 successive accesses and store 3 bytes on the first
32
bits and 8bits in the 2nd 32 bits. So with address values not a multiple of 4,
the
only choice is to use xDB and xDH instructions.

That's something I always wondered about. If you know how it works, please let
me
know.

-Jeff Jeff Brower <> wrote:

Werner-

> No, ce2 is not an array of int. I just want to write 0100b on the address

> lines. What lines do I use? The DSK has only address pins numbered EA2
and
> up. What happened to 0 and 1????

0 and 1 are not connected because the C6x11 cannot physically perform byte
and short
int accesses. It only makes physical 32-bit accesses, so the lower 2
address lines
are not needed.

-Jeff > ----- Original Message -----
> From: "Jeff Brower"
> To: "Werner du Toit"
> Cc:
> Sent: Monday, August 18, 2003 4:48 PM
> Subject: Re: [c6x] EMIF Memory
>
> > Werner-
> >
> > > Can anyone please correct me if I'm wrong, but if I write
ce2[0x5]=0x31;
> with int *ce2 =(int *) (0xA0000000); to emif on 6711DSK then on the
address
> lines I must see the following:
> > > EA2 = 3.3V (1)
> > > EA3 = 0V (0)
> > > EA4 = 3.3V (1)
> >
> > Is ce2 an array of int? If so then by accessing index 5, the address
> lines should be
> > 20, or:
> >
> > A0 A1 A2 A3 A4
> > --------------
> > 1 0 1 0 0
> >
> > And if you say *ce2++ = 0x31, then ce2 will increase by 4.
> >
> > Jeff Brower
> > system engineer
> > Signalogic
> >
> > > and
> > >
> > > ED0 = 3.3V (1)
> > > ED1 = 0V (0)
> > > ED2 = 0V (0)
> > > ED3 = 0V (0)
> > > ED4 = 3.3V (1)
> > > ED5 = 3.3V (1)
> > >
> > > Am I correct in saying this? If not can you please refer me to any
> documents to read up on this?
> > >
> > > I get the correct values on the databus but not on the address bus,
what
> am I doing wrong????
> > >
> > > Thanks
> > > Werner
> >
> >



Rick-

> The OP may have made a typo when he posted that he had a 5 Vpp signal on
> his address lines. I expect this really is a 0.5 Vpp signal which is
> nothing to worry about as long as the signal remains above 2.4 V or below
> 0.4 V from the driver or 2.0 V and 0.8 V at the receiver.
>
> To have a 5 Vpp signal on *any* signal in your system would be very
> unusual, and I mean *VERY*. Most devices in a system are not even
> connected to a 5 V supply.

Or it could be that Werner measured it as +/- 0.85 V overshoot either side of
3.3V.
That would be a lot of ringing, but maybe not unexpected if the address lines
are
unterminated 2 or 3 cm or more from the DSP.

-Jeff