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
@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
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.
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...
@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
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???
@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
und wie geht es richtig???? das muss man doch irgendwo nachlesen können????
Keine Ahnung. Such mal nach "System C", das ist eine modifizierte C-Variante mit automatischer Konvertierung in VHDL. MFG Falk
SystemC ist keine C-Variante mit automatischer VHDL-Konvertierung sondern eine C++-Klassenbibliothek zur Simulation. www.systemc.org
wie steht es eigentlich in der rauhen Realität um die syntetisierbarkeit von SystemC???? Hat jemand da Erfahrung? Vor allem mit kostenloser Software
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/
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.
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....
Aber ehe du dir den Krampf mit der C->VHDL Konvertierung antust, schreibst du das Ganze in VHDL dreimal. MFG Falk
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.
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.