Generelle Frage: von C nach VHDL

Gast #477867
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
Gast #477920
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
Gast #477984
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...
Gast #478001
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

Gast #478337
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???
Gast #478348
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
#479553
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.

#479792
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren