mikrocontroller.net

Forum: FPGA, VHDL & Co. Custom Instructions - Parameterübergabe


Autor: Student (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Florian G. (badscher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.