Forum: FPGA, VHDL & Co. Wie wird aus einem Cyclone II FPGA eine Nios II CPU?


von Olli Z. (z80freak)


Lesenswert?

Vermutlich fehlen mir hier noch Grundlagen... ich habe ein Board mit 
einem Cyclone II (EP2C8), sowie JTAG-Schnittstelle, einem EPCS4 dran, 
sowie externem Flash und SD-RAM.

Wie wird nun aus dem FPGA eine Nios II CPU?
Indem er die VHDL Anweisungen aus dem Serial-Config-Flash EPCS4 lädt?
Und wie erzeugt man diesen Inhalt? Gibt es dafür fertige Images zum 
Download welche man dann nur in den config flash programmiert?

In dem EPCS4 ist bereits Inhalt, aber vermutlich kann man damit so 
nichts anfangen?

von D00fi (Gast)


Lesenswert?

> fehlen mir hier noch Grundlagen

Besorg dir erstmal mal Quartus.
Dann geht das mit dem NIOS2 fast so wie Brezel backen.

1. mit QSYS eine CPU und die noetigen Komponenten erzeugen
2. mit QSYS das System generieren
3. das System mit Quartus synthetisieren und
4. per JTAG in den FPGA uebertragen
5. BSP (aka Treiber) erzeugen
6. NIOS2/NIOS2-BSP Projekt verwursten

Ist doch einfach, oder?

von C. A. Rotwang (Gast)


Lesenswert?

Du brauchst ein Quartus13. aus Quartus startest du Qsys, damit klickst 
du deinen Prozessor zusammen, dann noch ein paar tools und das ganze 
steckt im FPGA. Ambesten du suchst dir ein passendes Tutorial und hackst 
das duch., aufpassen das du kein altes mit dem SOPC-Builder erwischt. 
Beuer als Quartus von 2013 darf es aber auch nicht sein, weil die kein 
CycII mehr können.

https://static5.arrow.com/pdfs/2013/3/18/4/31/50/153/arw_/manual/bemicro_sdk_embedded_system_hw_lab_qsys_v12_1.pdf

von tja (Gast)


Lesenswert?

Olli Z. schrieb:
> Indem er die VHDL Anweisungen aus dem Serial-Config-Flash EPCS4 lädt?

Zudem solltest du dir die Grundlagen von FPGAs und uC aneignen, damit du 
so halbwegs verstehst, was du so machen willst.

Deine obige Frage kann man nur mit "falsch" beantworten. Ein FPGA führt 
keine Anweisungen aus.

von D00fi (Gast)


Lesenswert?

> Ein FPGA führt keine Anweisungen aus.

Natuerlich kann ein FPGA auch Anweisungen ausfuehren.
Wenn er passend verdrahtet ist...

von C. A. Rotwang (Gast)


Lesenswert?

D00fi schrieb:
>> Ein FPGA führt keine Anweisungen aus.
>
> Natuerlich kann ein FPGA auch Anweisungen ausfuehren.
> Wenn er passend verdrahtet ist...

Aucxh dann wird er nicht wie man aus  den Phanatasterein des TO 
heraushören kann, VHDL-Anweisungen vom Firmware-ROM laden, decodieren 
und Ausführen.

von D00fi (Gast)


Lesenswert?

> Aucxh dann wird er nicht wie man aus  den Phanatasterein des TO
> heraushören kann, VHDL-Anweisungen vom Firmware-ROM laden, decodieren
> und Ausführen.

Ja, schade eigentlich :-).
So ein VHDL-Interpreter im FPGA haette schon was.

von C. A. Rotwang (Gast)


Lesenswert?

D00fi schrieb:
>> Aucxh dann wird er nicht wie man aus  den Phanatasterein des TO
>> heraushören kann, VHDL-Anweisungen vom Firmware-ROM laden, decodieren
>> und Ausführen.
>
> Ja, schade eigentlich :-).
> So ein VHDL-Interpreter im FPGA haette schon was.

Jajaja, was Nerds so cool finden:
https://www.chip.de/video/Die-besten-Wecker-fuer-Nerds-Video_64655726.html
https://www.giga.de/extra/usb/gallery/15-sinnlose-tech-innovationen-die-verwirrung-stiften/
https://www.watson.ch/spass/japan/680451889-19-verrueckte-erfindungen-auf-die-nur-japaner-kommen-konnten

von D00fi (Gast)


Lesenswert?

> Jajaja, was Nerds so cool finden

Ich hab hier einen Casio PB-2000C.
Der kann immerhin C interpretieren.
Inklusive structs, unions und gotos!

Die Links habe ich uebrigens ignoriert.

Aber womoeglich koennte man Hardware auch stackorientiert
beschreiben und ein Forthentwickler baut daraus dann mal
ein FPGA-Forth. Wo die Forthworte als Seiteneffekt quasi
Hardware instanziieren.

Aber die Geheimniskraemerei der FPGA-Macher wird das wohl
nachhalitg hintertreiben.

von Josef G. (bome) (Gast)


Lesenswert?

C. A. Rotwang schrieb:
> Du brauchst ein Quartus13.

13.0 SP1. Und nicht 13.1.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

D00fi schrieb:
>> fehlen mir hier noch Grundlagen
> Besorg dir erstmal mal Quartus.
> Dann geht das mit dem NIOS2 fast so wie Brezel backen.
So mancher angehende Brezelbäcker hat sich trotzdem böse die Finger 
verbrannt, weil er keinerlei Ahnung zu den zum Brezelbacken verwendeten 
Werkzeugen hatte...

Olli Z. schrieb:
> Wie wird nun aus dem FPGA eine Nios II CPU?
Indem das FPGA intern so verdrahtet wird, wie eine Nios II CPU.

> Indem er die VHDL Anweisungen aus dem Serial-Config-Flash EPCS4 lädt?
Dazu lädt sich das FPGA einen Config-Bitstrom aus einem angeschlossenen 
Flash-Speicher. Oder es wird mit einem solchen Bitstrom von aussen (z.B. 
von einem µC) konfiguriert.

> Und wie erzeugt man diesen Inhalt?
Es gibt irgendwo eine Hardwarebeschreibung, die dann mit den üblichen 
Tools der Toolchain über einige Schritte in diesen Bitstrom umgeformt 
werden.

> Gibt es dafür fertige Images zum
> Download welche man dann nur in den config flash programmiert?
Man klickt sich so einen Prozessor zusammen, und der wird dann als 
"Soft-Core" in das eigene HDL-Design eingebunden und zum Bitstrom 
umgeformt.

Du solltest dir also unbedingt die Toolchain und ihre Werkzeuge 
anschauen und verstehen.

von C. A. Rotwang (Gast)


Lesenswert?

Josef G. (bome) schrieb:
> C. A. Rotwang schrieb:
>> Du brauchst ein Quartus13.
>
> 13.0 SP1. Und nicht 13.1.

Ja.
Das ist zwar nicht so alt, aber für heutige intel FPGA genügt die 13 
nicht. Du wirst also in Zukunft mehrerer Versionen nebeneinander pflegen 
müßen, denen man nachsagt, das sie sich u.U. gegenseitig die Pfade 
verbiegen.
Also wenn es nicht unbedingt CycII sein muß, würde ich den CycII in die 
Rente schicken und durch einen moderneren Max10 oder Cyc10LP ersetzen, 
der auch von der neuen kostenfreien Quartus lite unterstützt wird.

https://fpgasoftware.intel.com/devices/
https://fpgasoftware.intel.com/13.0sp1/?edition=web

von D00fi (Gast)


Lesenswert?

> würde ich den CycII in die Rente schicken

Es ist nichts schlechtes am Cyclone II.
Ein aktueller Max10 10M08 hat etwa genauso viele LEs wie der EP2C8.

Von Rente kann also gar keine Rede sein.

Und Quartus 13.0SP1 laeuft recht problemlos unter Win10 x64.

von Moscon (Gast)


Lesenswert?

D00fi schrieb:
>> Ein FPGA führt keine Anweisungen aus.
>
> Natuerlich kann ein FPGA auch Anweisungen ausfuehren.
> Wenn er passend verdrahtet ist...

Das ist wieder die typische Missinterpretation der Funktion von 
Hardware, verknüpft mit schlechter Sprache und unzureichender 
Darstellung.

>Wie wird aus einem Cyclone II FPGA eine Nios II CPU?
Indem man sie reinlädt.

D00fi schrieb:
> Es ist nichts schlechtes am Cyclone II.
Die Frage ist, ob man ihn braucht, oder nicht.

Alte FPGAs sind ja auch noch 5V kompatibel.
Damit baut heute niemand mehr.

Dass die neuen Versionen die alten Chips nicht unterstützen, ist ein 
Witz! Wie soll man aktualisierte Cores in einen Chip bekommen?

Vom Spartan 6 weiß ich, dass manche designer aus neueren Versionen von 
Vivado Netzlisten exportieren, um sie dann in die ISE zu quetschen. 
Offenbar denken Hersteller nicht daran, dass es Firmen gibt, die FPGAs 
genau so nutzen, wie sie gedacht waren, nämlich als im Feld updatebar. 
Viele haben den Spartan 6 in ihren Geräten verbaut und müsssen 
Funktionen nachrüsten, können es aber nicht so einfach, weil sie nicht 
5000 Platinen in Altgeräten ersetzen können, um einen Spartan 7 
einzubauen, zumal der auch nicht alles abdeckt, wie ich lernen musste.

FPGAs verkommen so zu OTP-Chips, die man zur Compilezeit konfiguriert 
und nachher nicht mehr anfassen kann.

von Olli Z. (z80freak)


Lesenswert?

Hallo Lothar, ich hatte die Hoffnung auf einer sinnvollen Antwort nach 
all dem Schwachsinn davor schon aufgegeben. Daher vielen Dank! :-)

