Hallo, ich werde in Bälde die Firma wechseln und mich beruflich ein wenig verändern vom Intensiv-FPGA Programmieren in VHDL in Richtung Messtechnik. Nach drei Jahren Arbeit an dem aktuellen Projekt kommt mir das Design, das ich da habe, schon ziemlich groß vor aber es fehlt mir der Vergleich mit anderen. Daher würde ich gerne mal von anderen hören, wie groß ihre Designs sind. Daran knüpft sich auch die Frage, wie Leute ihre Monsterdesigns unter Kontrolle halten, ich bin da im letzten Jahr schon schwer am kämpfen gewesen. Klarerweise sind hier eher Leute im professionellen Umfeld angesprochen, privat schreibt wohl kaum wer ein Projekt mit einigen zehntausend Zeilen Code. Aber jetzt zu den Zahlen für meinen wichtigsten FPGA (die andere sind deutlich kleiner): Codeumfang ca 50k Zeilen ohne Testbenches oder generierter Code wobei ca die Hälfte ich geschrieben habe und die Hälfte von einem Zulieferer kam, der ein Framework Design gemacht hat. Implementiert wird das Ding in einem Stratix III, hier die Fitter Resource Ausgaben der letzten Synthese: +----------------------------------------------------------------------- ----+ ; Fitter Summary ; +-------------------------------+--------------------------------------- ----+ ; Fitter Status ; Successful - Thu Dec 29 17:47:22 2011 ; ; Quartus II Version ; 11.0 Build 157 04/27/2011 SJ Full Version ; ; Revision Name ; XXXXXX ; ; Top-level Entity Name ; XXXXXX ; ; Family ; Stratix III ; ; Device ; EP3SL110F1152C3 ; ; Timing Models ; Final ; ; Logic utilization ; 69 % ; ; Combinational ALUTs ; 36,394 / 86,000 ( 42 % ) ; ; Memory ALUTs ; 553 / 43,000 ( 1 % ) ; ; Dedicated logic registers ; 38,508 / 86,000 ( 45 % ) ; ; Total registers ; 39945 ; ; Total pins ; 653 / 744 ( 88 % ) ; ; Total virtual pins ; 0 ; ; Total block memory bits ; 2,323,720 / 4,303,872 ( 54 % ) ; ; DSP block 18-bit elements ; 24 / 288 ( 8 % ) ; ; Total PLLs ; 5 / 8 ( 63 % ) ; ; Total DLLs ; 2 / 4 ( 50 % ) ; +-------------------------------+--------------------------------------- ----+ Wie behalte ich noch den Überblick? Konstanten, Components, Interfaces zwischen Komponenten als Records definieren und jeweils in eigenen Packages. Standard-Interfaces verwenden (Idealerweise würde auch in meinem Design Avalon-Busse verwenden und nicht nur in den Altera-generierten Teilen). Alle State Machine States haben symbolische Namen. Aber wie gesagt, ich war da schon schwer am Kämpfen in den letzten Monaten. lg Matthias P.S.: Danke übrigens an alle, die mir in diesen Jahren in dem Forum geholfen haben, es war immer wieder sehr lehrreich, was ich hier gelesen habe.
Das ist eine relativ ... merkwürdige ... Frage. Ohne zu wissen, was dein Design macht, kann man es doch unmöglich mit irgendeinem anderen vergleichen ... Ich hab eine Webapplication gebaut, die hat 60k Zeilen ... Was soll jemand mit der Information anfangen?
Fetz schrieb: > Das ist eine relativ ... merkwürdige ... Frage. Deshalb gibts auch kein Reaktion auf diese Frage. Ich kenne z.B. eine RS232 Implementation, die gute 300 Zeilen und 4 Module lang und breit ist. Die macht genau das selbe wie meine, die dafür in einer Entity mit gut 60 Zeilen Code unterkommt... Das gibt mir ein wenig zu denken: > Total PLLs 5 / 8 ( 63 % ) > Total DLLs 2 / 4 ( 50 % ) Wofür brauchst du so viele Takte?
Die meisten großen Designs zerfallen doch in x malige Instanziierungen gleicher kleinerer Teile. Ich hab hier ein Spartan 6 LX150 Design das ist zu 70% voll was BlockRAM, FlipFlops, DSP-Module und LUTs angeht. Ist aber trotzdem sehr übersichtlich, weil da drin 12 mal die gleiche Logik ist. Man kann mit wenigen Zeilen einen FPGA voll krachen. Daher ist doch so ein Vergleich eher sinnlos.
Christian R. schrieb: > Man kann mit wenigen Zeilen einen FPGA voll krachen. Daher ist doch > so ein Vergleich eher sinnlos. Ja, vorallem kann man Trade-Offs machen zwischen Logikauslastung und Geschwindigkeit ... Funktion die Gleiche, aber einmal braucht es 80% und hat einen Durchsatz von z.B. 45MB/sec oder 20% und schafft nur ein 5tel ...
Damals im IBM Praktikum haben wir einen EP3SL150 http://www.altera.com/devices/fpga/stratix-fpgas/stratix-iii/overview/st3-overview.html zu 85% ausgelastet bekommen (>100k Register / LEs und fast alles an BlockRAM) und das nur mit ein paar 1000 Zeilen Code...
Ihr habt ja recht. Die Resssourcenauslastung auf dem FPGA korreliert nicht wirklich mit der Komplexität des Designs. Da ich selbst an einem komplexen Design arbeite, würde mich aber schon interessieren, wie man Komplexität in den Griff bekommt bzw. sinnvoll reduzieren kann. Bei klassicher Softwareentwicklung hat man ja aus diesem Grund den Schritt zur Objektorientierung bzw. zu UML vollzogen. Welche Möglichkeiten gibt es da bei Hardware? Wirklich viel Inforamtionen findet man ja dazu nicht...
Kurze Zusammenfassung meiner Lieblingsstrategien: - Dokumentieren mit Doxygen ("was zur Hölle hab' ich da vor nem Jahr gemacht?") - Viele wiederververtbare Module gehn ab in die Library - Code-Generierung (mein Favorit: Python und XML). Habe von mehreren Seiten gehört, dass myHDL gut sein soll, es aber noch nicht eingesetzt. - Statt komplexe State machines kommt eine Soft-CPU rein Aber die "merkwürdige Frage" kann ich auch nicht beantworten :-) Gutes Neues, - Strubi
Engineer schrieb: > Bei klassicher Softwareentwicklung hat man ja aus diesem Grund den > Schritt zur Objektorientierung bzw. zu UML vollzogen. Welche > Möglichkeiten gibt es da bei Hardware? Wirklich viel Inforamtionen > findet man ja dazu nicht... Ich betrachte die Hardware, die ich mit VHDL erzeuge, als anschauliche Form der Objektorientierung. Ansonsten: (Code) teilen und (be)herrschen. Duke
> - Dokumentieren mit Doxygen ("was zur Hölle hab' > ich da vor nem Jahr gemacht?") Hmm, statt einfach lesbarem sauberen Code ohne das Thema verstellendem Ballast glaubst du also, mit noch mehr Text aus etwas was zu viel war um es zu überblicken etwas zu erzeugen welches obwohl es nun noch mehr ist und keinerlei Ballast gestrippt wurde nun plötzlich überblickbar ist ? Wie abwegig ist das denn... > - Viele wiederververtbare Module gehn ab in die Library Anders gesagt: Unnützer niemals gebrauchter Code wird zwar mit viel Arbeitseinsatz produziert, geht danach aber direkt in Abstellkammern aus denen man ihn niemals mehr rausholen wird. Da der Änderungsaufwand zu gross ist, wird man auch seine Fehler nie beheben, man braucht sie ja für dieses Projekt nicht. > - Code-Generierung (mein Favorit: Python und XML). Möglichst wird der code nachträglich noch per Hand angepasst, damit man niemals mehr den Schritt der Codegenerierung machen kann, ohne all die Handarbeit ständig nachzuziehen, denn ein Informatiker sorgt schon dafür, daß er nicht arbeitslos wird, und schafft sich lieber sinnlose Arbeit. > - Statt komplexe State machines kommt eine Soft-CPU rein Warum einfach wenn es auch kompliziert geht, statt daß man ein Problem direkt löst, erschafft man erst mal eine (fehlerhafte?) Metamaschine die nichts mit dem Problem zu tun hat, um dann in einer zweiten Sprache die niemand versteht der sich in Zukunft mit em Projekt beschäftigen wird "VHDL Entwickler gesucht", ein Problemanzugehen, für das man schon 90% der Performance durch den Interpreterschritt verloren hat. Sorry, jeder deiner Punkte erscheint wie ein grober Fehler, aber nicht so unüblich. Statt KISS keep ist simple, stupid bei der so wenig geschrieben wird daß gerade das Problem zur Zufriedenheit gelöst wird, produzierst du Verhau und Wellen ohne Ende. Durchaus üblich in der IT Branche. Dabei haben alle im Studium gelernt, daß ein Algorithmus eine klare Bewertung hat: Er ist erst gut, wenn es nichts mehr wegzulassen gibt.
MaWin, du hast ganz offensichtlich noch kein größeres Software-/Hardwareprojekt in Zusammenarbeit mit anderen Leuten erstellt...
MaWin schrieb: > Sorry, jeder deiner Punkte erscheint wie ein grober Fehler, > aber nicht so unüblich. MaWin, geh lieber ein Bier trinken, anstatt ich hier aufzuregen. Duke
Ich finde die von Strubi genannten Punkte recht gut. Strubi schrieb: > Code-Generierung (mein Favorit: Python und XML). Das interessiert mich. Was genau gibt es da an Tools? An VHDL stört mich am meisten die umständliche Programmierung von Testbenches (z.B. schlechtes File I/O). Ich würde sehr gerne meine TB in z.B. Python schreiben und über einen Wrapper mein Design einbinden. Aber das wird es wohl nie geben...
Naja, seltsame Frage für seltsame Leute. Ich wollte mich einfach ein wenig verorten, ich hab hier nur zwei weitere Kollegen, die FPGAs programmieren und deren Zeug ist definitiv kleiner. Zur Frage der vielen Takte: Das kommt schon durch die Schnittstellen, da gibts andere bei uns entwickelte Boards, Gigabit Ethernet, 10 Gigabit Ethernet, Fehlerkorrektur, mehrere DRAM Slots am FPGA, ein Backplane-Bus für die Einschubkarte ... da kommen dann schon schnell diverse Takte zusammen.
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.