Wo und wie wird das eigentlich gelehrt?
Reicht es den FHs und Unis, den Studies beizubringen, wie die Sprache
funktioniert und wie man die Konstrukte anwendet, oder wird da mehr
getan?
Meine Frage nämlich lautet: Wie konstruiert man sinnvolle Schaltungen???
Beides sind 2 unterschiedliche Dinge und das eine impliziert noch nicht
das andere, wie ich gerade wieder erfahren muss! Ich sitze an einem
VHDL-Code, der von einem Physiker geschrieben wurde:
- tolle komplexe Konstrukte
- hoch dynamische und flexible Struktur
- viele generics
- aufs bit genau optimiert
- jedes sample ausgenutzt
Ein genialer Code, von einem Topmann, wie er auch intern gesehen wird.
Problem: Der Code funktioniert nicht richtig in der realen Umgebung.
Irgendwas passt mit dem Timing nicht. Denn leider:
- wurde ein viel zu komplizierter Ansatz verwendet
- glänzt der Code vor Fifos, wo keine gebraucht werden
- es gibt vertrackte Bitopmitierungen mit LUTs und SRs
- die Signale sind alle abstahiert und haben anonyme Namen
- der code ist praktisch komplett undokumentiert
- es gibt keine richtigen Testbenches
- der Topmann ist wech
Wie kommt man dem bei?
Wie erklärt man dem Auftraggeber, dass dieser tolle, intelligente Code
nicht zu debuggen ist, jedenfalls nicht in vertretbaren Zeiträumen.(?)
Warum ist es immer noch so, dass immer wieder Wert auf die Sprache VHDL,
nicht aber auf das Designen gelegt wird? Warum bringt man den Leute
nicht mal bei, dass man testfreundlich entwicklen muss, teamfähigen- und
lesbaren Code erzeugen muss und es nicht darauf ankommt, besoners
geniale Struturen zu erdenken?
Und warum hängen überall Leute rum, die sich das offenbar selber
beigebracht haben und aus der Art geschlagenen Code abliefern?
Der Typ könnte glatt bei Xilinx anfangen ;) Aber so absonderlich oder
VHDL-spezifisch ist das nicht, das gibts genauso auch bei "normaler"
Programmierung. Vor lauter OO-Tricks und supertollen
Datenstrukturoptimierungen blickt dann auch kein anderer mehr durch.
Wenn ich schon lese dass es keine ordentliche Dokumentation gibt, dann
ist meine erste Frage immer:
gibt es specification-documents?
Wenn nein: Prima, alles was das Design macht, ist korrekt! Das Problem
hat jemand anders
Willst du jetzt wissen warum die Menschen so sind, wie sie sind?
Arbeiten Programmierer nicht in einem strikten Team mit einem "Aufseher"
der auf Guidelines achtet geht das garantiert schief. Sobald
Programmierer/Entwickler die Freiheiten bekommen, zu tun und zu lassen
was sie wollen, solange am Ende das raus kommt, was erwartet wird, denkt
der Entwickler zu Anfang, er hat einen Traumjob gefunden. Und dann kommt
man da an wo du jetzt stehst! Mein Job fing auch so an, ein Jahr lang
VHDL entwickeln wie ich es gerade wollte solange hinten rauskam was
erwartet wurde. Und meine 2 Kollegen ebenso. Dann wurde der eine lange
krank, die Deadline kam naeher und ich musste seinen Code debuggen und
verstand: NICHTS! Nicht eine kommentar-Zeile, Signale die Namen von
Mitarbeitern tragen und alles schrecklich kryptisch und kompliziert
gebastelt. Es lief darauf hinaus dass ich beinah alle Module neu
schreiben musste, weil das schneller ging als sie aufzuraeumen und
durchzutesten.
Aber erst seit wir in dieser Zeit einen externen "Aufseher" (Project
Manager) dabei geholt haben hat sich bei uns eine strukturierte
Arbeitsweise etabliert, in der sich an strikte design regeln gehalten
wird. Sicher ist es nicht so toll erst ein Designdocument zu schreiben,
Testbenches aufzuziehen und DANN erst anzufangen zu programmieren, aber
es spart am Ende einen Haufen Zeit, Schweiss, manchmal Traenen und man
versteht es einfach viel besser. Erst dokumentieren und dann
programmieren erleichtert beides! Das tolle "Code fummeln bis es
funktioniert" macht leider nur rund 10% des Jobs aus.
Zu deinem Problem, wie man dem beikommt:
Zuerst alles rauskicken was unnoetig ist (z.B. die FiFos), und dann mit
Modelsim Stueck fuer Stueck alles durchrechnen, bis du den Fehler hast.
Wenn es Timing probleme sind und der Code an sich funktioniert, musste
mit Timing Constraints eben alles durchanalysieren. Ist das VHDL modul
auch fuer die entsprechende Hardware geschrieben worden oder eigentlich
fuer irgendwas viel schnelleres? Wenn du zumindest weisst was vorn
reingeht und hinten rauskommen muss, dann kannste dich da durch wuehlen.
Das kostet sicher Zeit und Muehe, macht auch vielen keinen Spass (mir
schon), ist aber das Sinnvollste. Und dann dem Kunden sagen dass er
seine Programmierer/Physiker/wasauchimmer aufn VHDL Basiskursus schicken
soll um was ueber Coding und Design Guidelines zu lernen.
So Top kann der Mann uebrigens nicht sein wenn sein VHDL Konstrukt a)
nicht vernuenftig tut was es tun soll und er b) zu faul war oder sich zu
geil fand ordentlich zu dokumentieren. Code kompliziert machen kann so
ziemlich jeder, ihn einfach/verstaendlich/uebersichtlich halten ist die
Kunst
Berater schrieb:> Problem: Der Code funktioniert nicht richtig in der realen Umgebung.> Irgendwas passt mit dem Timing nicht.
Das ist der übliche ausgangspunkt für eine wochenlange Fehlersuche...
;-)
> Wie erklärt man dem Auftraggeber, dass dieser tolle, intelligente Code> nicht zu debuggen ist, jedenfalls nicht in vertretbaren Zeiträumen.(?)
Wurden mehrere Takte verwendet?
Wurden asynchronen Resets verwendet?
Kommen evtl. sogar kombinatorische asynchrone Resets vor?
Wenn sowas auftaucht, dann stelle ich SOFORT jede Lobhudelei in Frage,
und kann mit simpelsten Beispielen die Qualifiktaion des Lobgehuldeten
zunichte machen.
Und ab diesem Zeitpunkt ist das nicht eine Fehlersuche, sondern ein
grundlegendes Redesign.
> Warum ist es immer noch so, dass immer wieder Wert auf die Sprache VHDL,> nicht aber auf das Designen gelegt wird?
Weil viel Know-How zu FPGAs erst in den letzten Jahren aufgebaut wurde,
die Bücher aber schon lange vorher verfasst wurden. Und für viele
Faustregeln gibt es noch keine ausreichend dokumentierte Mathematik, so
dass lieber die alte abstrakte Automatentheorie gelehrt wird, als die
praktische Umsetzung eines Zählers in Hardware...
> - der Topmann ist wech
Das war offenbar genu der richtige Zeitpunkt zum Absprung... ;-)
> - der Topmann ist wech> Wie kommt man dem bei?
Vermisstenmeldung an die Polizei? ;-)
> Sicher ist es nicht so toll erst ein Designdocument zu schreiben,> Testbenches aufzuziehen und DANN erst anzufangen zu programmieren,> aber es spart am Ende einen Haufen Zeit
Exakt meine Haltung. Ich gehe sogar noch einen Schritt weiter und leite
die Funktionalität, die man für die Tests und Validierungen in den SPECs
definiert, direkt in Punkt-für-Punkt Abläufe in Exceltabellen. Aus denen
kann man dann nicht nur den Datenstom für Modelsim-Filereader sondern
auch den Ablauf von pipes und statemachines rausziehen und automatisch
generieren lassen - inklusive Timing.
Ich würde gerne die Frage stellen, ob jemand hier in der Hochschule
gelernt hat, wie man:
- wann und wie (nicht) einsynchronsiert
- physische von logischen "sets" und "resets" trennt
- asynchron rettet und wann man es bleiben lässt
- eine pipeline entwirft und dokumentiert
- serielle ind parallere Strukturen umdesiged
- die Balance zwischen serial und parallel ermittelt
- mit FiFos die Verarbeitungszeit komprimiert / dekomprimiert
- eine Iteration über Zeit-Flächen-Struktur realisiert
- eine Rekursion implementiert
- eine Formel so umstellt, dass sie VHDL-tauglich wird
- einen Algo so zerlegt, dass er parallelisierbar wird
- synthetisierbarer testcode implementiert und wann
- testbenches optimieren und automatisieren kann
- eine Resource in verschiedenen Zeitebenen mehrfach nutzt
Es geht also nicht um das VHDL, sondern grundsätzlich darum, wie man
eine digitale Schaltung optimal aufteilt und aufbaut, dass das
Gesamtergebnis passt und zwar letztlich auch noch unter Berücksichtigung
von:
- Designaufwand am Arbeitsplatz + Abstimmungsbedarf im Team
- Verifikations- und Validierungsaufwand während Design
- Implementierungsaufwand im FPGA oder später mal ASIC oder anderes FPGA
- Integrationsaufwand des FPGA-Systems in der Umgebung / im System
- Test- und Inbetriebnahmeaufwand des Systems im Feld
Je nachdem, ob man einen Prototypen baut oder einen Kleinserie, eine
Komponente o.ä. gibt es hier doch recht starke Verschiebungen.
Das alles kommt natürlich erst mit der Erfahrung, aber Digitaldesign im
eigentlichen Sinne, scheinen die Wenigsten systematisch wirklich erlernt
zu haben.
Juergen S. schrieb:>> Sicher ist es nicht so toll erst ein Designdocument zu schreiben,>> Testbenches aufzuziehen und DANN erst anzufangen zu programmieren,>> aber es spart am Ende einen Haufen Zeit> Exakt meine Haltung. Ich gehe sogar noch einen Schritt weiter und leite> die Funktionalität, die man für die Tests und Validierungen in den SPECs> definiert, direkt in Punkt-für-Punkt Abläufe in Exceltabellen. Aus denen> kann man dann nicht nur den Datenstom für Modelsim-Filereader sondern> auch den Ablauf von pipes und statemachines rausziehen und automatisch> generieren lassen - inklusive Timing.
Das klingt interessant. Doch Excel finde ich mittlerweile grausam, da
ich alles unter Excel gesehen habe, was nicht in Excel sollte.
> Ich würde gerne die Frage stellen, ob jemand hier in der Hochschule> gelernt hat, wie man:>> - wann und wie (nicht) einsynchronsiert> - physische von logischen "sets" und "resets" trennt> - asynchron rettet und wann man es bleiben lässt> - eine pipeline entwirft und dokumentiert> - serielle ind parallere Strukturen umdesiged> - die Balance zwischen serial und parallel ermittelt> - mit FiFos die Verarbeitungszeit komprimiert / dekomprimiert> - eine Iteration über Zeit-Flächen-Struktur realisiert> - eine Rekursion implementiert> - eine Formel so umstellt, dass sie VHDL-tauglich wird> - einen Algo so zerlegt, dass er parallelisierbar wird> - synthetisierbarer testcode implementiert und wann> - testbenches optimieren und automatisieren kann> - eine Resource in verschiedenen Zeitebenen mehrfach nutzt
fast null. Alles selbst erlernt.
was meinst du eigentlich mit den Punkten?
> - physische von logischen "sets" und "resets" trennt> - eine Iteration über Zeit-Flächen-Struktur realisiert
da muss ich passen, oder es läuft unter einem anderen Begriff bei mir
> Es geht also nicht um das VHDL, sondern grundsätzlich darum, wie man> eine digitale Schaltung optimal aufteilt und aufbaut, dass das> Gesamtergebnis passt und zwar letztlich auch noch unter Berücksichtigung> von:>> - Designaufwand am Arbeitsplatz + Abstimmungsbedarf im Team> - Verifikations- und Validierungsaufwand während Design> - Implementierungsaufwand im FPGA oder später mal ASIC oder anderes FPGA> - Integrationsaufwand des FPGA-Systems in der Umgebung / im System> - Test- und Inbetriebnahmeaufwand des Systems im Feld>
Das sind alles Fragen nach der Wirtschaftlichkeit. Ich würde die Aussage
etwas unterteilen. VHDL st keine Programmierung für eine CPU, sonder es
wird Hardware geschaffen. Das ist Digitaltechnik!!
Auf der geschaffenen Hardware kann unter Umständen auch Software laufen.
Wie der Schnitt Software Hardware gehalten werden sollte ist eine ganz
schwierige Frage und beeinflusst das Design gewaltig.
Die Algorithmen passen nicht 1:1 mehr, weil Prozesse synchronisiert
werden müssen und Daten noch eine Gültigkeitsdauer haben.
VHDL wird of als Nebenfach angeboten. Mal bei den Informatikern und mal
bei den Elektrotechnikern und alles bleibt in den Grundlagen stecken.
Die Dokumentation ist dann immer noch weit entfernt. Auch mathlab ist
keine Dokumentationsebene.
Am besten wäre UML als Dokumentionsgrundlage -
René D. schrieb:>> Ich würde gerne die Frage stellen, ob jemand hier in der Hochschule>> gelernt hat, wie man:>>>> - wann und wie (nicht) einsynchronsiert>> - physische von logischen "sets" und "resets" trennt>> - asynchron rettet und wann man es bleiben lässt>> - eine pipeline entwirft und dokumentiert>> - serielle ind parallere Strukturen umdesiged>> - die Balance zwischen serial und parallel ermittelt>> - mit FiFos die Verarbeitungszeit komprimiert / dekomprimiert>> - eine Iteration über Zeit-Flächen-Struktur realisiert>> - eine Rekursion implementiert>> - eine Formel so umstellt, dass sie VHDL-tauglich wird>> - einen Algo so zerlegt, dass er parallelisierbar wird>> - synthetisierbarer testcode implementiert und wann>> - testbenches optimieren und automatisieren kann>> - eine Resource in verschiedenen Zeitebenen mehrfach nutzt>> fast null. Alles selbst erlernt.
So ist es. Dafür werden noch massiv Logikminimierungsverfahren gelehrt.
Tom
Thomas Reinemann schrieb:> René D. schrieb:>>> - wann und wie (nicht) einsynchronsiert>>> - physische von logischen "sets" und "resets" trennt>>> - asynchron rettet und wann man es bleiben lässt>>> - eine pipeline entwirft und dokumentiert>>> - serielle ind parallere Strukturen umdesiged>>> - die Balance zwischen serial und parallel ermittelt>>> - mit FiFos die Verarbeitungszeit komprimiert / dekomprimiert>>> - eine Iteration über Zeit-Flächen-Struktur realisiert>>> - eine Rekursion implementiert>>> - eine Formel so umstellt, dass sie VHDL-tauglich wird>>> - einen Algo so zerlegt, dass er parallelisierbar wird>>> - synthetisierbarer testcode implementiert und wann>>> - testbenches optimieren und automatisieren kann>>> - eine Resource in verschiedenen Zeitebenen mehrfach nutzt>>>> fast null. Alles selbst erlernt.
Kann ich nur bestätigen, habe mir das meiste aus dieser Liste auch durch
Praxisaufgaben erarbeitet.
> Es geht also nicht um das VHDL, sondern grundsätzlich darum, wie man> eine digitale Schaltung optimal aufteilt und aufbaut, dass das> Gesamtergebnis passt und zwar letztlich auch noch unter> Berücksichtigung von: <...>
Wobei mir das (als Informatiker) auch etwas kurz gedacht vorkommt. Wenn
es eine Interaktion mit SW gibt (nicht immer, aber oft hängt das Zeug ja
an irgendeiner CPU), sehe ich das Hauptproblem beim Design darin, die
Schnittstellen für beide Ebenen effizient zu gestalten. Das bedingt eine
gute Interaktion der HW- und SW-Fuzzies bei der Spezifikation, die es
oft aber nur bei kleinen Klitschen zwangweise (überspitzt "jeder kann
alles") gibt.
Ich habe es bei Designs schon öfters gesehen, dass da sehr viel Mühe in
HW-Teile gesteckt wurde, die mit einer Handvoll C-Zeilen in 2min ohne
Performanceverlust auch machbar gewesen wären. Aber genauso gibt es
Designs, wo mir der SW-Entwickler leid tut, der die HW-Ansteuerung
ausbaden muss ;)
> So ist es. Dafür werden noch massiv Logikminimierungsverfahren gelehrt.
Naja, so ein bisschen Rumspielen mit boolscher Algebra, KV und
Quine-McCluskey sollte man in 1-2 Vorlesungsstunden schon machen, damit
man mal gesehen hat, was das Zeug kann und wo die Limits liegen. Das
sollte dann aber auch reichen, ausser man hat Schwerpunkt
"Logiksynthese" oder sowas...
Thomas Reinemann schrieb:> So ist es. Dafür werden noch massiv Logikminimierungsverfahren gelehrt.
Und Halbaddierer auf RTL-Ebene beschrieben und zu Volladdierern
verknotet. Dabei wird dann aber nicht auf die Wichtigkeit der
Carry-Chain, deren geschwindigkeitslimitierende Funktion und die
Umsetzung der Kette in FPGAs eingegangen...
Georg A. schrieb:> Naja, so ein bisschen Rumspielen mit boolscher Algebra, KV und> Quine-McCluskey sollte man in 1-2 Vorlesungsstunden schon machen, damit> man mal gesehen hat, was das Zeug kann und wo die Limits liegen.
Es sollte aber abschliessend der Hinweis kommen, dass diese ganze
Optimiererei bei bis zu 4 (bzw. 6) Eingängen in FPGAs unnötig ist, weil
die LUT (oder neu: der Funktionsgenerator) das sowieso direkt abbilden
kann...
Das klingt als bräuchten wir eine Selbsthilfegruppe.
Ich gebe auch Georg A. recht, es gibt auch überzogene Hardware
Ausführungen, was besser in eine CPU gepasst hätte.
Hier ist es wichtig eine Projektleitung zu haben, da die Sachen von
mehreren Kollegen entwickelt werden. Wie kann projektübergreifend
diskutiert werden?
Daran krankt es.
Das sind Diagramme und als Schiedsrichter Testbenches. Eine Testbench in
einem zu frühen Stadium ist etwas überzogen.
Ob da der Projektleiter der Richtige ist, weiss ich nicht. Es muss
jemand sein, der breit und tief ausgebildet und lange Erfahrung in allen
Bereichen hat. Typisch macht das ein Senior System Engineer:
Wenn man solche Systeme hinstellen und partitionieren will, dann gelangt
man nur zu einer klugen Aufteilung von HW und SW, bzw HW-Abläufen und
SW-Abläufen, zu Schnittstellen und Interaktionen, wenn man beide Welten
sehr gut kennt.
Und ja, er muss sie studiert haben!
Denn, wenn ich eins in all den Jahren gelernt und gesehen habe, dann
das, dass es in der Softwarelandschaft (C, Algorithmik und VHDL-basierte
Abläufe) ein großer Haufen an Mist zusammengeschustert wird. Da gibt es
die abenteuerlichsten Konstrukte mit tollen Tricks und "Realisationen",
für die es längst schlüsselfertige, intelligente Lösungen in der
Schublade gibt, von denen man unbedingt profitieren und Gebrauch machen
muss, wenn man einfach, effektiv und stabil entwickeln will.
Das kann man sich nicht alles selber beibringen, weil man das meiste
nicht irgendwo in der Anschauung sieht oder sich selber ausdenken kann.
Man muss es gesehen haben, BEVOR man es braucht. Man muss wissen, dass
es das gibt und ungefähr sehen und schätzen, was es an Zeit und Aufwand
kostet und was damit möglich ist.
Ich habe immer wieder Leute gesehen, die aus fremden Bereichen der
Wissenschaft in die Programmierung einsteigen und dann schnell an limits
kommen. Umgekehrt bekommen selbst eingeschleischte Softwareentwickler es
einfach nicht hin, in die strukturelle Ebene hineinzudenken.
Wenn man 5 Jahre Maschinenbau studiert hat, kennt man keine
Digitalschaltungen und deren Eigenheiten und Details bleiben einem
verborgen. Typische Synch-, Phasen- und Taktprobleme hat man auch nur
verinnerlicht, wenn man reale Chips vor Augen hat, denn Abstraktheit hin
oder her: Am Ende klickern da drinnen analoge Transistoren, die nur in
der vereinfachten Betrachtung diskrete Funktionen aus LUTs darstellen.
Und genau dieses Wissen sorgt dafür, dass man manche Sachen u.U. eben
nicht in SW nachbilden kann, ein FPGA im Einzelfall nicht taugt oder
umgekehrt aus technischen Gründen ein "langsamer" DSP verwendet werden
muss.
>Excel
Ich benutze das als schlaues Karopapier. Andere malen sich was auf den
Zettel- ich zeichne Wiederverwendbares. Das gemeinsame Editieren von
Varianten, Abläufen und Verzweigungen für physische oder virtuelle
Derivate und Versionen geht mit COPY&PASTE schneller, als das Malen von
Bäumchen in Visio :-)
Und Planen und Automatisieren geht auch simpel und einfach, weil man
leicht Umkopieren, Löschen und Duplizieren kann. Und: Man kann Dinge,
mit miteinander verknüpft sind, als harte oder weiche Verknüpfung
belassen und sich eine Alternativversion auf Nachbarblättern
durchrechnen lassen, bzw Änderungen in der V1-Version automatisiert
weitergeben, um Konsistenz aufrecht zu erhalten, wo sie nötig ist.
Ein Beispiel aus dem FPGA-Bereich wäre das Halten und Planen der
Verdrahtungstruktur von Bussen über Platinen und FPGA-Grenzen hinweg,
inklusive der Namen der Signale an den Stecker, Ports, Entities etc.
sowie die Versionsplanung für verschiedene Ausbaustufen oder die
Migrationsplanung unter Nutzung von Chips unterschiedlicher Hersteller.
Ein reales Beispiel mit geänderten Zahlen:
Man denke sich mal eine Struktur aus z.B. 3 x 4 FPGAs, wo sich 10 davon
50 ähnliche Funktionen teilen, 5 davon weitere 200
Leitungstreiberfunktionen, wobei jeweils 40 dieser Leitungen durch
jeweis andere FPGAs redundant getrieben werden können müssen, wegen
Minderbestückung und alle 12 zusammen auch 1 bestimmte Funktion verteilt
leisten, manche FPGAs aber auch nur eine einzige Funktion leisten, die
nur sie beherrschen.
Das Ganze dann für 2 verschiedene Versionen von Boards, wo sich die
Zuordnungen der Pins teilweise physisch ändern und 2 verschiedene
Prozessoren / Ansteuerungen, wo sich die Busse und die Timings ändern =
4 Versionen! Man darf aber nur 3 verschiedene, jeweils unterschiedliche
FPGA-images verwenden, weil das Flash auf den alten board-Versionen zu
klein ist und die boards plug-and-meassure fähig sein müssen, alles
selber erkennen müssen und überall passen sollen.
Das gibt eine Matrix mit wenigstens 4 Dimensionen mit divergenten und
konvergenten Überlappungen, deren Funktionsvielfalt genau so auf
virtuelle FPGA-Funktionen gemappt werden muss, dass am Ende jedes FPGA
eines von 3 images bekommt, welche in Summe die Vereinigungsmenge aller
Funktionen können, aber pro FPGA jeweils nur die Teile funktionieren,
die in diesem FPGA benötigt werden, die Summe der so zusammenarbeitenden
FPGAs aber die gesamt Teilfunktion kann. Das kompliziertes FPGA nutzt
dann aus seinem Image, welche z.B. 40 Teilfunktionen könnte, z.B. 13,
dessen Nachbar nur 7. Macht in Summe 20 Funktionsteile (4
unterschiedliche) von insgesamt >70 insgesamt auf dem board.
Und dann bitte bis Ende der folgenden Woche eine Planungsmethode
entwickeln, wo alle Funktionen enthalten-, übersichtlich geordnet-, und
so gruppiert sind, dass die daraus notwendigen virtuellen
Verdrahtungsoptionen ersichtlich sind und die Vollständigkeit
sichergestellt werden kann. Ok, hab' ich gemacht.
Ergebnis: Mehrere Designingenieure inkl Projektleiter mit Kinnlade
unten, automatisch erzeugte "set_location's" für's UCF ohne Tippfehler,
automatische Summierung der Funktionen, Teilfunktionen, Pins je FPGA,
Busbreitenwerte für Derivateoption und Darstellung der Zuordnung der
realen physischen Pins zu virtuellen Kanälen der Software ->
Programmiertabelle ausleitbar
... und ein Dr. der Mathematik, der sich ein halbes Jahr lang bereits
mit der Planung des Systems befasst hatte und zu dem Schluss gekommen
war, man brauche mindestens 2 verschiedene boards mit insgesamt 5
verschiedenen images.
Meine reale Aufgabe war im Ürigen noch etwas komplexer.
Wenn ich mir überlege, was man davon in den heutigen
SOC-builder-Systemen und System-Generator-blocksets oder HDL-Designer
abbilden kann, dann happy digit!
Juergen S. schrieb:> Man denke sich mal eine Struktur aus z.B. 3 x 4 FPGAs,> wo sich 10 davon 50 ähnliche Funktionen teilen, 5 davon weitere 200> Leitungstreiberfunktionen, wobei jeweils 40 dieser Leitungen durch> jeweis andere FPGAs redundant getrieben werden können müssen, wegen> Minderbestückung und alle 12 zusammen auch 1 bestimmte Funktion verteilt> leisten, manche FPGAs aber auch nur eine einzige Funktion leisten, die> nur sie beherrschen.
Zum Glück habe ich solche Probleme nicht (und ich vermute: auch die
wenigsten anderen)... ;-)
Aber ich möchte auch behaupten, dass man da einfach auch mal Glück haben
darf und zum richtigen Zeitpunkt die zündende Idee. Nur: DAS zu lehren
kann man jetzt wirklich nicht von den Schulen verlangen... :-o
nein ganz und gar nicht wegen dir, sondern weil ich selbstverliebte
Fatzkes auf den Tod nicht ausstehen kann..... Und ich war doch wieder im
Thread ;-)
> Zum Glück habe ich solche Probleme nicht (und ich vermute: auch die> wenigsten anderen)... ;-)
Schon richtig, es ging mir nur darum, einmal zu zeigen, dass man mit
Excel durchaus einiges machen kann. War vielleicht ein wenig zu
ausführlich.
Es ging mir aber auch darum, zu verdeutlichen, dass die Komplexität bei
Entwicklungen mehr in der Planung und im Denkansatz liegt und es nicht
reicht, einfach nur irgendeine wissenschafliche Ausbildung zu haben und
sich das Programmieren angeeignet zu haben. Der Hase ganz woanders im
Pfeffer.
> Juergen S., so gut wie du möchte ich auch gerne mal werden...
Ja, ja ich weiss schon, wenn man D Fakten auspricht, fühlen sich einige
gleich wieder angegriffen. Nur: ständig auf understatement machen,
bringt nichts voran. Manchmal muss man auch mal ein wenig Tacheles reden
und wo sollte man das, wenn nicht in einem Forum? Im direkten Umgang mit
Kollegen kann man schlecht auf den Putz hauen und der Threadersteller
ist gut beraten, vorsichtig mit Kritik an Kollegen zu sein.
Was ich zu dem Thema Studium geschrieben habe, sehen viele meiner
Kollegen aber genau so, besonders, wenn sie sich mit der mittelmäßigen
Qualität von Zulieferern herumärgen müssen. Heute kommt doch jeder
zweite Computerbediener auf die Idee, er sei ein guter
Softwareentwickler, weil er eine Programmiersprache gelernt hat. Seien
wir mal ehrlich: C-Programmieren könnte so ziemlich jeder, wenn er sich
damit befasst. Mit Jedermann-Qualität kann man aber keine Systeme in den
Markt bringen, die um soviel besser sind, als das, was anderorts gemacht
wird, dass man gut verkaufen kann.
http://www.spiegel.de/karriere/berufsleben/0,1518,748287,00.html
P.S.
"Im direkten Umgang mit Kollegen kann man schlecht auf den Putz hauen"
Warum? Doch nicht der tolle Hecht oder keine Eier? Konstruktiv darf und
soll man das. Nur sich selber über alles stellen kommt halt schlecht an.
> Doch nicht der tolle Hecht oder keine Eier?
Nein, sozialkompatibel, freundlich und nett zu Kollegen. Mit Eiern hat
das nichts zu tun. Wir sind nicht im Rabaukenland.
> Konstruktiv darf und soll man das.
Tue ich, keine Sorge. Ich tue es aber durchs Vorleben, weniger durch
Diskutieren, weil ich gelernt habe, dass keiner gerne auf die Füsse
getreten bekommt und es geht auch nur peu a peu voran.
In den harten Fällen, wo man wirklich den Hebel ansetzen müsste und
nicht drüber hinwegsehen dürfte, ist eh nichts zu machen, weil man
niemandem im Nachinein eine andere Ausbildung, ein anderes Wissen und
nicht einmal mehr eine andere Programmier- oder Arbeitstechnik
beibringen oder auferlegen kann. Man muss dann mit denen klarkommen, die
man nebenbei hat :-)
Die Kritik setzt weiter vorne an, z.B. bei denjenigen, die immer weniger
auf Ausbildung schauen, Studienzeiten verkürzen oder "verbatcheln" und
bei Einstellungen den billigen Jakob bevorzugen.
Ich beziehe mich dabei in jüngster Zeit immer öfters auf Beauftragungen
an Dienstleister und Drittanbieter, wo man gezwungen ist, den Billigsten
zu nehmen, der dann seinerseits nur noch leben kann, indem er die
billigen Quereinsteiger und Anfänger beschäftigt, während andere gut
ausgebildete Ingenieure und Softwareexperten, (die ich auch zuhauf
kennengelernt habe) aufgrund ihrer angeblich hohen Gehaltsforderungen
nichts bekommen und zu ebensolchen Billigtarifen anbieten müssen.
Dies leistet dann somit der allgemeinen Verbilligung Vorschub und es
lohnt sich immer weniger, eine fundierte Ausbildung anzustreben. Ich
kenne in der Tat viele sehr gute Entwickler, die sich genau aus diesen
Gründen aus diesem Bereich abseilen. Qualität ist nicht mehr gefragt in
diesen Tagen.
Ich kann dich schon verstehen - ich gebe dir sogar teilweise Recht.
Aber entweder oder - sich in einem Forum über alle anderen stellen aber
im persönlichen Kontakt gegenüber nicht durch den 'ich bin besser'
Gedanken leiten zu lassen das geht meiner Ansicht nach nicht.
Du hast doch bei allen möglichen Gelegenheiten im Hinterkopf mal eben
die Arbeit eines halben Jahres des Herrn Dr. in einer Woche abreißen zu
können. Daß dies sozialkompatibel bleibt kann ich mir echt nicht
vorstellen.
Was heißt 'vorleben'....
Du fühlst dich mindestens eine Stufe besser. Bist das vielleicht sogar,
dann versuche etwas abzugeben.
Dafür sind Kollegen eben da. ( und zwar solltest du dich dabei auf
Augenhöhe sehen und nicht als den Besseren. Göttlich bist auch du sicher
nicht )
Die universitäre Ausbildung und die Ausbildung auf der Fachhochschule
kann praktische Arbeit und Erfahrung ja schlecht vermitteln sie soll
dienlich sein, von erfahrenen Leuten weiterlernen zu können.
Auch Lücken sind in meinen Augen keine Schande. Die sind durch Erfahrung
zu stopfen.
Aber deine Zeilen triefen nur so vor Selbstverliebtheit. Und das erkennt
man bei seinem Gegenüber. Und davon bekomme ich Ausschlag denn das ist
extrem unsympatisch. Zumal es sich keiner Leisten kann. Wer ist schon so
perfekt?
P.S Wann hast du vor dir selber zuletzt einen Fehler eingestanden? Falls
ich dir unrecht tue und die wirklich ein umgänglicher, hilfsbereiter
Kollege bist tut mir das aufrichtig leid. Dann entschuldige ich mich für
die Schublade in die ich dich gepackt habe
Du scheinst ja wirklich etwas "selbstreflektiert" zu sein, wenn Du in
Betracht ziehst, vorschnell geurteilt haben zu können :-)
Ich halte mich durchaus nicht für omnipotent. Schwächen habe auch ich
auch genug, aber dort präsentiere ich mich nicht als Experte oder
Ideengeber und überlasse die Führung anderen. Dies tue ich genau weil
ich gesehen haben, dass ich mir das eine oder andere zwar locker zutraue
und auch leisten könnte, aber eben nur "auch" und nicht "en top".
Mithin ist das Beispiel des "Dr." genau das Passende, den ihm oblag die
Führung und Planung im Projekt, weil man dachte, die Promotion macht es
schon. Denken können reicht.
Nochmal eines zu den Überfliegern:
Sicher ist es richtig, dass es besser läuft, man von einem homogenen
Team ausgeht. Das Team muss aber hohes Niveu und nicht Mittelmäßigkeit
darstellen. Daher halte ich den link von oben für äusserst unstimmig.
> Beim Intelligenzquotienten zum Beispiel wird der Mittelwert als 100 definiert.> Die große Mehrheit der Menschen weist einen IQ zwischen 85 und 115 auf.
Das sind ALLE Menschen, aber nicht alle Fachkräfte. Bei MINT-Studenten
finden sich sehr wohl Mittelwerte um die 115 - bei manchen Fachbereichen
auch noch mehr.
> Genies .. gibt es nur sehr wenige; Experten schätzen den Anteil auf jeweils
zwischen zwei und fünf Prozent.
5% heisst immerhin jeder 20., also einer pro Schulklasse. In der
Bevölkerung wären es 400.000 Personen. Das würde ich noch nicht "Genie"
nennen.
Angeblich sind 2% aller Menschen "Hochbegabt", haben also einen IQ von
>130. Das klingt schon eher nach Genie, heisst aber auch nur wieder
"jeder 50te".
Jetzt rechnen wir mal:
Im Moment machen etwa 35% eines Jahrgangs Abitur und von denen schließen
wiederum 30% ein Studium ab, also 10% der Bevölkerung. Damit wäre jeder
5. Absolvent "hochbegabt". Bei den MINT dürfte der Anteil noch höher
liegen, sagen wir 25%? - Da nur die oberen 3/4 der MINT-Absolventen in
ihrem Job arbeiten, haben rund ein Drittel der Ingenieure einen IQ von
>130.
Selbst wenn die geschätzten Zahlen nicht 100% stimmen, sollte der wahre
Anteil nicht weit davon weg liegen. Also nix mit "Mittelmass = gut".
Trotzdem hin ich nach wie vor ein Fan einer umfangreichen und fundierten
Ausbildung. Das Problem: Wer's nicht hat, kennt es nicht und weiss
manchmal nicht, was ihm fehlt :-)
>Trotzdem hin ich nach wie vor ein Fan einer umfangreichen und>fundierten Ausbildung.
Vollkommen d'accord. Es scheint heute aber irgendwie Mode geworden zu
sein, dass branchen- und ausbildungsfremd gearbeitet wird, während
jedoch eine spezifische Ausbildung eigentlich immer wichtiger wird, weil
die Anforderungen immer komplexer werden.
Ich frage mich überhaupt, was es für einen Sinn machen soll,
Studiengänge wie Elektrotechnik und Informatik haarklein in einzelne
Studienrichtungen aufzuspalten, wenn die Elektronik und Software dann
von "artfremden" Maschinenbauern geschrieben wird. Im IT-Bereich, wo
ich inzwischen tätig bin, tummeln sich unendliche Zahlen von
MB-Absolventen, die mal Werkstoffkunde, Kraftwerkstechnik und was weiss
ich erlernt haben, nun aber nur noch Datenbanken bezaubern und SW
entwickeln. Ich habe mir das ganz langsam, beginnend mit einem
Elektronikstudium und embedded Controllern aufgebaut, bin dann über die
PC-Anbindung Stück für Stück in die abstrakte C++ - Landschaft migriert.
Ich hatte auch in all den Jahren zahlreiche Kurse und Seminare. Trotzdem
behandle ich das Thema noch recht oberflächlich, weil ich eher plane und
keine kritischen Apps selber mache. Das überlasse ich den Spezialisten.
Als Projektleiter stehe ich aber genau vor dem beschriebenen Problem,
dass budgetbedingt wenigerqualifizierte Quereinsteiger einen Grossteil
der kritischen Apps machen und ein Zeug zusammenfummeln, dass es die
Wildsau graust, wie man hier sagt.
Das betrifft C und VHDL in gleichen Teilen. Als Maschinenbauer oder
Physiker hat man eben nicht die erweiterten Grundlagen parat und machen
tun die das ja auch nur, weil sie in ihrem Bereich keinen Job bekommen-,
und keine Lust aufs Taxi haben:-)
In Deutschland muss ich sagen, geht es aber noch. Ich bin wieder mal für
eine Firma in Asien tätig und muss mitansehen, wie umgeschulte Landeier
mit Kartoffelbackground Flugzeugtechnik verkabeln, Hausfrauen zwischen
den Malzeiten Pfostenstecker einlöten, und 23-jährige Bübchen
komplizierte Steuersofware basteln, welche angeblich "Master of
Engineering" sind.
> wurde ein viel zu komplizierter Ansatz verwendet
Mein täglich Brot. Wenn die Jungens ein wenig nachdenken würden, kämen
ganz andere Module heraus und wir hätten deutlich weniger Aufwand - vor
allem beim Fehlersuchen.
Juergen S. schrieb:> Ich würde gerne die Frage stellen, ob jemand hier in der Hochschule> gelernt hat, wie man:>> - eine pipeline entwirft und dokumentiert> - serielle ind parallere Strukturen umdesiged> - die Balance zwischen serial und parallel ermittelt> - eine Formel so umstellt, dass sie VHDL-tauglich wird> - einen Algo so zerlegt, dass er parallelisierbar wird
Das gab's bei mir Studium. Technische Informatik an einer TU, mit
entsprechender Vertiefungsrichtung, noch nicht zu lange her. Aber
natürlich lässt sich das theoretische Wissen nicht sofort in die Praxis
übersetzen. Einem Absolventen fehlt einfach die Erfahrung, deswegen ist
er ja auch günstiger als alte Hasen. Wer aber nach 5 Jahren immer noch
keine Ahnung hat, muss sich schon fragen lassen, ob er seinen Job
wirklich gut macht. (Und selbstkritischerweise muss ich auch sagen, dass
ich mich intensiver mit Methodik und Strukturen beschäftigen könnte - es
"läuft" halt im derzeitigen Job auch ohne).
> - wann und wie (nicht) einsynchronsiert> - physische von logischen "sets" und "resets" trennt> - asynchron rettet und wann man es bleiben lässt
Das wird verschiedentlich in aktuellen Lehrbüchern behandelt.
> - mit FiFos die Verarbeitungszeit komprimiert / dekomprimiert> - eine Rekursion implementiert> - synthetisierbarer testcode implementiert und wann> - testbenches optimieren und automatisieren kann> - eine Resource in verschiedenen Zeitebenen mehrfach nutzt
Das durfte man sich mit entsprechendem Engagement selbst in Praktika
beibringen, oder man lernt es auf die harte Tour nach dem ersten
fehlgeschlagenen Projekt. Es gibt auch ganz hervorragende VHDL-Kurse
z.B. von Doulos, die gerade auf die Testbench-Geschichten eingehen. Und
Testbenches stellen bekanntlich 90% des VHDL-Codes.
> - eine Iteration über Zeit-Flächen-Struktur realisiert
Meinst Du Design-Space-Exploration?
> Das alles kommt natürlich erst mit der Erfahrung, aber Digitaldesign im> eigentlichen Sinne, scheinen die Wenigsten systematisch wirklich erlernt> zu haben.
Auf jeden Fall muss da viel mehr passieren, vor allem seitdem FPGAs
omnipräsent sind.
Ras Funk schrieb:>> - wann und wie (nicht) einsynchronsiert>> - physische von logischen "sets" und "resets" trennt>> - asynchron rettet und wann man es bleiben lässt> Das wird verschiedentlich in aktuellen Lehrbüchern behandelt.
Welche? Beispiele?
Solange da noch jeder Prozess so aufgebaut ist:
1
ifreset='1'then
2
--
3
elsifclk'eventandclk='1'then
4
--
5
endif;
Dann ist da noch nichts von aktuellen FPGAs und deren internen
Strukturen zu erkennen. Das geht sogar soweit, dass Synthesewerkzeuge
solche Konstrukte von sich aus (per Schalter) in synchrone Resets
umwandeln... :-o
> Und Testbenches stellen bekanntlich 90% des VHDL-Codes.
Diese Zahl und ihre Bekanntheit wage ich anzuzweifeln...
> Und Testbenches stellen bekanntlich 90% des VHDL-Codes.
Wenn ich mir die allgemein gültige falsche Beschreibung eines Taktes
ansehe, kann das so nicht stimmen. Wofür gibt es eine Funktion
rising_edge(), die auch den Zustand vor der Pegeländerung
berücksichtigt, wenn dann der obige Konstrukt mit 'event genommen wird?
Mit (clk'event and clk='1') wird z.B. die Simulation bei einem Wechsel
von 'H' nach '1' einen Takt ausführen. Die Hardware aber nicht...
Kurz: die Simulation entspricht nicht der Hardware und ist damit falsch.
Hallo Lothar,
ohne einen Reset-Streit vom Zaun brechen zu wollen ;-) aber Altera
empfiehlt "synchronized asynchronous resets", und die würden in VHDL so
aussehen wie Dein Beispiel. clk'event bzw. rising_edge mal aussen vor,
ebenso low/high Aktivität.
Siehe Seite 21 in
www.altera.com/literature/hb/qts/qts_qii51006.pdf
Wegen der Bücher schau ich heute abend nochmal in meine Bibliothek und
sage Dir die genauen Titel und was empfohlen wird.
Herzliche Grüße!
Ras Funk schrieb:> aber Altera empfiehlt "synchronized asynchronous resets",
Und genau DAS und der (mögliche) Unterschied zu anderen FPGA-Herstellern
wird in keinem der Bücher (soweit mir bekannt) explizit dargestellt...
> aber Altera empfiehlt "synchronized asynchronous resets",
Ja, blöd nur, dass man sich das nicht unbedingt immer merkt und dann
z.B. sowas schreiben könnte, weil die asynchronen Resets ja so schön
sind:
1
ifreset='1'orcnt=17then-- der ultimative Gipfel: ein asynchroner kombinatorischer Reset. Wehe, da kommt ein Glitch!
2
cnt<=0;
3
elsifclk'eventandclk='1'then
4
cnt<=cnt+1;
5
endif;
Wenn ich mir zudem die Übersicht zur ALM dort ansehe
http://www.altera.com/literature/hb/stratix-v/stx5_51002.pdf
dann erkenne ich nur, dass an den FFs zwar ein CLR angeschlossen ist,
aber nicht, wie die Verteilung da aussieht, und mit welchem Slack ich
rechnen muß. In das selbe Horn stossen auch die Altera-Gurus:
http://www.alterauserforums.net/forum/showthread.php?p=3802http://alteraforum.org/forum/showthread.php?p=16965
Wenn das globale Reset-Netzwerk zu langsam ist, dann geht schon das
Verlassen des Reset-Zustands schief.
Es ist ganz einfach so, dass der Reset z.B. eines Zählers/einer FSM und
der Reset eines FPGAs nichts miteinander zu tun haben. Und auch dem
verlinkten Dokument kann ich keinesfalls entnehmen, dass bei Altera ein
Zähler asynchron zurückgesetzt werden sollte.
Ein FPGA braucht sowieso keinen Reset. Das hat nach Anlegen der Spannung
loszulaufen und so lange seine Arbeit zu verrichten, bis die Spannung
wieder weggenommen wird. Ein Reset kommt in dieser Aufgabenbeschreibung
nicht vor.
> Wegen der Bücher schau ich heute abend nochmal in meine Bibliothek> und sage Dir die genauen Titel und was empfohlen wird.
Ich bin gespannt... ;-)
Wenn dabei aber sowas rauskommt, wie in diesem speziell dem Spartan 3
gewidmeten Buch im Beitrag "Re: Suche VHDL Buch",
dann dankesehr... :-/
Hallo Lothar,
das Buch, das ich meinte, heisst "Advanced FPGA Design" von Steve Kilts.
Da werden die Resets genau auseinandergenommen, mit Empfehlungen wie bei
Altera. Na gut, der Author arbeitet auch bei denen...
Das zweite Buch such ich Dir auch noch raus.
Zum Thema "FPGA braucht kein Reset" - stimmt! Normalerweise braucht man
das nicht. Sobald man aber mehrere Clock-Domains hat, und einzelne
Clocks (z.B. zum Stromsparen) an- und abschalten will, dann sind Resets
doch sehr lohnenswert. (bevor Diskussionen entstehen: ja, clock gating
natürlich nur über CCB etc.)
Oder auch, wenn das Design später auf Asics laufen soll. Spätestens da
kommt man um asynchrone Resets nicht herum.
Im Normal- und Regelfall bin ich völlig bei Dir.
Ras Funk schrieb:> Oder auch, wenn das Design später auf Asics laufen soll. Spätestens da> kommt man um asynchrone Resets nicht herum.
Zum Glück haben die wenigsten mit ASICs zu tun. Denn dort müsste ich dir
mit den 90% Simulationsaufwand wieder recht geben.. ;-)
Hallo zusammen,
gut zu erfahren, dass ich wohl lieber Taxi fahren sollte (chefdesigner)
oder hochkomplexe Codes verfasse, die niemand versteht (Berater) :-D
@chefdesigner:
Gut wenn man klar definierte Feindbilder hat oder.. Versteh ich dich
richtig, dass es die E-Techniker nach dem Studium automatisch mit C und
VHDL draufhaben? Die meisten die ich kennenlernen durfte, hatten z.B.
leider mit Software Revision Control nix am Hut. Da hat man irgendwann
mal ein zip abgelegt.. Will sagen, egal ob man aus dem Ingenieur- oder
naturwissenschaftlichen Bereich kommt, im Endeffekt zählt im Job was man
sich selbst über das Studium hinaus angeeignet. Im Studium sollte man
vor allem gelernt haben, wie man sich selbst schnell in neue
Sachverhalte
einarbeitet. Das lernt man in einem breitgefächerten Fach wie Physik auf
jeden Fall.
@Berater:
>- tolle komplexe Konstrukte>- hoch dynamische und flexible Struktur>- viele generics>- aufs bit genau optimiert>- jedes sample ausgenutzt
sample oder cycle? Na egal, wo ist das Problem? Ich sehe eigentlich nur
das Problem, dass es wahrscheinlich keine Spec und keine Doku gibt.
Wahrscheinlich hat dann a) das Projektmanagment versagt, weil man b)
nicht genuegend Zeit und Geld hatte oder c) schnell Ergebnisse sehen
wollte "die spec schreiben wir später, wir müssen dem Kunden schnell was
zeigen können". Ich war schon in diversen Projekten, wo genau das, das
Problem war. Bei Hinweis auf fehlende Spec und nötige Zeit für
Dokumentation war dafür eben keine Zeit. Wahrscheinlich war auch nicht
genügend Zeit für die Inbetriebnahme eingeplant. Ist ja nichts besonders
neues, dass Code in der Simulation gut funktioniert, aber in der HW
nicht. Ich hatte am Anfang meiner "FPGA-Karriere" sogar einen Chef, der
Testbenches und Simulation als Spielerei bezeichnet hat (war auch
Physiker, allerdings primär Softwareentwickler). Ich kenne übrigens auch
keine Informatiker, der durch eine Vorlesung C, C++ so gut erlernt
hätte, dass er damit direkt als Profi im Job anfängt. Welches Personal
an der Uni soll das auch liefern? Jeder muss wohl erst mal ein paar
konkrete Projekte in der Industrie gemacht haben um zu sehen, worauf es
ankommt.
Nochmal zum Anfang, was ist "aus der Art geschlagener Code" ?
VHDL ist eine Hochsprache und als Entwickler sollte man auch von ihren
Mögliochkeiten Gebrauch machen, sonst kannste dich auch hinsetzen und
die Schaltungen wieder diskret aufbauen, viel Spass..
Als Berater solltest Du doch eigentlich selbst am besten wissen, wie man
dem Auftraggeber "beikommt" :-)
Vielleicht erstellst Du jetzt erst mal Coding und Design Guidelines für
den Kunden.
> Will sagen, egal ob man aus dem Ingenieur- oder> naturwissenschaftlichen Bereich kommt, im Endeffekt zählt im> Job was man sich selbst über das Studium hinaus angeeignet
Da muss ich widersprechen. Ich habe ein Studium der Elektrotechnik in
Richtung Datenverarbeitung. Wir haben spezielle Themen des Multitaskings
auf MCUs und auch CPUs behandelt und auch Unterschiede verdeutlicht. Das
möchte ich nicht missen. Da gibt es einige Dinge, die man sich nicht so
einfach aneignen kann. Die muss man schon wissen, bevor man sie
einsetzt, damit man mit ihnen planen und designen kann. Ausserdem
finde ich es an dem Notwendigen vorbei studiert, wenn man sich Wissen
anschafft, dass man später kaum braucht, während man das, was man
braucht, erst hinter lernen will. Wozu Phyik studieren, wenn man
Elektronik und Software bauen will? Physiker sind eher im Systemfesign
und Modelling gefragt.
> als Entwickler sollte man auch von ihren Mögliochkeiten Gebrauch machen
Auch da habe ich eine andere Meinung. Viele Entwickler sehen nur das
Coden und nicht die Aufwände in der Fehlersuche, der Tests, der Prüfung
und der Notwendigkeit, dass andere den Code in eigenen Projekten mal
wiederverwenden sollen. Da ist Einfachheit und Standardisierung gefragt.
>Coding und Design Guidelines
Bei uns in der Firma haben wir sowas! Und es hat sich mit der Zeit auch
bezahlt gemacht, weil Neue sich leichter einarbeiten können und nach
Erlernen der guides auch den alten Code besser verstehen. Und unsere
guides besagen z.b: auf komplexe geniale Konstrukte zu verzichten und
lieber ausdrücklich auszuprogrammieren. Das sieht manchmal hölzern aus,
verschwendet mitunter auch Resourcen und Taktzyklen, aber ist zehnmal
besser portierbar- vor allem Teile und Module des Codes und dies obwohl
es vorher nicht geplant war, weil das Projekt noch gar nicht zu erkennen
war.
>lernt man das an der UNI?
Bei uns durchaus. Wir haben in der VL Softwaredesign sog. Designstudien
angefertigt zu genau diesen Themen. U.a. mit o.g. Ergebnissen!
Optimierbarkeit, Portierbarkeit und Validierbarkeit unter Beachtung von
Standards sind heute Gegenstand von Forschung.
Da gibt es noch viel zu tun!
Wenn man mal rechnet, dass wenigstens 50% des Studiums fachspezifisch
ist (auch der Elektriker studiert ja Physik und Mathe und Grundlagen)
dan hat einer immerhin über 2000 Lernstunden Vorsprung gegenüber einem
anderen Fachgebiet, den es erstmal aufzuholen gälte. Das sind im Beruf,
wenn man nicht nur lernen will, schon einige Jahre. Kommt halt darauf
an, was einem fehlt.
Es gibt dabei aber noch eine andere Komponente: Warum stellen Firmen
denn jemanden an eine Arbeit dran, wenn er wenig Kompetenzen hat und
nicht die richtige Ausbildung? Letztlich zahlen die Firmen nicht gerne
für Inkompetenz sondern schreien ja den ganzen Tag nach praktischer,
also ergebnisorientierter Ausbildung.
Lothar Miller schrieb:> Ein FPGA braucht sowieso keinen Reset. Das hat nach Anlegen der Spannung> loszulaufen und so lange seine Arbeit zu verrichten, bis die Spannung> wieder weggenommen wird. Ein Reset kommt in dieser Aufgabenbeschreibung> nicht vor.
Nicht immer von Xilinx auf alle anderen Hersteller schließen. Wenn ich
zB einen PCI-Core im FPGA habe, wird der PCI-Reset natürlich verwendet.
Außerdem gibt es auch Synthesewerkzeuge und FPGAs, denen man keinen
Initialwert für Signale im Code mitgeben kann bei der Signaldefinition,
die müssen dann quasi sowieso noch in einen definierten Zustand, also
"resettet" werden.
Torsten M. schrieb:> wird der PCI-Reset natürlich verwendet.
Latürnich wird er verwendet. Ohne jede Frage... :-/
Nur: ist er auch nötig und wo ist er sinnvoll?
> Außerdem gibt es auch Synthesewerkzeuge und FPGAs, denen man keinen> Initialwert für Signale im Code mitgeben kann bei der Signaldefinition,
Die sind aber schon älter oder von Actel...
> die müssen dann quasi sowieso noch in einen definierten Zustand, also> "resettet" werden.
Auf jeden Fall wird bei jedem SRAM-basierten FPGA (und mittlerweile auch
den meisten CPLDs) beim Laden jedes Flipflop per Handschlag auf einen
definierten Wert gesetzt. Und alle aktuellen Synthesizer können diese
Möglichkeit der Initialisierung verwenden (wenn die Hardware es
hergibt). Diese Initialisierung ist ganz einfach eine Ressource auf dem
FPGA wie z.B. ein Multiplizierer oder ein RAM. Und die verwendest du
doch auch, wenn es dir Vorteile bringt. Oder nicht?
> Nicht immer von Xilinx auf alle anderen Hersteller schließen.
BTW: Lattice kann die Initialisierungswerte jetzt auch, seit sie den
Synthesizer gewechselt haben.
Lothar Miller schrieb:> Die sind aber schon älter oder von Actel...
Treffer (Actel) ;-)
Damit erübrigt sich auch die Verwendung von irgendwelchen HW-Einheiten
(außer BRAMs), weil keine vorhanden sind, außer ein 1kbit User-Flash,
den ich aber nicht benötige, weil er viel zu klein ist :-(
Also halten wir mal fest, dass es bei manchen FPGAs nötig sein könnte,
Resets und Inits anders zu formulieren. Damit ergibt sich die
Notwengikeit einen herstellerabhängigen Teil und einen unabhängigen Teil
des Designs zu definieren, womit wir wieder beim Thema *strukturiertes
VHDL* wären.
Wird bei euch sowas regelmäßig gemacht?
Wenn nur FPGAs eines einzigen Herstellers eingesetzt werden, ergibt sich
nicht die Notwendigkeit, herstellerunabhängigen Code zu Schreiben. Was
nichts daran ändert, dass, bis auf die BRAMs und die oben angesprochenen
Resets, der von mir "verbrochene" Code auch auf FPGAs anderer Hersteller
laufen dürfte.
Strukturiertes Design heißt für mich eher, dass man das Design zB in
kleine, überschaubare Funktionseinheiten aufteilt, diese modular, lesbar
und verständlich beschreibt und dann in überliegenden Einheiten
miteinander verbindet. Dass man diese einzelnen Einheiten nach
Möglichkeit ausgiebig mit jeweils einer eigenen Verifikationsumgebung im
Simulator testet. Dass man die Einheiten alle mit einem gleichartigem
Portprotokoll ausstattet, damit man sie schnell und unkompliziert
zusammenstöpseln kann. Usw. usf ...
> Wenn nur FPGAs eines einzigen Herstellers eingesetzt werden,> ergibt sich nicht die Notwendigkeit, herstellerunabhängigen Code> zu Schreiben.
Das ist natürlich sehr geistreich gedacht. Wenn man nur Bananenbrei
kochen will braucht man dann folglich auch keine Sortiermöglichkeit nach
Obstsorten.
Der Punkt ist nur der, dass man nie weiss, womit man in 3 Jahren
arbeitet.
Lothar Miller schrieb:> Also Microsemi...> http://www.actel.com/company/acquisition/> Bin gespannt, was daraus noch wird.
Wir hatten letztens einen leitenden Ingenieur von Microsemi da, und was
er vorgestellt hat, sah sehr vielversprechend aus. Vieles schon als HW
integriert von dem, womit wir uns heute noch in VHDL und als Softcore
herumschlagen müssen. Das ging viel weiter, als ich erwartet hatte :-)
Berater schrieb:> Der Punkt ist nur der, dass man nie weiss, womit man in 3 Jahren> arbeitet.
Und was, wenn man das schon weiß? Außerdem sind die Teile, die
herstellerspezifisch sind, größtenteils IP-Cores und so nicht zu ändern,
weil auf den FPGA angepasst ...
Torsten M. schrieb:> Berater schrieb:>> Der Punkt ist nur der, dass man nie weiss, womit man in 3 Jahren>> arbeitet.>> Und was, wenn man das schon weiß? Außerdem sind die Teile, die> herstellerspezifisch sind, größtenteils IP-Cores und so nicht zu ändern,> weil auf den FPGA angepasst ...
Ich denke auch, dass es heutzutage kein einziges FPGA Design geben kann,
das wirklich Hersteller unabhängig sein kann.
Jedes Design in unserer Firma verwendet DCMs, Fifos aus dem Core
Generator usw. und es wäre wirklich unsinnig darauf zu verzichten.
Wichtig ist, so wie Du geschrieben hast, eine Struktur des Designs, bei
der man anzupassende Details leicht identifizieren kann.
Meine Sorge bei den benutzten Designs ist aber nicht die Portierbarkeit,
sondern die Wartbarkeit.
Es ist viel wahrscheinlicher dass jemand anderer ein bestehendes Design
warten und verstehen muss, als dass ich es von Xilinx auf z.B. Altera
migrieren muss.
Letztendlich aber hilft eine vernünftige Struktur bei beidem.
Ob man aber einem Programmierer oder Ingenieur wirklich beibringen kann,
eine Struktur ins Programm zu bringen, bezweifle ich ein bischen. Ich
glaube, da ist vieles Talent, so wie ein Zeichentalent. Der eine hat's,
der andere nicht ...
> kein einziges FPGA Design ... wirklich Hersteller unabhängig
Naja, man kann schon mal die RAMs und die IOs kapseln, damit man
einzelne wrapper tauschen muss und kann. Auch sollten state machines in
eigene design files. Besonders wichtig ist die Trennung bon Prozessen
und Verschaltung. Alles, was Komponenten verschaltet bitte in ein
design, was Signale modifiziert, in ein anderes.
>Ob man aber einem Programmierer oder Ingenieur wirklich beibringen kann
Kann man, kann man! Bei uns haben einige gespukt, gesehen, gelernt,
gemurrt und gejammert, aber o ganz allmählich gelernt, die Vorzüge zu
geniessen. Aber es muss von der Designleitung, dem QM und der
Entwicklungsabteilungen kommen. An den Hochschulen wird es offenbar kaum
gemacht. Wieso auch, der Prof hat meistens nie industrielle SW gemacht.
> Alles, was Komponenten verschaltet bitte in ein> design, was Signale modifiziert, in ein anderes.
Super, das ist genau die Art von §$%&-Coding Style, der die
Xilinx-IP-Cores so absolut undurchschaubar macht. Wenn man das wie
Xilinx noch mit nichtsagenden quasi-automatisch-generierten Kommentaren
verbindet, hat man also Code in "Industriequalität".
> Alles, was Komponenten verschaltet bitte in ein design,
Das ist aber Standard. Das eine ist Struktur, das andere Funktion. Die
Struktur kann man in ein grafisches Design überführen, oder aus einem
solchen beziehen.
lotte schrieb:> ich denke, es ist auch nicht die aufgabe der hochschule
Die der Baumschule vielleicht, oder der Fahrschule, oder wie oder was?
> das ist viel zu kompliziert, um es den studenten beizubringen
Ich hoffe zuversichtlich, das war ironisch gemeint!
Allerdings fehlt dann ein Augenzwinkern... :-/
Junge Leute, die voll "im Saft stehen" sollten so was eigentlich
aufsaugen können wie ein Schwamm. Später im Berufsleben wird so ein
Lernprozess mindestens um den Faktor 4 verlangsamt, weil man ja noch was
anderes machen sollte...
Und wenn sie das schon als Student nicht kapieren, dann taugen sie auch
nicht als Ingenieur (und da können einige wenige Ausnahmen bestenfalls
die Regel bestätigen).
Was Hänschen nicht lernt, lernt Hans nimmermehr.
Stimmt zwar nicht ganz, aber Hans tut sich recht schwer.
>BTW: Lattice kann die Initialisierungswerte jetzt auch, seit sie den>Synthesizer gewechselt haben.
Diese Aussage ist nicht richtig. Lattice gibt keine Garantie dafür, dass
Initialisierungswerte nach jedem Power-Up greifen.
VG, IsKlar
> Junge Leute, die voll "im Saft stehen" sollten so was> eigentlich aufsaugen können wie ein Schwamm.
Das wollte ich aber acuh gesagt haben!!! Wo denn, wenn nicht in der Uni
lernt man die komplexen Dinge?
> Später im Berufsleben wird so ein Lernprozess mindestens um> den Faktor 4 verlangsamt, weil man ja noch was anderes
Wenn man überhaupt Zeit hat / bekommt, zu lernen. Und dann müsste es ja
auch noch einen geben, von dem man das Lernen kann. Also braucht es
wieder ein VHDL-Training.