Hallo zusammen!
Ich bin ja nicht gerade der große Schaltungsentwickler, kenne mich
aufgrund meiner Ausbildung aber auch mit analoger und digitaler
Schaltungstechnik aus. So verfolge ich seit einiger Zeit die Beiträge im
Forum "Analogtechnik", und bin überrascht, dass sich eigentlich in all
den Jahren nicht so wahnsinnig viel verändert hat und die Sprache der
Elektronik, so wie ich sie gelernt habe, noch heute gesprochen wird wie
vor 30 Jahren.
Andererseits bin nun doch ein wenig "betroffen", dass heutzutage (ich
bin ja nicht mehr der jüngste...) digitale Schaltungen maschinell
mittels HW-Beschreibungssprachen wie VHDL entworfen werden. Scheinbar
lernt man das sogar schon in HTLs (=österreichischer Schultyp für
technische Ausbildung).
Ich möchte mich nun ein wenig orientieren und nachfragen, ob der Umgang
mit VHDL zum Standard-Handwerkszeug eines Elektronikers modernen
Ausbildungsstands ist, oder ob es sich um eine Sache für Spezialisten
handelt, die FPGAs oder ASICs entwerfen. Ich habe zu meiner Zeit (war in
den 80-ern) die Verwendung von Karnaugh Diagrammen gelernt und einen
Überblick über Logikfamilien und Standardbausteine (Flip-Flops, etc...)
erhalten. Ist diese Vorgehensweise heute passe, bzw. lernt man
eigentlich noch auf dieser untersten Ebene? In der Analaogtechnik lernt
man heute auf FHs noch so ziemlich das gleiche (das weiß ich, da ich
immer wieder mit Studenten zu tun habe), wie zu meiner Zeit, die Dinger
sind kleiner geworden, aber ein OP ist immer noch ein OP.
Als ich jedoch das hier sah, habe ich begriffen, dass ich offenbar ein
Fossil aus besseren Zeiten bin:
1
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
useIEEE.STD_LOGIC_ARITH.ALL;
4
useIEEE.STD_LOGIC_UNSIGNED.ALL;
5
entityUnknownEntityis
6
port(CLK,RESET:instd_logic;
7
Q:outstd_logic_vector(3downto0));
8
endUnknownEntity;
9
architectureBehavioralofUnknownEntityis
10
signaltmp_count:std_logic_vector(3downto0);
11
begin
12
UnbekannterProzess:process(CLK,RESET)
13
begin
14
ifRESET='1'thentmp_count<=(others=>'0');
15
elsifCLK'eventandCLK='1'thentmp_count<=
16
tmp_count+1;
17
endif;
18
endprocessUnbekannterProzess;
19
Q<=tmp_count;
20
endBehavioral;
Das beschreibt eine simple Anordnung von 4 D-Flipflops...
Ist es entschuldbar, dies als "allgemeiner Techniker", nicht zu
verstehen?
Oder gehört dies zum Ausbildungsstand, so wie zu meiner Zeit halt das
Ohmsche Gesetz?
Im übrigen finde ich dieses Thema unglaublich interessant, und ich
überlege mir, mich wenigstens ein wenig damit zu beschäftigen (auch wenn
ich es beruflich vermutlich nie brauchen werde). Wenn man das auf einer
HTL lernt, kann es ja nicht "sooo kompliziert" sein, die
Sprachspezifikation sieht aber sogar für mich, der sich sein ganzes
Leben mit Programmiersprachen beschäftigt hat, doch einigermaßen
"lernintensiv" aus. Gibt es eine Toolchain, die gratis ist und mit der
man einige grundlegende Versuche machen kann?
Bitte um eine entsprechende "Einnordung" ggg !
Vielen Dank,
Michael
Fast alle Toolchains bekommt man in einer "free version".
Man muß sich halt registriern. Ich kann Quartus II empfehlen.
Bei Altera kann man eigentlich alle ICs die Altera im Angebot hat und
hatte programmieren. Um wirklich mal was "cooles" zu machen (ohne
allzuviel Geld in die Hand zu nehmen) kann ich nur das DE0 nano Board
empfehlen
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=139&No=593
Da ist halt nen kleines "billig" FPGA drauf (Cyclone ist die billig"
Serie, Stratix die Teure und Arria die Mittelklasse)
http://www.altera.com/devices/fpga/cyclone-iv/overview/cyiv-overview.htmlhttp://www.altera.com/devices/fpga/stratix-fpgas/stratix-iv/overview/stxiv-overview.html
Hat halt "nur" 22320 Lookup Tables wobei jede Lookuptable zu einem
Logikgatter mit 4 Inputs und einem Output programmiert werden kann.
Diese Ein und Ausgänge der 22000 LUTs können beliebig miteinander
verdrahtet werden um eine Digitale Schaltung zu basteln ohne zu löten.
Zu jeder LUT gehört natürlich auch noch ein FlipFlop das auch frei
verdrahtet werden kann. Man kann jede LUT auch als 16 Bit Speicher oder
Schieberegister benutzen (Man kann aber auch aus den RS-FlipFlops
Schieberegister basteln oder was auch immer). Achso ja dann sind noch
Dual Ported Rams drinne 9Kbit mit jeweils eigenen Adress und
Datenbuss(en) die Frei mit allem anderen verdrahtet werden können
(insgesammt 66 Stück also 594Kbits) und noch 66 18x18 Bit
Multipliziereinheiten und 4 PLL.
Zum rumspielen echt gut.
Michael W. schrieb:> Als ich jedoch das hier sah, habe ich begriffen, dass ich offenbar ein> Fossil aus besseren Zeiten bin:
Naja, der gezeigte Code (bzw. genauer: Die HW-Beschreibung) scheint ja
von einem potentiellen Terroristen verfasst worden zu sein...
Sie sollte aber funktionieren...
Es gibt fuer VHDL ja auch Editoren, mit denen man Einruecken kann,
Leerzeilen hinzufuegt, ... Auch gibt es in VHDL Kommentare (die mit --
anfangen). Achja, viele Editoren beherrschen VHDL Syntax-Highlighting.
Aber zum Thema: Man kann mit VHDL (oder Verilog) HW beschreiben, aber
man kann noch mehr: Man kann damit seinen Design simulieren. Du brauchst
also (eigentlich) gar keine HW auf dem Arbeitstisch liegen haben.
Nimm GHDL oder (da der etwas kryptisch zu bedienen ist) zieh' dir eine
Toolchain von Altera, Lattice oder Xilinx runter (das sind dann halt
immer einige Gigabyte...) und du kannst loslegen.
Und Lothars Seite hat viele gute Beispiele wie man sowas machen kann.
Einfach mal hier suchen...
PS: Und ja, sogenannte HDLs nehmen dir viel Komplexitaet ab. Wer sowas
wie CPLD oder FPGA grafisch beschreiben moechte, ist meiner Meinung nach
ein Masochist...
Auf deine Frage, ob man heute noch die Grundlagen der Digitaltechnik
verstehen muss, wo man sich doch in VHDL einfach was zusammen-hacken
kann?
Ich bin der festen Überzeugung, dass das mit Ja zu beantworten ist.
Ohne das Hintergrundwissen über digitale Schaltungstechnik erleidet man
früher oder später Schiffbruch beim VHDL-Design.
Auf den Ersten und zweiten Blick sieht es so aus, als könnte man hier
einfach was zusammentippen und die Toolchain drumrum wird es dann schon
richten. Aber so ist es nur bedingt.
Man be-schreibt eigentlich Hardware und dazu muss man auch verstehen,
wie diese Hardware funktioniert.
Und wer keine Ahung hat, was eine Setup-Zeit an einem Register ist, der
fällt früher oder später auf die Nase.
Dinge, wie boolsche Algebra nimmt einem natürlich die Toolchain ab und
man muss sich nicht selbst hinsetzen und mit KV vereinfachen.
Und wie fängt man da am besten an?
Ich sehe den Wald vor lauter Bäumen nicht. Ich habe da so ein "Buch"
<Schaltungsdesign mit VHDL; Gunther Lehmann, Bernhard Wunder, Manfred
Selz>. das ist ja ganz nett zu lesen, aber selbst wenn ich dieses von
A-Z durchackern würde, könnte ich noch kein FPGA programmieren...
Uwe schrieb:> Um wirklich mal was "cooles" zu machen (ohne> allzuviel Geld in die Hand zu nehmen) kann ich nur das DE0 nano Board> empfehlen> http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=139&No=593> Da ist halt nen kleines "billig" FPGA drauf (Cyclone ist die billig"> Serie,
Und wie wird das programmiert? Man braucht eine spezielle Toolchain für
diesen Hersteller, oder eine x-beliebige?
Michael W. schrieb:> habe zu meiner Zeit (war in> den 80-ern) die Verwendung von Karnaugh Diagrammen gelernt und einen> Überblick über Logikfamilien und Standardbausteine (Flip-Flops, etc...)> erhalten. Ist diese Vorgehensweise heute passe, bzw. lernt man> eigentlich noch auf dieser untersten Ebene?
Willkommen im Club. Du hast damit bessere Voraussetzungen,
Digitalschaltungen zu bauen, als die Neulinge, die nur in Prozessen
denken.
>Karnaugh
Gab es da nicht auch noch einen Hernn V.? (Wegen KV-Diagram)
Und zum Thema Buch schlage ich noch immer "VHDL-Synthese " (trotz aller
Schwächen) von Reichardt&Schwarz vor.
Eine Suche hier im Forum bringt da Licht ins Dunkel... ;-)
Michael W. schrieb:> Und wie fängt man da am besten an?> Ich sehe den Wald vor lauter Bäumen nicht. Ich habe da so ein "Buch"> <Schaltungsdesign mit VHDL; Gunther Lehmann, Bernhard Wunder, Manfred> Selz>. das ist ja ganz nett zu lesen, aber selbst wenn ich dieses von> A-Z durchackern würde, könnte ich noch kein FPGA programmieren...
Ja, das war auch mein erstes VHDL Buch.
Völlig ungeeignet für einen Anfänger, da es eine Sprachbeschreibung ist
und nichts mit dem praktischen Anwenden zu tun hat.
Jetzt ca. 10 Jahre später finde ich dieses Buch sogar nützlich und nutze
es immer mal wieder um speziellere Finessen der Sprache VHDL nach zu
schlagen.
Lothar Miller schrieb:> Und zum Thema Buch schlage ich noch immer "VHDL-Synthese " (trotz> aller Schwächen) von Reichardt&Schwarz vor.>> Eine Suche hier im Forum bringt da Licht ins Dunkel... ;-)
Kann ich als Anfänger nur empfehlen!
Ohne dieses Buch hätte ich dieses Thema während meinem Studium
warscheinlich aufgegeben.
Viele Beispiele, Übungen und ein sehr praktischer Ansatz der deinem
Vorwissen gerecht wird.
Michael W. schrieb:> In der Analaogtechnik lernt> man heute auf FHs noch so ziemlich das gleiche (das weiß ich, da ich> immer wieder mit Studenten zu tun habe), wie zu meiner Zeit, die Dinger> sind kleiner geworden, aber ein OP ist immer noch ein OP.
Noch ein kleiner Exkurs am Rand:
Weil wir noch nicht soweit sind, dass wir an den Schulen VHDL-AMS
unterrichten :-)
Damit kann man man dann auch zeit- und wertkontinurierliche Systeme
beschreiben und simulieren. Selber noch nie gemacht, da ich kein
Chipdesign mache, Lego Klötze (LUTs im FPGA) gibts bis jetzt nur
digital.
Michael W. schrieb:> Und wie wird das programmiert? Man braucht eine spezielle Toolchain für> diesen Hersteller, oder eine x-beliebige?
Die Toolchain ist immer herstellerabhängig.
Für die VHDL Simulation wirst du eigentlich (FPGA Bereich) nur zwei
antreffen: ModelSim von Mentor und ActiveHDL von ALDEC. Die Hersteller
liefern diese mit ihren Toolchains aus.
Als FreieSoftware gibts "nur" VHDL Simulatoren: GHDL und FreeHDL.
Die weiteren Prozessschritte (Synthese, Place&Route) sind, mangels
informationen zu den FPGAs, nicht als OpenSource machbar.
Gleich vorweg: Bitte einen absolut unwissenden jetzt nicht zur Sau
machen ggg Ich habe am Thema irgendwie Lunte gerochen und mag mich mit
FPGAs beschäftigen.
Uwe schrieb:> http://www.terasic.com.tw/cgi-bin/page/archive.pl?...
Das sieht ja interessant aus und das kleine Geld würde ich investieren,
um mal was KOMPLETT neues zu lernen.
Jedoch verstehe ich einige grundlegende Dinge noch nicht (ich bin ja
grad dabei mir einen allerersten Überblick zu verschaffen):
1) um mit so einem Board anzufangen benötige ich ja erst einmal das
nötige Know-How was VHDL angeht. Sollte man sich das vorher aneignen
oder während? Es scheint ja doch ein wenig komplexer zu sein als einen
ARM zu programmieren ggg Ich bin halt leider der ungeduldige Typ, der
es nicht schafft zuerst mal 2000 Seiten in 6 Monaten zu lesen, bevor das
erste konkrete Ergebnis am Tisch liegt.
2) Ich kann als Privatperson keine 1000€ ausgeben. 70€ ist OK. Für
obiges Board benötige ich auch Quartus II? Was ist in diesem "Nios II
Embedded Design Suite" die schon beim Board dabei ist denn drin?
Beinhaltet diese bereits Quartus II? Falls nicht, wie komme ich zu einer
günstigen ? Reicht da diese "Web Edition"? Und wenn ich Quartus II
brauche, was ist dann das "Nios"?
3) Kann ich mit dem Quartus II auch simulieren? Vorerst muss ich ja
lernen und ich werde wohl kaum gleich nach einer Stunde das Board
programmieren...
Ich hoffe diese Fragen waren nicht allzu "dämlich" ...
Michael W. schrieb:> Was ist in diesem "Nios II Embedded Design Suite" die schon beim Board> dabei ist denn drin?
Vergiss einfach am Anfang mal diese Prozessorsysteme auf FPGAs.
> Reicht da diese "Web Edition"?
Die ganzen freien Versionen reichen locker für den Anfang. Nimm ein
kleines, erprobtes, billiges Board und leg damit los. Mach das
Blinklicht, dann das Lauflicht, dann eine serielle Schnitte, die
Ansteuerung eines VGA Monitors. Und lerne dabei.
> 1) um mit so einem Board anzufangen benötige ich ja erst einmal das> nötige Know-How was VHDL angeht. Sollte man sich das vorher aneignen> oder während?
Wenn du hartnäckig dran bleibst, dann kannst du dich, wenn die Blätter
braun werden, so langsam an größere Sachen machen. Nimm dir in der
Lernphase viel Zeit für Irrwege und versuch herauszufinden, WAS du da
gerade falsch gemacht hast. Auf diese Art wirst du diesen Irrweg später
nicht mehr gehen...
Und falls/wenn dir das "kleine" EVAL-Board dann zu eng wird, dann
verkaufst du es ohne nennenwerten Wertverlust und schaffst dir ein
gößeres an...
> 3) Kann ich mit dem Quartus II auch simulieren?
Nein. Es ist aber eine Schnittstelle zum Simulator (ModelSim)
implementiert, sodass du alles auf der selben Oberfläche erledigen
kannst...
Michael W. schrieb:> berndl schrieb:>> guck mal auf Lothars Seite. Nicht nur Code, auch gute Erklaerungen...
Oder eines der hunderten FPGA-projekte wie dieses:
Retrocomputing auf FPGA. Die halten sich nicht mit KleinKlein wie
FlipFlop die 42. auf, sondern zeigen wie man übliche Embedded-Blöcke wie
Addressdecoder, Bus-multiplexer, Speicherinterface, RS232-Kommunikation
in einer Hochsprache resourcenoptimal beschreibt resp. "baut".
MfG
Hallo und danke für deine Tips:
Lothar Miller schrieb:> Michael W. schrieb:>> Was ist in diesem "Nios II Embedded Design Suite" die schon beim Board>> dabei ist denn drin?> Vergiss einfach am Anfang mal diese Prozessorsysteme auf FPGAs.
Wie meinst du das ?
Dass das von mir angegebene Board "unbrauchbar" ist?
Lothar Miller schrieb:>> 3) Kann ich mit dem Quartus II auch simulieren?> Nein. Es ist aber eine Schnittstelle zum Simulator (ModelSim)> implementiert, sodass du alles auf der selben Oberfläche erledigen> kannst...
Ich will mir, wenn ich in dieses Thema schon einsteige, gleich mit einer
geeigneten Toolchain anfangen, da ich später nicht alle drei Wochen
umlernen möchte.
1) Was empfiehlst du für den Anfang nun konkret? Sollte ich mir die
Quartus II Web Version runterladen?
2) Die momentan wichtigste Frage: Ich muss erst mal VHDL lernen.
Nebenbei will ich dann sicher auch gleich mal was (ganz
einfaches)ausprobieren. Was bedeutet "Ausprobieren" dann genau? Wenn ich
keinen Simulator habe, wie dann? Ist ModelSim dafür geeignet? Was ist
der grundsätzliche Unterschied zwischen Quartus II und Model Sim? Wann
brauche ich was? Quartus zur Erstellung einer HW-Beschreibung und
ModelSim zum Testen?
Noch so eine ganz grundlegende Frage:
Da gibt es Projekte, wo ganze CPUs in FPGA realisiert werden.
http://www.mikrocontroller.net/articles/Retrocomputing_auf_FPGA#Warum_Z1013.3F
Wie geht das eigentlich? ich baue dann auf VHDL Basis eine ganze CPU?
Kann eine Einzelperson überhaupt das entsprechende know-How haben? Mir
ist derzeit noch ein Rätsel, wie das funktioniert? Eine CPU ist ja nicht
gerade trivial und besteht aus unzähligen Komponenten, tausenden
logischen Grundeinheiten, etc. die ja einzeln getestet werden müssen.
Mir ist klar wie der Z80 grundsätzlich funktioniert, aber den
nachzubauen entzieht sich meiner Vorstellungskraft. Das macht man so
locker in den Abendstunden? Auch Zilog wird den Z80 nicht einfach so in
einer Woche aus dem Boden gestampft haben, und da arbeiteten vermutlich
dutzende Entwickler mit jahrelanger Erfahrung monatelang dran. In Summe
wohl Mannjahre. Und dann gibt es Einzelpersonen, die so als Spielzeug
einen Prozessor locker nachbauen? Mir kommt das so vor als würde ich als
Modellbauer einen Airbus nachbauen wollen - im Garten halt. Ich habe
mich bisher nicht zu den dümmsten gezählt, aber langsam hab ich
ernsthafte Bedenken...*ggg*
> > > Vergiss einfach am Anfang mal diese Prozessorsysteme auf FPGAs.> >Wie meinst du das ?>Dass das von mir angegebene Board "unbrauchbar" ist?
Man kann ja in einem FPGA auch eine eigene CPU "bauen".
Um jetzt nicht selber ne CPU basteln zu müßen bietet Altera halt ne
"fertige" CPU an, die man nur mit nen paar Mausklicks ins Fenster zieht.
Dazu gibt es dann noch Peripherie die man mit der Maus ins Fenster
zieht. Und schon hat man nen Komplettes System im FPGA mit alles was man
da reingezogen hat. Naja so in etwa.
Brauchst du um VHDL zu lernen nicht.
> 1) Was empfiehlst du für den Anfang nun konkret? Sollte ich mir die> Quartus II Web Version runterladen?
Ja geht auch ohne Hardware. Ist halt schöner wenn man was in der Hand
hält.
> Quartus zur Erstellung einer HW-Beschreibung und> ModelSim zum Testen?
Ja
@ Michael:
Ich versuch´s einfach mal, ein wenig für dich zu sortieren:
Um ein FPGA-Design zu erstellen benötigst du im Wesentlichen vier Dinge:
1. Einen Editor, mit dem du deine Eingabe in VHDL machen kannst. Das
kann im Prinzip ein ganz normaler Texteditor sein.
Es gibt auch Editoren, mit denen man quasi Schaltpläne erstellen kann
und die diese dann wiederum im VHDL wandeln. Davon rate ich dir aber
erstmal ab.
2. Einen Simulator. Mit ihm kannst du das Verhalten deines VHDL-Codes
simulieren. Das kann z.B. Modelsim sein.
3. Einen Synthesizer und Place and Route (PaR). Der Synthesizer ist der
eigentliche "Compiler" und bildet das, was du in VHDL beschrieben hast,
auf die Möglichen Strukturelemente ab, die der FPGA dir zur Verfügung
stellt. Dazu muss der Synthesizer natürlich wissen, welchen FPGA zu
verwendest.
PaR "platziert" dann die Elemente und verbindet sie "routing".
4. Eine Möglichkeit, das von Synthese und PaR generierte File in das
FPGA zu "brennen"..
Die meisten FPGA Hersteller bieten eine Toolchain an, die alle o.g.
Schritte in einer Entwicklungsumgebung zusammenfasst.
Dieser Entwicklungsumgebung geben sie dann einen hübschen Namen. Altera
nennt sie "Quartus", Lattice nennt sie "Diamond",...
Michael W. schrieb:> Wie geht das eigentlich? ich baue dann auf VHDL Basis eine ganze CPU?> Kann eine Einzelperson überhaupt das entsprechende know-How haben?Lothar Miller schrieb:> Und zum Thema Buch schlage ich noch immer "VHDL-Synthese " (trotz> aller> Schwächen) von Reichardt&Schwarz vor.
Geh und kauf dir dieses Buch.
Da wirst du Schritt für Schritt an all diese Themen herangeführt.
Der Abschluss bildet dann Kapitel 8: Synthesefähiger VHDL-Entwurf eines
Mikroporozessors (Seite 193 bis 226)
> Wie geht das eigentlich? ich baue dann auf VHDL Basis eine ganze CPU?> Kann eine Einzelperson überhaupt das entsprechende know-How haben?
Eines nach dem Anderen..
Erst mal Gehen lernen und dann kannst du irgendwann an nen Marathon
denken.
Eine CPU ist im Prinzip nichts Dramatisches und je nach Ausbaustufe und
unterstütztem Befehlssatz kann die auch sehr klein und Übersichtlich
ausfallen. Also durchaus etwas, was der ambitionierte Hobby-FPGA-Bastler
in den Abendstunden zusammenwursteln kann.
Aber du wirst erstmal mit einem einfachen UND-Gatter anfangen.
Danach vielleicht einen Zähler
Dann einen Zustandsautomaten
Dann vielleicht mal nen UART
....
und irgendwann kommst du vielleicht selber an den Punkt wo du sagst: So,
jetzt mach ich mal ne kleine CPU.
Bernd Bruch schrieb:> eines der hunderten FPGA-projekte wie dieses: Retrocomputing auf FPGA.> Die halten sich nicht mit KleinKlein wie FlipFlop die 42. auf
Das ist ein toller Tipp für einen Anfänger: "Mach 2 Schritt auf einmal
und fall aufs Maul!"
Wenn ich (m)ein Flipflop (bzw. FPGA) nicht in- und auswendig kenne,
bekomme ich keine Hardware ressourcenoptimal beschrieben. Und zu einem
Flipflop könnte ich mehr als 42 Kapitel schreiben...
Michael W. schrieb:>> Vergiss einfach am Anfang mal diese Prozessorsysteme auf FPGAs.> Wie meinst du das ?> Dass das von mir angegebene Board "unbrauchbar" ist?
Nein, dass du nicht das augenmerk auf einen als Softcore implementierten
Prozessor setzen solltest. Das ist so, wie wenn du sagst: ich finde die
Technik eines Autos interessant, dann aber nur zum Händler gehst und
eine Probefahrt machst. (D)ein Auto lernst du nur durch das
"Dranrumschrauben" kennen...
Michael W. schrieb:> 2) Die momentan wichtigste Frage: Ich muss erst mal VHDL lernen.
Du musst nicht VHDL lernen, sondern du musst lernen, welche 10% von VHDL
du tatsächlich auf Hardware bekommst. Denn:
> Nebenbei will ich dann sicher auch gleich mal was ausprobieren.> Was bedeutet "Ausprobieren" dann genau?> Wenn ich keinen Simulator habe, wie dann?
Für mich ist es die Implementierung in Hardware. Simulieren kannst du
vieles, und nur der kleinste Teil davon wird auf einem FPGA umsetzbar
sein.
> Ist ModelSim dafür geeignet?
Ein Simulator wird das tadellos als Verzögerungsglied simulieren:
1
ausgang<=eingangafter500ms;
Der Synthesizer wird das after einfach ignorieren, und du guckst mit
deiner schönen und tadellos simulierenden VHDL-Beschreibung in die
Röhre...
> Was ist der grundsätzliche Unterschied zwischen Quartus II> und Model Sim? Wann brauche ich was?> Quartus zur Erstellung einer HW-Beschreibung und ModelSim zum Testen?
Quartus ist eine Entwicklungsumgebung, die die FPGA Toolchain
(Synthesizer, Mapper, Place&Route, Bitgen) und den Siulator (Modelsim)
unter eine Oberfläche bringt.
Michael W. schrieb:> Noch so eine ganz grundlegende Frage:>> Da gibt es Projekte, wo ganze CPUs in FPGA realisiert werden.>> http://www.mikrocontroller.net/articles/Retrocompu...>> Wie geht das eigentlich? ich baue dann auf VHDL Basis eine ganze CPU?> Kann eine Einzelperson überhaupt das entsprechende know-How haben? Mir> ist derzeit noch ein Rätsel, wie das funktioniert? Eine CPU ist ja nicht> gerade trivial und besteht aus unzähligen Komponenten, tausenden> logischen Grundeinheiten, etc. die ja einzeln getestet werden müssen.
da hätten wir noch ein anderes project:
http://www.mikrocontroller.net/svnbrowser/pibla/00_hw/src/pibla.vhd?view=markup
resp. PiBla
ist ein Nachbau eines 8 bit softcores. Grundlage ist das Blockbild und
er Op-code wie beim Orginal. Eine CPU besteht aus wenigen Blöcken die in
einer Hochsprache einfach zu beschreiben sind:
-programmcounter
-Registerbank
-Speicherinterface
-Arithmetik/Logik-einheit
-Interruptcontroller
-datenpfad
In dem Projekt sind es knapp 1000 Zeilen, wurde in ca 2 Wochen von einer
Einzelperson in der Elternzeit geschrieben. Wenn man gelernt hat wie man
Zähler, Multiplexor und Register hochsprachig beschreibt ist ein kleiner
Risc-Core keine Hexerei.
Um Klassen komplexer ist dagegen eine (FPGA-)CPU mit 6-stufiger
Pipeline, Cache-managment, MMU, FPU und Sprungvorhersage, optimiert auf
100+MHz.
MfG,
Michael W. schrieb:> 1) Was empfiehlst du für den Anfang nun konkret? Sollte ich mir die> Quartus II Web Version runterladen?
Richtig. Wenn du meinst, mit Altera glücklich werden zu können, dann ist
das der nächste Schritt...
Christoph schrieb:> Geh und kauf dir dieses Buch.>> Da wirst du Schritt für Schritt an all diese Themen herangeführt.>> Der Abschluss bildet dann Kapitel 8: Synthesefähiger VHDL-Entwurf eines> Mikroprozessors (Seite 193 bis 226)
Setzt dieses buch voraus, dass man VHDL schon kann oder wird man an VHDL
herangeführt? ich bin ja blutiger Anfänger ;-)
Falls letzteres zutrifft, würde ich es gleich bestellen.
Michael W. schrieb:> Wie geht das eigentlich? ich baue dann auf VHDL Basis eine ganze CPU?> Kann eine Einzelperson überhaupt das entsprechende know-How haben?
Eine nackte CPU ist doch einfach: die muss ein paar logische
Verknüfungen können, Schieben und rechnen. Und dann braucht man noch
einen Zustandsautomaten, der Befehle aus einem RAM holt, und das wars im
Großen und Ganzen. Das geht in 2 Wochen, wenn man sich vorher
eingerbeitet, schlau gemacht und VHDL gelernt hat.
Und diese Einheit kann man dann in allen möglichen Ecken optimieren und
daruas einen Weltkonzern aufbauen. Dazu braucht man dann mehrere
Mannjahre...
Michael W. schrieb:> Setzt dieses buch voraus, dass man VHDL schon kann oder wird man an VHDL> herangeführt? ich bin ja blutiger Anfänger ;-)
Man lernt den Teil von VHDL, der sich auf einem FPGA umsetzen lässt,
kennen. Zwar mit Fokussierung auf Xilinx-FPGAs, aber die Hersteller
kochen alle mit dem selben Wasser, haben die selben Probleme und recht
ähnliche Lösungen.
Bernd Bruch schrieb:> In dem Projekt sind es knapp 1000 Zeilen, wurde in ca 2 Wochen von einer> Einzelperson in der Elternzeit geschrieben.
OK, das erscheint mir derzeit noch so, als ob ich in 3 Tagen zum Jupiter
fliegen könnte...Aber ich fange mal klein an. Mich fasziniert das Thema
einfach unglaublich...Wenn ich über ein Flipflop nicht hinaus komme, ist
es ja auch OK...
Lothar Miller schrieb:> Michael W. schrieb:>> 1) Was empfiehlst du für den Anfang nun konkret? Sollte ich mir die>> Quartus II Web Version runterladen?> Richtig. Wenn du meinst, mit Altera glücklich werden zu können, dann ist> das der nächste Schritt...
Und Modelsim alleine geht für den Anfang nicht?
> Und Modelsim alleine geht für den Anfang nicht?
Doch, das geht auch, wenn du nur simulieren willst und es nicht auf eine
reale Hardware laden willst
Aber in so eine Entwicklungsumgebung ist alles schön eingebettet und man
muss nur auf´s Knöpfchen drücken.
Aber man kann Modelsim natürlich auch "stand alone" verwenden.
Lothar Miller schrieb:> Eine nackte CPU ist doch einfach: die muss ein paar logische> Verknüfungen können, Schieben und rechnen. Und dann braucht man noch> einen Zustandsautomaten, der Befehle aus einem RAM holt, und das wars im> Großen und Ganzen.
Das heißt, das Verhalten der CPU wird abstrakt formuliert, ohne sich
drum zu kümmern, welche konkreten Gatter ich benötige, um eine ALU zu
realisieren? Ich formuliere unter VHDL z.B. eine "Addition", ohne wissen
zu müssen, wie diese Addition konkret umgesetzt wird? So wie ich ein
Programm in C schreibe, ohne zu wissen, was da im einzelnen (auf
Maschinenebene) genau passiert? So wie mir ein C-Compiler
Maschinenbefehle auf unterster Ebene erzeugt, erzeugt mir die VHDL eine
Umsetzung auf "Logikgatter", die ich dann im Detail nicht (unbedingt)
kennen muss? Falls das so ist, wäre das ja ur-geil und ich habe bisher
wirklich was versäumt ;-)
Na ja, ich finde eher langbeinig Blodinen "ur-geil", aber jedem das
Seine ;-)
Aber im Prinzip hast du recht.. du kannst eine Addition C = A+B
hinschreiben und die Synthese baut dir daraus einen Addierer, ohne, dass
du dich um jedes "Gatter" kümmern musst.
Ein Verständnis dessen, was da aber von der Synthese gebaut wird, ist
dennoch sehr hilfreich und eigentlich für ein gutes Design unerlässlich.
Spannend wirds dann etwa ab der Division... ;-)
> ohne wissen zu müssen, wie diese Addition konkret umgesetzt wird?
Dieses Wissen ist in der Toolchain und im FPGA implementiert und jeweils
durch etliche Patente abgesichert. Du kannst aber einfach mal das
Users-Manual "deines" FPGAs durchlesen, wie das nun konkret umgesetzt
wird. Dabei wrist du dann bei den Addierern z.B. eine Carry-Chain
finden, die genau den eigentlich kritischen Zählerüberlauf in die
nächte(n) Stelle(n) optimal abhandeln kann...
Vielen Dank einmal...
ich habe mir das Buch bestellt und kann es kaum erwarten, darin zu
lesen;-)
Sorry für meine laienhaften Fragen.
Verglichen mit diesem Thema ist mein ARM Controller ja eine
Aufwärmübung...
Lothar Miller schrieb:> Dieses Wissen ist in der Toolchain und im FPGA implementiert und jeweils> durch etliche Patente abgesichert. Du kannst aber einfach mal das> Users-Manual "deines" FPGAs durchlesen, wie das nun konkret umgesetzt> wird.
Das heißt auf Simulatorebene gibt es noch keine Umsetzung in konkrete
atomare Bausteine, sondern es läuft der VHDL-Code quasi "interpretativ"?
Für eine konkrete HW gibt es dann eine Art "Compiler", der mir aus einer
Addition eine reale Logikschaltung macht. Richtig ? Falls ja, geht mir
langsam ein Licht auf...
> Das heißt auf Simulatorebene gibt es noch keine Umsetzung in konkrete> atomare Bausteine, sondern es läuft der VHDL-Code quasi "interpretativ"?> Für eine konkrete HW gibt es dann eine Art "Compiler", der mir aus einer> Addition eine reale Logikschaltung macht. Richtig ? Falls ja, geht mir> langsam ein Licht auf...
So kann man es sagen.
Die Vorstellung, dass eine CPU "per se" komplex ist, taucht dann auf,
wenn man als alter 74er-Digital-Hase versucht, nur in den verfügbaren
74er Bausteinen zu denken... Das war zu den Anfangszeiten der FPGAs noch
recht weit verbreitet und es gab für die damals vorherrschende
Schaltplaneingabe auch Bibliotheken mit 74er-Äquivalenten, aber es hift
gerade mit HDLs nicht viel. Der Witz an den FPGAs und HDLs ist ja, dass
man eigentlich alles genauso haben bzw. beschreiben kann, wie man es
tatsächlich braucht.
Ich muss mir keinen 24Bit-Zähler mit Preload aus 3*'590 (oder 6*'90)
zusammenbauen und wenn ich dann noch einen Reset bei einem bestimmen
Zählerstand brauche, mit 3*'688 einen Vergleicher dranzuhängen. Werden
dann 25Bit gebraucht, geht die Überlegerei los, ob man das Bit noch
diskret dazufrickelt oder zwei Bausteine nur 1/8 ausnutzt. Von der
Versuchung, asynchrone Schweinereien zur Logikvereinfachung zu machen,
mal ganz abgesehen.
Michael W. schrieb:> OK, das erscheint mir derzeit noch so, als ob ich in 3 Tagen zum Jupiter> fliegen könnte...
Nach 3 Tagen kommst Du theoretisch bis nach England, erleidest aber
schon über Oldenburg einen Absturz, weil Du was übersehen hast.
>Ist diese Vorgehensweise heute passe, bzw. lernt man>eigentlich noch auf dieser untersten Ebene?
Auf welcher Ebene soll man sonst lernen, um HW entwickeln zu können?
Um mir das mit PLDs, FPGAs & Co anzusehen, würde ich zuerst mal die betr
Datasheets ansehen (Reihenfolge einfach...komplex) (oder Buch (kann auch
älteres sein) dazu kaufen), um zu sehen was da wie wo wieoft drin ist.
(Nichts anderes, als das was du bereits kennst, nur manches halt
besonders (gut oder schlecht) verschaltet).
Denn nur die wirkliche Hardware dort drinnen kommt zum funktionieren,
die Eingabeart (Schematics oder Sprache oder wie man es nennen will) ist
nur Mittel zum Zweck.
Die Evolution (Revolution?) dieser Bausteine kann man nur anhand der
eingebauten Hardware-Elementen beurteilen, nicht anhand irgend einer
Sprache.
Hallo,
Ich möchte gern die ursprüngliche Frage nach der aktuellen Lage bei den
"Neulingen" beantworten.
Ich bin momentan an der HTL und kann sagen, wir lernen sehrwohl die
unterste Schicht kennen.
Die ersten beiden Jahre bestehen hauptsächlich aus ohmschem Gesetz und
analogem Schaltungsdesign. Wir lernen boolsche Algebra, KV Diagramme,
4bit-Vollmultiplizierer aus Logikgattern aufzubauen, Flip-Flops, Counter
/ Uhren mit ne555, designen, routen und löten von Platinen, etc.
Es ist aber auch zu sagen, dass unser Lehrplan einige Jahre hinter der
Zeit ist ^^. In modernen Designs findet man meiner "Erfahrung" nach, bis
auf den einen oder anderen Filter, kaum noch analoge Schaltungen; Es
gibt heutzutage für fast alles einen IC, der dann auch ganz gern mal
verwendet wird.
In der 3. sind dann Filter und OPVs das große Thema und im 2. Semester
gehts dann erstmals mit µC los (bis vor kurzem eher 8051, jetzt meist
AVR / PIC). Generell werden im Unterricht eher nur die Grundlagen
abgedeckt, wer sich fürs Thema interessiert muss selbstständig lernen
(man wird von manchen Lehrern auch dabei unterstützt :) ). in der 4 und
5. gehts dann um Leitungstheorie, Regelungstechnik, µC, Smith-Diagramme,
Modulation (AM, FM) und ganz intensiv auch noch Netzwerktechnik
(Ethernet, LWL, IP/TCP etc.)
Es sind in der schule einige DE0-nano Boards vorhanden, die werden
jedoch nirgends verwendet, es ist also VHDL/FPGA im Unterricht überhaupt
kein Thema (bis auf eine kurze Abschreibübung zum Thema GAL(auch ein
besonders aktuelles Bauteil xD )).
VHDL wird aber meiner Meinung nach in der Industrie sehr stark verwendet
(sowohl FPGA als auch ASIC) und ist durchaus eine zeitgerechte Technik,
die ein Digitaltechniker(-experte) beherrschen sollte.
Noch etwas: in der FH Hagenberg zB hat man fast ausschließlich mit FPGAs
zu tun, wohingegen sich Studienrichtungen wie Elektrotechnik oder
Telematik (Graz) bis zum Master fast ausschließlich auf analoges
Schaltungsdesign konzentrieren.
Ich vertrete auch die Meinung, dass man sich mit der Hardware die man
programmiert auskennen sollte, eine Ausbildung auf dem unterstem Level
der Technik ist also unerlässlich (und auch notwendig als Grundlage um
die komplexeren Dinge zu verstehen).
hoffe ich konnte etwas licht ins dunkel bringen :)
MfG,
Alex
Alex Trinker schrieb:> och etwas: in der FH Hagenberg zB hat man fast ausschließlich mit FPGAs> zu tun,
hm, verwunderlich, in AT werden immer noch stark gute Leute auf dem
Gebiet gesucht. Oft greift man auf Deutsche zurück, weil im Raum keine
zu beschaffen sind. Gilt vor allem für den Raum Graz. Wenn stimmt, was
Du sagst, dass es in Graz weniger FPGA zu lernen gibt, wäre das eine
Erklärung.
Leute, merkt ihr eigentlich noch, wie sehr ihr euch verstiegen habt?
Also, mein rat an den TO wäre so etwas dies:
1. fang an mir einem einfachen und eher simplen CPLD. Das hat den
Vorteil, daß du deine erdachte Logik so richtig in den Chip per JTAG
brennen kannst und hinterher (bis zum nächsten Löschen) der Chip genau
so funktioniert, wie du ihn programmiert hast. Strom marsch und Chip
geht.
Fange nicht mit FPGA's an, denn die muß man in den meisten Fällen
jedesmal mit ihrem Programm versorgen. Das geht zwar mit
Konfigurations-Flashroms, die zum jeweiligen Chip passen, aber es ist
eine Verkomplizierung auf den Anfang, die nicht sein muß. Sowas kannst
du dir für später aufheben.
2. such dir eine einfache, aber nützliche Anwendung für dein Vorhaben,
damit VHDL zu lernen. Bloß die üblichen Tralala-Projekte wie LED blinken
lassen und so sind nicht wirklich lehrreich, weil vorgekaut. Alles -
auch das Lernen einer bislang fremden Programmiersprache - braucht einen
realen Zweck, sonst ist es mit Verlaub Wichserei.
Mein Vorschlag: ein simpler Frequenzzähler, also Frequenz ein, 7 Segment
raus, erstmal 4 Stellen sonst wird es viel zu kompliziert für den
blutigen Anfang. Wenn du mit uC umgehen kannst, dann einen Vorteiler
für nen Frequenzzähler, Stellenanzahl ist dann eher Sache des uC.
Und nochwas grundsätzliches: Alles, was man besser mit nem uC machen
kann, sollte man auch mit nem uC machen. Programmierbare Logik hat genau
dort und nur dort ihren Sinn, wo man das Ganze eben nicht genausogut mit
nem uC erledigen kann.
3. Bastle dir ein einfaches Programmierinterface. Bei Xilinx geht ein
sogen. Parallelkabel #3 immer noch gut und bei Altera nennt sich das
ganze Byteblaster oder so. Da sist alles kein Aufwand und ist
spottbillig, erfordert aber einen Parallelport. Sowas gibt es immer
noch, z.B. als Steckkarte be Pollin, und zumindest die ISE von Xilinx
kann damit immer noch gut umgehen.
4. Bastle dir zu deinem Projekt die passende Leiterplatte, schließlich
soll das Ganze ja am Ende zu was nütze sein, sonst ist schnell der Spaß
zu ende.
5. überlege dir die Schaltung, die du im Chip realisieren willst, also
die Funktionalität, die es bringen soll. Du mußt das nicht in einzelnen
Gattern aufmalen (geht aber..) - aber du mußt vorher wissen, was du
eigentlich mit VHDL zusammenstricken willst.
W.S.
Zum Punkt 1: Lattice als "Erfinder" der CPLDs verkaufen ihre MachXO
FPGAs als CPLD Nachfolger. Wenn ich diesen Abgesang höre, würde ich
empfehlen, gleich mit FPGAs anzufangen...
Danke für die Unterstützung...
Ich habe mir mal das Buch gekauft und bin im Schmökern.
Irgendwann in nächster Zeit (...) kaufe ich mit sicher ein Board.
Wieso ist von einem FPGA Board abzuraten? Weil es flüchtig ist? Ich habe
schon an das DE0 nano Board gedacht - ist das für den Angang schlecht?
Ich bin aber sowieso noch nicht so weit, und ich will erst mal
simulieren und die Toolchain beherrschen lernen.
Abzuraten ist nicht ganz richtig, so ein Board ist schon gut.
Es ist halt so, dass CPLDs auf Flash basieren und FPGA auf SRAM. D.h.
FPGAs sind nach dem Einschalten erst mal dumm und müssen irgendwie
programmiert werden. Beim Entwickeln geht das schnell per JTAG,
ansonsten muss das FPGA aus einem externen Flash "gebootet" werden oder
eine CPU schreibt das rein. Das ist zwar für Bastelei und Updates
praktisch, aber es verkompliziert das Design etwas, wenn man ein echtes
"Produkt" haben will. Der ganze Umstand fällt bei CPLDs weg.
Ich persönlich würde trotzdem zu einem FPGA-Board raten. CPLDs sind
schon arg beschränkt.
Michael W. schrieb:> Wieso ist von einem FPGA Board abzuraten? Weil es flüchtig ist?
Das Board selber ist wie erwähnt nicht "flüchtig", weil es ja einen
Config-Speicher aufgelötet hat. Es ist aber durchaus so, dass das
einzelne FPGA eher flüchtig ist und einen externen Boot-Flash brauchen,
wobei Xilinx mit dem S3 AN oder Lattice mit dem MachXO durchaus auch
All-Inclusive Service anbieten.
Und auch bei CPLDs ist es schon seit geraumer Zeit so, dass die beim
Anlegen einer Spannung ebenfalls geladen werden. Nur eben massiv
parallel, sodass sie praktisch "sofort" da sind...
Das FPGA lädt sich aber im Normalfall seine Konfiguration aber selber
(Kann man durch die Pegel an ein paar Pins einstellen). Bei den fertigen
Boards muß man sich darum keine Gedanken machen.
Nachdem ich mir das Buch "VHDL-Synthese" besorgt habe, baue ich nun
einige der Beispiele unter Quartus II nach, und schaue was dabei
rauskommt.
Für die folgende Entity ist mir nicht (ganz) klar, wie das Ergebnis zu
interpretieren ist:
1
entitySRG_PARis
2
generic(WIDTH:natural:=4;
3
SHW:natural:=2);
4
port(CLK,LOAD,R_L:inbit;
5
DIN:inbit_vector(WIDTH-1downto0);
6
YOUT:outbit_vector(WIDTH-1downto0));
7
8
endSRG_PAR;
9
10
architectureSHIFT_R_LofSRG_PARis
11
signalYINT:bit_vector(WIDTH-1downto0);
12
signalTEMP:bit_vector(SHW-1downto0);
13
begin
14
TEMP<=(others=>'0');
15
SYN_SHIFT:process(CLK)
16
begin
17
ifCLK='1'andCLK'eventthen
18
ifLOAD='1'thenYINT<=DIN;
19
elsifR_L='0'then
20
YINT<=YINT(WIDTH-1-SHWdownto0)&TEMP;
21
else
22
YINT<=TEMP&YINT(WIDTH-1downtoSHW);
23
endif;
24
endif;
25
endprocessSYN_SHIFT;
26
YOUT<=YINT;
27
endSHIFT_R_L
Die Fragen:
a)
Der RTL Viewer spuckt den Schaltplan aus, wie im Anhang. Was bedeutet
"2'h0--" am linken MUX ? Wo sehe ich, wie die Beschaltung des MUX
konkret aussieht? Im Bild ist das nur auf Bus-Ebene.
b)
Wenn YINT(3..0) die vier D-FFs sind, was bedeutet dann die Bezeichnung
YINT ~ (3..0)? Ich meine die tiefere Bedeutung des Zeichens "~".
Danke, Michael
Michael W. schrieb:> Der RTL Viewer spuckt den Schaltplan aus, wie im Anhang. Was bedeutet> "2'h0--" am linken MUX ?
TEMP ist bei Dir "00". An dem Mux liegen die beiden Varianten des (links
& rechts) geschobenen Wertes an.
> Ich meine die tiefere Bedeutung des Zeichens "~".
Die Tilde steht in Verilog (und in C) für die bitweise Negation.
Duke