Vektormultiplizierer

Gast #836607
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!
Gast #836750
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 :-(
#836856
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
Gast #836872
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren