Forum: FPGA, VHDL & Co. Ebedded Probleme MAX10


von Intel (Gast)


Lesenswert?

Möchte ein JTAGUART hello world mit dem NIOS auf nem MAX10 machen. 
Aktuell 2 Probleme:

1. beim Platform designer muss ich beim onchip_memory "initialize memory 
content" deaktivieren!?! (ansonsten läuft der buildprozess nicht durch) 
Nun meine Frage: Was hat das für auswirkungen? Wird der Nios code 
nachwievor mit dem bitfile runtergeladen?

2. Im eclipse läuft das simple hello world (putchar) beim builden durch.
Das normale hello world (nutzt printf) jedoch nicht mit dem Error bei: 
ALTERA_AVALON_JTAG_UART_INIT ( JTAG_UART_0, jtag_uart_0);

von Steffen (Gast)


Lesenswert?

Bitte lesen! Steht beides in der Doku ...

von Intel (Gast)


Lesenswert?

Steffen schrieb:
> Bitte lesen! Steht beides in der Doku ...

Wo? Link?
Nun dein Beitrag ist unspezifisch da 1000e Seiten Doku bestehend sind. 
Eine Antwort wäre ein grösserer Beitrag...

von Markus F. (mfro)


Lesenswert?

Tatsächlich steht das da. Wenn Du mit einem MAX10 umgehen willst, wäre 
es schon hilfreich, wenn Du die Doku lesen würdest. Das kann dir niemand 
abnehmen.

Aber schau' dir mal unter Device Options die Auswahlmöglichkeiten mit 
"with Memory Initialization" an.

von Intel (Gast)


Lesenswert?

Markus F. schrieb:
> Tatsächlich steht das da. Wenn Du mit einem MAX10 umgehen willst,
> wäre
> es schon hilfreich, wenn Du die Doku lesen würdest. Das kann dir niemand
> abnehmen.
>
> Aber schau' dir mal unter Device Options die Auswahlmöglichkeiten mit
> "with Memory Initialization" an.

Nun ok, das FPGA kompliziert wird mit dem musste ich rechnen. Aber dass 
nicht mal das Intel Demoprojekt Hello World auf anhin läuft ist schon 
fraglich. Dann Doku suchen für Hello World?

BTW: Zuerst habe ich Quartus 19.1 installiert. Dieser funktioniert nicht 
mal. Nach der Installation lässt sich eclipse nicht starten!?!.

18.1 läuft zumindest aber ja, die beiden Fragen bestehen, und bitte 
zumindest ein Verweis auf das richtige pdf geben, damit ich die doku 
lesen kann um das Intel Hello World zum laufen zu bringen.

von Steffen (Gast)


Lesenswert?

Sorry, aber zu dem Thema gibt es tausende klicki-klacki Beschreibungen 
im Netz. Wie wäre es wenn du mal in die Doku zu deinem board schaust. 
Wenn du schon einen Verweis auf die richtigen Dokumente und pdf's 
forderst, wie wäre
es wenn du erstmal verkündest welches Board du überhaupt nutzt?

Welche Demo-Projekte funktionieren nicht??

Was soll an Quartus 19.1/18.1 nicht funktionieren?? Natürlich 
funktioniert das ...

von Intel (Gast)


Lesenswert?

Markus F. schrieb:
> Aber schau' dir mal unter Device Options die Auswahlmöglichkeiten mit
> "with Memory Initialization" an.

Ok: da wären Enable non-default init file sowie enable partial reconfig 
init mode

Ansonsten habe ich gesucht, der Init vorgang ist mir nachwievor unklar. 
Der Nios code wird (auch ohne initialize memory content hacken gesetz) 
beim Startup vom MAX10 Flash in das On-Chip Memory (brams) geladen und 
dann, wenn die Konfiguration des Max abgeschlossen ist, startet der Nios 
direkt vom On-Chip memory?

Steffen schrieb:
> Sorry, aber zu dem Thema gibt es tausende klicki-klacki
> Beschreibungen
> im Netz. Wie wäre es wenn du mal in die Doku zu deinem board schaust.
> Wenn du schon einen Verweis auf die richtigen Dokumente und pdf's
> forderst, wie wäre
> es wenn du erstmal verkündest welches Board du überhaupt nutzt?

