Ich bin mir ziemlich sicher das Schlaubi-Schlumpf seine FPGAs schlumpft,
und nicht programmiert oder beschreibt. Vielleicht könnten wir
das einfach übernehmen und in Stelleninseraten würde dann stehen:
'FPGA Schlumpf' gesucht. ;-)
Lothar M. schrieb:>>der Trend geht zu kostengünstigen Indern.> Die Inder, die sich hier in D in irgendwelchen Räumen aufhalten, sind> nicht kostengünstig. Kostengünstig sind sie nur, wenn sie im> Remote-Office in Indien sitzen.
Da kommen wir jetzt in einen kritischen, da politischen
Diskussionsbereich, zu dem ich nur ganz kurz was sagen möchte, um den
thread nicht zu abstrahieren und auch nicht in den Verdacht zu geraten,
zu hetzen:
Doch, die Inder, die hier "in den Räumen hocken" sind sehr billig. Die
kriegen als Anfangsgehalt gerade das Minimum mit Hinweis auf
Deutschkenntnisse und gebremste Kommunikation. Allein schon durch ihre
Zahl und das Vorhandensein, entspannen sie den Arbeitsmarkt für den AG
und drücken die Löhne runter.
Ich behaupte dabei nicht, dass sie nichts können - im Gegenteil: Ein
bacheler aus Indien lernt in etwa das Gleiche, wie einer hierzulande.
Man bekommt eben nur in Indien keinen Experten mit 20 Jahren
TopErfahrung, weil es damals nicht so dolle war.
> Und da sollte sich der FPGA-Dienstleister dann die Schlauen> aus den 1,4 Milliarden aussuchen.
Was aus zwei Gründen nicht geht:
1) Die Inder sind auch nicht dumm und wollen am Ende besser verdienen.
Daher gehen sie zu den OEMs. Wir haben uns 2 gekrallt. Die sind richtig
gut und kriegen das Gleiche, wie ihre gleichgestellten Kollegen.
Allerdings: Die Gehälter dieser jungen Leute U30 sind bei Weitem nicht
mehr das, was es zu meiner Zeit mal war.
2) Die Ausbildungen sind dort nicht verifizierbar. Die Inder haben z.T.
gleiche Vor- und Nachnamen und man findet unter ein und demselben Namen
gleich mehrere Ingenieure unterschiedlicher- aber auch derselben
Hochschule. Indien schüttet den Markt mit Softwareentwicklern zu, dass
es nur so kracht und bei Ingenieuren ist es ähnlich. Da die Unis dort
geflrdert werden, wenn sie viele gute Absolventen haben, haben sie eben
viele Absolventen mit guten Noten :-) :-(
Es gibt dann ein Problem: Manche, die das Studium nicht geschafft haben,
kopieren sich die Lebensläufe und Zeugnisse einer namensgleichen Person
und hängen sich da dran. Z.T. gibt es dann doppelte und dreifache
Profile auf LinkedIn.
Am Ende muss man Inder noch mehr testen als die anderen Absolventen mit
ihren gefotoshopten Zeugnissen.
@Gerd:
Ich möchte dir als TO noch etwas schreiben: Alle die nachfolgenden von
dir geposteten Beiträge zeigen mir, dass du von FPGAs nicht viel
verstanden hast. Du hast sehr einfache Projekte gemacht und eine stark
reduzierte Vorstellung von dem was damit zu machen ist und auch gemacht
wird.
Gerd schrieb:> Allerdings ist die Programmierung von FPGAs so viel umständlicher und> braucht so viel mehr Zeit (ich nehme Faktor 5 als Richtwert)
Es gibt keinen Richtwert, weil es verschiedene Dinge sind. Ob man eine
bestimmte Lösung mit einem FPGA überhaupt und besser bauen kann und wie
schnell das zu tun ist, hängt von der Aufgabe ab. Da gibt es alle
Kombinationen zwischen schneller und langsamer, teuer und billiger,
früher fertig und später fertig.
Gerd schrieb:
> Mir viel keines ein. In meiner beruflichen Laufbahn bin ich immer ohne> den Einsatz von FPGAs ausgekommen.
Dann sitzt du auf eine Spezialstelle in einer Spezialfirma, die nur
Spezialprojekte macht. Alles was heute Elektronik ist, hat digitale
Komponenten und braucht programmierbare Bausteine.
Gerd schrieb:> Mittels VHDL wird eine "Fuse-List" erzeugt. Diese werden in das FPGA> geladen
Zu keinem Zeitpunkt wurde jemals eine "fuse list" in einen FPGA geladen.
Gerd schrieb:> Ein Programm kann man laufen lassen. Mit Hilfe eines Debuggers kann man> im Einzelschrittbetrieb nach Fehlern suchen.
Das geht in den FPGA-Umgebungen ganz genau so. Breakpoints, Assertions,
Messages - alles da. Man kann es von der GUI aus, von der Console und
auch vom Code aus steuern.
> Wie kann man ein FPGA Programm laufen lassen?
Das was du "Programm nennst" ist der HDL-Code. Der wird in der
Entwicklungsumgebung wie oben beschrieben laufen gelassen. Der Simulator
rechnet alles mit, zeigt dir die Speicher, die Zustände und sogar den
Ausführungspunkt im Code, weil das sequenziell geht. Es ist dasselbe wie
in jeder anderen Umgebung. Du kannst sogar Visual Studio und Eclipse zum
Handling des Codes hernehmen.
Das eigentliche "Programm" im FPGA, was wir Konfiguration nennen, kann
man genau so laufen lassen: Im ärgsten Fall kann man die Clock einzeln
takten. Das wird man aber nicht tun, sondern einen debugger drüber
hängen. Entweder einen im FPGA oder einen draussen der die Leitungen
beobachtet. Bei uns klemmt ein fettes RACK am ARINC-Bus - kannst du mit
dem OSZI jedes Signal einzeln begrüßen, so wie mit einem Lauterbach am
ARM.
Breakpoints setzen geht auch, wenn man sie instrumentiert: Man
formuliert das Stopkriterium und legt es auch die enables der Schaltung.
Die hält dann sofort an. Wer es braucht.
Lothar M. schrieb:> Eines noch zu dem, was> Andreas F. schrieb:>> Es ist aber schon bekannt, dass>> * in jedem zweiten FPGA ein SoftCore steckt, der C-Software fordert>> * in jedem fünften FPGA ein Hardcore steckt, der C-Software erfordert>> * in jedem zehnten FPGA ein Betriebssystem steckt, das sogar C++ erfordert>> Das ist eine ganze Menge Software finde ich> 80% aller FPGA-Systeme mit einem Soft- oder Hardcore?> Woher kommen diese Werte?
Woher diese Werte kommen? Aus der Vorstellung von Andreas. Allerdings
sind sie alle grundfalsch, denn kein einziger Soft- oder sonstiger Core
erfordert etwas in C Geschriebenes und kaum ein OS erfordert
Programme, die in C++ geschrieben sind. Da kenne ich nur eine Ausnahme:
Symbian. Das exportierte als Schnittstelle irgendwelche Objekte, die mit
C++ gebildet waren. Aber die Zeit der Nokia-Telefone mit Symbian drin
ist vorbei.
Lothar M. schrieb:> Was aber abseits jeglicher Philosophie und Germanistik im täglichen> Leben laufend passiert, ist das: irgendwer "programmiert" sein FPGA mit> Verilog und VDHL genau mit der selben (Zeile-für-Zeile-)Denkweise wie er> auch seinen µC mit C oder seinen PC mit Python "programmiert".
Wer gelernt hat, nach PAP zu programmieren (aka Rumpelstilzchen: Heute
back ich, morgen brau ich, ...) kann sowas erstmal nicht anders. Man
müßte ihm Lehre angedeihen lassen. Fehlt aber offenbar. Tja, das läßt
auf Defizite in der Lehre schließen, wie ich viel weiter oben bereits
geschrieben habe. Anstatt sich "verbesserte" Bezeichnungen für die
verwendete Programmiersprache auszudenken, tagelang hier
herumzudiskutieren und haarspalterisch tausendunddrei Gründe
herbeizuziehen, bloß um den selbstgemachten Unterschied herauszustellen,
wäre eine inhaltlich bessere Lehre weitaus nützlicher - für alle.
W.S.
Lothar M. schrieb:> Eines noch zu dem, was> Andreas F. schrieb:>> Es ist aber schon bekannt, dass>> * in jedem zweiten FPGA ein SoftCore steckt, der C-Software fordert>> * in jedem fünften FPGA ein Hardcore steckt, der C-Software erfordert>> * in jedem zehnten FPGA ein Betriebssystem steckt, das sogar C++ erfordert>> Das ist eine ganze Menge Software finde ich> 80% aller FPGA-Systeme mit einem Soft- oder Hardcore?
Man muss die drei Mengen nicht unbedingt als disjunkt auffassen, was
dann bedeuten würde, das in jedem zweiten FPGA eine CPU als
Hilfscomponente für den Logikteil steckt.
Das könnte dann für die letzten zehn Jahre auch in etwa stimmen. Man
denke da beispielsweise an das Retrocomputing (obwohl die dort
verwendeten 8 bit Cores wie Z80 und Co eher nicht in C programmiert
werden).
Und historisch betrachtet ersetzen diese Cores weniger den Logikteil,
sondern sind eher das Ergebnis der Systemintegration, die inzwischen
gestattet CPU samt Glue,logic, DSP-Arithmetiks etc. unter einem IC-Hut
zu schieben.
Man kommt also auch in den Zeiten, in denen 100% der FPGA's eine CPU
enthalten (egal ob Hard oder Soft) nicht umhin VHDL und Co zu können um
die Turbomöglichkeiten des FPGA auszunutzen. Wer das nicht kann, soll
halt bei seinem Embedded Controllern bleiben.
Lothar M. schrieb:>> Es ist völlig normal, dass Menschen versuchen, mit dem, was sie kennen,>> sich das zu erschliessen, was sie noch nicht kennen.> Ja, und jede Ähnlichkeit mit etwas Bekanntem ("programmieren"?, ja klar,> kann ich!) setzt den Anreiz zum selbständigen Nachdenken herunter.
Das "ja-klar-kann-ich"-Problem gibt es nicht nur beim Wechsel von C nach
VHDL, sondern sogar beim Wechsel von einer Computer-Programmiersprache
zu einer anderen.
Einem erfahrenen C/C++/Java-Programmierer fällt der Einstieg in bspw.
Lisp, Prolog oder Haskell genauso schwer wie einem absoluten
Programmierneuling, wenn nicht sogar noch schwerer. Der Unterschied
zwischen den erstgenannten drei Sprachen (imperativ) und den
letztgenannten drei (deklarativ) ist ähnlich groß wie der zwischen C und
VHDL, weswegen das vermeintlich nützliche Vorwissen des C-Programmierers
den Lernfortschritt eher blockiert.
Plötzlich muss er auf viele liebgewonnene Dinge wie Anweisungen,
Variablenzuweisungen und dergleichen komplett verzichten. Es gibt auch
keine Ablaufsequenz mehr, die sich an der Reihenfolge der Programmzeilen
im Quellcode orientiert. Deswegen ist auch Debuggen mit Single-Step
durch den Quellcode nur sehr eingeschränkt möglich und oft wenig
zielführend.
Jetzt könnte man sich natürlich fragen, warum man das überhaupt noch
"Programmieren" nennt, wo es doch mit der gewohnten Programmiererei kaum
noch etwas gemein hat. Weil es sich um deklarative Sprachen handelt,
könnte man bspw. "programmieren" durch "deklarieren" und "Programmierer"
durch "Deklarierer" oder gar "Deklarator" ersetzen.
Ich glaube aber nicht, dass diese Umbenennung die Einarbeitungszeit auch
nur um eine Minute verkürzen würde.
Anderes Beispiel aus dem täglichen Leben:
Auch ein geübter Radfahrer tut sich schwer, wenn er das erste Mal Auto
fährt. Das ist zwar beides "Fahren", und beide Fahrzeuge haben Pedale.
"Hey, fahren mit Pedalen, das kann ich doch schon längst", sagt der
Radfahrer zum Fahrlehrer, setzt sich ins Auto und strampelt munter
drauflos :)
Sollte man deswegen statt "Autofahren" besser "Automobilieren" sagen und
den Fahrer "Automobileur" nennen, um den Unterschied zu verdeutlichen
und damit vielleicht dem Fahrschüler den Einstieg ins Autofahren zu
erleichtern?
Ich glaube eher nicht. Das "ja-klar-kann-ich"-Problem wird IMHO nicht
(auch nicht ansatzweise) durch Anpassung der Begrifflichkeiten
gemindert.
Aber natürlich ist das nur meine persönliche Meinung, andere mögen
ganz anders darüber denken.
Bei Veranstaltungen gibt es ein Veranstatungsprogramm. Seltsamerweise
gibt es niemanden, der es programmiert hat.
Betrachten wir das Programm, sehen wir zeitlich aufeinanderfolgende
Veranstaltungen. Auf manchen Veranstaltungen gibt es auch parallele
Threads und kann leider nicht zwei Vorträge gleichzeitig besuchen.
Kurz Zusammengefasst: Ein Programm ist eine Liste von Anweisungen, die
zeitlich nacheinander abgearbeitet werden.
Gerd schrieb:> Kurz Zusammengefasst: Ein Programm ist eine Liste von Anweisungen, die> zeitlich nacheinander abgearbeitet werden.
Nö. Keineswegs. Das war mal so.
Spätestens seit Rechner mehr als einen Rechenkern haben, ist das
Geschichte und nebenläufige Programme sind eher die Regel als die
Ausnahme.
Markus F. schrieb:> nebenläufige Programme sind eher die Regel als die Ausnahme.
Stimmt, wobei jedes Modul für sich ein ziemlich strikter Ablauf ist.
Wenn man sich aber mit C++ befasst, ist der Schritt zur völligen
Parallelität eigentlich machbar, meine ich, oder?
Deswegen wird CC+ ja auch bevorzugt, wenn es um das Beschreiben von
Parallelstrukturen geht, die z.B. in einen FPGA sollen.
Markus F. schrieb:> Lustigerweise bewegen sich die Konzepte da mittlerweile aufeinander zu.
Ja das tun sie und zwar von beiden Seiten :.)
> Auch in C++ z.B. ...> Ich würde eigentlich erwarten, dass heutige Studenten,> sich ... deutlich einfacher tun als unsereins,
Kommt drauf an, was man studiert. C++ wurde bei uns seit Mitte 1995
unterrichtet, C und die klassischen Parallelisierungsprobleme
(Philosophenproblem) von Anfang an, als ich dort anfing.
Die meisten sollten also die Chance gehabt haben, Paralleles Denken
anhand von Hardware und Software zu erlernen. Aber wir haben ja die
ganzen FHs die den "theoretischen Ballast" nicht unterrichten.
Wahrscheinlich haben viele damit das Denken nicht mitbekommen, was nötig
wäre.
Wie auch immer ...
Um die eigentliche Frage zu beantworten: Man sollte FPGAs und die Art,
wie man sie programmiert, erst dann durchnehmen, wenn die Basics stehen.
Und das sind aus meiner Sicht die Gatter.
Wenn man so etwas vor Augen hat, ist das Beschreiben mit Formeln und
Umsetzen in eine Schaltung kein Problem. Das bisschen VHDL kann man dann
auch noch lernen, denke ich.
http://www.96khz.org/oldpages/simplesoundgenerator.htm
Gerd schrieb:> Bei Veranstaltungen gibt es ein Veranstatungsprogramm. Seltsamerweise> gibt es niemanden, der es programmiert hat.
Aber sicher gibt es den! Es ist jener, der die Agenda verfasst und
gedruckt hat.
> Betrachten wir das Programm, sehen wir zeitlich aufeinanderfolgende> Veranstaltungen.
Nee. An jedem größeren Theater, Oper und Konzerthäusern gibt es
massenweise parallele Veranstaltungen, Aufführungen, Rehearsals und
Proben.
Das Theaterprogramm z.B. ist immer mein Argument, um denen die so sehr
an dem PGENBC*-Syndrom leiden, die Augen aufzumachen, was das Wort
eigentlich alles heißt. "Parteiprogramm" wäre noch so ein Beispiel und
zwar eins, das ein Paradebeispiel dafür ist, dass etwas "Programm"
heißen kann, real aber rein gar nichts (ab)läuft - im Einzelfall 16
Jahre nichts!
> leider nicht zwei Vorträge gleichzeitig besuchen.
Es muss auch kein Prozessor zwei threads gleichzeitig zu bearbeiten. Er
macht sie nacheinander fertig, im Wechsel. Für den Nutzer sieht es so
aus, als seinen sie gleichzeitig. Das widerspricht nicht der
Parallelität. Man muss hier Parallelität auf Datentaktebene und
Systemtaktebene auseinanderhalten. Übrigens auch bei FPGAs.
Man kann heute per Streaming-TV und Teams im Übrigens durchaus an zwei V
gleichzeitig teilnehmen: Ich schaue oft Fern und programmiere FPGAs :-)
Kürzlich habe ich ein Konzert der Berliner Phils im Streaming gehört und
gleichzeitig American Football gesehen, weil das ständig von Werbung
unterbrochen ist und Dumpfbackenmusik eingestreut wird.
Noch ein "programmatisches" Beispiel für Parallelität aus der Musikwelt:
Bei vielen klassischen Konzerten gibt es deutlich mehr Stimmen, als
Musiker. Gelöst wird das dadurch, dass einer im Wechsel 2 Instrumente
spielt. Ich habe sogar schon mal eine Flötistin vom Großen Haus,
Richtung kleines Haus gefahren, damit sie dort für eine erkrankte
Musikerin einspringen, eine Passage auf der Querflöte spielen und
anschließend schnell wieder zum 2. Akt zurück sein konnte. Der
"Prozessor" hat hier also sogar den PC gewechselt, um einen thread zu
bearbeiten, geil, oder? Mein Aufnahmeequipment lief im Übrigen auch
weiter. Voll parallel.*
> Kurz Zusammengefasst: Ein Programm ist eine Liste von Anweisungen, die> zeitlich nacheinander abgearbeitet werden.
Nur in sehr eindimensionalen Systemen und (Entschuldigung) Köpfen!
Ganz ehrlich: Vielen Menschen und vor allem den Programmierern und
Softwareentwicklern täte es richtig gut, wenn sie mal aus ihrem Kabuff
rauskämen und sich mit ganz anderen Themen und Fragen befassten. Dort
kommen sie mit Menschen anderer Denkweisen zusammen, stoßen auf
Sonderprobleme und deren Lösungen und können so ihren eigenen Horizont
erweitern:
Als die Flötistin wieder an ihrem Platz sass, wusste ich, wie ich meinen
FPGA-Synth dazu bringen kann, mit einer festen und limitierten Anzahl
von Stimmkanälen, eine größere und variable Anzahl von Stimmen zu
spielen und wie ich das zu Programmieren habe: Es braucht ein "Programm"
mit Markern für die Partitur, die Stimme, die Note, das Instrument, die
Position, das Haus und den Takt ... und ein Marker für das "Auto".
-----------------------------------------
1*) PGENBC = "Programmieren-gibt-es-nur-bei-Computern-Syndrom".
2*) moderne DAWs ermöglichen das automatische Starten und Stoppen bei
definierten Pausenlängen, um die Dateien automatisch zu schneiden und
die filelängen zu begrenzen.
Gerd schrieb
>> Kurz Zusammengefasst: Ein Programm ist eine Liste von Anweisungen, die>> zeitlich nacheinander abgearbeitet werden.
Jürgen S.
>Nur in sehr eindimensionalen Systemen und (Entschuldigung) Köpfen!
Hier mag es hilfreich sein, sich die Definition eines Computerprogramms
in der Wikipedia genauer anzusehen:
"Ein Computerprogramm oder kurz Programm ist eine den Regeln einer
bestimmten Programmiersprache genügende Folge von Anweisungen"
https://de.wikipedia.org/wiki/Computerprogramm
Was allerdings noch nichts über die Parallelität der Ausführung von
Programmen auf einem Computer aussagt.
Jürgen S.
>Ganz ehrlich: Vielen Menschen und vor allem den Programmierern und>Softwareentwicklern täte es richtig gut, wenn sie mal aus ihrem Kabuff>rauskämen und sich mit ganz anderen Themen und Fragen befassten. Dort>kommen sie mit Menschen anderer Denkweisen zusammen, stoßen auf>Sonderprobleme und deren Lösungen und können so ihren eigenen Horizont>erweitern:
Die Probleme des Denkens in parallelen Abläufen haben auch mit dem
Denken der Mathematiker des schrittweisen Rechnens und der
Entwicklungsgeschichte der Mikroprozessoren zu tun, die durch die Anzahl
der realisierbaren Transistoren beschränkt waren.
Computer sollten ursprünglich zuallererst den Menschen die Mühsal der
händischen Berechnungen abnehmen und waren ursprünglich nicht für andere
Aufgaben vorgesehen.
In der Robotik, in der ein Roboter alle möglichen Sensoren und
Aktuatoren parallel ansteuern müssen, gab es schon gleich zu Anfang die
Idee der parallelen Verarbeitung.
Wenn du ein LabView-Programmierer wärest, würdest du gar nicht auf die
Idee kommen, dass es eine "Nichtparallelität" bei der Programmausführung
gibt.
Die Beschränktheit der Nichtparallelität sind in den Denkmustern zur
LabView-Programmierung überhaupt nicht vorhanden. Außer in speziellen
Ausnahmefällen hat man mit den Problemen, die in gewöhnlichen
listenbefehlsorientierten Programmiersprachen vorhanden sind, nichts zu
tun.
Es ist übrigens interessant, dass die heutigen Schüler mit "Scratch" als
ablauforientierte, graphische Programmiersprache heutzutage schon in
einem Rutsch Parallelität und Objektorientierung lernen.
https://scratch.mit.edu/projects/358795881/editor/
Jürgen S. schrieb:> Aber wir haben ja die> ganzen FHs die den "theoretischen Ballast" nicht unterrichten.
Hehehe, lass' mir die FHs in Ruhe. Da kommt (meist) eine solide
Ausbildung raus, die einem durch das gesamte Berufsleben hilft (Du wirst
dir denken können, wo ich meine her habe?).
Allerdings bin ich auch der (möglicherweise etwas "altmodischen")
Ansicht, dass ein (Ingenieurs-) Studium keineswegs dazu da ist,
"fertige" Ingenieure zu konfektionieren, sondern Menschen mit
ausreichend Grundlagen auszustatten, um sich schnell in nahezu beliebige
technische Themen einzuarbeiten.
Die müssen nicht können, aber wissen, wie sie flott zum Können kommen.
Nach meiner persönlichen Erfahrung ist ein guter Ingenieur hauptsächlich
ein guter, schneller Lerner. Eben jemand, der sich mit dem was er weiss,
etwas, was er nicht weiss, schnell erschliessen kann.
Das mag aber durchaus daran liegen, dass es in meiner Generation noch
kein wirklich stabiles IT-Berufsbild gab, praktisch sämtliche Entwickler
(mein erster Job war bei einem 3D-CAD Hersteller) waren Quereinsteiger:
Mathematiker, Maschinenbauingenieure, Elektrotechniker und nur ganz
wenige "echte" Informatiker und von denen wusste jeder was, was der
andere dringend brauchte.
Markus F. schrieb:> Hehehe, lass' mir die FHs in Ruhe. Da kommt (meist) eine solide> Ausbildung raus, die einem durch das gesamte Berufsleben hilft (Du wirst> dir denken können, wo ich meine her habe?).
Wenn ich so einen Unsinn wieder lese, dass FHs "praktischer" ausbilden,
nur weil sie viel Theorie weglassen und damit den Schwerpunkt
verschieben. Diese abgedroschene Floskel scheint man ganzen Generationen
in den Kopf geschossen zu haben. An der Uni lernst du EXAKT das gleiche-
nur eben von den komplizierten und mathematisch anspruchsvollen Dingen
deutlich weniger.
Und wie "praktisch" die FH-ler und Bachelorenten damit wirklich sind,
konnte ich gerade heute wieder lernen:
Katastrophal zusammengestrickte Lösungen beim Zugriff auf den FPGA,
sowohl im Treiber als auch im handling der Anfragen an das interne RAM
im FPGA selber. Da rennen die kompliziertesten state machines um
parallel eintreffende Daten zu managen und zu speichern, nehmen sich
dabei gegenseitig die Bandbreite weg. Das Ergebnis sind totale
Blockaden! Diese "Praktiker" haben einfach große Wissensdefizite und
lösen Probleme mit dem Holzhammer, statt auf das zurückzugreifen, was
andere vor ihnen längst ausgedacht haben. Die möglichen Probleme und
Aufgaben bei solchen dynamischen parallelen Prozessen sind nämlich
allesamt hinlänglich bekannt, erörtert, durchdacht, klassifiziert, haben
Namen und Nummern. Es gibt für alles fertige Konzepte, wie man sie mit
Synch-messages, Semaphoren, pipelines und Vorrangstufen löst, worauf
jeweils zu achten ist und wie wann was eingesetzt werden muss oder was
gfs. auch weggelassen werden kann. Das alles wird in einem soliden
vollständigen Informatikstudium bis ins letzte durchgekaut und an vielen
"Praktischen" Beispielen eingeübt und abgeprüft, während es in den
vereinfachten Studiengängen nur gestreift wird.
Solche Probleme lassen sich in der Regel mit ausreichenden Denkaufwand
mit sehr wenig Code und Aufwand lösen- aber nein, den FPGA und das
Zugriffskonzept machen 2 FH-Ingenieure und ein Informatik-Bachelor, die
vom Parallelrechnen nur die Grundbegriffe kennen und sich selber eigene
wilde Lösungen ausdenken, auf die sie auch noch stolz sind, weil sie
diese komplizierte Aufgabe gepackt haben.
Markus F. schrieb:> sondern Menschen mit ausreichend Grundlagen auszustatten
Das wäre schön, wenn das so wäre. Da die Ausbildung an FHs aber meistens
deutlich kürzer ist, erklärt sich von selber, wer mehr Grundlagen zum
Weiterlernen hat.
Krtiker schrieb:> Wenn ich so einen Unsinn wieder lese, dass FHs "praktischer" ausbilden,> nur weil sie viel Theorie weglassen und damit den Schwerpunkt> verschieben.
wo genau hast Du das gelesen?
In dem zitierten Satz, dass da ein solide Ausbildung bei rauskommt.
Klingt so, als sei es anderswo unsolide. Ist mir aber Wurscht.
Eines was mir noch aufgefallen ist?
Markus F. schrieb:> Das mag aber durchaus daran liegen, dass es in meiner Generation noch> kein wirklich stabiles IT-Berufsbild gab,
Was ist denn das für eine Generation? Informatik und IT gibt es seit 30
Jahren.
Phew. Also die ganze Diskussion (nur diagonal gelesen) wiederspiegelt
eigentlich das Problem in der Lehre: Es wird sich nicht richtig
fokussiert.
Um die Unzulänglichkeiten der hierzulande nun halt leider
vorherrschenden HDL-Konzepte wird an vielen Hochschulen zu 80%
herumgeeiert, Konzepte 'neu erfunden' (von Robei über webbasierte HDL zu
VHDP usw.), gezielt zwischen Hardware und Software getrennt, dann wieder
alles für HLS zusammengewürfelt.
Danach ist den meisten Azubis immer noch nicht klar, wie sie in die
Innereien schauen können.
Schlussendlich ist jede Art der Programmierung auf folgendes
runterzukochen:
- Aus einer formalen Notation in einer beliebigen Programmiersprache
(dazu zählen wir auch VHDL) entsteht ein Objektcode (Netzliste, Bytecode
oder Assembly)
- Jeder Azubi muss schlussendlich per Ausprobieren und Blick in die
Innereien ein Gefühl dafür bekommen, wie aus einer programmatischen
Beschreibung (in einem gewissen Stil) in besagter Sprache welches Objekt
erzeugt wird.
Daran richtet sich die Art des Programmierens. Eine funktionale
Beschreibung die sich pur an einer Abarbeitung eines Threads orientiert,
wird von einem klassischen FPGA-Synthesetool nicht umgesetzt (obwohl das
durchaus ginge, siehe auch diverse Arduino-Versuche wie VHDP).
C-Programmierung ist aber nicht wie Forth- oder deutlich
parallelitätsorientierte Occam-Programmierung.
Daran lassen sich auch die Unzulänglichkeiten (oder das komplette
Scheitern) von V* HDL als "Beschreibungssprachen" messen. Haskell oder
Scala können deutlich mehr, sitzen aber nach wie vor in einer in der
breiten Masse wenig vermittelten Nische der funktionalen Beschreibungen.
Da könnte man grundsätzlich eine Programmiersprache/Simulationssprache
als zur Hardwareentwicklung ungeeignet bezeichnen - gäbe es keine
Anforderungen an Revisionskontrolle oder formale Verifikation.
Nichtsdestotrotz wird auch bei grafischen Frickellösungen wie LabVIEW
FPGA-backend HDL als Zwischenergebnis erzeugt, allerdings nicht in der
lesbaren (oder portablen) Form einer funktionalen Beschreibung. Die
Designmethode fällt allerdings eher unter abstrahierten
Schaltungsentwurf anstatt Programmierung (let aside LabWindows). Als
ehestes würde ich noch `Smalltalk` oder `blockly`-Ansätze (gibt's wohl
auch für VHDL) als grafisches Programmieren ansetzen.
Somit kommt man an V* HDL als Transfer- und Simulationssprachen
allenfalls nicht vorbei, wobei das Opensource-Multitool `yosys` diese
Bastion allmählich bricht. Für Entwurf komplexer Designs allerdings gibt
es schlicht deutlich effizientere Methoden der syntaktischen
Beschreibung, kaum einer entwirft noch ernsthaft komplexe Prozessrechner
SoCs bare metal in VHDL oder Verilog. Genau da fehlen hierzulande
Leute, die über den Tellerrand schauen können, sich in moderner
Software-Methodik auskennen (keep it simple) und keinen Unterschied mehr
zwischen HW und SW machen oder sich gar in
Begrifflichkeiten/Befindlichkeiten verzetteln.
Und leider geht auch der Trend bei einigen europäischen FH/TUs Richtung
Abschaffung der harten Grundlagenkurse ("Assembler ist heutzutage total
unnötig") und der Arbeitsmarkt ist gesättigt mit Ingenieuren, deren
eigentliches Können sich fortschreitend schlechter seitens HR
einschätzen lässt. Noch schlimmer wird es, wenn an den HS gezieltes
Lobbying betrieben wird, um die Studenten frühzeitig auf die
Vendor-Tools zu eichen und OpenSource-ist-untauglich zu propagieren.
Fitzebutze schrieb:> kaum einer entwirft noch ernsthaft komplexe Prozessrechner> SoCs bare metal in VHDL oder Verilog
Das liegt aber vorwiegend daran, dass es SofCores in Massen gibt, die
sich bereits selber ausgedünnt haben, weil es sehr viel braucht, um dort
effizient zu arbeiten, ein OS draufzumachen und allem pipapo. Da geht
man eben den Weg und nimmt das, was der Hersteller an SoftCores
anbietet. Keiner hat die Zeit sich mit einem Spezialprozessor zu
befassen sondern nutzt möglich viel von Vorhandenem aus. Also bleibt
nichts über, außer NIOS und MICRO. Arbeitet noch jemand mit PICO?
Und: Die Ansprüche steigen, daher haben X und A sich schon vor Jahren
die CPUs als hardcore reingezogen. Und auch da wird ausgedünnt, weil die
user das machen, was sie können und gerne bei einer Plattform bleiben.
Das waren und sind die ARM-Prozessoren und nicht SPARK oder PowerPC.
Yalu X. schrieb:> Ich glaube eher nicht. Das "ja-klar-kann-ich"-Problem wird IMHO nicht> (auch nicht ansatzweise) durch Anpassung der Begrifflichkeiten> gemindert.
Na doch. Dann würde dem Radfahrer schon begrifflich klargemacht, das
Automobilieren was völlig anderes ist...
Krtiker schrieb:> Und auch da wird ausgedünnt, weil die> user das machen, was sie können und gerne bei einer Plattform bleiben.
Nö, der Grund fürs Ende von Virtex-II Pro war die miesse Ausbeute und
geringe Nachfrage. Und der FPGA-markt (Telecom) verlangte mach
Multigigabit-Transceiver und nicht nach einer Desktop-CPU für
housekeeping-tasks.
Der Virtex E war ein völliger Rohrkrepierer, erst mit Virtex-5 (und
Softcore) ging es wieder aufwärts.
Krtiker schrieb:> Das liegt aber vorwiegend daran, dass es SofCores in Massen gibt, die> sich bereits selber ausgedünnt haben, weil es sehr viel braucht, um dort> effizient zu arbeiten, ein OS draufzumachen und allem pipapo. Da geht> man eben den Weg und nimmt das, was der Hersteller an SoftCores> anbietet.
Ich fürchte das wird in zunehmendem Masse unbeliebter, wenn der Code
portabel (unabhängig von der Zielarchitektur) gehalten sein oder in
Verilog sowie auch VHDL ausgegeben werden muss. Da könnte man lm32
nehmen, gibt aber eine Menge anderer Gründe, einen RISC-V SoC mit
Opcode-Erweiterungen und allenfalls Coprozessor (die sind letzthin der
Knackpunkt) zu entwerfen und von AXI- wie Linux-Overhead und generell
Vendor-Lock-In abzusehen.
Gerd schrieb:> Hier mag es hilfreich sein, sich die Definition eines Computerprogramms> in der Wikipedia genauer anzusehen:
Nein, hilft es nicht, denn erstens ist die Definition in der Wikipedia
nicht vollständig formuliert und zweitens machst du einen logischen
Denkfehler beim Argumentieren:
Du engst den Begriff "Programm" ein, indem du auf die Teilmenge
"Computerprogramm" verweist, ziehst dir von dort die eingeschränkte
Erklärung, um sie dann auf den allgemeinen Begriff zu extrapolieren.
Frei nach dem Motto:
Glasuren werden immer in einem flüssigem Zustand aufgetragen, weil
Kuchenglasuren so aufgetragen werden.
Merkst du, was du machst? Das ist mit Verlaub ein ziemlich gravierender
logischer Fehler, für jemanden der anderen etwas beibringen will. :-)
Und hier kommt der nächste Denkfehler, gepaart mit einem Lesefehler:
Gerd schrieb:> Wenn du ein LabView-Programmierer wärest, würdest du gar nicht auf die> Idee kommen, dass es eine "Nichtparallelität" bei der Programmausführung> gibt.
1a) habe ich nirgendwo eine "Nichtparallelität" unterstellt, schon gar
nicht bei dem Thema Programm, sondern argumentiere exakt gegensätzlich,
wenn du meinen Beitrag nochmal lesen möchtest
1b) wäre ein "Nichtparallelität" nicht zwingend das Gegenteil von
sequentiell, wie du es offenbar siehst
2) ist ausgerechnet Labview nicht geeignet, jemanden den Unterschied
zwischen PAR und SEQ zu offenbaren, weil in einem grafischen
Programmiersystem alle Funktionen gleichzeitig evident sind, aber nicht
100% sichtbar ist, auf welcher Ebene sie auch parallel ausgeführt
werden. Letztlich wird nämlich das Meiste, was in LV scheinbar parallel
ist, von den CPUs auf dem PC sequenziell abgearbeitet.
Ich kenne im Übrigen LV recht genau, weil einige meiner Kunden das
einsetzen und kann gut einschätzen, inwieweit es zum FPGA-Entwickeln
oder generell zum Aufbauen von Messsystemen geeignet ist. Was ich mal
definitiv sagen kann, ist dass es NICHT dazu geeignet ist, Anfängern
paralleles Denken beizubringen- zumindest nicht in der Weise, dass sie
damit irgendwann in der Lage wären, paralleles Arbeiten in CPUs und
FPGAs zu verstehen, geschweige denn, Programme dafür zu entwickeln - es
sein denn mit den eingeschränkten Möglichkeiten von LV.
Gerd schrieb
>Hier mag es hilfreich sein, sich die Definition eines Computerprogramms>in der Wikipedia genauer anzusehen:>"Ein Computerprogramm oder kurz Programm ist eine den Regeln einer>bestimmten Programmiersprache genügende Folge von Anweisungen"https://de.wikipedia.org/wiki/Computerprogramm
Jürgen S.
>>Du engst den Begriff "Programm" ein, indem du auf die Teilmenge>>"Computerprogramm" verweist, ziehst dir von dort die eingeschränkte>>Erklärung, um sie dann auf den allgemeinen Begriff zu extrapolieren.
So richtig glücklich bin ich mit der Definition auch nicht. Ich hatte
eigentlich nach einer Referenz zum Begriff "programmieren" gesucht, dazu
aber leider nichts belastbares gefunden. Das nächstliegende war dann die
Wikipedia-Referenz "Computerprogramm". Wenn hier jemand als einen Link-
oder Referenz dazu hätte, wäre ich durchaus dankbar.
Jürgen S.
>Merkst du, was du machst? Das ist mit Verlaub ein ziemlich gravierender>logischer Fehler, für jemanden der anderen etwas beibringen will. :-)>Und hier kommt der nächste Denkfehler, gepaart mit einem Lesefehler:
Interessanterweise sehe ich das mit dem Lesefehler ähnlich, allerdings
in umgekehrter Rollenverteilung.
Wenn du es also noch einmal nachlesen möchtest
( Beitrag "Re: FPGAs in der Lehre" )
Dort hatte ich die Parallelität schon erwähnt. Der Vergleich mit dem
Veranstaltungsprogramm passt eigentlich recht gut zur optischen
Darstellung in Scratch: dort kann man auch zwei Abläufe parallel
zeichnen, die dann auch parallel laufen.
Gerd schrieb:> So richtig glücklich bin ich mit der Definition auch nicht.
Ihr diskutiert ja immer noch um völlig realitätsferne Definitionen
anstatt euch um die Qualität der Lehre Gedanken zu machen.
Naja, wenn es euch weitaus wichtiger ist, die ultimative Abgrenzung von
eurem Begriff vom "Programmieren" vom Rest der Welt zu finden als daß
ihr euch darum bemüht, die Sparte der FPGA's und anderen
programmierbaren Logik-Bausteinen den jungen Leuten zu vermitteln, dann
ist das eben ein weiterer Beitrag dazu, daß der Horizont des Nachwuchses
sich auf solche Dinge wie "Digitalwrite" und "millis" konzentriert und
der technische Fortschritt woanders stattfindet.
W.S.
Jürgen S. schrieb:> Es muss auch kein Prozessor zwei threads gleichzeitig zu bearbeiten. Er> macht sie nacheinander fertig, im Wechsel. Für den Nutzer sieht es so> aus, als seinen sie gleichzeitig. Das widerspricht nicht der> Parallelität. Man muss hier Parallelität auf Datentaktebene und> Systemtaktebene auseinanderhalten. Übrigens auch bei FPGAs.
Eben. "Parallelität ist nicht ganz der passende Begriff für diese
Besonderheit beim FPGA-Entwurf, die sich garnicht oder nur schwer mit
C-nachgestellten Konstrukten beschreiben lässt.
Passend wäre "Datapath". Während der Datenpfad bei einer (General
Purpose) CPU fix ist, passt man sich diesen beim (kundenspezifischen)
Digitalentwurf als erstes an die Anforderungen an. Dann optimierten man
diesen in dem man mal eine ASAP und eine ALAP Resourcenallocation
annimmt und so den finalen (weil effizienten) Control/DataFlußGraph
(CDFG) findet.
Und dann erst beginnt die Implementierung in VHDL.
https://cse.usf.edu/~haozheng/teach/soc/slides/control-data-flow.pdf
Gerd schrieb:> Interessanterweise sehe ich das mit dem Lesefehler ähnlich, allerdings> in umgekehrter Rollenverteilung.
Weil du verschwommen argumentierst und dich in deinen eigenen Beiträgen
verhaspelst: DEIN Einwand war, ICH hätte eine angebliche
Nichtparallelität beim Programmieren aufgeworfen, was aber nicht stimmt
und du nur falsch verstanden hast.
Seltsamerweise zitierst du DICH, um das nachzuweisen. Richtig aber wäre
es, MICH zu zitieren und zwar mit einem Beitrag, wo das angeblich
durchklingt, was du mir angekreidet hast.
> Gerd schrieb:> So richtig glücklich bin ich mit der Definition auch nicht.
Was es noch unlogischer macht, es als Argumentationshilfe
beizuziehen.(?)
Du argumentierst also mit Aussagen, die erstens inhaltlich nicht passen
und zweitens von dir selber sogar als formell unzureichend eingestuft
werden.
Wenn solche Leute anderen Logik(-schaltungen) erklären wollen, kann man
nur kapitulieren. :-)
Ich bin da jetzt raus. Wie sagte einst Herr Drosten: Ich habe Besseres
zu tun :-)
W.S. schrieb:> Ihr diskutiert ja immer noch um völlig realitätsferne Definitionen> anstatt euch um die Qualität der Lehre Gedanken zu machen.
Naja, sinnvolle Definitionen für Begriffe sind aber schon irgendwie
wichtig, wenn es um Lehre geht, finde ich. Die meisten Sachen sind im
Übrigen auch geklärt. Es hören nur viele nicht genau hin, wenn sie es
selber lernen, vergessen und misverstehen es und geben es dann falsch
weiter. In den Lehrbüchern sind viele Dinge, über die sich Halbwissende
herumstreiten, längst gekärt und durchaus geradlinig und richtig
dargestellt. Es reicht manchmal aber schon, etwas minimal falsch zu
lesen und zu kommunizieren.
Nehmen wir das klassische Beispiel für die Begriffe:
True <-> False
Logisch 1 <-> Logisch 0
High <-> Low
Drei verschiedene Begriffsebenen für ähnliche Dinge aber auf
unterschiedlichen logischen Ebenen, nämlich Funktion (Verhalten),
Realisation (Codierung) und Physik (Pegel). Ist in allen Büchern über
Digitaltechnik, die ich kennen, richtig und sauber getrennt erklärt.
Trotzdem vermischen es 2/3 aller Digitaldesigner und verwenden es
falsch. Inklusive der Firma Xilinx. Das Ergebnis sind (not Resets), die
als "low aktive Signale" deklariert werden.
Mcn schrieb:> Passend wäre "Datapath".
Ja, dabei es allerdings so, dass bei komplexeren Anwendung der data path
mehrdimensional ist, insbesondere, wenn man resourcen sparen möchte.
Die Mimik ist vom Prinzip genau dieselbe wie in einer völlig virtuellen
Datenpfadvielfalt eines C++ System- nur mit dem Unterschied, dass der
FPGA 2 Raumdimensionen hat, einige davon zu ersetzen: Während die CPU
Datenpfade nur in einer Dimension auf mehrere Cores und Threads
verteilen kann, besitzt der FPGA Fläche und Struktur in der Breite, also
für eine Vervielfachung durch Mehrfachinstanziierung und auch in der
Tiefe durch pipeline-Architekturen. Diese haben beide das Potenzial,
virtuelle Datenpfade aufzunehmen und das obendrein an unterschiedlichen
Stellen des design in unterschiedlicher Konfiguration.
Ein Beispiel dafür hatte ich hier mal gepostet:
Beitrag "Re: Effizienz von MATLAB und HLS bei VHDL"
Das ist mit dem klassischen kontrollierten Datenpfad nur ansatzweise
erklärt, weil der aus dem, was ich Taktebene nenne, einfach per enable
die Datentaktebene ausmaskiert. Das reicht deshalb nicht, weil z.B. die
Randbedingungen möglicher loops nicht definiert werden und auch nicht
erklärt wird, welche Modelle der Dateneinspeisung und Rückopplungen für
Iterationen und Rekursionen exisitieren. Ein kontrollierter Datenpfad,
so wie er üblicherweise gelehrt wird, hat die Option, jedes Modul zu
jedem Zeitpunkt an beliebieger Stelle anzuhalten. Das schafft maximale
Flexibilität, reduziert aber die Möglichkeiten eines FPGA auf die
Vorgehensweise einer dynamisch sequenziellen Arbeitsweise, wie sie in
Prozessoren bekannt ist.
Damit wird der FPGA auf CPU-Niveau abgebremst und automatisch
ineffektiv. Das wird man nur dort einsetzen, wo es eben nicht anders
geht. Das Thema FSM hatte ich dazu oben schon eingeworfen: Diese
realisieren jeden Schritt parallel, arbeiten aber immer nur einen
möglichen Schritt "an einer anderen Stelle ab" und das macht nur Sinn,
wenn die FSMs klein sind. Ansonsten wäre das Virtualisieren mit einer
CPU effektiver.
Oder man hat eben mehrere Prozesse, die von derselben FSM abgearbeitet
werden: Sobald die Zahl der Prozesse in die Größenordnung der Länge der
pipeline kommt, welche sich aus der Vereinigungsmenge der möglichen
beschrittenen logischen Pfade ergibt, wird das sehr effektiv und auch
super schnell. Solche Konzepte habe ich aber noch nirgends publiziert
gefunden - jedenfalls nicht für FSMs. Die die mehrere Kanäle verarbeiten
möchte, machen es meistens sequenziell, arbeiten also alle Kanäle
nacheinander ab oder bauen die FSMs voll parallel auf. Dazwischen kennen
sie nichts.