Forums

INSERT instruction w/ DSP563xx

Started by gusflit May 5, 2005
Hi to all,
I've just finished some assembler code for the DSP563xx family. I
used for the first time the INSERT instruction, and noticed the
following behaviour:

The INSERT syntax being

insert #CO,S,D ;where #CO is the control word, S the register from
;where the bits are pickep up, and D the result
;accumulator where those bits are inserted.

If i don't place a NOP before transfering the accumulator into
memory, i get impredictible results.

insert #CO,S,D
nop ;this nop seems to be compulsory
move D,x:datacell

If i remove the nop instruction, the assembler program won't report a
pipeline stall.

Can anyone negate/confirm that the instruction isn't handled properly
by both the assembler and the processor? (normally the processor
should insert automatically a nop and the assembler should report a
pipeline stall).

Regards,

Gustave


Dear Gustave,

Have you checked the errata for the derivative that you are
using? Such as it is there should be no need for a NOP
because, as you say, the processor will insert an
arithmetic stall. If you are forced to insert an additional
one I'd be tempted to say there is an errata.

Regards,
--
Henk-Piet Glas Support Engineer
-----------------------
E-mail: support.nl@supp... Altium Software BV
Voice: +31-33-455 85 84 Saturnus 2
Fax: +31-33-455 55 03 3824 ME Amersfoort
WWW: http://www.altium.com The Netherlands
-------[ Altium -- Making Electronics Design Easier ]------



gusflit wrote:

> The INSERT syntax being
>
> insert #CO,S,D ;where #CO is the control word, S the register from
> ;where the bits are pickep up, and D the result
> ;accumulator where those bits are inserted.
>
> If i don't place a NOP before transfering the accumulator into
> memory, i get impredictible results.

Hi Gustave,

did you try the lint563.exe tool? It is part of the Suite56 package. It
should put out some warnings when there are problems due to pipelining.

Well, how ever - sometimes the assembler puts out a warning and the
lint563 tool not. But the lint563 tool seems to find more of the
"pipelining-insert-nop-problems" than the assembler.

Which dsp of the 563xx series are you using? > insert #CO,S,D
> nop ;this nop seems to be compulsory
> move D,x:datacell

Well, may be it is some kind of read-write stall - like

move #CO,D
move D,x:datacell

would cause a pipelining stall. How ever, the assembler realizes that
kind of pipelining stall and puts out a warning. I also read something
about that the dsp would insert a NOP by it self, but ... you never
know. :) I always put in NOPs by my self.

regards
Alex


Lint is an effective tool, but it can only catch errors that it can see
at assembly time. That is it won't check for errata that might involve
say DMA and core contention. However, any type of "stall" should be
caught. Also, in the case of a stall it is best to either use that
information to re-order your code for optimization or simply leave it
alone and allow the processor to insert the stall for you. The latter
can actually lead to faster execution as a stall of an entire clock
period (the equivalent of a NOP) may not be required.

As for the original question if it's not a violation of an errata I see
no reason a NOP should be required...

--
dB --- Alexander Trica <motorola@moto...> wrote:
> gusflit wrote:
>
> > The INSERT syntax being
> >
> > insert #CO,S,D ;where #CO is the control word, S the register
> from
> > ;where the bits are pickep up, and D the result
> > ;accumulator where those bits are inserted.
> >
> > If i don't place a NOP before transfering the accumulator into
> > memory, i get impredictible results.
>
> Hi Gustave,
>
> did you try the lint563.exe tool? It is part of the Suite56 package.
> It
> should put out some warnings when there are problems due to
> pipelining.
>
> Well, how ever - sometimes the assembler puts out a warning and the
> lint563 tool not. But the lint563 tool seems to find more of the
> "pipelining-insert-nop-problems" than the assembler.
>
> Which dsp of the 563xx series are you using? > > insert #CO,S,D
> > nop ;this nop seems to be compulsory
> > move D,x:datacell
>
> Well, may be it is some kind of read-write stall - like
>
> move #CO,D
> move D,x:datacell
>
> would cause a pipelining stall. How ever, the assembler realizes that
>
> kind of pipelining stall and puts out a warning. I also read
> something
> about that the dsp would insert a NOP by it self, but ... you never
> know. :) I always put in NOPs by my self.
>
> regards
> Alex >
Yahoo! Mail
Stay connected, organized, and protected. Take the tour:
http://tour.mail.yahoo.com/mailtour.html