Hallo, ich habe folgendes Problem: Ich habe eine Funktion programmiert und diese im SOPC Builder über Custom Instructions eingebunden. Nun möchte ich diese im Nios verwenden und habe Sie folgendermaßen aufgerufen. Es handelt sich um ein Programm, dass Gleitkommazahlen in Integerzahlen umwandelt! ----------------------------------------------------------------- #include <stdio.h> #include <math.h> #include <system.h> int FLOAT_TO_INT(int val){ // Float to Int return ALT_CI_FLOAT_TO_INT_INST(val,0) ; } float index = -100.0; int *pval = (int *)&index ; int main(void){ while (1){ index+=5.0; printf(" Dez: %d\n",FLOAT_TO_INT(*pval));} ------------------------------------------------------------------ Ich habe hier den Umweg gewählt und einen Pointer auf meinen Float zeigen lassen, diesen Zeiger dann in Integer gespeichert und der Funktion übergeben. Nun würde ich meiner Funktion gerne direkt den Float übergeben ohne den Umweg über den Zeiger. Leider funktioniert mein Programm dann nicht mehr. Ich hatte gehofft, dass es reicht, in der folgenden Zeile (int) einfach durch (float) zu ersetzten, doch das reicht nicht. ------------------------------------------------------------------- int FLOAT_TO_INT(float val){ // Float to Int return ALT_CI_FLOAT_TO_INT_INST(val,0) ; } float index = -100.0; int main(void){ while (1){ index+=5.0; printf(" Dez: %d\n",FLOAT_TO_INT(index));} ------------------------------------------------------------------ Kann mir vielleicht jemand helfen, welche Änderung ich vornehemn muss, damit ich der Funktion auch einen Float übergeben kann? Mfg Christoph
Habe in meiner dipl.- Arbeit vor nem Jahr mir CIs gearbeitet und meine mich noch leicht einnern zu können, dass man bei CI-Aufrufen dataa(32bit) & datab(32bit) übergibt und die CI zum Schluss result(32bit) ausgibt. Folgendes krame ich mal aus meinen grauen hirnzellen raus: ... unsigned int A,B,RESULT; RESULT=ALT_CI_[CI-Name](A,B,n); ... das 'n' ist ein 8 bit Steuerwort, aber das hast du ja auch schon berücksichtigt ;) So wie es oben steht sollte es funtionieren. Mit dem Befehl wird nur !einmal! über A und B ein Parameter von je 32 bit übergeben, float hat aber glaub ich 64? so müsstest du den anderen Input (B) noch hinzunehmen, deine Hardware ein wenig umstellen und das Ding sollte laufen. Ich habe als übergabe parameter immer unsigned integer genommen, die haben in meinem Fall (CORDIC-Algorithmus) gelangt.
Hallo, Habe mein Problem erkannt: Mir wurde erklärt das die Custom Instruction am Ein- und Ausgang nur 32 Bit Integer verarbeiten können. (mag sein das es auch noch andere Möglichkeiten gibt...) Ich habe es aber jetzt dabei belasen und meinen einfachen 32 Float über diesen Trick übergeben... Danke für die Antwort!
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.