Lothar M. schrieb:
>> Wie wird nun aus dem FPGA eine Nios II CPU?
> Indem das FPGA intern so verdrahtet wird, wie eine Nios II CPU.
Also der FPGA "startet", erkennt dann das er sich seine Config vom 
externen Config-Flash ziehen soll, macht das, stellt sich entsprechend 
ein und stellt dann eine Nios II CPU dar, richtig?
Und dann? Fängt die CPU an wie eine Hardware-CPU Anweisungen aus einem 
externen Datenspeicher auszuführen? Und wie greift sie darauf zu?

>> Gibt es dafür fertige Images zum
>> Download welche man dann nur in den config flash programmiert?
> Man klickt sich so einen Prozessor zusammen, und der wird dann als
> "Soft-Core" in das eigene HDL-Design eingebunden und zum Bitstrom
> umgeformt.
Die CPU ist ja, soweit ich verstanden habe nur eines der möglichen 
Komponenten? Da braucht es dann vermutlich auch noch einen 
Memory-Controller, IO-Ports, usw.?

> Du solltest dir also unbedingt die Toolchain und ihre Werkzeuge
> anschauen und verstehen.
Ok. Aber wie gesagt das Thema ist sehr umfangreich und ich fürchte mich 
zu verrennen, also auch hier meine Bitte mit einen Anlaufpunkt zu 
nennen. Welche Toolchain? Wonach soll ich suchen?

von Olli Z. (z80freak)


Lesenswert?

C. A. Rotwang schrieb:
> Also wenn es nicht unbedingt CycII sein muß, würde ich den CycII in die
> Rente schicken und durch einen moderneren Max10 oder Cyc10LP ersetzen,
Doch, es MUSS dieser sein :-)
Ich will auch jetzt nicht anfangen zu überlegen was der aktuell beste 
FPGA etc. ist. Ich will auch keine Entwicklungen damit starten. Ich 
möchte die Funktion und Arbeitsweise verstehen und mich in das 
bestehende System einarbeiten welches ich hier vor mir habe.

von Duke Scarring (Gast)


Lesenswert?

Beim FPGA fängt man nicht mit einem NIOS bzw. einer Soft-CPU an. Das ist 
dann schon die höhere Schule.
Ich empfehle erstmal eine LED zum Blinken zu bringen. Da ist der 
VHDL-Code übersichtlich und man kann die Toolchain bedienen lernen.
Vielleicht hilft es Dir mal bei Youtube zu schauen? Da findet man sehr 
viele FPGA-Videos auf Einstiegsniveau.

DUke

von Olli Z. (z80freak)


Lesenswert?

D00fi schrieb:
> Und Quartus 13.0SP1 laeuft recht problemlos unter Win10 x64.

Kann ich bestätigen. Das hatte ich sogar schonmal installiert. Aber hier 
greife ich auf die Analogie zum Brezen-Backen zurück, ich konnte mit 
diesem Werkzeug bislang nicht viel anfangen außer mich mittels meinem 
Segger J-Link damit verbinden.

von Olli Z. (z80freak)


Lesenswert?

Duke Scarring schrieb:
> Beim FPGA fängt man nicht mit einem NIOS bzw. einer Soft-CPU an. Das ist
> dann schon die höhere Schule.
> Ich empfehle erstmal eine LED zum Blinken zu bringen. Da ist der
> VHDL-Code übersichtlich und man kann die Toolchain bedienen lernen.
> Vielleicht hilft es Dir mal bei Youtube zu schauen? Da findet man sehr
> viele FPGA-Videos auf Einstiegsniveau.

Sehr gern, könntest Du mir was empfehlen? Gleiches Problem wie oben: es 
gibt hunderte davon...

Der Grund diesen Thread zu eröffnen war für mich ja genau die Frage nach 
dem Einstieg. Letztlich habe ich ein gegebenes System, bestehend aus

- Cyclone II FPGA (EP2C8)
- Spannungsversorgung (VCCINT mit 1,2V und VCCIO mit 3,3V)
- Eine 55 MHz Taktquelle
- Einem Farb-LCD Display
- Div. Tasten und Drehencoder sowie LEDs
- Einem SD-Card Interface
- Einem JTAG-Interface
- Ein EPCS4 Config-Flash
- 128MB SDRAM (MT48LC4M32B2)
- 8MB Flash-Memory (S29GL064)

mit dem ich arbeiten möchte.

: Bearbeitet durch User
von Gustav (Gast)


Lesenswert?

Tipp mal im Forumsfeld oben links "Grundlagen" ein. Dann werden alle 
Grundlagen-Threads sichtbar:
https://www.mikrocontroller.net/forum/fpga-vhdl-cpld?filter=grundlagen&x=0&y=0

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Olli Z. schrieb:
> Lothar M. schrieb:
>>> Wie wird nun aus dem FPGA eine Nios II CPU?
>> Indem das FPGA intern so verdrahtet wird, wie eine Nios II CPU.
> Also der FPGA "startet", erkennt dann das er sich seine Config vom
> externen Config-Flash ziehen soll, macht das, stellt sich entsprechend
> ein und stellt dann eine Nios II CPU dar, richtig?
Passt im Grunde. Aber in diesem Zug werden dann ggfs. auch interne 
RAM-Blöcke mit Defaultwerten geladen.

