Forum: FPGA, VHDL & Co. Evaluationsboard zum drucken


von Patrick S. (pepper)


Lesenswert?

Hej Leute,

Ich möchte mir ein Evaluationsboard mit einem FPGA holen. Leider kenne 
ich mich nicht gut genug aus, um zu Wissen welches für mein Problem in 
Frage kommt.
Mein Ziel ist es, mit Hilfe eines FPGAs eine Bilddatei aus einem 
Speicher zu lesen. Diese Bilddatei ist eine veränderte TIFF-Struktur, 
was heißen soll ich hab in der TIFF-Datei direkt Steuersignale zum 
drucken untergebracht. Das Format ist soweit fertig konzipiert.
Nun zu meiner Frage, welches Entwicklungsboard würde denn in Frage 
kommen? Vor allem im Hinblick auf den Speicher. Einige von den Xilinx 
Evaluationboards haben DDR-Speicher, aber dieser soll schwer zu 
programmieren sein, also müsste ja ein SRAM sinnvoller sein?  Ich bin 
auch für Ideen offen, falls ich noch einen Denkfehler in meinem Konzept 
habe und es vlt leichter zu realisierende Möglichkeiten gibt.

Viele Grüße
Patrick

von Duke Scarring (Gast)


Lesenswert?

Bilddatei... Speicher... Drucken...
Warum nimmst Du nicht einen Raspi?

Duke

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Duke Scarring schrieb:
> Bilddatei... Speicher... Drucken...
> Warum nimmst Du nicht einen Raspi?
>
> Duke

Weil der mind. 30s zum Booten braucht?

von Patrick S. (pepper)


Lesenswert?

Darüber hab ich auch schon einmal nachgedacht.
Mein Ziel ist es aber mir den FPGA näher zu bringen, da ich diesen auch 
für weitere Projekte nutzen möchte. Und mit einem gut fordernden 
Einstiegsprojekt, hab ich auch die Motivation dahinter zu steigen.

von Patrick S. (pepper)


Lesenswert?

Frank E. schrieb:
> Duke Scarring schrieb:
>> Bilddatei... Speicher... Drucken...
>> Warum nimmst Du nicht einen Raspi?
>>
>> Duke
>
> Weil der mind. 30s zum Booten braucht?

Stimmt und das auch noch ;-)

von Ordner (Gast)


Lesenswert?

Frank E. schrieb:
> Duke Scarring schrieb:
>> Bilddatei... Speicher... Drucken...
>> Warum nimmst Du nicht einen Raspi?
>>
>> Duke
>
> Weil der mind. 30s zum Booten braucht?

braucht der nicht, wenn man:
-arch Linux verwendet
-auf ne Gui verzichtet
-kernel mit statisch verlinkten II-Treiber verwendet

10 s boot time sind locker machbar

von Patrick S. (pepper)


Lesenswert?

Ich geh mal noch ein bisschen ins Detail:
Also der FPGA soll noch ein paar Eingangssignale vom Drucker bekommen 
und außerdem verschiedene Druckparameter sowie die Bild-Daten auf einen 
Bus legen.
Also in großem Ganzen brauch ich Schätzungsweise 24 I/O Ports (noch über 
konzipiert, da erste Überlegungen) + zusätzlich Ports zum Anschluss an 
den Speicher.
gibt es da ein Evaluationsboard welches ausreicht und sehr 
empfehlenswert ist, weil es gewisse Vorteile hat, guten Support usw. ?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Du weisst schon, dass man die Bilddaten noch in ein passendes Protkoll 
bzw. Dateiformat verpacken muss, wie z.B. Postscript, ESC/P oder PCL ... 
?

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


Lesenswert?

Patrick S. schrieb:
> falls ich noch einen Denkfehler in meinem Konzept habe und es vlt
> leichter zu realisierende Möglichkeiten gibt.
Nimm einen uC. Da gibt es hübsche potente Burschen die jeden FPGA 
Prozessor in die Tasche stecken für mickriges Geld.

Du willst alles in ein FPGA packen? Das ganze Processing? Wie willst du 
die FPGA-Funktionen beschreiben? Mit VHDL? Das braucht ein paar 
Mannjahre.
Oder willst du einen Prozessor aufs FPGA basteln und den dann in C 
programmieren? Dann wirst du schon beim Kauf der Toolchain arm...

