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.
Und das soll sich nicht auf einem µController lösen lassen?
Danke für die schnelle und gute Antwort. genau das wollte ich wissen! Alex
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.