> Und dann?
Dann macht sie das, was das Datenblatt dieser speziellen CPU samt 
kundespezifischer Konfiguration vorgibt. Vermutlich wird der Prozessor 
am Reset-Vektor den erstan Befehl abholen und ihn ausführen.
> Fängt die CPU an wie eine Hardware-CPU Anweisungen aus einem
> externen Datenspeicher auszuführen?
Oder aus einem internen Speicherblock, der zuvor bei der Konfiguration 
mit Daten geladen wurde.
> Und wie greift sie darauf zu?
Wie üblich: über interne und externe Bussysteme.

> Die CPU ist ja, soweit ich verstanden habe nur eines der möglichen
> Komponenten? Da braucht es dann vermutlich auch noch einen
> Memory-Controller
Ja, klar.

> IO-Ports, usw.?
An dieser Stelle fängt deine Arbeit an, denn solche Bauteile musst du 
dann selber an den Prozessor "anbauen". Nicht umsonst ist das im Grunde 
nur eine rudimentärer Prozessor (CPU mit Interrupthandler und 
Businterface), ganz ohne Timer, Capture, I²C, SPI, serielle Schnitte, 
IO-Ports und sonstwas.

> Aber wie gesagt das Thema ist sehr umfangreich
Und die Einarbeit lässt sich auch nicht einfach so auf simple Weise 
"abkürzen". Deshalb empfiehlt sich das ausgiebige Studium (so 1-2 Wochen 
für einen anständigen Überblick) der Informationen, die der Hersteller 
bereitstellt:
https://www.intel.de/content/www/de/de/products/programmable/processor/nios-ii.html

von Olli Z. (z80freak)


Lesenswert?

Naja und wenn man dann so einiges an Komponenten hinzugefügt hat, dann 
wird aus dem FPGA nicht nur eine einfache CPU sondern eher schon wieder 
sowas wie ein Mikrocontroller...

Mir seit die kätzerische Frage gestattet warum man dann nicht gleich 
soetwas nimmt und sich mit dem ganzen Aufwand des FPGA rumplagt? Ist ein 
FPGA denn so viel schneller/besser?

Beitrag #6541072 wurde von einem Moderator gelöscht.
von Dergute W. (derguteweka)


Lesenswert?

Olli Z. schrieb:
> Mir seit die kätzerische Frage gestattet warum man dann nicht gleich
> soetwas nimmt und sich mit dem ganzen Aufwand des FPGA rumplagt? Ist ein
> FPGA denn so viel schneller/besser?

Was hat das mit Katzen zu tun? ;-)
So ein NIOS im FPGA ist teurer oder langsamer als ein externer 
Controller.
Aber man kann halt mehr Faxen damit treiben und es ist kein weiterer 
Chip notwendig.
Du kannst irgendwelche speziellen HW-Beschleuniger reinbauen, eigene 
Befehle dazubasteln; wenn du aus irgendwelchen Gruenden genau 17 SPI 
Transceiver und droelfzehn UARTS haben willst und einen Videocontroller 
fuer ein sehr exotisches Display, kein Problem; mussts halt "nur" 
programmieren - aeh' natuerlich nicht programmieren, sondern 
"beschreiben".

Gruss
WK

von Olli Z. (z80freak)


Lesenswert?

Ok, ich versuche nun ein Tutorial zu finden über das ich eine der an den 
IO-Ports hängenden LEDs zum blinken bekomme um das ganze Toolset mal zu 
testen... werde berichten, bis hierhin erstmal vielen Dank für die 
Unterstützung :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Olli Z. schrieb:
> Mir seit die kätzerische Frage gestattet warum man dann nicht gleich
> soetwas nimmt und sich mit dem ganzen Aufwand des FPGA rumplagt?
Frage ich mich auch... 😉

> kätzerisch
Ketzerei

Dergute W. schrieb:
> So ein NIOS im FPGA ist teurer oder langsamer als ein externer
> Controller.
Ich mache da einfach ein kleines FPGA und setze einen Mainstream-uC 
daneben.
> und es ist kein weiterer Chip notwendig.
Wenn ich den Platinenplatz und den Wartungsaufwand gegenrechne, dann 
verliert der Softcore auch bei romantischer Betrachtung.
Diese ernüchternde Erkenntnis musste ich leider wiederholt gewinnen, 
wenn ich wieder mal so einen hippen Softcore in ein Seriendesign 
einsetzen wollte.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Lothar M. schrieb:
> Wenn ich den Platinenplatz und den Wartungsaufwand gegenrechne, dann
> verliert der Softcore auch bei romantischer Betrachtung.