EK-10M08E144

> Welche Demo-Projekte funktionieren nicht??

Nun hello world, gmeacht nach 
https://www.youtube.com/watch?v=1a_cD6FBROA
(Den CLK eingang natürlich aufs board angepasst.)

> Was soll an Quartus 19.1/18.1 nicht funktionieren?? Natürlich
> funktioniert das ...

Wenn ich auf ein frisches Win7 System 19.1 installiere und NIOS II 
Software build tools for Eclipse auswähle kommt nichts.

18.1 funktioniert.

von FPGAzumSpass (Gast)


Lesenswert?

Prüf mal was für einen Max10 du hast.

Es gibt welche, bei denen kann der Blockram nicht initilisiert werden. 
Warscheinlich ist das Config-Flash im Baustein zu klein dafür.

Das sieht bei dir sehr danach aus.

Zu deinem Punkt 1:
das geht ganz sicher nicht. Irgendwo muss der Nios2 Code herkommen und 
wenn das Onchip Ram leer ist geht das nicht.

Warscheinlich kann man den hinterher per JTAG runterladen und ggf hast 
du auch ein externes Ram?

Ich arbeite jedoch nicht oft mit dem NIOS2/Exclipse, deswegen kann ich 
dir da konkret nicht weiter helfen.

von Intel (Gast)


Lesenswert?

FPGAzumSpass schrieb:
> Zu deinem Punkt 1:
> das geht ganz sicher nicht. Irgendwo muss der Nios2 Code herkommen und
> wenn das Onchip Ram leer ist geht das nicht.

Danke. Genau diese Info habe ich gesucht. Nun verstehe dann das feature 
"initialize memory content" deaktivieren zu können nicht. Ohne 
initialisiertes mem (program) macht der ganze nios keinen Sinn.

FPGAzumSpass schrieb:
> Warscheinlich kann man den hinterher per JTAG runterladen und ggf hast
> du auch ein externes Ram?

Der MAX10 hat mein Aufsehen erregt, dass er keine externe Beschaltung 
braucht (der grosse vorteil), und sowohl SW als auch logik in einem Chip 
macht. Nun habe die FPGA welt vor ca. 10Jahren verlassen, weil ich mich 
über die damals bescheuerten Xilinx EDA Tools aufgeregt habe.

Nun der wiedereinstieg mit Altera/Intel ist aktuell nicht so gelungen. 
ca. 7h investiert -> nicht mal Hello World läuft. Quartus 19.1 läuft 
auch nicht. Naja insgesammt noch schlimmer als meine erinnerung an den 
Microblaze vor 10 Jahren...

von FPGAzumSpass (Gast)


Lesenswert?

Allgemein sind 7 Stunden wirklich nicht viel.

Du machst ja auch nicht viel im FPGA, sondern vor allem Software mit 
NIOS2.

Ein reines FPGA Hello-World (z.b. Blinklicht) ist in der Zeit machbar.

Den Nios irgendwie mal laufen zu sehen kann man mit Beispielen auch 
schaffen, aber wenn Unwägbarkeiten dazukommen, die sonst halt kaum 
jemand hat, weil fast alle FPGAs das Blockram einfach initialisieren 
können...dann kann es halt knifflig werden.


zu Quartus:
19.1 habe ich noch nicht probiert, kann es sein das es auf Win7 nicht 
mehr läuft?

von Delta (Gast)


Lesenswert?

Hallo
Zu Frage 1:
...(ansonsten läuft der buildprozess nicht durch) ...
warum läuft der Build Prozess nicht durch? Evtl. Weil er die HEX files 
nicht findet? Was ist die Fehlermeldung?
Die NIOS firmware kann, wie schon erwähnt, später per JTAG aus dem 
Eclipse heruntergeladen werden.
Zu Frage 2:
Du musst im QSYS noch den JTAG Uart Core einfügen.
Zu Quartus:
Ich verwende 16.1.2 auf Win7

von mh (Gast)


Lesenswert?

Intel schrieb:
> Wenn ich auf ein frisches Win7 System 19.1 installiere und NIOS II
> Software build tools for Eclipse auswähle kommt nichts.

