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!
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
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 :-(
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
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.