Hallo zusammen, da ich noch Anfänger in Sachen Digitaltechnik bin, bitte ich vorab meine doch eher amateurhaften Fragen zu entschuldigen ;) Ich stehe gerade nämlich auf dem Schlauch und würde gerne erfahren wo denn der praktische Unterschied in der Programmierung von Mikrocontrollern und in der Programmierung von FPGAs liegt? Liege ich richtig, wenn man yController mit einer Hochsprache programmiert (bspw. C++) und FPGAs mit einer "Hardwarebeschleunigungssprache"? Und was ist letzteres nun genau? Ich kenne zum Beispiel das Programm LabView als Tool um Schaltungen auf einem Chip zu konfigurieren. ICh bin für alle Infos dankbar, vor allem wenn sie anfängerfreundlich formuliert sind. Viele Grüße
Anfänger 91 schrieb: > Liege ich richtig, wenn man yController mit einer Hochsprache > programmiert (bspw. C++) und FPGAs mit einer > "Hardwarebeschleunigungssprache"? uC (beachte Schreibweise) werden normalerweise in einer Hochsprache (C, C++, Basic, Forth, ...) programmiert die dann in Assembler (ja auch damit kann man programmieren) üebrsetzt wird und dan dem uC eingehaucht (programmiert, geflasht) wird. Programmierbare Bausteile (CPLD, PALs, FPGAs, ASICs, ..) werden in einer Hadrwarebeschreibunsgsprache (beachte "beschreibung" nicht "beschleunigung") beschrieben, diese dann kompiliert und dann eingehaucht. Normalerweise erzeugst du mit einer Hardwarebeschreibungssprache eine Schaltung, mit einer Programmiersprache ein Programm. Beide können aber zu einem großen Maß Dein Produkt umsetzten. Beispiel ist eine einfache Uhr. Die kann aus HW , also den Zählern, bestehen. Im Programm eines uC zählst du aber einfach Variablen hoch oder lässt einen Timer (das ist auch HW) zählen. Programmeirbare Logik würde ich im ISO-Schichtenmodell in Layer 1 bis 3 ansiedeln, uC in Schicht 2 bis 7. rgds
Hochsprache? Assembler tuts meist auch.... "Hardwarebeschleunigungssprache"? Von sowas habe ich noch nie gehört..... Vielleicht erst mal etwas lesen: http://de.wikipedia.org/wiki/Field_Programmable_Gate_Array http://de.wikipedia.org/wiki/Mikrocontroller
Ich würde es anders erklären: Bei einem µC hat man verschiedene Bausteine (AD-Wandler, UART, SPI usw.) integriert die man benutzen kann und deren Funktion vorgegeben ist. In einem FPGA hat man eine begrenzte Zahl an Logik-Gattern mit denen man sich verschiedene Bausteine (AD-Wandler, UART, SPI usw.) erstellen kann und so dem FPGA verschiedene Funktionen zuweisen kann. Beispiel: Ein Atmega8 (µC) zum Beispiel hat immer 7 AD-Wandler integriert, egal welche Aufgabe er bewältigen muss/soll. Ein FPGA eines bestimmten Typs hat zum Beispiel in der einen Anwendung 7 AD-Wandler integriert, in einer anderen Anwendung aber nicht einen einzigen AD-Wandler. Meiner Meinung nach sind FPGAs komplexer zu programmieren als µCs, dafür aber sind FPGAs flexibler zu programmieren als µCs.
6A66 schrieb: > uC (beachte Schreibweise) Das ist drollig. Weder "u" noch "y", sondern µ. Auf deutschen PC-Tastaturen mit AltGr+M erreichbar.
Hi, ich versuche es mal kinderfreundlich zu beschreiben: ;-) Theoretisch kannst du Programme für ALLE Bausteine in der gleichen Programmier-Sprache schreiben, wie C oder andere, du brauchst nur den entsprechenden Compiler(Assembler) der dir den Code auf die Hardware-Ebene umsetzt. Ob es Sinn macht, eher nicht, da die Sprache auch für den Einsatzzweck geeignet sein muss!!! (Goto und Funktionsaufrufe machen bei einem CPLD keinen Sinn) >Und was ist letzteres nun genau? Eigentlich ist es ein Verdrahtungsplan deines Chips. Schau dir mal die CPLD, PALs und GALs an, das sind Bausteine deren Hardware wie ein Steckbrett aufgebaut ist. Sie bieten dir, mit verschiedenen 'Blaupausen', an die einzelnen Zellen(Ein- u. Ausgänge) zu verdrahten.
1 | E1 => Input |
2 | E2 => Input |
3 | A1 => Output |
4 | |
5 | A1 = E1 & E2 |
Hier kannst du zu jedem Zeitpunkt sagen, wie die Signale stehen, egal wie viele weiter Verdrahtungen du noch in den Bausteinen hast.(Dies wird ständig ausgeführt) Bei den uC ist das anders, die Zustände werden nur dann geändert, wenn der Programmcounter an der Stelle mit der entsprechenden 'Programmzeile' ist.
1 | mov A, E1 ; lese E1 |
2 | and E2 ; UND E2 |
3 | mov A1, A ; schreibe Ergebnis nach A1 |
hier liegt der Unterschied, in der Ausführung und das muss bei der Programmentwicklung berücksichtige werden. Es gab (oder gibt noch) MC mit eingebauten CPLDs, damit konnte man sich neue Schnittstellen(TWI, SPI, ADC usw) oder weitere Schnittstellen(weitere Timer) erstellen. Mit denen konnte ich damals den Unterschied sehr gut lernen.
Michael Köhler schrieb: > In einem FPGA hat man eine begrenzte Zahl an Logik-Gattern mit denen man > sich verschiedene Bausteine (AD-Wandler, UART, SPI usw.) erstellen kann > und so dem FPGA verschiedene Funktionen zuweisen kann. Man kann "natürlich" auch Mikrocontroller oder kleine DSPs in FPGAs implementieren. Das läuft dann unter dem Namen IP-Core/Softcore.
Ein MC arbeitet programmgesteuert, ein FPGA schaltungsgesteuert. Beim FPGA benötigt jede Funktion Schaltungsressourcen. Dadurch können alle Funktionen parallel arbeiten (schnell), aber deren Anzahl ist stark begrenzt. Beim MC hat man eine feste Schaltung, die ein Programm nacheinander abarbeitet (langsam), aber dadurch fast unbegrenzt viele verschiedene Sachen machen kann. Daher werden FPGAs nur dann verwendet, wenn ein MC zu langsam ist. Da MCs aber immer schneller und leistungsfähiger werden, nimmt der Einsatz von FPGAs stetig ab. Es gibt auch Mischformen, FPGA für schnelle Sachen + MC-Core für Flexibilität in einem Gehäuse. Die FPGA-Programmierung ist keine Programmierung im herkömmlichen Sinn. Es wird ein Schaltplan entwickelt bzw. beschrieben, z.B. in VHDL.
:
Bearbeitet durch User
Rufus Τ. Firefly schrieb: > Das ist drollig. > > Weder "u" noch "y", sondern µ. Auf deutschen PC-Tastaturen mit AltGr+M > erreichbar. Danke - das µ kannte ich, auch das µF aber dass der so einfach auf der Tastatur geht noch nicht. rgds
rtfm schrieb im Beitrag #4082583: > Operationsverstärker --> Transistor --> yController --> Arduino --> FPGA Beiträge wie dieser ärgern mich. ich gehe - als anständiger Mensch - erst mal davon aus, daß hier nicht getrollt wird, sondern jemand tatsächlich ein Anliegen hat und deshalb auch ernstgemeinten Rat verdient hat. Also: Anfänger 91 schrieb: > Ich stehe gerade nämlich auf dem Schlauch und würde gerne erfahren wo > denn der praktische Unterschied in der Programmierung von > Mikrocontrollern und in der Programmierung von FPGAs liegt? OK, FPGA und µC sind beides Chips, zumeist aus Silizium und mit digitaler Logik versehen. Es gibt aber einen grundsätzlichen Unterschied: Das, was man beim µC als Programmieren versteht, ist das Aufschreiben von Befehlsfolgen, die der µC im Prinzip nacheinander ausführt. Also Befehl lesen, dekodieren, ausführen. Dann den nächsten Befehl.. So ein µC versteht kein Pascal, kein C, kein Assembler - sondern NUR Maschinencode. Also ist zum Übersetzen der genannten Programmiersprachen (ja, Assembler ist AUCH NUR eine Programmiersprache) ein Übersetzungsprogramm nötig. Nennt man Compiler oder Assembler, wenngleich auch letzteres gelegentlich mißverstanden wird. Das was man beim Programmieren eines FPGA's (ja , man kann das auch so nennen) tut, besteht darin, zu beschreiben, wie die auf dem Chip vorhandenen Elemente (Gatter, Flipflops und solch Geprassel..) miteinander zusammengeschaltet werden sollen, um damit eine solche Schaltung zu ergeben, die man haben will. Ganz klar: Auf dem FPGA geht es hauptsächlich parallel zu und das ist der Unterschied zum µC, wo es hauprsächlich sequentiell zugeht. Klaro? W.S.
Anfänger 91 schrieb: > Ich stehe gerade nämlich auf dem Schlauch und würde gerne erfahren wo > denn der praktische Unterschied in der Programmierung von > Mikrocontrollern und in der Programmierung von FPGAs liegt? Vergiß den Vergleich, das verwirrt nur. Microcontrollerprogrammierung in Hochsprache und das Erstellen eines FPGA-Designs in VHDL/Verilog habe bis auf die textuelle Eingabe nichts gemeinsam. Bei FPGA-designs geht es letzlich um Datenflüße (Blockdiagramme) wie bei Labview und nicht um Programmabläufe wie bei C oder gar Objektorientierung wie bei C++. Wenn überhaupt dann kann man vielleicht eine RTL (register-transfer-level) Beschreibung in VHDL noch mit (RISC)-Assembler oder microcode-architektur vergleichen, aber das ist eher akademischer Natur und Du fragtest nach praktischen Unterschieden. MfG,
FPGA Programmierung ist paar Level höher als µC. Ein fertiges FPGA Board kostet nicht gerade billig. Bei µController wird alles sequentiell abgearbeitet. Bei FPGA kann man Aufgaben parallel abarbeiten lassen , somit sehr schnell.
Vielen Dank für eure bisherigen Beiträge und vielen Dank für die sehr verständliche Formulierung! Ich fasse zusammen, dass ein µC (danke für den Tastatur Hinweis ;) ) sequentiell arbeitet, die Programmierung hauptsächlich in einer Hochsprache wie C++ erfolgt, diese von einem Compiler übersetzt und auf den Chip geladen werden. Ein FPGA ist schaltungsgesteuert und arbeitet Befehle parallel ab. Was mich noch verwirrt ist der Anwendungsbereich. Es heißt immer, theoretisch kann man für alle Anwendungen sowohl einen µC als auch einen FPGA nehmen. In der Industrie muss es doch klare Unterschiede geben, wann ich mich für was entscheide. Spielen da Kosten bspw. einen Grund? Der Vorteil von der Schnelligkeit bei FPGAs ist mir noch nicht bewusst, zumindest anwendungsbezogen. Heutzutage sind doch unzählige µCs auf dem Markt in verschiedenster Wortbreite und mit unterschiedlich hoher Taktrate. Bei welcher Anwendung würde ich bspw. als erste Wahl sofort einen FPGA zur Hand nehmen? Michael Köhler schrieb: > Meiner Meinung nach sind FPGAs komplexer zu programmieren als µCs, dafür > aber sind FPGAs flexibler zu programmieren als µCs. Meintest du mit komplexer "komplizierter"? Wenn ich mir als Laie bspw. LabView anschaue, bei der mit einer grafischen Oberfläche die Logikfunktionen "gemalt" werden, die der FPGA umsetzt und dann einen komplexen C++ Quellcode als Vergleich, dann empfinde ich das klassische Programmieren als komplizierter.
Komplizierter finde ich nicht, das ist eher eine Frage was man gewohnt ist. Bei einem µC wird ja, wie schon gesagt wurde, der Code sequenziell abgearbeitet, bei einem FPGA werden alle Zeile (überwiegend, es gibt auch sequenzielle Befehle bei einem FPGA) parallel abgearbeitet. Wenn man nur 3/4 Zeilen hat ist das noch recht übersichtlicher. In realen Projekten hat man aber deutlich mehr Code-Zeilen, einige hundert sind bei mir z.B. keine Seltenheit. Hier noch den Überblick zu behalten ist, für mich, bei einem FPGA eine größere Herausforderung als bei einem µC. Deshalb, finde ich, ist ein FPGA komplexer (≠ komplizierter) als ein µC bzgl. der Programmierung.
>Daher werden FPGAs nur dann verwendet, wenn ein MC zu langsam ist. Da MCs aber immer schneller und leistungsfähiger werden, nimmt der Einsatz von FPGAs stetig ab. Ist so nicht ganz richtig. Ein Controller bringt mir kein zuverlaessiges Timing. Und er ist immer sehr viel langsamer. Der Einsatz von FPGA nimmt natuerlich nicht ab, sondern zu. Denn die Anforderungen steigen und neue und Anwendungen erscheinen. Eine Pulscontroleinheit, die mir genaue Pulsfolgen im 10ns Raster erzeugt werd ich als FPGA implemetieren und mit 100MHz Clock ansteuern. Einen 24bit Vorwahlzaehler mit 100MHz gibt's nur im FPGA Wenn ich einen Kommunikations Kanal mit 2.5GBit benoetig, macht mir das auch ein FPGA. Es gibt FPGA mit 16 Kommunikations Link Kanaelen zu 6GBit. Ich muss einen 200MSample ADC ansteuern, und die Daten in ein RAM schaufeln, macht ein FPGA. Ein graphisches Display ruft eher nach einem Controller. Ein Betriebssystem verlangt einen Controller.
:
Bearbeitet durch User
Anfänger 91 schrieb: > Was mich noch verwirrt ist der Anwendungsbereich. Es heißt immer, > theoretisch kann man für alle Anwendungen sowohl einen µC als auch einen > FPGA nehmen. In der Industrie muss es doch klare Unterschiede geben, > wann ich mich für was entscheide. Spielen da Kosten bspw. einen Grund? Definitiv. 1. Ein FPGA kostet viel Geld (erst ab 20€ für Kleinstmodelle bis hin zu 25k€ bei Highend). 2. Ein FPGA kommt nie alleine. Die Konfiguration muss man einem FPGA immer irgendwie einspielen. Bei jedem PowerUp. Dazu braucht man externen Flash, EEPROM, irgend einen nicht flüchtigen Speicher. Es gibt welche mit integriertem Speicher, kosten entsprechend gleich das Doppelte. > Der Vorteil von der Schnelligkeit bei FPGAs ist mir noch nicht bewusst, > zumindest anwendungsbezogen. Heutzutage sind doch unzählige µCs auf dem > Markt in verschiedenster Wortbreite und mit unterschiedlich hoher > Taktrate. Bei welcher Anwendung würde ich bspw. als erste Wahl sofort > einen FPGA zur Hand nehmen? Überall wo hohe Datenraten oder Geschwindigkeiten erforderlich sind. Ich nehme mal Mikrocontroller mal beim Wort und sage einen High End Controller wie einen STM32F4 bei 168 MHz. Mehr als 8 MB/s an Daten schaufelst du da trotz DMA und größten Kopfständen nicht durch. Von Verarbeitung / Bearbeitung ganz zu schweigen, nur kopieren. 100 MBit Ethernet bekommst du mit einem solchen Geschoss von Mikrocontroller nicht ausgelastet. So jetzt sage ich mal ich habe ein Oszilloskop und möchte eine Bandbreite von 100 MHz haben. Das bedeutet, ich brauche einen ADC der mit mindestens 200 MHz = 200 MSPS abtastet. Datenaufkommen 200 MSPS a 8 Bt = 200 MB/s. Dann muss ich diese Daten puffern, verarbeiten, interpretieren und darstellen. Oder HDMI 1.3: 18 Gigabit pro Sekunde = 2,25 GB/s !!!
> Ein FPGA ist schaltungsgesteuert und arbeitet Befehle parallel ab. Ein FPGA ist eine Schaltung von LUTs und FlipFlops, es werden KEINE Befehle abgearbeitet. Man könnte aber aus den FlipFlops und den LUTs irgendetwas CPU ähliches verdrahten, was Befehle abarbeitet.
Ein FPGA kann aber trotzdem - schiebe die Zahl 2 stellen nach links - ausfuehren. Daher ist der Term "Befehl ausfuehren" unpassend.
Peter schrieb: > Definitiv. 1. Ein FPGA kostet viel Geld (erst ab 20€ für Kleinstmodelle > bis hin zu 25k€ bei Highend). Actel ProASIC3?
FPGA und Prozessoren kann man nicht sio einfach vergleichen, da sie sich auf ganz unterschiedlichen Ebenen bewegen. Ein FPGA erlaubt es Dir, innerhalb des FPGAs eine Schaltung (Hardware) zu "bauen". Du hast dort kein Programm, das abgearbeitet wird, sondern Du hast tatsächlich eine Schaltung (echte Hardware). Du kannst Dir ein FPGA stark vereinfacht wie eine gigantische Menge an Schaltern vorstellen, mit denen eine gigantische Menge an kleinen Hardware-Einheiten zusammengeschaltet werden: Die Stellung der Schalter bestimmt die Funktion der Schaltung. Ein Prozessor ist hingegen eine sehr spezielle, festverdrahtete Schaltung auf der man ein flexibles Programm (Software) ablaufen lassen kann. Anders als beim FPGA wird bei einem Prozessor niemals die Schaltung (Hardware) geändert. Da die Schaltung fest steht, kann man den Chip optimal gestalten und damit sehr hohe Taktraten und Packungsdichten erreichen. Da ein Prozessor aus einer festgelegten Hardware besteht, kann man einen Prozessor mit einem (geeigneten) FPGA realisieren. D.h. man legt die Schaltung im FPGA so fest, dass sich daraus der Prozessor ergibt. Alternativ hätte man den Prozessor auch aus einzelnen Transistoren löten können.
Ok jetzt mal eine "brainfuck" Frage :) Wenn sich aus einem FPGA ein Prozessor realisieren lassen kann, wieso kann ich dann im Nachhinein kein Programm darauf laufen lassen?
Anfänger 91 schrieb: > Ok jetzt mal eine "brainfuck" Frage :) > Wenn sich aus einem FPGA ein Prozessor realisieren lassen kann, wieso > kann ich dann im Nachhinein kein Programm darauf laufen lassen? Kannst Du doch! Dir muß nur klar sein, dass das Programm im Prozessor läuft, den Du im FPGA beschrieben hast.
> Wenn sich aus einem FPGA ein Prozessor realisieren lassen kann, wieso > kann ich dann im Nachhinein kein Programm darauf laufen lassen? Kann man schon, aber den programmiert man dann in Assembler oder C usw. Mit VHDL beschreibt man wie der Prozessor Funktionieren bzw. gebaut werden soll.
Danke! So langsam sehe ich Licht am Ende des Tunnels :)
Es ist leider etwas verwirrend, dass man von "programmierbarer Logik" spricht. "Programmieren" bezeichnet bei PAL, CPLD und FPGA den Vorgang, bei dem die Schaltungsbeschreibung in den Baustein hinein getan wird (im Sinne von "ein EPROM programmieren"). Programmierbare Logik bezeichnet Hardware, die nicht fest verdrahtet ist, sondern sich flexibel umkonfigurieren läßt. Bei FPGAs spicht wird daher der "Programmier"-Vorgang korrekterweise als "Konfiguration" bezeichnet. Dies ist aber nicht mit einem "Programm" im Sinne von sequentiell abgearbeiteter Software zu verwechseln, wie es auf dem PC läuft (im Sinne von "ein BASIC-Program programmieren").
>> Wenn sich aus einem FPGA ein Prozessor realisieren lassen kann, wieso >> kann ich dann im Nachhinein kein Programm darauf laufen lassen? Kann man schon, aber den programmiert man dann in Assembler oder C usw. Mit VHDL beschreibt man wie der Prozessor Funktionieren bzw. gebaut werden soll. Nicht ganz. Man kann sich einen CPU Core ins FPGA einbauen. Da laeft dann eben ein 8032, oder ein R4000, oder irgendwas, wo die Rechte abgelaufen sind. Oder man bezahlt vorneweg fuer den Core. Entwickelt fuer diesen Prozessor wird mit fuer diesen Prozessor ueblichen Tools, dem Compiler, dem Linker, was auch immer. Nix ASM.
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.