www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Vektormultiplizierer


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,


ich bin's wieder mit meinem Vektorprozessor :-)

Ich habe ein Problem mit der Multiplikation. Ich bin jetzt dahinter 
gekommen, was der Multiplizierer macht. Das ist ein 16-bit 
Multiplizierer. Wenn ich 16x16-bit multipliziere, liefert er mir nur die 
LBSs. Ich will aber die MSBs. Wenn ich das um 16-bit nach rechts 
schiebe, bekomme ich Müll.

Hier der Code:


 for (i=0;i<vecEl-1;i++{
      resVec[i] = (aVec[i]*bVec[i]);
      resVec[i] = resVec[i]>>16; //shift by 16, to keep the MSB-part
 }

Ich habe das mit diesen Werten in Hex probiert:

Vec1= 0x837;Vec2=0x5b7f;

Das Ergebnis vom Multiplizierer ist: a049

Der erwartete Wert ist: 2efa049. Wie zu sehen ist, nur die unteren Bits 
wurden geliefert.

Wenn ich das um 16 Stellen nach rechts schiebe, ist das Ergebnis: 
ffffffff


Was ist daran falsch?

Ich danke euch für eure Hilfe!

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
resVec ist 16Bit breit? Ergebnis 32 Bit breit zwischenspeichern.

      int32_t verdammt_breit ;
      verdammt_breit = (aVec[i]*bVec[i]);
      resVec[i] =verdammt_breit >>16; //shift by 16, to keep the 
MSB-part

Cheers
Detlef

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das kann aber nicht sein. vecRes ist kein skalarer Wert. vecRes ist 32 
breit aber unterteilt in einen Vektor, in 16bit. Die obere Hälfte 
enthält das Ergebnis von vecA(1)*vecB(1) und die untere Hälfte 
vecA(2)*vecB(2).

Ich verstehe das garnicht mehr. Ich bin fast dabei diesen Prozessor 
aufzugeben :-(

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:

> Hi,
>
> vecRes ist kein skalarer Wert. vecRes ist 32
> breit aber unterteilt in einen Vektor, in 16bit.

Häh? Wie issn der definiert, mail mal den kompletten Code. Neulich hieß 
vecRes auch noch resVec !?

> Ich verstehe das garnicht mehr. Ich bin fast dabei diesen Prozessor
> aufzugeben :-(

Der Prozessor ist völlig unschuldig, der tut, was Du ihm sagst.

Cheers
Detlef

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Detlev,


der Prozessor ist in einer anderen Sprache geschrieben. Da wird andere 
Syntax verwendet. Ich habe den Fehler jetzt. Ich musste nur das Ergebnis 
in 32-bit casten (wie du das empfohlen hattest) und dann shiften. Jetzt 
ist alles korrekt.



Ich danke dir herzlichst!

Autor: 6645 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sonst gaebe es fuer das naechste Mal noch'n Simulator....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.