Ein Vorschlag: zeichne einfach mal ein Blockschaltbild von deinem Gerät 
und schreib dazu, was was ist und was was machen soll. Dann hat man was 
zu diskutieren...

von S. R. (svenska)


Lesenswert?

Lothar M. schrieb:
> Oder willst du einen Prozessor aufs FPGA basteln und den dann in C
> programmieren? Dann wirst du schon beim Kauf der Toolchain arm...

Och, es gibt da ein paar nette Cores, z.B. PicoRV32 
(https://github.com/cliffordwolf/picorv32), seit gcc 7.1 ist der 
RISC-V-Support auch Upstream.

von ui (Gast)


Lesenswert?

Genau. Gute Idee... Packen wir uns nen µC in nen FPGA und machen dann 
alles in SW...
Nimm für das einen Raspberry Pi!
Kauf dir trotzdem nen FPGA und fang ganz einfach an
- Blinky
- UART Core (RX/TX)
- ...

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


Lesenswert?

ui schrieb:
> Kauf dir trotzdem nen FPGA und fang ganz einfach an
> - Blinky
> - UART Core (RX/TX)
Aber nicht für das Projekt"Drucker", sondern um mal grob zu erfassen, 
was ein FPGA ist und kann. Dann sieht nämlich der Ansatz für den 
"Drucker" ganz anders aus...

Patrick S. schrieb:
> Und mit einem gut fordernden Einstiegsprojekt, hab ich auch die
> Motivation dahinter zu steigen.
Du unterschätzt den Aufwand für FPGAs. Und zudem überschätzt du die 
Leistungsfähigkeit eines Systems, wie du es willst, wenn es auf einem 
FPGA basiert.

Oder andersrum: ich mache gerne in FPGAs. Aber für die Aufgabenstellung 
hier würde ich einen uC nehmen. Allein schon wegen der Schnittstellen, 
die dabei FPGA alle selber implementieren oder kaufen  (oder kopieren 
und kapieren) musst.

BTW: du willst schnell rechnen, gleichzeitig aber ein schnarchlangsames 
SRAM anschließen? Das ist sehr ambivalent...

: Bearbeitet durch Moderator
von Patrick S. (pepper)


Angehängte Dateien:

Lesenswert?

In den letzten Tagen, hab ich mich ein wenig mehr mit der Hardware 
beschäftigt und welche Ein/Ausgangssignale ich benötige. Das Bild im 
Anhang enthält jetzt eine ungefähre Vorstellung was da passieren soll.
Zu der Kritik von Lothar, ich bin keineswegs auf einen Speicher 
festgelegt. Das steckt erst mal nur in der Überlegung welchen ich denn 
eigentlich verwenden könnte. Wichtiger als der Speicher, ist aber die 
Ansteuerung der bis zu 24x 9 adrigen Busse, dass hat sich leider jetzt 
erst heraus gestellt wie viele das sind. Ich hatte anfänglich auch an 
einen µC gedacht, jedoch denk ich, dass das mit dem Timing für die 24 
Busse eine hohe Herausforderung wird. Vorschlag vom Chef war an dieser 
Stelle ein FPGA zu verwenden, damit der Bus parallel angesteuert werden 
kann. Würde eine Variante zu realisieren sein mit integriertem Softcore? 
Die 24 Busse müssen jeweils mit einem Bustakt von 104 kHz angesteuert 
werden.
Also ich hatte auf jeden Fall an einen internen Core gedacht.
Ist das Projekt zu realisieren mit zum Beispiel einem Altera Nios II 
Eval Kit? oder weiß jemand von Vornherein, dass das Quatsch ist und kann 
gleichzeitig eine bessere Lösung empfehlen.

Vielen Dank für konstruktive Kritik und Empfehlungen.

von Strubi (Gast)


Lesenswert?

Willst du einen Stoffbahnen- oder Parkettdrucker bauen?
Klingt nach 24 parallel arbeitenden Druckköpfen und einem Ding mit 
harten Echtzeitanforderungen. Dafür dürfte ein FPGA in der Sparte die 
beste Option sein, aber 9*24 ist eine hohe Anzahl I/O.
Einen Soft-core solltest du bei der Komplexität eh einsetzen, aber die 
Probleme liegen wohl eher im Design der Peripherie, die mit dem Rest 
optimal harmoniert. Für das Front-End mit USB-Stick usw. nimmst du 
allerdings besser einen uC von der Stange, das auf dem FPGA zu machen 
ist schwer teuer. So umgehst du auch das Problem mit der RAM-Anbindung.
Mach doch erst mal einen Simulator, um den kommst du sowieso kaum herum. 
Dann kannst du anfangen, dir die passende EvalHW zu suchen.

von Patrick S. (pepper)


Lesenswert?

Strubi schrieb:
> Willst du einen Stoffbahnen- oder Parkettdrucker bauen?
> Klingt nach 24 parallel arbeitenden Druckköpfen und einem Ding mit
> harten Echtzeitanforderungen. Dafür dürfte ein FPGA in der Sparte die
> beste Option sein, aber 9*24 ist eine hohe Anzahl I/O.
> Einen Soft-core solltest du bei der Komplexität eh einsetzen, aber die
> Probleme liegen wohl eher im Design der Peripherie, die mit dem Rest
> optimal harmoniert. Für das Front-End mit USB-Stick usw. nimmst du
> allerdings besser einen uC von der Stange, das auf dem FPGA zu machen
> ist schwer teuer. So umgehst du auch das Problem mit der RAM-Anbindung.
> Mach doch erst mal einen Simulator, um den kommst du sowieso kaum herum.
> Dann kannst du anfangen, dir die passende EvalHW zu suchen.

Das klingt doch mal sehr konstruktiv. Also empfiehlst du einen separaten 
µC für die Verwaltung von Speicher und der Kommunikation mit USB-Stick 
und LAN.
Kannst du mir noch empfehlen, wie ich bei der Simulation voranschreite? 
Also welche Software da empfehlenswert ist?

von Gustl B. (-gb-)


Lesenswert?

Ich werfe mal Zynq in den Raum.

Und Software, naja, die des FPGA Herstellers.

: Bearbeitet durch User
von Strubi (Gast)


Lesenswert?

>
> Das klingt doch mal sehr konstruktiv. Also empfiehlst du einen separaten
> µC für die Verwaltung von Speicher und der Kommunikation mit USB-Stick
> und LAN.

Jau, du musst dich dann nur noch auf das Interface zwischen 
"Lieblings-Coremodul" und FPGA-Steuerung konzentrieren. Manche erledigen 
das dann auch als Einchip-Lösung in einem Zynq, das sollte man sich aber 
jeweils gut überlegen/nochmal durchrechnen.

> Kannst du mir noch empfehlen, wie ich bei der Simulation voranschreite?
> Also welche Software da empfehlenswert ist?

Für ein funktionales Modell setze ich auf Python/MyHDL.

von Strubi (Gast)


Lesenswert?

Jetz doch nochmal nachgefragt: Soll das eine kommerzielle Anwendung sein 
oder von akademischem Interesse?

von Patrick S. (pepper)


Lesenswert?

Strubi schrieb:
> Jetz doch nochmal nachgefragt: Soll das eine kommerzielle Anwendung sein
> oder von akademischem Interesse?

Quasi beides! Ist das wichtig?

von Patrick S. (pepper)


Lesenswert?

Gustl B. schrieb:
> Ich werfe mal Zynq in den Raum.
>
> Und Software, naja, die des FPGA Herstellers.

Über Zynq werde ich mich noch informieren.
Ich schau mir nebenbei noch Quartus Prime an.

von Strubi (Gast)


Lesenswert?

Patrick S. schrieb:
> Strubi schrieb:
>> Jetz doch nochmal nachgefragt: Soll das eine kommerzielle Anwendung sein
>> oder von akademischem Interesse?
>
> Quasi beides! Ist das wichtig?

Naja, bei mir gilt quid pro quo, wer Ideen haben will, muss auch ein 
bisschen erzählen.

von Patrick S. (pepper)


Lesenswert?

Strubi schrieb:
> Patrick S. schrieb:
>> Strubi schrieb:
>>> Jetz doch nochmal nachgefragt: Soll das eine kommerzielle Anwendung sein
>>> oder von akademischem Interesse?
>>
>> Quasi beides! Ist das wichtig?
>
> Naja, bei mir gilt quid pro quo, wer Ideen haben will, muss auch ein
> bisschen erzählen.

Sind ja nur die ersten Schritte.
Es ist ein größeres Uni-Projekt, mit der Aussicht das jmd. auf den Zug 
aufspringt. Will ja erst einmal schauen wie das Ganze realisierbar ist 
und ob es sich lohnt da viel Kraft und Zeit hinein zu investieren.

von Patrick S. (pepper)


Lesenswert?

Ahoi, es ist jetzt eine Weile ins Land gezogen und ich hab das Thema 
weiter vertieft.
Ich hatte mich jetzt erst einmal für eine Raspberry Lösung entschieden 
und kann die Bilder umwandeln und die Busse ansteuern vom Prinzip her.
Hab dazu einige Programmierfortschritte gemacht und es funktioniert so 
weit auch. Jedoch ist der Raspberry mit den Threads und dem Timing 
komplett überfordert.
Um das Timing von den Bussen hinzubekommen, brauch ich jetzt dafür einen 
2ten Controller der das Bus Timing und die Verteilung auf den richtigen 
Port übernimmt. Weswegen ich den Raspberry gut finde, ist weil er einen 
vergleichsweiße großen Speicher hat und ich die ganzen Daten 
(Informationen für die einzelnen Druckköpfe) vorberechnen lassen kann 
und die Daten nur noch auslesen muss. Meine Frage ist jetzt wie kann ich 
vorgehen um an die Daten auf den Raspberry ranzukommen? Meine erste Idee 
war im Takt des Busses nen Interrupt auszulösen und die Daten durch zu 
schleusen. Leider hatt es der Raspberry nicht so genau mit Interrupts 
und er braucht mal länger und mal kürzer, was wahrscheinlich auf die 
neben Tasks zurück zu führen ist.
An der Stelle häng ich jetzt komplett. Wäre es vlt sinnvoll die Daten in 
einen externen Speicher zu speichern? (welchen? min 10 Mb) auf welchen 
der µC direkt zugreifen kann. oder wäre es sinnvoll, ein neues Konzept 
mit einem oder zwei Leistungsfähigen Controllern zu realisieren bei dem 
nichts vorberechnet wird, so dass die Daten direkt vorher berechnet 
werden?

Ich steh gerade auf dem Schlauch. Falls es andere Ideen gibt was ich 
noch versuchen könnte oder was ich vlt übersehen hab, weil es eine 
leichtere Lösung gibt, immer raus damit?!

von Patrick S. (pepper)


Lesenswert?

Ich meine 8Mbyte sollte der Speicher maximal groß sein...scusi

von Martin S. (strubi)


Lesenswert?

Patrick S. schrieb:
> Leider hatt es der Raspberry nicht so genau mit Interrupts
> und er braucht mal länger und mal kürzer, was wahrscheinlich auf die
> neben Tasks zurück zu führen ist.

Das hat schlicht mit der Default-Linux-Architektur zu tun, die ist für 
harte Echtzeit nicht gemacht. Optionen:
- RT Preempt
- Xenomai-Erweiterung (aufwendiger, aber höchste Kontrolle)

Mit Xenomai habe ich hier auf einem System z.B. garantierte Latenzen 
unter 40 us, auch bei Prozess-Volllast. Das auf einem Raspi hinzukriegen 
dürfte aber einiges an Aufwand hermachen, du musst da tief in die 
Treiber und DMA-Modelle deines Chips einsteigen. Da macht der Broadcom 
ne schlechte Nummer.
Würde mir in deinem Fall eher ein FIFO-Interface ranbasteln, was für 
einen Druckdurchlauf die Daten synchron raushaut - möglichst mit 
garantierter Vermeidung eines Underruns, sonst passiert dasselbe wie bei 
einer gebrannten CD :-) Auch da hast du leider bei standard-Linux keine 
Garantie, aber gute Karten unter 10ms Prozessantwort zu bleiben, wenn du 
das System nicht anderweitig belastest und schön mit DMA arbeitest.

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.