Ja, da haben sich auch die Zeiten etwas gewandelt. Ich hab' mit NIOS mal 
vor fast 15 Jahren was gemacht, iirc war da noch nix oder ganz wenig mit 
STM32 etc. oder gar FPGAs mit Hardcore-CPU.
Nachdem auf der Platine ja auch nicht grad' der neueste Cyclon werkelt, 
wird die wohl aehnlich alt sein.

Gruss
WK

von D00fi (Gast)


Lesenswert?

In den neueren Quartus-Versionen gibt es ja eine Neuauflage
des NIOS2. Den alten findet man noch als NIOS2-Classic.
Weiss da jemand naeheres? Bei Intel konnte ich so recht nichts
an Infos finden was es damit auf sich hat.

> setze einen Mainstream-uC daneben.

Die FPGA-Boards die mit dem Hintergrund NIOS2 angeboten werden,
sind zumindest immer mit reichlich (SD-)RAM versehen.
Beim "Mainstream-uC" geht es deutlich knapper zu.

von C. A. Rotwang (Gast)


Lesenswert?

D00fi schrieb:
> In den neueren Quartus-Versionen gibt es ja eine Neuauflage
> des NIOS2. Den alten findet man noch als NIOS2-Classic.
> Weiss da jemand naeheres?

Ich hab den Eindruck die haben den SoC-Bus gewechselt resp. angepasst, 
das da auch ein Hardcore-ARM dranpasst. Siehe Avalon: 
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_avalon_spec.pdf

Und es mehrere NIOSe Varianten, nur die langsamste ist(in den altene 
Systemen) kostenlos.

https://www.intel.de/content/www/de/de/products/programmable/processor/nios-ii.html

> Letztlich habe ich ein gegebenes System, bestehend aus ..
dann solltest die auch sources für ein Reference projekt haben. Also die 
mal über die passenden Projektdateien (*.qpf; *.sopcinfo)? in die 
Toolchain laden und dann modifizieren.

>> Vielleicht hilft es Dir mal bei Youtube zu schauen? Da findet man sehr
>> viele FPGA-Videos auf Einstiegsniveau.

>Sehr gern, könntest Du mir was empfehlen? Gleiches Problem wie oben: es
>gibt hunderte davon...

Ich perönlich finde die meisten Videos grausam, ich rate deshalb zu den 
klassischen Turoeials in pdf. Da gibt es von en Boradherstellern und von 
Unis (stichwort Lab) einiges. Oben habe ich eins von BeMicro verlinkt
Beitrag "Re: Wie wird aus einem Cyclone II FPGA eine Nios II CPU?"
Das ich persönlich benutzte, weil hier ein Bemicro board eumlag
Da gibt es auch dieses Tutorial für Q14.0 , das auch auf die 13 passt:
https://www.intel.com/content/dam/altera-www/global/en_US/uploads/5/5e/BeMicroM10_Embedded_System_Lab.pdf

Da mal was von Uni: 
https://www.cl.cam.ac.uk/teaching/1213/P34/exercise-nios/

und wenn mit den richtigen Stichworten sucht findet sich aucu was auf 
Germanisch ;-):

http://docplayer.org/42576171-Soft-core-prozessor-nios-ii-konfiguration-einbettung-und-programmierung.html

von Fitzebutze (Gast)


Lesenswert?

Dergute W. schrieb:
> So ein NIOS im FPGA ist teurer oder langsamer als ein externer
> Controller.

Das ist pauschal nicht korrekt.
Allerdings ist die NIOS-Architektur nicht wirklich das gelbe vom Ei und 
nicht praktikabel mit eigenen inline-Opcodes (Beschleuniger) 
erweiterbar.
Ansonsten gibt es - nichtsdestotrotz - aus der Altera-Welt eine Menge 
Beispiele für Video-Verarbeitungs-Pipelines, wo ein Nios schlicht für 
die Konfiguration der Register nötig ist. Ob man sich anstatt einem 
portablen System die Hinterlassenschaften von Qsys/SOPC antun will, ist 
eine andere Frage.

von S. R. (svenska)


Lesenswert?

Olli Z. schrieb:
> Wie wird nun aus dem FPGA eine Nios II CPU?

Eine CPU ist eigentlich nicht mehr als ein komplexer Automat (Finite 
State Machine, FSM). Also ungefähr das gleiche, wie wenn du vier LEDs 
als Lauflicht blinken lassen willst, nur eben größer. :-)

> Indem er die VHDL Anweisungen aus dem Serial-Config-Flash EPCS4 lädt?

Nein, dein VHDL oder Verilog wird vorher ziemlich heftig zermanscht und 
in eine Netzliste mit Komponenten umgewandelt, die dann wieder auf das 
FPGA gemappt werden. Das Ergebnis davon wird dann in einen Bitstream 
umgewandelt, der in den FPGA geladen wird - das ergibt dann die 
"Verschaltung" im FPGA.