Direkt unter dem Download Link steht fast unübersehbar: "Nios II EDS on 
Windows requires Ubuntu 18.04 LTS on Windows Subsystem for Linux (WSL), 
which requires a manual installation." - WSL gibt es bei Win7 IMHO 
nicht.
Dazu nochmal in den Release Notes: "Support for Microsoft Windows 7 is 
removed"

Wenn man mit FPGAs spielen will, kommt man nicht umhin, sich zumindest 
einen Überblick über die Doku zu schaffen und dann gezielt die 
relevanten Teile zu lesen.
Klar ist es unmöglich die gesamte Doku zu lesen und zu verstehen, aber 
ganz ohne geht nunmal auch nicht. Das mindeste ist, dass man wissen muss 
wo man nachschauen kann.

von Intel (Gast)


Lesenswert?

So nun läuft hello world und ebenfalls PIO.

Was ich nachwivor nicht verstehe:
Wie und wann wird mein SW build in das SOF/POF miteingebuildet. Und wie 
steht dies im zusammenhang mit "initialize memory content". Anscheinend 
habe ich es einmal geschafft die Sowftware ins pof miteinzukompilieren. 
Nun kann ich dies nicht reproduzieren.
Aktuell muss ich immer von eclipse die SW auf Hardware target startet.

Wie funktioniert die .hex einbindung genau ins pof/sof? Muss jedesmal im 
Quartus neu assembled werden? Oder kann die POF/SOF generation direkt 
aus eclipse gemacht werden?

von A. G. (grtu)


Lesenswert?

Vor genau diesen Problemen stand ich auch schonmal. In dem Dokument 
AN730 (bei Google findet man so eine PDF) steht alles gut beschrieben. 
Ich habe bei mir 'Option 2' umgesetzt. Dafür habe ich 'Initialize flash 
content' deaktiviert. Eclipse kann dann das Flash image als hex 
generieren, und mit dem 'Convert programming file' tool wird es nach 
Änderung zusammen mit der sof in eine pof gepackt, die dann auf den FPGA 
gespielt werden kann. Wenn du 'Initialize flash content' aktivierst, 
musst du jedes mal wenn sich die NIOS-Software ändert die komplette 
Hardware neu kompilieren.

Wenn du in Eclipse die Software debugst, wird sie soweit ich weiß direkt 
in den Ram gespielt. Daher ist sie nach einem Neustart des FPGAs nicht 
mehr vorhanden.

: Bearbeitet durch User
von Intel (Gast)


Lesenswert?

A. G. schrieb:
> Vor genau diesen Problemen stand ich auch schonmal. In dem
> Dokument
> AN730 (bei Google findet man so eine PDF) steht alles gut beschrieben.
> Ich habe bei mir 'Option 2' umgesetzt. Dafür habe ich 'Initialize flash
> content' deaktiviert. Eclipse kann dann das Flash image als hex
> generieren, und mit dem 'Convert programming file' tool wird es nach
> Änderung zusammen mit der sof in eine pof gepackt, die dann auf den FPGA
> gespielt werden kann. Wenn du 'Initialize flash content' aktivierst,
> musst du jedes mal wenn sich die NIOS-Software ändert die komplette
> Hardware neu kompilieren.
>
> Wenn du in Eclipse die Software debugst, wird sie soweit ich weiß direkt
> in den Ram gespielt. Daher ist sie nach einem Neustart des FPGAs nicht
> mehr vorhanden.

Danke! Genau nach den habe ich gesucht gehabt!

Nun das funktioniert jetzt. Nächste Auffälligkeit: Ich habe dem NIOS 
einen PLL vorgesetzt. Diesen kann ich beliebig hochschrauben (z.b. 
250MHZ) im Systembuilder die frequenz entsprechend eintragen. Den Fitter 
scheints nicht zu jucken. Der NIOS läuft dann einfach nicht mehr (ohne 
warnung oder error des fitters oder der Timing analyse)!?!

von Intel (Gast)


Lesenswert?

Hat jemand ein gutes bsp. eines Nios2 UART command line parsers?

von Duke Scarring (Gast)


Lesenswert?

Intel schrieb:
> Diesen kann ich beliebig hochschrauben (z.b.
> 250MHZ) im Systembuilder die frequenz entsprechend eintragen. Den Fitter
> scheints nicht zu jucken
Bei mir steht folgendes im Constraintfile:
1
derive_pll_clocks -create_base_clocks
Wenn dann noch der Eingangstakt richtig spezifiziert ist, sollten die 
Constraints automatisch erzeugt werden.

