Hallo,
ich habe noch nie mit FPGA's gearbeitet und kenne mich dadurch auch mit
den Performancemerkmalen nicht besonders gut aus.
Deshalb komme ich mit folgender Frage zu euch:
Ist mein Projekt lösbar:
Ich habe 32 Eingänge und 32 Ausgänge und brauche zusätzlich eine
SPI-Schnittstelle um diverse Parameter zu konfigurieren, auf die ich
nachher noch erläutere:
*** -----------
*** 32 | | 32
*** --/--------| |-------/--
*** Inputs | | Outputs
*** | |
*** | |
*** | |-------- config CS
*** | |-------- config SPI CLK
*** -----------| |-------- config SPI MOSI
*** conf/work | |-------- config SPI MISO
*** | |
*** -----------
Jeder Eingang ist mit einem Ausgang durch folgende Logik verbunden:
Wenn ein Input eine High-Flanke auslöst(das Signal liegt 10µs an) das
soll am zugehörigen Ausgang folgende Sequenz ablaufen:
Ein Erstimpuls wird am Ausgang geschaltet, danach folge eine zyklische
Low-Zeit und eine zyklische High-Zeit (wie PWM, nur hat der 1. Highpegel
eine andere Zeit). Nach einer gewissen Gesamtzeit soll der Ausgang
wieder abgeschaltet werden. Wird zwischendurch ein neuer Input-Pegel
erkannt wird dieser ignoriert.
Die zu konfigurierenden Parameter sind die einzelnen Zeiten, die sich am
besten in 1µs - sonst bis max. 10µs auflösen lassen sollen. Die
Gesamtdauer wird ca. 100µs-256ms sein, jeder Eingang muss parallel
abgearbeitet werden können.
Da ich auf meinem Microcontroller diese Sequenz nur in 118 µs bei 88 MHz
auflösen kann, ist es sicher eindeutig diefalsche Variante, hier eine
CPU zu verwenden.
*** *)Ich denke, ein FPGA könnte das besser und auch schnell genug.
*** STIMMT DAS?
***
*** *)Wenn ja, wie schwer ist das in VHDL zu entwickeln?
*** Kann das ein FPGA/VHDL-Newbie in einem rel. kurzen Zeitrahmen
*** erlernen?
vielen Dank,
Alex
> am besten in 1µs
Schön langsam also ;-)
> jeder Eingang muss parallel abgearbeitet werden können.
Genau das macht ein FPGA.
> Ich denke, ein FPGA könnte das besser und auch schnell genug.> STIMMT DAS?
Ja.
> Wenn ja, wie schwer ist das in VHDL zu entwickeln?> Kann das ein FPGA/VHDL-Newbie in einem rel. kurzen Zeitrahmen erlernen?
Was heißt hier kurz oder lang?
Du mußt am Anfang bei FPGAs eine andere Denkweise erlernen. Nicht mehr
in sequentiellen Abläufen, sondern eher in Logik und Flipflops. Dann
kannst du deine 2 Aufgaben bearbeiten:
1. die Zähler/Pulserzeuger und 2. das Config-Interface.
Ich würde da mal locker 3 Monate (Fulltime) ansetzen, bis das fehlerfrei
läuft, wenn du vorher noch nie was mit programmierbarer Logik gemacht
hast (und ich schätze gerne etwas knapp ;-)
Es ist klar, dass ich (und andere auch) das in einem kleinen Bruchteil
dieser Zeit könnte, aber die 2 Monate und 27 Tage zum Kennenlernen des
FPGAs habe ich vorher schon investiert (tatsächlich waren es etwas mehr
und ich lerne immer noch ;-)
> *** *)Ich denke, ein FPGA könnte das besser und auch schnell genug.> *** STIMMT DAS?> ***> *** *)Wenn ja, wie schwer ist das in VHDL zu entwickeln?> *** Kann das ein FPGA/VHDL-Newbie in einem rel. kurzen Zeitrahmen> *** erlernen?
Ja das stimmt, sowas habe ich schon gebaut, halt nur für 4 Kanäle.
Die Hardware ist relativ einfach aber wegen den großen Zeiten sehr Flip
Flop lastig.
Achte vorallem darauf die inputs zu syncronisieren.
Auch das SPI-Interface ist ziemlich schnell als State machine
verwirklicht, es gibt aber auch jede menge IP cores zum downloaden.
Ich habe keine Ahnung wie gut du in VHDL bist oder wie deine Lernkurve
ist, deswegen will ich hier nicht beurteilen wie schnell du das umsetzen
kannst.
Wenn es dir hilft, kann ich dir ja mal einen Blockplan für einen Kanal
schicken.
@guy:
ich habs schon am Microcontroller: 88,6 MHz, ein Durchlauf braucht ca.
118µs. Das wurde Quick und Dirty programmiert, lässt sich sicher noch
die eine oder andere µSekunde rausholen ;-).
Oder kennst du einen Microcontroller mit 32 timern und 32 ext.
interrupts? Dann ginge das natürlich viel schneller!
@Patrick:
*** Wenn es dir hilft, kann ich dir ja mal einen Blockplan für einen
Kanal
*** schicken.
Ja, wäre sehr nett.
trick42 (et) gmail.com
Wegen der Lernkurve: ich bin seit 10 jahren eingefleischter
C-Programmierer und tu mir da sehr leicht.
VHDL kann ich gar nicht abschätzen, aber ich denke ich bin lernfähig -
das muss man ja als Entwickler eh immer sein - gerade in der
Steuerungsbranche!
Danke,
Alex
Alex Tricktronic wrote:
> Wegen der Lernkurve: ich bin seit 10 jahren eingefleischter> C-Programmierer und tu mir da sehr leicht.
Und genau da sitzt am Anfang das Problem.
FPGAs und C-Programmieren sind zwei völlig unterschiedliche Welten.
Das ist die andere Denkweise, die Lothar angesprochen hat. Beim FPGA
läuft alles parallel, gleichzeitigt (und synchron, hoffentlich).
Im Gegensatz zum uC, wo alles sequenziell abläuft ist das ein völlig
anderer Ansatz.
Falls du dich für FPGAs interessierst wäre das aber wohl ein gutes
Projekt, um dich mal damit zu befassen, falls du die Zeit (und den
Geldgeber) dazu hast.
> Wegen der Lernkurve: ich bin seit 10 jahren eingefleischter> C-Programmierer und tu mir da sehr leicht.
Ja, dann hast du auch die C-Denkweise verinnerlicht.
Ich habe auch 10 Jahre C programmiert (und tu das heute noch).
Dann habe ich mit FPGAs begonnen und lerne seit 7 Jahren ;-)
Ich habe das ernst gemeint mit den 3 Monaten.
Natürlich wirst du einen Prototypen deines Designs schon früher am
laufen haben, dabei aber die klassischen Anfängerfehler (mit asynchronen
Übergängen und wirren Zurücksetzen der FFs) machen, die dann solche
sporadischen 1 mal pro Tag auftretenden Fehler ergeben. Und diese Fehler
zu finden, zu beheben und daraus zu lernen, das dauert.
"Und diese Fehler zu finden, zu beheben und daraus zu lernen, das
dauert."
Oder es kostet gar keine Zeit, wenn man korrekt designed hat und eine
ordentliche Verifikation möglichen Fälle vorgenommen hat. Leider wird da
in den Ausbildungen an FH und Uni immer noch kaum etwas wertbares
gemacht.
> Oder es kostet gar keine Zeit, wenn man korrekt designed hat und eine> ordentliche Verifikation möglichen Fälle vorgenommen hat.
Ja, aber das korrekte Designen muß ja auch erst mal gelernt werden.
Und eine ordentliche Testbench schreibt sich auch nicht von allein.
@ Alex
Mein Tipp: tricks das noch einmal mit Software im uC hin. Ein uC mit
88MHz sollte die Bearbeitung von 32 Zählerregistern schneller
hinbekommen als in 120us.
Und mach dich parallel mal mit der Toolchain zur FPGA-Entwicklung
bekannt. Ein gutes EVAL-Board, brauchbare Literatur und dann gehts los.
Hey, das schaffe ich sogar mit einem 8bit Pic, würde für die Aufgabe
aber ein 32bit Prozessor nehmen, und der Pic ist langsam.
Das Zauberwort heißt, wenn kein Interrupt on change,
x0^x1 = pin-change, x0 ist aktuelle, x1 ist vorheriger Portstatus.
(x0^x1)&~x1 = pin-change, nur steigende Flanke
(x0^x1)& x1 = pin-change, nur fallende Flanke
sowie für die Timer, die Verwendung von vertical counters oder ein SW
counter sowie Xor der timings, je nach Aufgabenstellung, was schneller
ist.