Das ist jetzt einer Software-Umgebung nicht unähnlich... eine CPU führt 
ja auch keinen C-Code aus, sondern der wird erst durch Compiler, 
Assembler und Linker geschoben. Dann wird vielleicht noch eine Hexdatei 
oder ein Speicherabzug draus gebastelt, und den musst du dann noch 
irgendwie in den Adressraum schießen (Betriebssystem, Bootloader, 
EPROM), bis daraus was passiert.

> Und wie erzeugt man diesen Inhalt? Gibt es dafür fertige Images zum
> Download welche man dann nur in den config flash programmiert?

Es gibt fertige Inhalte, aber die sind eigentlich immer abhängig vom 
gesamten Board. Also eher "nein".

Olli Z. schrieb:
> Also der FPGA "startet", erkennt dann das er sich seine Config vom
> externen Config-Flash ziehen soll, macht das, stellt sich entsprechend
> ein und stellt dann eine Nios II CPU dar, richtig?

Wenn der Chip so verdrahtet ist, dann vermutlich ja. Ich kenne mich mit 
den Intel-Dingern nicht aus, aber es gibt meist verschiedene 
Bootmöglichkeiten.

FPGAs mit Hardcore (also einem fest eingebauten ARM) können zum Beispiel 
ohne Konfiguration den ARM mit Linux hochfahren und die Logik wird dann 
erst von einem Linux-Tool programmiert (oder vom Bootloader, der die 
SD-Karte anspricht).

Für die Entwicklung nehme ich den Programmer und prügel den Bitstream 
direkt in den Chip rein (per JTAG). Das hat den Vorteil, dass ich keinen 
Flash beschreiben muss, überlebt aber dafür keinen Stromausfall.

> Und dann? Fängt die CPU an wie eine Hardware-CPU Anweisungen aus einem
> externen Datenspeicher auszuführen? Und wie greift sie darauf zu?

Wie gesagt, eine CPU ist ein Automat - und ein Automat hat einen 
Startzustand und tut in diesem Zustand etwas. In der Regel dürfte das 
ein "Reset"-Zustand sein, der nach ein paar Takten den ersten Befehl 
lädt.

> Die CPU ist ja, soweit ich verstanden habe nur eines der möglichen
> Komponenten?

Ja. Eine CPU lebt "nur" in einem oder mehreren Adressräumen.
Was dahinter liegt, ist der CPU egal; das muss nichtmal Speicher sein.

> Da braucht es dann vermutlich auch noch einen
> Memory-Controller, IO-Ports, usw.?

"Im Prinzip schon."

Du kannst zum Beispiel den im FPGA integrierten Block-RAM (BRAM) 
benutzen, der ist sehr einfach ansprechbar. Ich habe mal einen PicoRV32 
mit BRAM benutzt, da war die Speicherlogik ("Memory-Controller") sehr 
überschaubar. Mit anderen Worten: Ein paar Verbindungen, mehr nicht.

Wenn du mit I/O-Ports sowas wie GPIOs meinst, dann: Ja, kann man machen, 
muss man aber nicht, ist nur kompliziert. Ich schreibe dazu unten noch 
was.

> Ok. Aber wie gesagt das Thema ist sehr umfangreich und ich fürchte mich
> zu verrennen, also auch hier meine Bitte mit einen Anlaufpunkt zu
> nennen. Welche Toolchain? Wonach soll ich suchen?

Von jedem Hersteller gibt es ein Programm, mit dem man die FPGAs 
benutzt. Dazu gehört der Teil, der VHDL/Verilog verarbeitet, daraus den 
Bitstream erzeugt, den Programmer anspricht und das Ergebnis in den FPGA 
pustet.

Von Intel/Altera dürfte das Quartus sein. Wie gesagt, ich hab mit den 
Dingern nie gearbeitet und bin definitiv nicht der große Experte. :-)

Olli Z. schrieb:
> Der Grund diesen Thread zu eröffnen war für mich ja genau die Frage nach
> dem Einstieg. Letztlich habe ich ein gegebenes System, bestehend aus

Fange mal damit an, das "Constraints-File" zu verstehen.

Bei Xilinx-FPGAs ist das eine Textdatei, in der für jeden 
programmierbaren Pin vom FPGA steht, was das für ein Pin ist (3.3V, 
1.8V, Input, Output, Taktausgang, Takteingang mit xx MHz, ...), ob der 
Teil einer Gruppe ist und wie er im Top-Level heißen soll. So einen 
Mechanismus muss es für deinen FPGA auch geben.

Da kannst du dir zum Beispiel definieren, dass Pin 28 ein 3.3V-Output 
ist und "led0" heißt. Wie das genau aussieht, hängt vom Schaltplan 
deines Boards ab. Zu meinem Board gab es eine ZIP-Datei mit Schaltplänen 
und Beispielen dazu.

Im VHDL-Code gibt es dann eine Top-Level-Entity, die alle Definitionen 
vom Constraints-File enthält.