Duke

von Duke Scarring (Gast)


Lesenswert?

Intel schrieb:
> Hat jemand ein gutes bsp. eines Nios2 UART command line parsers?
Das ist ja kein NIOS-spezifisches Problem.

Hier hat Karl-Heinz Buchegger vor 10 Jahren skizziert, wie man das 
umsetzten kann:
Beitrag "Re: Befehlsinterpreter auf MC und diverser anderer Kram"

Duke

von Intel (Gast)


Lesenswert?

Duke Scarring schrieb:
> derive_pll_clocks -create_base_clocks

Das funktioniert danke. Nun im timing analyzer habe ich:
inst3|altpll_component|auto_generated|pll1|clk[0] nun mit der korrekten 
frequenz stehen.

Wenn ich diese nun unrealistisch hoch schraube, läuft die sysntese ohne 
fehler durch. Das einzige was auffällt ist, dass dann überall negativer 
slack ist. Design wird natürlich nicht laufen.

Anyway wieso läuft der fitter durch. (sollte er nicht das timing 
beachten?)

von FPGAzumSpass (Gast)


Lesenswert?

Ich weiß nicht ob es eine Möglichkeit gibt bei nicht erfülltem Timing 
einen critical error zu werfen, aber normalerweise läuft der Fitter 
immer erstmal durch.

Die Timing Analyse hinterher sagt dir ob der Fitter/Bitstream alle 
constraints erfüllt hat.

Ist nicht ungewöhnlich, das man ein Design ohne erfüllte constraints 
trotzdem mal antesten will, von daher schon gut das der Fitter 
durchläuft.

Wäre nervig, wenn man nach mehreren zig Minuten oder gar Stunden bei 
großen Designs wegen ein paar ps negativen slack nicht testen könnte.

von Markus F. (mfro)


Lesenswert?

Intel schrieb:
> Anyway wieso läuft der fitter durch. (sollte er nicht das timing
> beachten?)

Das macht er, wenn er's kann.
D.h. wenn Du ihm die Möglichkeit dazu schaffst.

Entweder Du gehst mit dem Takt knapp unter den Wert, den der Timing 
Analyzer als Fmax angibt oder Du baust dein Design (im Wesentlichen 
durch "Verkürzen" der Kombinatorischen Anteile) so um, dass es deine 
Taktvorgaben erfüllt.

von Intel (Gast)


Lesenswert?

Ok danke für die Antworten. Für die Pros sicher sinnvoll, für anfänger 
wie mich eine Stolperfalle, welche ich nur zufällig entdeckt habe....

Laut Hersteller sollte der kleine Nios mit ca 160 und der grosse Nios 
gar mit 170MHZ auf einem Max 10 laufen. Fmax ist bei mir ca 130MHZ mit 
Timing Optimization Advisor fmax(genügt allemal für meine Anwendug). 
Dennoch möchte ich intressenshalber gerne wissen woher dieser 
Unterschied kommt. Somal mein MAX10 neben dem Nios eigentlich praktisch 
keine eigene Logik hat.

Auch mit der Optimierung fittet der Fitter in unterhalb 1min?!. Wieso so 
schnell? Kann man ihm irgendwie sonnst sagen dass er sich besser 
anstrengen soll und nicht einfach erst bestes routing nehmen soll?

von Markus F. (mfro)


Lesenswert?

Intel schrieb:
> Auch mit der Optimierung fittet der Fitter in unterhalb 1min?!. Wieso so
> schnell? Kann man ihm irgendwie sonnst sagen dass er sich besser
> anstrengen soll und nicht einfach erst bestes routing nehmen soll?

Man kann.

Üblicherweise gibst Du den Takt vor und der Fitter hört auf, sobald er 
eine Lösung gefunden hat, die deine Anforderung erfüllt (bzw. er gibt 
sofort auf, falls diese Anforderung nicht erfüllbar ist).

Einstellungen zur Fitter-Optimierung gibt es zu viele, um sie hier alle 
durchzukauen - da wirst Du um Handbuchlesen nicht herumkommen.

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.