mikrocontroller.net

Forum: FPGA, VHDL & Co. Generelle Frage: von C nach VHDL


Autor: CM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

vor kurzem hab ich hier schon mal was gepostet... es ging dabei um die 
Frage wie man die Kommunikation FPGA zu USB-Controller am einfachsten 
machen kann. Es ging in Richtung Softcore... aber ich möchte mich 
dennoch mal schlaumachen, wie es ohne einen einprogrammierten µP gehen 
könnte.

Hier im Forum hab ich gelesen, von C Code zu synthesefähigem VHDL zu 
kommen geht nur mit Handarbeit oder sündhaft teuren Tools. Doch ich 
frage mich, wie macht man sowas in Handarbeit??

Nehmen wir also an, ich hab den C-Code vorliegen.. wie fang ich an? Gibt 
es dafür irgendwelche Richtlinien oder Kochrezepte? Kennt jemand 
Tutorials zu sowas wo das mal an einfachen Beispielen vorgestellt wird?

Mir ist einfach der Übergang von dieser Schritt-für-Schritt Reihenfolge 
bei C (oder Pascal oder sowas) hin zu der "alles wird nur verdrahtet" 
Philosophie von reiner Hardwarebeschreibung nicht richtig klar... das 
richtige Stichwort dazu ist State Machine, das weiß ich, aber wie, was 
und warum ist mir unklar

Danke für eure Antworten
Viele Grüße
CM

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@CM

>Hier im Forum hab ich gelesen, von C Code zu synthesefähigem VHDL zu
>kommen geht nur mit Handarbeit oder sündhaft teuren Tools. Doch ich
>frage mich, wie macht man sowas in Handarbeit??

1.) Man muss fit in C sein.
2.) Man muss fit in VHDL sein.
3.) Man bildet die Funktion des C-Codes inhaltlich in VHDL ab.

>Nehmen wir also an, ich hab den C-Code vorliegen.. wie fang ich an? Gibt
>es dafür irgendwelche Richtlinien oder Kochrezepte? Kennt jemand

Jain.

>Tutorials zu sowas wo das mal an einfachen Beispielen vorgestellt wird?

Nicht dass ich wüsste. Das Problem ist vor allem, dass C und VHDL 
verschiedene Grundprinzipien beinhalten.

C : Sequenzielle Abläufe
VHDL: Sequenzielle oder parallele Abläufe

Die muss man transformieren, das verlangt viel Know How von beiden 
Sprachen.

Mir ist einfach der Übergang von dieser Schritt-für-Schritt Reihenfolge
bei C (oder Pascal oder sowas) hin zu der "alles wird nur verdrahtet"
Philosophie von reiner Hardwarebeschreibung nicht richtig klar... das

Ist auch nicht ganz trivial :-) Die Spezialisten für sowas werden gut 
bezahlt ;-)

>richtige Stichwort dazu ist State Machine, das weiß ich, aber wie, was
>und warum ist mir unklar

Eine State Machine realisiert einen sequenziellen Befehlsablauf wie in 
einem C-Programm.

MfG
Falk


Danke für eure Antworten
Viele Grüße
CM

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wird es zB. automatisch gemacht:

http://mesl.ucsd.edu/spark/

Funktioniert ganz gut, wenn man die Einschränkungen beachtet:
- keine Pointer
- keine structs
- kein break / continue

Ergebnis des Prozesses ist als Steuerpfad eine One-Hot FSM und als 
Datenpfad die in ALUs abgebildete Arithmetik.