Bei meinem Xilinx Spartan 6 und Xilinx ISE sieht das dann im 
Constraints-File so aus:
1
    # Pin T8 ist ein CLOCK-Pin mit 50 MHz Eingang
2
    # der Pin soll CLK_50M heißen
3
    NET "CLK_50M" LOC = T8 | TNM_NET = sys_clk_pin;
4
    TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz;
5
6
    # Pins P4, N5, P5 und M6 sind 3.3V-Pins
7
    # alle vier Pins zusammen heißen "led"
8
    NET led<0>  LOC =  P4 | IOSTANDARD = "LVCMOS33";
9
    NET led<1>  LOC =  N5 | IOSTANDARD = "LVCMOS33";
10
    NET led<2>  LOC =  P5 | IOSTANDARD = "LVCMOS33";
11
    NET led<3>  LOC =  M6 | IOSTANDARD = "LVCMOS33";

Und im VHDL-Code (der Top-Entity) tauchen die dann so auf:
1
    entity test is
2
    port (
3
        CLK_50M : in  std_logic;
4
        led     : out std_logic_vector(3 downto 0);
5
    );
6
    end test;

Und damit kann ich im eigentlichen VHDL dann sowas machen:
1
architecture IMPL of test is
2
begin
3
    led <= "1010";
4
end architecture;

Das zaubert mit ein "an/aus/an/aus"-Muster auf die vier LEDs, die mein 
Board hat.

Nachtrag: Ich hatte oben versprochen, noch was zu den GPIOs zu 
schreiben. Also hier:

Du musst die GPIOs nicht für die CPU konfigurierbar machen. In meinem 
VHDL steht zum Beispiel drin, dass ein Schreibzugriff auf eine bestimmte 
Adresse das Datenwort auf die LEDs legt. Dann kann die CPU auch ohne 
GPIOs die LEDs blinken lassen.
Ein Schreibzugriff auf bestimmte andere Adressen geht in den Speicher, 
und dann habe ich bestimmte Adressen für meine UART-Komponente.

Bei Mikrocontrollern nennt man das "Register". ;-)

Ende vom Nachtrag.

Und natürlich funktioniert das alles nur, wenn ich meinem Tool sowohl 
das Constraints-File als auch die VHDL-Datei zum Fraß vorwerfe und 
gleichzeitig mitteile, welches FPGA auf dem Board drauf ist, welchen 
Programmer ich verwende - und den dann auch so konfiguriere, dass er das 
FPGA direkt mit dem Bitstream beschreibt und nicht das Config-Flash.

Irgendwie so ähnlich muss es mit Quartus auch funktionieren.

: Bearbeitet durch User
von Vasco H. (vhorn)


Lesenswert?

Meine Kenntnisse zu diesem Themenkomplex sind zwar sehr begrenzt (also 
ca. 0.1% ;-)), aber ich finde mit den bisherigen hochwertigen Antworten 
und mit der hervorragenden Beschreibung von Svenska sollte ein Einstieg 
auch für den absoluten Beginner möglich sein. Bislang ist mir keine 
vergleichbar verständliche Kurzübersicht über den FPGA-Workflow 
untergekommen.
Daumen hoch!

Beitrag #6542672 wurde von einem Moderator gelöscht.
von C. A. Rotwang (Gast)


Lesenswert?

D00fi schrieb:
>> würde ich den CycII in die Rente schicken
>
> Es ist nichts schlechtes am Cyclone II.

Doch einiges. Das entscheidende, die seit 8 Jahren eingestellte
Softwareunterstützung und die Neustrukturierung der Toolchain seit der
INtel-Übernahme. Diese Neuübernahme hat dazu geführt, das viele Doks
schwer zu finden sind und in den Suchergebnissen nach typischen
Problemlösungen die für alte Environmentsg anz nach Hinten in der
Antwortliste gerutscht sind.

> Ein aktueller Max10 10M08 hat etwa genauso viele LEs wie der EP2C8.
Das war es aber auch schon mit den Gemeinsamkeiten. Ein Max ist
Non-volatil, bringt einen ADC mit, unterstütz einfacher DDR und andere
zeitgenössische Speichertechnologien... . Und preislich liegt der CycII
inzwischen auch deutlich über dem MAX10.

Da mal die Familienübersicht zum selber schlau machen:
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/cyc2/cyc2_cii51001.pdf

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/max-10/m10_overview.pdf

> Von Rente kann also gar keine Rede sein.
Doch bei Chips ist nach 17 Jahren schon der Zeitpunkt erreicht, über
eine Abwechslung zumindest nachzudenken, erst recht, wenn die Software
seit 8 Jahren nicht mehr Gepflegt wird.

> Und Quartus 13.0SP1 laeuft recht problemlos unter Win10 x64.

Alte Dosprogramme in der DOS-Box auch ... was aber bei Neubesetzungen
von Entwicklungsstellen keine Rolle spielt. Da geht es vornehmlich um
den Umgang mit aktuellen und zukünftigen Tools. Und Einarbeitung in die
Tools ist im FPGA-Bereich essentieller als bspw. im Programmierbereich.

