Forum: FPGA, VHDL & Co. C-Code


von Frank (Gast)


Lesenswert?

Hallo

Ich habe folgendes Stück C-code. Alle Variablen sind im floating point
format definiert. Kann man man diesen Code auch einem FPGA beibringen?

while (1==1)
{
// initialisiere Parameter
SIG_RUN = 0;  // Pin für Ausgabe
if (sIst < s1)
{
  u = k1;
  t = 0;
  if (s1 > s) s1 = s;
  while ((sIst < s1) & (vNeu == vOld))
  {
    sIst = u * t*t;
                if (sIst > 2000) SIG_RUN = 1;
    t = t + DeltaT;            }
  if (vNeu != vOld) continue;
}
}

Vielen Dank

Frank

von Xenu (Gast)


Lesenswert?

Kommt darauf an, was das darstellen soll.
Du kannst definitiv mathematische Algorithmen in Hardware abbilden.

Um was genau geht es denn eigentlich?

von Frank (Gast)


Lesenswert?

Hallo

Es ist ein Rechenalgorithmus, der in Abhängigkeit von sIst einen
digitalen Ausgang setzt. Der ganze Algorithmus ist noch etwas länger.

Genau sollte er so funktionieren.

Es werden von Aussen die Parameter k1, s1, sIst etc. vielleicht per SPI
o.ä. im FPGA gesetzt. Anschliessend läuft der FPAG in der Schleife:
while ((sIst < s1) & (vNeu == vOld))
{
  ..
  ..
}
bis eine der Abbruchbedingungen erfüllt ist. Er sprint dann wieder an
den Programmanfang, liest die Parameter und geht wieder in die obige
Schleife

Der Algorithmus sollte von einem internen Taktsignal periodisch
aufgerufen werden.

Beste Grüsse

Frank

von T.M. (Gast)


Lesenswert?

Ja,da müsste man aber Einiges umschreiben. Floating Point sollte man
wohl eher in fixed Point umwandeln, weil sich das effektiver auf einem
FPGA abbilden lässt. Und die While-Schleife müsste man durch eine
geeignete Kombination von VHDL-Konstrukten ersetzen.
Schneller gehts mit sogenannten C-2-HW Tools, aber die gibts ja nicht
gratis....


T.M.

von Frank (Gast)


Lesenswert?

Hallo

Vielen Dank für Eure Rückmeldungen. Das klingt ja schon alles
vielversprechend:)

1.) Ich habe mir gedacht, in VHDL gäbe es auch while-Schleifen:). Wenn
die Routine dann periodisch aufgerfufen werden soll (DeltaT), ergibt
sich dann ein Problem mit der Schleife?

2.) fixed point: Meinst du damit Real-zahlen, bei denen man die
Genauigkeit hinter dem Komma angibt?

3.) C-2-HW Toos: Falls diese Variante gleich effizient ist wie unter
Punkte 1, dann müsste es doch auch möglich sein, dass ich den Code
schreibe und jemand, der über solche Tools verfügt compiliert sie mir:)
1 Schleifendurchlauf sollte etwa in Zyklus 1us möglich sein:)


Beste Grüsse

Frank

von T.M. (Gast)


Lesenswert?

1) While "Schleifen" in VHDL wären nur synthetisierbar, wenn die
Signale in der Bedingung konstant sind.
2) Fixed-point sind Festkommazahlen, da müsste man sich dann um die
Genauigkeit kümmern. Es gibt zwar auch FloatingPoint-Libraries, die
synthesefähig sind, nur bedeutet das einen viel höheren
Ressourcenbedarf.
3) Solche Tools schlucken aber keinen "Stino" C-Code, sondern auf
Untermengen von C aufsetzende Dialekte. Zum Beispiel Handel-C oder
Impulse-C. Oder C++ mit zusätzlichen Libs, wie SystemC.

Dein Design sollte sich auch normal in VHDL realisieren lassen... mit
ein bisschen Aufwand, kommt drauf an, wie fit du in VHDL bist.


T.M.

von Jürgen Schuhmacher (Gast)


Lesenswert?

Die while in HDL hat hier nichts zu suchen! Den Loop im C muss man als
state machine abbilden, was aber einfach ist. Die Rechenalgorithmik
muss als mehrstufige untergelagerte state machine defiert werden, die
von der ersten getriggert wird. Einen Bedarf für float sehe ich nicht.
Die Werte müssen nur entsprechend gut aufgelöst eingespeist werden. Das
ganze lässt sich in 1-2 Tagen codieren.

von Frank (Gast)


Lesenswert?

Hallo zusammen und vielen Dank für eure Rückmeldungen!

Ich habe auch schon an eine State-machine gedacht, vor allem, weil der
Algorithmus noch etwas komplexer ist, als hier dargestellt. Nach euren
interessanten Antworten komme ich zum Schluss, dass es sich rentiert,
die Sache mit FPGAs mal genauer anzuschauen. Ich denke, das beste ist,
wenn ich mir erst mal ein gutes Buch bzgl. FPGA besorge und mir dann
eines der kostenlosen Tools herunterladen. Dann kann ich auch das
Ergebnis simulieren.

@Michael: Bzgl. Auflösung. k1 >=0.0001 kann beliebig klein werden, s
sehr gross <=500.000.000. .... Kann man mit den Dingern eigentlich auch
mit 64 bit integer rechnen oder müsste ich mir hier zuerst die
entsprechende Hardware zusammenstöpseln.

Habt Ihr hier vielleicht ein gutes Werk, welches sich Eurer Erfahrung
nach gut für den Einstieg eignet, auf der anderen Seite aber auch
genügend Tiefgrund hat um die Leistungsfähigkeit eines solchen Chips
bestmöglich zu nutzen. Mich würde hier vor allem auch die
Vorgehensmethodik beim Schaltungsentwurf, Simulation, etc.
interessieren.

Ich habe gesehen, dass es bei ALTIUM ein sehr interessantes Board mit
dem ALTERA Cyclon II gibt. Vielleicht macht es ja auch einmal Sinn so
eines anzuschaffen.

Vielen Dank

Frank

von Frank (Gast)


Lesenswert?

Ups, soory, vor lauter Schumi... Ich wollte eigentlich sagen Jürgen
anstatt Miachel:)

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
Noch kein Account? Hier anmelden.