Forum: FPGA, VHDL & Co. Wie groß ist mein Design so im Vergleich?


von Matthias (Gast)


Lesenswert?

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.

von Fetz (Gast)


Lesenswert?

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?

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


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

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.

von Fetz (Gast)


Lesenswert?

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 
...

von D. I. (Gast)


Lesenswert?

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...

von Engineer (Gast)


Lesenswert?

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...

von Strubi (Gast)


Lesenswert?

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

von Duke Scarring (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> - 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.

von Mike (Gast)


Lesenswert?

MaWin, du hast ganz offensichtlich noch kein größeres 
Software-/Hardwareprojekt in Zusammenarbeit mit anderen Leuten 
erstellt...

von Duke Scarring (Gast)


Lesenswert?

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

von Engineer (Gast)


Lesenswert?

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...

von Matthias (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.