von D00fi (Gast)


Lesenswert?

> Ein Max ist
> Non-volatil, bringt einen ADC mit, unterstütz einfacher DDR und andere
> zeitgenössische Speichertechnologien...

Jedesmal, wenn ich im Chipplanner das sehe, aergere ich mich
ueber den "verplemperten" Platz, wo mir 20-30 % mehr LEs
lieber gewesen waeren.

> Das war es aber auch schon mit den Gemeinsamkeiten.

Ja eben ja nicht. Auch wenn nun M9K-RAM statt M4K-RAM verwendet
wird, der grundsaetzliche Aufbau hat sich doch kaum geaendert.
Ausser das das periphere "Bling-Bling" fehlt.
Den MAX10 kann man einsetzen, muss man aber nicht.

> erst recht, wenn die Software seit 8 Jahren nicht mehr Gepflegt wird.

Fuer aktuelles Material laeuft hier uebrigens Quartus Pro 20.3(3).

Aber wenn jemand einsteigen will, und ein einigermassen komplettes
Cyclone 2 Board hat, wird er damit nichts wesentliches vermissen,
was auch in aktuellen Produkten dieser Reihe zu finden ist.
Internes RAM und Multiplizierer.

Mit einem Spartan 2 waere er z.B. deutlich schlechter dran.
Und so gewaltig sind die Unterschiede in der Software dann auch nicht.

> Alte Dosprogramme in der DOS-Box auch

Zeig mir das mal bei einem 64 bit System.

> was aber bei Neubesetzungen
> von Entwicklungsstellen keine Rolle spielt

Du verbreitest den selben Dummschwatz, wie manche HR-Abteilung.
Das nur Kenntnisse mit der "allerneuesten" Version akzeptabel waeren.
Das reicht bei speziellen Problemen und Aufgaben naemlich auch nicht.
Spaetestens wenn bei einem Projekt/Bewerbung die Fachabteilung
mit dabei ist, zaehlt solides Grundlagenwissen allemal mehr.

von C. A. Rotwang (Gast)


Angehängte Dateien:

Lesenswert?

D00fi schrieb:

> Mit einem Spartan 2 waere er z.B. deutlich schlechter dran.
> Und so gewaltig sind die Unterschiede in der Software dann auch nicht.
Doch für Anfänger sind so das, insbesonders für Anfänger die wohl nicht 
mal Reference-Sourcen/Tutorials für ihr Board vorweisen können. Es 
genügt, das sich die Benennung eines Menüs geändert hat und der Rookie 
sucht sich einen Wolf wenn er aus dem 'falschen Tutorial' abtippt.

>
>> Alte Dosprogramme in der DOS-Box auch
>
> Zeig mir das mal bei einem 64 bit System.

Siehe Anhang - aber das ist nicht der Punkt.
>
>> was aber bei Neubesetzungen
>> von Entwicklungsstellen keine Rolle spielt
>
> Du verbreitest den selben Dummschwatz, wie manche HR-Abteilung.
> Das nur Kenntnisse mit der "allerneuesten" Version akzeptabel waeren.

Natürlich entscheidet man sich, wenn man eine Wahl zwischen einem Rookie 
mit CycII und Quartus 13V0 SP1 Grundkenntnissen und einem weiteren 
Rookie mit Erfahrung in MAX10/Cyc10 und Quartus lite hat, für letzteren 
weil  Projekte eben mit neuen Familien gestartet werden.
Für 'Altlasten' wählt man dann lieber einen Altingenieur, der zu einer 
X-Jahre alten Toolchain auch die X Jahre an Erfahrung mit dieser 
Toolchain mitbringt.

Und nein, es ist kein Dummschwatz darauf hinzuweisen, das man mit einen 
CycII die Einarbeitung in die Toolchain zweimal oder mindestens 1.5Mal 
macht.

Und startet man die Einarbeitung von Anfang an mit einem aktuellen und 
verbreiteten Systen wie eben MAX10 macht man es potentiellen Helfern 
einfach, weil die auf aktuelle threads und projekte wie:
Beitrag "MAX10/DE10-Lite board Erfahrung/Meinungsaustausch gesucht ?"
Beitrag "Ebedded Probleme MAX10"
Beitrag "Internal Oscillator des MAX10 von Altera (Anfänger)"
https://wiki.trenz-electronic.de/display/PD/TEI0001+Resources
...
verweisen können und nicht erst im Archiv wühlen müßen:
Beitrag "Re: Wie wird aus einem Cyclone II FPGA eine Nios II CPU?"

Naja, nicht mein Problem, ich bin raus.

von D00fi (Gast)


Lesenswert?

Deiner Logik weiter folgend:

> Natürlich entscheidet man sich,

fuer keinen von beiden. Weil ein Quartus Pro eben eine andere
Hausnummer als ein Quartus Lite oder eine Webedition ist.

> ich bin raus

Ditto.

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
Noch kein Account? Hier anmelden.