Autor: CM... der Echte!!! (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer auch immer dieser CM war, der um 09.49h was gepostet hat, er spricht 
nicht für mich!!! Es intressiert mich sehr wohl, was hier gepostet wird 
und ich lese es mit großem Intresse!!!!

Vor allem an dich Falk mal nen großen Dank, du hast mir diese Woche 
schon sehr viel weitergeholfen!!!


>Eine State Machine realisiert einen sequenziellen Befehlsablauf wie in
>einem C-Programm.
Machen wir mal ein einfaches Beispiel wie es in einem Mikrocontroller 
programmiert sein könnte... nur so ausgedacht. Sagen wir P0 ist ein 8Bit 
Port, bidirektional.

...
while(1)
{
  P0=0x02;   //Anweisung: es soll gelesen werde
  //kurze Pause
  Temp=P0;   //lesen vom Bus
  if(Temp==0xFF)
  {
    P0=0x03 //Anweisung: jetzt wird geschrieben
    //kurze Pause
    P0=0x22 //das ist ne Fehlermeldung an einen anderen Busteilnehmer
  }
}

Kann man irgendwie generell sagen, wieviele Zustände eine State Machine 
bräuchte, um diesen Ablauf nachzubilden?? Der Ablauf ist natürlich 
quatsch...

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@CM... der Echte!!!

>Vor allem an dich Falk mal nen großen Dank, du hast mir diese Woche
>schon sehr viel weitergeholfen!!!

Keine Ursache.

>while(1)
>{
>  P0=0x02;   //Anweisung: es soll gelesen werde

Ist das nicht ein Schreibzugriff?

>  //kurze Pause
>  Temp=P0;   //lesen vom Bus
>  if(Temp==0xFF)
>  {
>    P0=0x03 //Anweisung: jetzt wird geschrieben
>    //kurze Pause
>    P0=0x22 //das ist ne Fehlermeldung an einen anderen Busteilnehmer
>  }
>}

>Kann man irgendwie generell sagen, wieviele Zustände eine State Machine
>bräuchte, um diesen Ablauf nachzubilden?? Der Ablauf ist natürlich
>quatsch...

Das ist einfach, jede C-Anweisung wird in einen State abgebildet. Die 
Pausen (die man in C mit ne Schleife machen würde) kann man auch in ner 
State Machine einfach als Schleife (Zähler) umsetzen.

MFG
Falk


Autor: CM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich will nicht sagen, dass ich das verstehe, aber ich beginne die 
Sache zu verstehen!

Das bedeutet dann aber auch, dass ich im Prinzip sowas wie Funktionen 
eigentlich nicht wirklich abbilden kann, oder??? Je mehr Code, desto 
mehr Zustände für die StateMachine und umso komplizierter wird das 
ganze... oder kann ich z.B. für eine jede Funktion eine StateMachine 
schreiben und dann sozusagen ein main() Programm auch als eine 
STateMachine welche die anderen "aufruft" wenn gewissen Bedingungen 
erfüllt sind???

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@CM

>Das bedeutet dann aber auch, dass ich im Prinzip sowas wie Funktionen
>eigentlich nicht wirklich abbilden kann, oder??? Je mehr Code, desto

Doch, man kann. Die Frage ist, mit welchem Aufwand und in wie weit das 
ganze dann noch lesber, geschweige denn wartbar ist.

>mehr Zustände für die StateMachine und umso komplizierter wird das
>ganze... oder kann ich z.B. für eine jede Funktion eine StateMachine
>schreiben und dann sozusagen ein main() Programm auch als eine
>STateMachine welche die anderen "aufruft" wenn gewissen Bedingungen
>erfüllt sind???

Das geht auch.

MFG
Falk

Autor: CM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wie geht es richtig????
das muss man doch irgendwo nachlesen können????

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung. Such mal nach "System C", das ist eine modifizierte 
C-Variante mit automatischer Konvertierung in VHDL.

MFG
Falk

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SystemC ist keine C-Variante mit automatischer VHDL-Konvertierung 
sondern eine C++-Klassenbibliothek zur Simulation.

www.systemc.org

Autor: CM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie steht es eigentlich in der rauhen Realität um die syntetisierbarkeit 
von SystemC????

Hat jemand da Erfahrung? Vor allem mit kostenloser Software

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt ein spezifiziertes Subset von SystemC, welches synthesefähig 
sein soll. Inwieweit das schon von den Toolherstellern umgesetzt wurde 
ist mir nicht bekannt. Siehe:
http://www.systemc.org/
Hersteller von SystemC Synthesetools ist zB:
http://www.celoxica.com/

Autor: Daniel S. (daniel_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Also ich sowas auch schon während eines Praktikums gemacht, da ging es 
drum nen Rechenalgorithmus von C in VHDL umzusetzen. Meiner Meinung nach 
hat es keinen Sinn einen C-Code direkt in VHDL umzusetzen (also mit 
einer grossen Statemachine, die einfach den C-Code wiederspiegelt). Den 
so wird die sequenzielle Abarbeitung von Prozessoren in einen 
Logibaustein "gepresst" und die Vorteile der Logik gehen verloren.

Besser ist es die eigentlich Funktion des C-codes in VHDL neu zu 
schreiben, da   dies dann sehr viel effektiver bearbeitet werden kann.


Autor: CM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Punkt ist nur: ich hab keinen Rechenalorithmus umzusetzen sondern 
die Kommunikation zwischen einem FPGA und einem Peripherie IC. Es ist 
also irgendwie schon was sequentielles....

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber ehe du dir den Krampf mit der C->VHDL Konvertierung antust, 
schreibst du das Ganze in VHDL dreimal.

MFG
Falk

Autor: Daniel S. (daniel_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut wenn es um sowas geht musst du es natürlich sequentiell mit 
Statemachine machen. Aber ich würde es auch auf jeden Fall nochmal 
selbst in VHDL schreiben und nicht mit so einen Konverter einfach 
umwandeln. Das wird sicherlich nicht sehr effizient umgesetzt. Und so 
schwierig ist VHDL nun auch nicht, wenn man mal die Funktionsweise der 
ganzen Sache durchschaut hat. Und das musst du sowieso wenn du mit FPGAs 
zu tun hast.

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.