So, schönen guten Tag, ich begrüße Sie zur Fortsetzung der Vorlesung
Grundlagen der Informatik II.
Tut mir leid, dass es noch länger dauerte.
Irgendwie ist heute... oder habe ich hier Probleme mit dem Netz.
Über WLAN scheint die Verbindung nicht zu funktionieren.
Ich habe mich gerade eben über Vodafone hier, über Mobilfunk mit
dem...
mit unseren Rückkopplungs- oder Feedback-Werkzeugen verbunden.
Aber wahrscheinlich bringt das nicht viel, weil Sie nicht ins Netz
kommen.
Das leidet sich eben auch über Ihre Mobilfunkverbindungen.
Ein paar Dinge muss ich noch hinweisen.
Etwas, was ich ganz am Ende eigentlich auf jeden Fall machen muss, was
ich jetzt vielleicht zu Anfang auch schon mal machen wollte, ist Ihnen
diese Folie hier zeigen.
Nämlich die Anmeldung zur Klausur.
Zur Bonus-Klausur sollten Sie bis Ende des Jahres erledigt haben.
Der Stoff geht so in etwa bis CMOS maximal.
Das, was wir jetzt gerade behandeln.
Und das wird also dann Stoff sein auch für...
Also der Stoff, den wir behandelt haben, theoretische Informatik usw.
bis jetzt zu diesem Netz-Schaltwerk-Thematik.
Das ist also etwas, was wir in der Bonus-Klausur dann abfragen werden.
Sie wissen, wie das läuft.
Das Wesentliche ist, dass Sie sich anmelden bis Ende des Jahres.
Also diese Woche noch oder bis Ende Dezember.
Und wenn Sie erst im Januar auf die Idee kommen, dann ist das zu spät.
Dann können Sie nicht daran teilnehmen, weil wir das entsprechend
vorbereiten.
In der Vorlesung waren wir schon etwas weiter gegangen.
Ich hatte Ihnen letztes Mal etwas gezeigt bezüglich der Halbleiter
-Technologie.
Wir hatten uns verschiedene Sachen angeschaut.
Insbesondere zum Transistor.
Ich hatte Ihnen den NMOS-Transistor vorgestellt.
Mit der Funktionsweise, dass eben unter dem Gate hier ein Kanal
entstehen kann.
Sofern ein Potential-Unterschied ist.
Positive Spannung auf dem Gate.
Also positive Spannung in Bezug auf die Spannung an Source oder Drain.
Sodass durch den Feld-Effekt ein N-Kanal entstehen kann.
Das Gegenteil war der Fall bei dem PMOS-Transistor.
Wo wir ein negatives Potential in Bezug auf Relative Source oder Drain
brauchen.
Damit hier ein positiver Kanal entsteht.
Wenn also ein Kanal entsteht, heißt das, ich habe dort Leitfähigkeit
erzeugt.
Durch den Feld-Effekt in diesem Diffusionsbereich.
Und habe dadurch die Möglichkeit, dass Strom fließt von Drain nach
Source.
Oder auch andersrum.
Und ich hatte Ihnen dann noch kurz diese beiden Eigenschaften
zusammengestellt.
Dass man sich klar macht, der NMOS-Transistor sperrt für das Signal 0
am Gate.
Wobei Signal 0 heißt, Erdspannung verwunden mit Erde.
Im Prinzip mit Ground.
Und bei Signal 1 am Gate habe ich einen leitenden Kanal.
Beim PMOS-Transistor genau andersrum.
Jetzt gibt es schon die erste Frage.
Bitte etwas lauter.
Ist es jetzt besser?
Es müsste eigentlich jetzt auch hinten zu verstehen sein.
Kein Problem.
Damit beantwortet.
Die unterschiedlichen Eigenschaften von NMOS und PMOS-Transistor.
Und dann...
Wieder eine Frage.
Bitte.
Sollte eigentlich jetzt in Ordnung sein.
Bekommt man eine Bestätigung nach seiner Anmeldung für die Bonus
-Klausur?
Sie melden sich dort an.
Und das ist ja das ganz normale Anmeldesystem.
Da bin ich überfragt.
Ich kümmere mich darum nicht.
Das machen meine Mitarbeiter.
Jetzt sind die beiden, die das gemacht haben, im Augenblick nicht da.
Frau Merkel vertritt gerade die beiden.
Das werden Sie merken, ob Sie eine Bestätigung bekommen.
Wir sollten eigentlich eine bekommen.
Kann ich nicht wirklich qualifiziert beantworten.
Wir können aber feststellen.
Kann auf die entsprechende Forum reingeschrieben werden.
Ob Sie eine Bestätigung bekommen oder nicht.
Da wird Frau Merkel sich darum kümmern.
Dass die Informationen bereitgestellt werden.
Noch eine Frage.
Noch einmal.
Noch mal etwas lauter.
Jetzt ist es noch besser.
Okay.
Damit ist das schon wieder erledigt.
Jetzt kann ich hoffentlich hier weitermachen.
Dann hatten wir uns angeschaut, was ich mit NMOS und PMOS-Transistoren
machen kann.
Ich kann die CMOS-Technologie damit aufbauen.
Komplementary Metal Oxide Silicon Field Effect Transistors.
Ich kann also durch Kombination von PMOS und NMOS-Transistoren
Inverter bauen oder auch andere Schaltungen.
Wie z.B.
NAND oder NOR-Gatter.
Durch Transistoren aufgebaut.
Mit den PMOS-Transistoren immer in Verbindung mit VDD.
Also mit Signal 1.
Dadurch, dass hier eine Null dran ist.
Ich habe hier gerade einen hohen Potenzial-Unterschied.
Zwischen Gate und 1.
Und dann kann ich am Ausgang an dem C das entsprechende Potenzial von
VDD hinbekommen.
Oder wenn ich hier eine 1 schabe an A, dann habe ich hier
entsprechende Leitungen.
Dann habe ich ein hohes Potenzial am NMOS-Transistor am Gate und kann
dann C auf Ground bringen, also auf Signal 0.
D.h.
ich habe immer die NMOS-Transistoren verbunden mit Ground und die PMOS
-Transistoren mit VDD.
Dadurch habe ich solche komplementären Effekte, wie man sich hier
gerade sehen kann, sehr schön an dem Beispiel der NAND-Gatter und der
NOR -Gatter.
Man kann sich beliebig andere Strukturen noch aufbauen.
Wir hatten einen Transistor-Gatter angeschaut.
Ich habe Ihnen gezeigt, wie man damit ein Verzögerungs-Flied aufbauen
kann mit einem 2-Phasen-Takt, der dafür sorgt, dass wir erst
Informationen hier reinlassen durch diese Schleuse, durch dieses Tor.
Durch I1, Tag 1 kann die Information hier durchlaufen.
Diesen Inverter-Schalten habe ich hier drin in A quer stehen.
Und dann kann man das I2 auf I setzen, I1 auf 0 und dann kann die
Information hier wieder weitergeleitet werden.
Hier habe ich eine gesteuerte Möglichkeit, Informationen zu übertragen
von der linken auf die rechte Seite.
Und das Ganze muss natürlich entsprechend entworfen werden.
Ich habe Ihnen gezeigt, wie man das im Prinzip macht, indem man
Rechtecke entwirft in einem Grafikeditor, indem man entsprechend
Entwurfsregeln implementiert hat und dafür die Beachtung der
entsprechenden technologisch sinnvollen Regeln, um solche Schaltungen
tatsächlich bauen zu können, sodass sie physikalisch funktionieren.
Und da das manchmal etwas aufwendig ist und man jede einzelne Leitung
identifizieren muss, gibt es eben auch etwas höherwertige oder
höhersprachige Ebenen, wie zum Beispiel den Semi-Custom-Entwurf oder
sogar den sehr problemorientierten Ansatz, dass ich einen Silicon
-Compiler habe, der mir also meine Problemstellung, die ich funktional
beschreibe, direkt übersetzt in einen entsprechenden Schaltkreis, der
die Funktion dann bereitstellt.
Ich habe Ihnen dann ganz kurz gesagt, welche Rolle die Entwurfsregeln
spielen, nämlich diese Entwurfsregeln geben an, wie die
Leiterbahnbreiten minimal sein müssen, wie die Abstände minimal sein
müssen und dadurch habe ich festgelegt, wie hoch die
Integrationsdichte sein kann.
Ich habe hier hingewiesen auf die verschiedenen Integrationsdichten,
die wir über die Jahre gehabt haben.
Seit etwa den 80er Jahren, also seit ziemlich langer Zeit
mittlerweile, reden wir von Very Large Scale Integration und man hat
eigentlich aufgehört, das weiter zu steigern.
Im Deutschen haben wir das besser gemacht.
Im Deutschen reden wir über Höchstintegration.
Das heißt, egal wann ich etwas sage, wenn ich über Höchstintegration
rede, dann rede ich über die aktuell mögliche Integrationsdichte, die
in der Technik nicht vorhanden ist.
Ich brauche also nicht diese komischen Attribute wie Very Ultra
Gigantic oder Horrendous.
Das war mir auch so eine schon bald ins Scherzhafte gehende
Bezeichnung, um anzudeuten, wie gigantisch die Größenordnungen sind,
mit denen es hier geht.
Das ist die nächste Folie.
Die erste Folie, die neu ist heute.
Lassen wir uns das kurz angucken.
Worum geht es hier?
Wir haben, was ich Ihnen hier zeige, das ist ein Diagramm, das ich
übernommen habe von einem Kollegen aus Wien, der hier einfach nur
aufgegeben hat, das was mit dem Moore's Law zusammenhängt.
Was ist das Moore's Law?
Das Moore's Law hat etwas damit zu tun, wie sich die
Schallschreißtechnologie entwickelt hat.
Gordon Moore hat ziemlich bald, nachdem die ersten Schaltungen
entwickelt wurden und man so sah, wie es weitergeht, das war also in
den 60er Jahren, hat er sehr schnell gesagt, so etwa anderthalb Jahre
halbiert sich die Leiterbahnbreite bzw.
verdoppelt sich die Integrationsdichte.
Also habe ich doppelt so viele Elemente auf dem Chip.
Also immer leistungsfähigere Chips.
Ich habe auch dadurch mehr Transistoren pro Chip.
Und diese Gesetzmäßigkeit, die er über einen relativ kurzen Zeitraum
konstruiert hat, setzt sich tatsächlich so fort.
Es gibt also Diagramme, wo man dann zeigt, wie die prognostizierte
Entwicklung aussieht und wie die tatsächliche Entwicklung aussieht.
Man hat zunächst gemeint, das kann doch gar nicht immer weiter so
gehen.
Tatsächlich sind wir zum Teil in der Technologie noch schneller
vorangegangen, als das nach dem Moore's Gesetz zu erwarten war.
Wenn Sie darüber mehr Informationen haben zum Moore's Gesetz, schauen
Sie sich dazu irgendwann in den kommenden Webseiten dazu an.
Wir haben auch einen Vortrag dazu bereitgestellt über einen Link.
Wir sehen also hier die Steigung der Leistungsfähigkeit der Rechner,
beziehungsweise hier die Anzahl der Transistoren pro Chip.
Also Millionen von Transistoren, die Sie dann auf einem Chip
integrieren können.
Jetzt ist die Frage, kann ich die eigentlich auch alle genau so
ansteuern, wie es erforderlich ist?
Erbringt ihre Leistung genau so, wie man das erwartet?
Das ist eben so, dass die Verletzlichkeit, die Zuverlässigkeit der
Transistoren mit der Zeit sinkt, beziehungsweise sie wächst nicht so,
wie man das eigentlich braucht.
Das heißt, ich habe eine gewisse abgeflachte Kurve bezüglich der
Zuverlässigkeit pro Transistor.
Und wenn ich jetzt auf die Zuverlässigkeit pro Chip gucke, dann geht
im Prinzip die Zuverlässigkeit pro Chip allmählich runter, weil ich
halt so sehr, sehr viele Transistoren auf einem Chip habe.
Wenn also die Zuverlässigkeit der einzelnen Transistoren nicht so
wächst, wie ich das eigentlich bräuchte, dann, da ich Millionen von
Transistoren auf einem Chip habe, wirkt sich das natürlich aus auf die
Zuverlässigkeit meines Chips insgesamt, weil die ja unabhängig
voneinander arbeiten.
Wie kann die Zuverlässigkeit beeinflusst werden?
Dadurch, dass ich irgendwelche Feldeffekte habe, von außen
irgendwelche Störungen, dass ich einfach Materialermüdung habe und
ähnliches.
Das kann also zum Teil transiente, zeitlich verändernde Effekte haben
oder auch statische Effekte.
Das heißt, man muss sich anschauen, wie ist die Verfügbarkeit
tatsächlich der Chips.
Eine Randbemerkung dazu, man hat bereits hier in den 80er, 90er Jahren
gesagt, die Zuverlässigkeit wird drastisch runtergehen.
Wir können deswegen unter bestimmten Interaktionsdichten gar nicht
runtergehen.
Die Zuverlässigkeit ist tatsächlich besser geworden, als man das
erwartet hat.
Irgendwann werden wir Schwierigkeiten bekommen mit der
Zuverlässigkeit, aber es ist die Frage, wann das tatsächlich passiert.
Hier habe ich Ihnen in einer Tabelle ein paar Dinge angegeben, die ich
auch von Herrn Koppelt übernommen habe, der einfach mal so
konkretisiert, wie die technologische Entwicklung sein wird.
Sie als Wirtschaftsingenieure wollen ja irgendwann mal zuständig sein
für die Entwicklung von Technologie, von neuen Produkten, von neuen
Komponenten und Ähnlichem.
Da muss man wissen, wohin geht das eigentlich.
Also wenn Sie sich anschauen, Speichertechnologie.
Speicher heißt, ich habe Transistoren, um Speicherzellen zu
realisieren.
Also DRAM und SRAM.
D steht für Dynamic.
Das eine ist Dynamic RAM.
Das andere ist Static RAM.
Was hat das mit Dynamic und Static zu tun?
Ich habe Ihnen gar nichts erzählt über Speicherzellen.
Ich habe Ihnen was erzählt über... Sie haben uns Liptoff angeguckt.
Wenn ich liebe Transistoren realisiere, kann man das so machen, dass
sie im Prinzip den Inhalt speichern, aber in dem Augenblick, wo ich
etwas auslese, muss ich den alten Bild wieder reinschreiben, ansonsten
ist er weg.
Das wäre dann nämlich... Da brauche ich wenig Transistoren für, muss
aber, wenn ich gelesen habe, anschließend wieder reinschreiben.
Das heißt, ich habe hier geringe Hardwarekosten, aber muss etwas Zeit
investieren.
Bei Static ist es so, dass ich dafür sorge in der Speicherzelle, dass
egal, ob ich lese, der Wert bleibt drin.
Ich brauche also nicht nochmal den Wert wieder zu aktualisieren.
Das heißt, beim Static RAM brauche ich etwas mehr Transistoren.
Es geht aber schneller.
Und deswegen sehen Sie hier auch die Unterschiede.
Sie haben also bei Dynamic RAM etwa so Faktor 5 höhere Anzahl von
Speicherzellen pro Quadratmillimeter als beim Static RAM.
Im Rechner, kurzer Vorgang, was Sie später sehen werden, haben Sie
Static RAM, wenn Sie ganz dicht beim Prozessor sind, weil der Speicher
schnell arbeiten soll, wenn Sie ein bisschen weiter weg vom Prozessor
sind, reicht Dynamic RAM.
Sie sollen natürlich möglichst viel Speicher haben.
Der ganze Hauptspeicher ist normalerweise in Dynamic RAM gemacht.
Aber der Cache, also ein Speicher, der ausgelagert ist in die Nähe vom
Prozessor, der Funktionen, die wir später noch ansehen werden, der
Cache ist normalerweise in Static RAM gebaut und ist deutlich
schneller als der Dynamic RAM, der Hauptspeicher.
Und wir sehen hier die Elevationsdichten 2007.
Die Tabelle ist etwas älter, aber die Entwicklung bis 2025 ist hier
prognostiziert.
Etwa 500, mehr als 500 Millionen Bits pro Quadratmillimeter.
Quadratmillimeter.
Ja, am Ende der 80er hat man die ersten Megabit-Chips gehabt.
Hier haben wir 500 Millionen Transistoren pro Quadratmillimeter.
Das waren damals Quadratzentimeter.
Also, das ist eine riesige Entwicklung.
Bei Edge RAM ist es nicht ganz so hoch, also die Verhältnisse werden
sich hier noch weiter auseinander entwickeln.
Dann gibt es hier noch so ein paar andere Dinge, zum Beispiel die
Anzahl der CPUs pro Quadratmillimeter.
Dass wir überhaupt eine CPU auf einem Chip haben können, ist ja schon
ein Fortschritt gewesen.
Jetzt geht es um die Anzahl der CPUs.
Der CPU steht für Central Processing Unit.
Im Prinzip der Prozessoren pro Quadratmillimeter.
Hier sind wir also so im Bereich, wir können im Prinzip einfache CPUs
in der Größenordnung machen, später werden es also deutlich mehr sein.
Das heißt, wir können sehr, sehr, sehr hoch integrieren, damit viele
Diligenzen auch wenig Platz kriegen.
Die Kosten pro CPU werden entsprechend geringer.
Das heißt, Rechenleistung wird zukünftig beliebig zur Verfügung
stehen.
Mehr als sie brauchen.
Many-Core, Multi-Core, Many-Core, das ist so das, was hier...
Many-Core-Prozessoren.
Sie haben wahrscheinlich in Ihrem Smartphone zwei Cores oder drei.
Zwei vielleicht.
In Ihrem Rechner haben Sie vier oder fünf.
Wir kriegen heutzutage Multi-Core-Chips.
Wir haben so 30, 60 Cores drin.
Und das werden also zukünftig hunderte sein, die man sinnvoll
beschäftigen muss.
Und das heißt, wir haben hochparallele Rechner an vielen Stellen zur
Verfügung, zu sehr geringen Kosten.
Und die muss man sinnvoll oder man kann sie sinnvoll einsetzen.
Dann lief das Problem mit den Fehlern.
MCTF steht für Mean Time To Failure Pro Chip.
Permanent.
Ganz lang.
Transient.
Relativ kurz.
Transient heißt Fehler, die eben auftreten und danach wieder
verschwunden sind.
Irgendwelche vergänglichen Fehler.
Und dadurch, dass die Integrationsdichte so stark sinkt und die
Zuverlässigkeit pro Komponente runtergeht, wie ich Ihnen auch vorher
gezeigt habe, geht dann irgendwann auch die Mean Time To Transient
Failure runter.
Das heißt, man muss stärker mit Fehlern bei Rechnungen rechnen.
Man muss entsprechend sich darauf einstellen, dass man durch
entsprechende Software dafür sorgt, dass man mit solchen Fehlern
umgehen kann, ohne dass zu fehlerhaften Ergebnissen insgesamt kommt.
Das heißt, man muss Hardwarefehler kompensieren.
Das wollte ich nur andeuten, dass solche Themen eine Rolle spielen.
Also große Steigerung der Integrationsdichte, sehr viel mehr
Speicherzellen pro Quadratmillimeter, wobei eben Unterschiede zwischen
Dynamic RAM und Static RAM da sind.
Große Steigerung bei der Anzahl der CPUs.
Das sind Logikchips, also Logikbausteine, keine Speicherbausteine.
Und schließlich die Probleme, die wir durch die Fehlersituation
bekommen können.
Ganz kurz noch ein Hinweis darauf, dass es Transistoren gibt, die
sehr, sehr klein sind.
Das hat man hier in Karlsruhe irgendwann mal entwickelt.
Da ist man aber noch weitergekommen.
Nicht unter einem Atom, aber ich wollte einfach nur damit andeuten, in
der Miniaturisierung geht man immer weiter runter, aber irgendwann ist
man an der Grenze angelangt.
Ich muss ja zumindest dafür sorgen, dass ein paar Elektronen da hin
und her laufen, dass ich einen gewissen Unterschied habe in der Anzahl
der Elektronen, die eine Ladung ausmachen.
Ein Ladungsunterschied.
Wenn ich das zu klein mache, wenn das nur noch eine Handvoll
Elektronen sind, dann kann ich das nicht mehr messen.
Dann habe ich also da irgendwann physikalische Grenzen für die weitere
Entwicklung.
Das zu den technischen Randbedingungen, CMOS-Technologie basierend auf
NMOS und CMOS-Transistoren.
Die Frage ist, wie baue ich das eigentlich alles auf und wofür brauche
ich das Ganze eigentlich?
Wozu brauche ich eigentlich Hardware?
Wir haben bisher nur gelernt, wie man Software entwickelt.
Und es ist die Frage, wo brauche ich eigentlich Schaltnetze und
Schaltwerke?
Wir kaufen doch einen Rechner und damit ist gut, wir brauchen doch
keine Hardware zu entwickeln.
Aber das ist ein Irrglaube.
Es gibt halt ganz viele Beispiele, wo man Hardware entwerfen möchte.
Es gibt zum Beispiel in der Kraftfahrzeugelektronik gibt es viele
Bausteine, die sind zum Teil programmierend.
Zum Teil werden über Funktionen in Hardware übertragen.
Ich hätte Ihnen mal bei dem Ripple Carry Adder
bei dem Adderer diese beiden Bilder gezeigt, dass wir entweder leere
Berechnungen nacheinander machen können oder durch Pipelining Dinge
parallel machen können beziehungsweise quasi parallel durch
zeitversetztes Berechnen im Pipelining-Modus und dadurch den Durchsatz
deutlich erhöhen können.
Durchsatz erhöhen heißt, Sie haben Hardware-Bausteine, die in der Lage
sind, mehrere Funktionen gleichzeitig ablaufen zu lassen.
Dazu brauchen Sie entsprechende Schaltnetze und schaltende Akkus, die
das unterstützen.
In der Kraftfahrzeugelektronik bei den Anwendungen ABS, Abgaskontrolle
für Brennungssteuerung, für Bremssteuerung, für alles Mögliche, was
dort elektronisch gesteuert wird heutzutage, geschieht sehr viel
direkt durch Hardware-Bausteine, die entsprechend entworfen werden
müssen.
Und insofern ist das ein ganz großes Feld, wo solche elektronischen
Schalter eine Rolle spielen, die auch entworfen werden, wo man nicht
alles ressortiell macht.
Chipkarten enthalten auch Komponenten, also integrierte Schaltpreise,
die entsprechend angepasst sind an die Anforderungen dort für den
Einsatz dieser Chipkarten.
Und insgesamt gibt es immer mehr Produkte, bei denen Sie eingefächerte
Systeme haben, die bestimmte Funktionen erfüllen.
Sie haben dort Sensoren drin und Akkuren.
Sie können erfahren, was an irgendwelchen Stellen passiert.
Sie haben Sensoren bezüglich der thermischen Randbedingungen,
elektrischen Randbedingungen und ähnlichen Sachen.
Und haben im Prinzip gelebt in der Stärke einer Welt, in der
eigentlich alles um uns herum irgendwie durch Sensorik gemessen wird.
Die Informationen werden gesammelt und dann entsprechend
weiterverwendet.
Um Ihnen anzudeuten, was man damit so machen kann, würde ich ganz kurz
hier auf drei Seiten gehen, die Seiten aus Zukunftsgeschichten, die
darstellen, die verschiedenen Szenarien, also in einem elektronischen
Haushalt zum Beispiel.
Da wird halt sehr viel an Sensorik eingebaut sein.
Ich kann an vielen Stellen messen, was dort gerade passiert.
An verschiedenen Stellen im Keller, bei Haushaltsgeräten.
Ich kann messen, was auf dem Dach passiert.
Ich kann so verschiedenste Komponenten im Haus versuchen zu steuern.
Ich kann von Ferne darauf zugreifen.
Das ist das ganze Thema Hausautomatisierung.
Ist immer stärker möglich, weil wir an vielen, sehr vielen Stellen
intelligente, eingebettete Systeme eingebaut haben.
Dann gibt es das Szenario der Service-Roboter.
Dienstleister, die uns unterstützen in unseren täglichen
Arbeitsabläufen.
Zum Beispiel hier ein nicht so alltäglicher Service-Roboter, der
Tennis spielen kann, aber es gibt auch viele andere, die zum Beispiel
in der Küche aufräumen oder Rasenmäher oder Ähnliches.
Der selbsttätige Staubsauger ist ja schon ziemlich weit verbreitet.
Der selbsttätige Rasenmäher ist auch schon relativ weit verbreitet.
Also das sind Szenarien, die durchaus schon realistisch sind und die
sich noch weiterentwickeln werden.
Oder, auch ganz wichtig, ein Szenario, bei dem man eine Präsenz hat an
einem Ort, an dem man eigentlich gerne sein möchte, aber aus
irgendwelchen Gründen nicht kann.
Zum Beispiel bei den Großeltern kann man reingucken, nicht physisch,
sondern virtuell, indem man einfach über den Bildschirm mit denen
kommunizieren kann.
Hier ist also ein Szenario dargestellt, in dem irgendwelche
Dienstleistungen von Handwerkern abgestimmt werden, über Kommunikation
mit Multimedialen geredet.
Also das ist halt einfach die Möglichkeit, Dinge zu beeinflussen,
dadurch, dass wir an vielen Stellen sensorisch und aktuatorisch haben,
also etwas messen können und darauf reagieren können in vernünftiger
Art und Weise.
Das, was... wieso bin ich jetzt auf der Seite?
Die ist ja ganz verkehrt.
Das wollte ich jetzt ja überhaupt nicht.
Ich wollte ganz woanders sein, nämlich auf...
da kommen wir gleich hin...
da sind wir auf dieser Seite.
Genau.
Was ich Ihnen damit mit diesen drei Folien darstellen wollte, war,
dass wir halt immer stärker eine intelligente Umgebung haben.
Intelligente Umgebung heißt, es gibt Geräte, die können die Umgebung
wahrnehmen und können dann darauf reagieren.
Dazu gibt es eine ganze Reihe von Forschungsgebieten, die sich damit
beschäftigen, haben unterschiedliche Namen, ubiquites Computing,
ubiquiteres Rechnen, das heißt, überall verfügbare Rechenleistung,
pervasive Computing, alle Bereiche in unserer Umgebung sind
durchdrungen von Informationsverarbeitung, organic Computing, die
Systeme, die Informationen verarbeiten, können sich anpassen in ihrem
Verhalten an unterschiedliche Randbedingungen.
Also organic Computing ist ganz stark hier in Karlsruhe vorangetrieben
worden in unserem Forschungsprogramm.
Cyber-Physical Systems, sehr aktuelles Mode-Wort, das darstellen soll,
dass wir eine Vielfalt von Geräten haben, von physikalischen Geräten,
die durch eingebettete Systeme gesteuert sind.
Das heißt, wir haben eine digitale Welt, die eine reale physikalische
Welt beeinflusst.
Und ich muss sagen, dass die vernünftig miteinander arbeiten können,
die auch noch vielfältig vernetzt sind.
Cyber-Physical Systems sind eine sehr aktuelle Forschung.
Was ich auf jeden Fall damit feststelle, ist, dass ich in ganz vielen
verschiedenen Komponenten auf einmal Software und Hardware drin habe
und ich muss mich darum kümmern, wie das Ganze arbeitet, ob das
zuverlässig arbeitet oder nicht.
Ich muss mich insbesondere der Produkthaftung stellen, wenn ich ein
Gerät intelligent gestalte, muss ich für die Konsequenz des
intelligenten Handelns auch die Verantwortung übernehmen.
Ich muss also dafür sorgen, dass ich kein Gerät ausliefere, das
irgendeinen Schaden verursachen kann.
Das heißt, sie müssen beweisen können oder nachweisen können, dass ihr
informationsverarbeitendes Gerät tatsächlich bestimmte Anforderungen
erfüllt.
Das ist ein ziemlich offenes Gebiet, dafür eine geeignete
Zertifizierung zu machen.
Wenn es dann noch darum geht, die Systeme sich dynamisch anfassen zu
lassen mit unterschiedlichen Anforderungen, dann sind wir noch weit
davon weg, das tatsächlich garantieren zu können.
Zertifizierung ist also etwas ...
Zertifizierung, das heißt die Zusicherung von bestimmten
Eigenschaften, sodass sie nachweisen können, garantieren können, diese
Eigenschaften werden erfüllt sein während des Betriebs meiner Systeme.
Diese Zertifizierung ist ein wichtiges Thema.
Das ist schon für statische Szenarien schwierig und für dynamisch
veränderliche noch schwieriger aktuelles Thema für die Forschung.
Sie haben im Grundlageninformatik I und auch im Programmieren I über
Verifikation, Zertifizierung und ähnliche Dinge praktisch nichts
gehört.
Wir haben ein bisschen was gelernt über Testen.
Testen ist eine Vorstufe von Zertifizierung, aber wir sind weit weg
davon, wirklich ein Zertifikat ausstellen zu können, weil wir beim
Testen feststellen können, ob Fehler drin sind oder dass Fehler drin
sind, können wir nie Fehlerfreiheit überprüfen.
Das geht nur durch Verifikation und dazu braucht man entsprechende
Werkzeuge.
Für den Entwurf von Hardware gibt es allerdings solche Methoden, gibt
es Werkzeuge, um tatsächlich zu verifizieren, welche Eigenschaften ein
Fallkreis hat.
Das heißt dort sind Werkzeuge entwickelt worden, mit denen man eine
Verifikation des Verhaltens machen kann, einfach wegen dieses Zwangs
die Konsequenzen des Einsatzes der intelligenten Hardware tragen zu
müssen.
Also man hat für Hardware solche Verifikationsmethoden.
Was heißt das jetzt eigentlich, wenn ich Hardware entwerfe?
Ich will ein System bauen.
Im System werde ich einige Dinge haben, die werde ich in Hardware
machen, für Echtzeitanforderungen.
Wenn ich garantieren möchte, dass innerhalb einer gewissen kurzen
Zeitspanne tatsächlich Funktionen ausgeführt werden, da will ich auch
einen hohen Durchsatz haben, ich möchte Sicherheit haben, dass
wirklich diese Echtzeitanforderungen eingehalten werden.
Ein typisches Beispiel, ein Bremssystem muss hardwarebasierte
Komponenten haben, damit einfach diese Echtzeitanforderungen da sind.
In Software kann ich Dinge ausführen, bei denen ich nicht zu starke
Zeitanforderungen habe.
Da habe ich z.B.
für Navigation und Ähnliches, das wäre ein einfaches Beispiel für das
Fahrzeug.
Oder so gibt es Unterscheidungen in Dinge, die ganz respektive
Anforderungen haben mit der Zeit.
Das mache ich in Hardware Dann habe ich einen sogenannten Hardware
-Software -Codesign.
Ich entwerfe ein System und entscheide während des Entwurfsprozesses,
also ich möchte irgendwas entwerfen und ich entscheide dann, was mache
ich in Hardware, was mache ich in Software und muss entsprechend dann
dafür sorgen, dass natürlich die Software auf irgendeiner Hardware
läuft, aber insgesamt ist das dann mein System, das insgesamt die
Funktion erfüllt, die ich brauche.
Okay.
Die ganze Thematik der Korrektheit, der Fehler-Toleranz, der
Testbarkeit muss man sich dort natürlich sehr genau angucken, gerade
wenn wir solche eingebetteten Systeme betrachten.
Und dazu brauchen wir formale Methoden, von denen wir Ihnen nur sehr
wenig bisher in den Vorlesungen erzählt haben.
In der Vorlesung Grundlageninformatik 1 wurde vermutlich von der
Studie ein bisschen drauf Wert gelegt, auch etwas zu hören über
Orthologien und ähnliche Dinge.
Da wurde ein bisschen was über formale logische Modelle erzählt, über
Prädikatenlogik und ähnliches.
Über Verifikation wurde Ihnen noch sehr wenig erzählt, das gehört
eigentlich auch noch mit dazu, aber wir haben halt in dieser Vorlesung
nicht genügend Zeit dafür, um Ihnen alles, was wichtig wäre,
darzustellen.
Auf jeden Fall muss Ihnen klar sein, dass Sie heutzutage, wenn Sie in
irgendeiner Form innovative Produkte entwerfen wollen, damit zu tun
haben wollen, dann brauchen Sie Kenntnis der Möglichkeiten der
Informationstechnologie.
Wir müssen in der Lage sein, wir müssen wissen, was kann ich
eigentlich tun, um formale Aussagen über das Verhalten eines Systems
zu bekommen?
Wo sind die Grenzen, was kann ich tatsächlich machen?
Ich muss diese Methoden kennen und sie entsprechend einsetzen.
Ich muss dafür sorgen, dass ihre Entwicklungsteams sich tatsächlich an
formale Methoden halten.
Es gibt gewisse Standardisierungen, die sollte man berücksichtigen.
Ich muss also bei Systemen sehr genau gucken, welche Eigenschaften sie
haben.
Ein Bereich, wo wir das im Augenblick sehr intensiv machen, ist der
Bereich des Energiesystems.
Das wird immer stärker in Richtung von intelligenten Steuerungen.
Dort muss man etwas sagen zur Verlässlichkeit dieser Systeme.
Natürlich auch zur Effizienz, aber das ist nicht nebensächlich,
sondern das interessiert natürlich auch.
Das sind die Kosten für die Ausführung.
Das sind also die Randbedingungen, die ich beachten muss, wenn ich
Hardware -Software-Systeme entwerfe.
Nun noch mal ganz kurz einen Einblick da rein, wie ich Hardware
überhaupt entwerfen kann.
Ich kann das abstrakt machen.
Ich hatte gesagt, wir haben den Silicon Compiler.
Da kann ich also etwas beschreiben, wie das Eingabeverhalten,
Ausgabeverhalten ist.
Ich kann den Zustandsraum beschreiben.
Ich kann also im Prinzip zum Beispiel einen endlichen Automaten
beschreiben.
Viele solcher Steuerungssysteme sind im Prinzip endliche Automaten und
die muss ich ja eigentlich beschreiben können.
Dann brauche ich einen Strukturentwurf.
Ich muss sagen, welche Komponenten brauche ich?
Also welche Gatter und Ähnliches brauche ich?
Welche Komponenten brauchen Anbieter, Modifizierer, Dividierer,
logische Vergleiche und ähnliche Dinge?
Und dann muss ich sagen, die Register-Transfer-Ebene.
Ich habe also hier einen Register-Block.
Danach habe ich hier oben ein Schaltschild.
Das ist hier ein Schaltnetz-S.
Das ist eigentlich ein Register.
Danach gehen also Werte rein.
Dann kommen hier irgendwelche Werte drauf.
Die gehen in die nächste Register-Stufe.
Und so weiter, wie dann das nächste Schaltnetz-Stufe.
Das heißt, ich habe eine Folge von solchen Verarbeitungsschritten, die
nacheinander arbeiten.
Ein kleines Beispiel war der Ritter-Karrieretter mit den
Verzögerungsstufen dazwischen.
Und ich habe jetzt diese Schaltlogik, die etwas tut und dann wieder
etwas zurückspeichert.
Wenn Sie sich anschauen, die Taktzeit eines Rechners, die wird also
beeinflusst durch die Zeit, die vergeht, um so eine Schaltfunktion
auszuführen zwischen zwei solchen Register-Stufen.
Wir müssen also alles, was Sie an den Schaltkeiten entwerfen, in eine
sogenannte Register-Transfer-Ebene hineinbringen, bei der Sie eine
Kombination darstellen von Schaltnetzen und Registern zur
Zwischenspeicherung der Ergebnisse.
Und insgesamt entsteht daraus dann Ihr großes
Informationsverarbeitendesystem.
Schaltnetze werden umgesetzt in irgendwelche Einzelgatter.
Wir müssen sehen, wie werden diese Schaltnetze tatsächlich aufgebaut.
Das weiß ich, indem ich die Beschreibung über Boucher ausdrücke.
Im Prinzip über Boucher ausdrücke, kann ich die Struktur der
Schaltnetze sofort hinschreiben.
Wir wissen aber auch, dass wir im Endeffekt nachher die Transistoren
dazu entwickeln müssen.
Ich hatte mich auch darauf hingewiesen, dass es keineswegs so einfach
ist, direkt von den einzelnen Gattern auf die Transistoren zu gehen,
weil man da eventuell viel zu viele Transistoren bauen würde.
Beispielsweise bei diesem Atlas-Base-Club, wo man bei einer
Realisierung über die entsprechenden Schaltnetze viel zu viele
Transistoren verwenden würde, falls ich muss in der Lage sein, hier
geeignet auf die Transistorebene zu gehen, auf der Register-Transfer
-Ebene.
Dann gehe ich auf die Layout-Ebene.
Das ist das, was ich Ihnen dargestellt habe in diesem grafischen
Editor.
Diese Beschreibung eines Inverters, gemalt mit verschiedenen Regeln
für den CMOS-Layout.
Danach wird das Ganze gefertigt.
Dann werden diese grafischen Vorgaben umgesetzt, im Max-Tool für die
Herstellung meines Clips.
Dann entsteht daraus tatsächlich die Hardware.
Und das, worüber wir im Wesentlichen reden, als Wirtschaftsingenieure,
ist eher hier oben im oberen Bereich, weniger hier unten.
Warum erzähle ich Ihnen diese Dinge über Hardware, über CMOS, NMOS,
PMOS usw.?
Weil ich denke, es ist wichtig zu wissen, wie eigentlich in der
Hardware bestimmte Funktionen erbracht werden können.
Was das heißt, ein NAND-Gatter in Hardware zu realisieren.
Welche Möglichkeiten es dafür gibt.
Wie sich das auswirkt auf Stromverbrauch und Ähnliches.
Bei CMOS kein Stromverbrauch im Ruhezustand.
Bei NMOS-Technologie Stromverbrauch auch im Ruhezustand.
Deswegen deutlich effizienteres Verhalten.
Und das eben auch mit der Erhöhung der Frequenz, der Stromverbrauch
wächst.
Bei jedem Schaltvorgang entspricht ein kurzer Zeitpunkt des
Stromflusses von VDD nach Ground.
Ich muss Ihnen die Möglichkeiten darstellen.
Und jetzt schauen wir uns mal an, wie ich Formal-Hardware beschreiben
kann.
Sie haben jetzt kennengelernt, wie man Programme schreibt.
Wie man in Java irgendein Programm schreibt.
Jetzt möchte ich gerne Hardware beschreiben.
Ich muss es in einer formalen Sprache machen.
Dazu gibt es Hardware-Beschreibungssprachen.
Eine Sprache, die sich durchgesetzt hat, ist die Sprache PowerDL.
Die entwickelt worden ist vom amerikanischen Verteidigungsministerium.
Und dann sich durchgesetzt hat als Standard, weil sie in dem Bereich,
im verteidigungsbereich, im militärischen Bereich, der Schaltkreise
entwickelt.
Und das hat sich dann durchgesetzt als der Standard.
Es gab in Europa Alternativen, die funktional eigentlich besser waren
als PowerDL.
Das ist auf jeden Fall in Deutschland entwickelt worden.
Aber es hat sich als PowerDL durchgesetzt, wobei es mittlerweile auch
noch andere Sachen gibt, wie System C oder Handle C Circuit.
Es gibt ein paar andere Varianten davon, die sich in letzter Zeit
herausgebildet haben.
Was ist PowerDL?
Very High Speed Integrated Circuit Hardware Description Language.
Und ich werde Ihnen ganz kurz zeigen, wie man damit so einen
Schaltkreis beschreiben kann.
Zum Beispiel eines Volladierers.
Volladierer kennen Sie.
Ich werde Ihnen eine solche Struktur in PowerDL beschreiben, damit Sie
einen Eindruck bekommen, was heißt das Hardware zu beschreiben.
Und was ich beschreiben muss, ist einerseits das Systemverhalten, was
für Eingaben werden gebraucht, was für Ausgaben produziert.
Und wie ist die Struktur meines Systems.
Die beiden Dinge muss ich unterscheiden.
Und ich komme damit zu diesem Beispiel.
Ich möchte jetzt einen Halbadierer beschreiben.
Was ein Halbadierer ist, wissen Sie, das ist ein blauer Kasten mit
zwei Eingängen, der als X und Y bezeichnet, mit zwei Ausgängen, Summe
und Übergabe.
Das Ganze kann ich deklarieren als ein Objekt.
Ich kann sagen, meine Entity, also meine Einheit, mein Gerät,
Halbadierer, ist etwas, was Ports hat.
Ports sind die Ein- und Ausgänge.
XY sind In-Ports, also Eingänge.
Summe und Übertrag sind Ausgänge.
Das muss ich hier zum Beispiel vertrüben.
Und das ist im Prinzip schon alles, was ich brauche, um in der Lage zu
sein, diese Komponente mit anderen zu verknüpfen.
Nur dargestellt, ich habe hier einen Kasten, der heißt Halbadierer,
und der hat zwei Eingänge, X und Y, und zwei Ausgänge, Summe und
Übertrag.
Und jetzt muss ich natürlich noch mehr angeben, das Verhalten
beschreiben.
Also, jetzt sage ich, das Verhalten von Halbadierer ist ein gewisser
Prozess, bei dem also der Wert, der im Ausgang Summe erscheint,
entsteht durch die Operation X XOR Y nach 5 ns.
Das heißt, 5 ns, nachdem X und Y das Eingangen anliegen, ist der
Ausgang Summe gleich dem Wert X XOR Y und der Übertrag entsprechend X
AND Y after 5 ns.
Und dann steht hier WAIT ON X Y, das heißt, man soll warten, bis sich
X und Y die beiden Eingänge verändern.
Wenn die stabil sind, dann soll also dieser Wert abgelesen werden.
Das ist schon alles.
Hier wird ein Verhalten spezifiziert.
Da werden Zeitangaben gemacht und es wird gesagt, welche Eingaben und
Ausgaben miteinander zusammenhangen.
Damit kann ich also jetzt die Komponente deklarieren und ich kann das
Verhalten beschreiben.
Jetzt möchte ich noch ein bisschen mehr machen.
Ich möchte die Struktur beschreiben.
Volladierer.
Volladierer hat ein bisschen mehr als nur ein Halbadierer.
Da habe ich jetzt also 3 Eingänge.
Ich habe meinen Eingang A, meinen Eingang B und den Carry-In.
3 Eingänge.
3 In-Ports und 2 Out-Ports.
Das ist schon die ganze Beschreibung der Komponente.
Volladierer.
So kann ich sie einsetzen.
Mit Eingängen und Ausgängen.
Das ist die Schnittstelle.
Jetzt muss ich etwas angeben zu der Struktur.
Das Verhalten habe ich jetzt nicht angegeben.
Ich gebe jetzt nur die Struktur an.
Da steht jetzt Architecture.
Struktur von Volladierer.
Jetzt werden 3 Signale deklariert.
Hier oben ist mal angedeutet, wie so ein Volladierer aussieht.
Der ist hier aufgebaut aus 2 Halbadierern.
Wir müssen jetzt die beiden Bits, A und B und den Übertrag zusammen
addieren.
Wir können also das Ganze so machen, dass wir zunächst mal A und B
addieren über den Halbadierer.
Dann kommen wir in den Summ-Bit und in den Übertrag-Bit raus.
Dann haben wir noch den Carry.
Und der Carry wird einfach addiert zum Summen-Bit.
Daraus wird insgesamt gesummt.
Also einfach A, B und Carry addiert.
Gibt unser Summen-Bit.
Muss dann noch den Übertrag berücksichtigen.
Wenn also aus den ersten beiden schon ein Übertrag hinauskommt oder
aus der zweiten einen Übertrag hinauskommt, dann muss ich das Ganze
als Übertrag 1 machen.
Ansonsten kommt halt Übertrag 0 raus.
Das heißt, hier habe ich ein Oder-Glied, das die beiden Carry
-Informationen aus dem zweiten und dem ersten Halbadierer einfach
kombiniert über eine Dissumption und dann habe ich hier mein Carry
-Bit.
Das ist die Struktur und hier sind die einzelnen Leitungen jeweils mit
Variablen versorgt worden.
Das heißt, ich habe innerhalb meiner Architektur von Addierern ein
paar interne Signale.
Die Signale TempSum, TempCarry1, TempCarry2.
Und das sind also meine internen Signale.
Ich habe eine Komponente Halbadierer, die ich brauche, und eine
Komponente Oder-Gang.
Das sind die beiden Komponenten.
Und hier diese Komponente Halbadierer hat jetzt X und das ist die
Standard -Definition gewesen und die Komponente Oder-Gang nochmal in
1, in 2 und Out.
Diese Komponente Oder-Gang hat hier einfach zwei Variablen, die
spezifiziert werden.
Und jetzt kommt dazu die konkrete Instanzierung dieser Komponenten.
Ich deklariere also ein K0, ein Halbadierer.
Und dieser Halbadierer bekommt bestimmte konkrete Einsätze zugewiesen.
Dadurch, dass ich das Signal X, das ist hier mein Input X,
abbilde auf A, da ist unser A, und das Y hier abbilde auf B, das ist
unser B.
Das heißt, ich habe dieser K0-Halbadierer bekommt A und B, diese
beiden, die hier angegeben sind, als Eingänge.
Und ich habe bei der Komponente zunächst mal abstrakt hier X und Y als
Eingangsvariable, als Eingangsparameter deklariert gehabt.
Die werden jetzt hier abgebildet, X, Y auf A und B.
Und die Ausgänge Summ und Übertrag werden abgebildet auf Tempsumm und
das andere ist Tempserial.
Das sind also hier die beiden Portmaps, Abbildungen der Ausgänge,
sodass die Infrastruktur hier eingebettet wird.
Dann habe ich eine zweite Komponente, K1, noch eine Instanz meiner
Komponente Halbadierer und hier werden X und Y abgebildet auf Tempsumm
und Carry-In.
Hier habe ich Tempsumm, da habe ich Carry-In.
Und ich habe außerdem die Summe am Ende auf diese Variable abgebildet
und den Übertrag insgesamt von dem Halbadierer hier, das ist mein Temp
-Carry -2.
Dann habe ich eine Instanz eines Oder-Gatters und dort werden die
beiden Eingänge in 1 und in 2 abgebildet auf Temp-Carry-1 und Temp
-Carry -2.
Und ich habe einen Ausgang von meinem Oder-Gatter, meinen Carry-Out.
So sehen Sie, werden also die Strukturen definiert, Komponenten
definiert, ich habe Schnittstellen definiert, abstrakt, kann die
Instanz signieren und entsprechend durch die Abbildung der Ports auf
die Variablen, die ich hier vorgesehen habe, die Verbindung zwischen
den einzelnen Komponenten herstellen.
Also die Verbindung zwischen den Komponenten geschieht in dieser
Beschreibung, dadurch, dass ich eben diese Port-Maps mache.
Das entspricht also der Verbindung von dem Ausgang Tempsumm auf den
Carry -In Halbadierer.
Damit habe ich jetzt also eine Struktur beschrieben, eine Architektur
für einen Volladierer.
Und so eine Beschreibung kann man jetzt nehmen und die übersetzen in
entsprechende Komponenten.
Ich kann dann einen Halbadierer umsetzen in ein Gatter-Schallbild oder
in ein Transistor-Schallbild und kann damit dann systematisch aus
dieser Beschreibung der Struktur tatsächlich einen Schallkreis
entwickeln.
Das macht ein Silicon-Compiler.
Der nimmt solche Beschreibungen an, auf dieser Ebene und kann die dann
umsetzen direkt in ART.
So, es gibt dafür, wie gesagt, zig verschiedene Varianten, die man
hat, der entwirft mit solchen Beschreibungssprachen.
Vielleicht ganz kurz nochmal zurück.
Ich habe Ihnen jetzt VHDL beschrieben.
Damit können Sie jeden beliebigen Schallkreis natürlich entwerfen in
VHDL.
Nein, das werde ich nicht von Ihnen erwarten.
Ich habe Ihnen ein Beispiel gezeigt, ein ganz einfaches Beispiel für
einen Halbadierer und einen Volladierer, wie man also die Struktur
eines Volladierers beschreiben kann in VHDL durch
Verhaltensbeschreibung, Strukturbeschreibung, Komponentendeklaration,
Komponentendistanzierung usw.
Ich kann von Ihnen erwarten, wenn es mal daran geht, dass ich von
Ihnen irgendwas wissen möchte, was Sie alles gemerkt haben aus dieser
Vorlesung.
Ich kann von Ihnen erwarten, dass Sie mit so einem Programm etwas
anfangen können.
Dass Sie vielleicht auch sagen können, was brauche ich, um Halbadierer
zu beschreiben.
Ich werde sicherlich nicht erwarten, dass Sie die Syntax von VHDL
genau beherrschen.
Das kann ich nicht erwarten.
Aber ich möchte, dass Sie wissen, welche prinzipiellen Eigenschaften
wir hier haben in dieser Möglichkeit, formal ein Hardware zu
beschreiben, dass wir es so aufteilen.
Und wenn Sie ein solches Textstück zum Beispiel bekommen würden,
sollten Sie in der Lage sein, vielleicht ein paar Dinge auszufüllen da
drin, oder auch zu sagen, was das bedeutet, was damit beschrieben ist.
Jetzt zu den verschiedenen Varianten des Hardware-Entwurfs.
Das eine ist, dass sich konkret Schaltungen entwerfen.
Zum Beispiel ein Sortierer oder Adhierer.
Einen Adhierer brauche ich in jedem Rechner.
Den muss ich als Schaltkreis entwerfen.
Das ist ein sogenannter anwendungs- geschichtlichen Schaltkreis.
Also zum Beispiel, das war dieses Beispiel, der Adhierer, oder auch
ein Sortierer.
Oder ein Filter.
Kein Kaffeefilter, sondern ein Datenfilter, bei dem Sie immer das
mittlere Element oder den Medien herausfinden wollen aus einem Fenster
von Daten.
Wir brauchen eine Signalverarbeitung mit hohen Durchsatzanforderungen.
Das müssen Sie in Hardware realisieren.
Dafür bauen Sie solche anwendungs-spezifischen Schaltkreise.
Für eine spezielle Anwendung einen Schaltkreis.
Dieser Schaltkreis muss dann funktionieren.
Der muss richtig sein.
Sie können ihn nämlich anschließend nicht mehr ändern.
Sie können nicht, was Sie bei Software können, einfach irgendwann
noch, ah, da muss noch ein Patch dazu, das muss geändert sein, einfach
ein Update.
Das geht bei Hardware nicht.
Da müssen Sie die ganzen Chips ausbauen und ersetzen.
Deswegen sind hier die Qualitätsanforderungen sehr hoch.
Sie machen also sehr viele Simulationen vorher und überprüfen und
verifizieren, dass das, was Sie dort entworfen haben, richtig ist.
Das sind also die application-specific integrated circuits.
Die können Sie auf Leistung optimieren, sehr schnell machen, hohen
Kackraten sicher arbeiten lassen.
Die andere Möglichkeit ist, dass Sie sagen, ich habe gar nicht eine
Anwendung, wo es darauf hundertprozentig ankommt.
Ich möchte aber einen Baustein haben, der in der Lage ist, für
unterschiedliche Funktionen genutzt zu werden.
Mal für die Addition, mal für das Sortieren, mal für das Modifizieren
und so weiter.
Und ich möchte einfach den in unterschiedlichen Bereichen so
programmieren können.
Programmieren mit der jüdischen Software.
In diesem Fall bei einem KineProgrammable Gate Array ist es so, dass
Sie einfach die Komponenten modifizieren können.
Sie können also Konfigurationsblätter angeben, da kommt gleich ein
Beispiel zu.
Man kann hier ausgehen von einer generischen Bausteine mit vielen
einzelnen kleinen Hardwarekomponenten drauf, kann ich so
konfigurieren, dass das ein Addierer wird oder ein Sortierer oder
Modifizierer oder was immer.
So etwas ist wichtig für den Test von Prototypen.
Bevor wir das als ASIC machen, machen wir es erstmal auf FPGA, schauen
sich da das Verhalten an und können das dann umsetzen in eine App
-Specific Integrated Circle.
Hier können Sie jederzeit Änderungen durchführen.
Sie können sogar Sie können Programmen im sogenannten DRA, Dynamically
Reconfigurable Architectures, können Sie zur Laufzeit manchmal Dinge
nachladen und innerhalb eines solchen Bausteins, dadurch, dass Sie
unterschiedliche Komponenten da reinladen, tatsächlich Bausteine,
diese Hardware-Bausteine, zur Laufzeit verändern, sodass sie sich
anpassen können in ihrem Verhalten.
Macht man in einigen Rechnern, dass man im Rechnerkern tatsächlich die
Ausführung von bestimmten Befehlen zur Laufzeit optimiert.
Das Ganze macht Sinn bei kleineren Stückzahlen für eine Anwendung, bei
der sich also der Aufwand für ein Application-Specific-Circuit nicht
lohnt.
Da lohnt sich das nur, wenn Sie so Hunderttausende oder Millionen von
Komponenten brauchen.
Die Leistungsfähigkeit der FPGA war zu Anfang deutlich unterhalb der
von Application-Specific-Circuits.
Mittlerweile sind die auch sehr schnell geworden.
Es gibt die Firma Cisco zum Beispiel.
Die haben fast alle ihre Komponenten in FPGA realisiert.
Das ist also ein wirtschaftlich sehr, sehr, sehr wichtiges Gebiet.
Das ganze Gebiet der Hardware-Bausteine in intelligenten Geräten ist
unheimlich wichtig.
Das brauchen sie an vielen, vielen, vielen Stellen.
Und ich möchte Ihnen jetzt ganz kurz darstellen, was ein vielfältiger
Gateway ist.
Im Gegensatz zu einem Schaltkreis, wie Sie es mal kennengelernt haben,
ist hier zu ganz klein ein Name.
Das ist ein Fehler in der Animation, aber der Name Xilinx, C-Linx
geschrieben, ist jetzt gleich die Grabepause.
Xilinx ist also der Name einer riesigen Firma, die FPGAs herstellt.
Deren wesentlicher Kunde ist Cisco.
Wie sieht so ein Xilinx-FPGA aus?
Das ist ein Field-Programmable-Gate-Array.
Gate-Array heißt, Sie haben hier solche Komponenten in einem Feld,
einem Array, zweidimensionalen Array dargestellt.
Und am Rande haben Sie auch noch eine ganze Reihe Komponenten.
Man sieht das alles.
Sie haben also einerseits I-O-Blöcke da drin, um hier irgendwelche
Eingaben zu machen.
Sie können also hier von außen Informationen reingeben mit diesem
Chip.
Brauchen Sie auf jedem Chip natürlich auch.
Und Sie haben also hier I-O-Blöcke, die Sie programmieren können.
Hier sehen Sie so einen typischen Schaltkreis.
Das heißt, Sie können die Funktion des Eingangs verändern.
Das sind I-O-Blöcke.
Dann gibt es Komponenten, das sind Verbindungen zwischen den einzelnen
Gate -Komponenten hier, den sogenannten logischen Blöcken,
programmierbaren logischen Blöcken.
Diese Verbindungen sind unterschiedlich.
Sie können also hier solche Kreuzschienenverteiler, da können Sie also
irgendwie Verbindungen bauen, sodass Sie hier von oben nach rechts
oder von unten nach links laufen können.
Das können Sie konfigurieren in Gebisssätzen, die die Verbindungsart
dieser Komponenten verändern.
Und dadurch können Sie dann Leitungen legen, zum Beispiel eben hier
dafür sorgen, dass Sie hier solch eine Verbindung haben.
Ja, da werden jetzt diese drei Komponenten miteinander verbunden.
Das wird gemacht über diese Konfiguration solcher Schalter, die so
viele einzelne Ausgänge haben.
Kleine Kreuzschienenverteiler, mit denen Sie solche Komponenten also
diese Verbindungen schalten können.
Das sind programmierbare Verbindungen.
Und dann kommt noch etwas, was Sie programmieren können, verändern
können durch Konfiguration Bits.
Das sind diese Configurable Logic Blocks.
Das sind die einzelnen Komponenten, das sind diese Gates von diesem
Gate Array.
Diese Configurable Logic Blocks bestehen aus Multiplexern, einigen
Logikbausteinen und ein paar Tabellen.
Das heißt, wir haben hier die Möglichkeit, bestimmte logische
Funktionen über eine Wertetabelle, also wenn wir nur eine dreifältige
Funktion haben, oder drei Funktionen mit drei Eingängen oder vier
Eingängen haben, da haben Sie ja nicht so viele verschiedene
Varianten.
Ich habe ja 16 Möglichkeiten, wenn Sie vier Eingänge haben.
Diese 16 Eingabekombinationen, für die können Sie entsprechend eine
Bitkombination abspeichern und damit konfigurieren Sie eine Funktion.
Das heißt, wir haben hier im Prinzip Tabellen, gesteuerte Funktionen
und dann hier noch die Möglichkeit, verschiedene solche Komponenten,
die hier also gesteuert werden können über Tabellen, also über die
Wertetabellen der Funktionen, die können Sie dann noch geeignet
kombinieren.
Das sind jetzt irgendwelche Schaltkreise, die es Ihnen erlauben, die
in der eigenen Art und Weise zu kombinieren.
Auch da können Sie noch vorher Bits konfigurieren können,
unterschiedliche Art und Weise.
So kann man also jetzt zum Beispiel um, oder oder, oder auch so, oder
noch etwas komplexere Bausteine, Addierer, Volladdierer.
Manchmal ist es so, dass Sie einzelne Komponenten haben, die schon
vorprogrammiert einen Multifizierer realisieren.
Solche Komponenten sind auf einem solchen Spielprogramm über GateArray
vorhanden.
Und jetzt können Sie durch einlesende Konfigurationsbits dafür sorgen,
dass so ein GateArray auf eine bestimmte Funktion programmiert wird.
Dann müssen Sie die CLDs konfigurieren und die Verbindungen.
Und Sie haben einen Schaltkreis.
Sie können den dann einsetzen, so wie Sie ein Async eben auch
einsetzen würden.
Sie haben eben hier nur keine Möglichkeit, die Länge der Verbindungen
sehr stark zu beeinflussen, wie das bei einem Full-Custom-Design ist.
Aber das ist eben hier für Prototypen hervorragend geil.
So, das war ganz kurz zu den GateArrays und nur ganz kurz eine
Übersicht.
Das ist so in etwa über den Daumen die Verteilung von typischen
Anwendungen für solche Hardware.
Sie brauchen sehr viel natürlich direkt im Rechner und auch in der
Peripherie.
Sie brauchen in militärischen Anwendungen sehr viel im Zug, also in
der Luftfahrt brauchen Sie, auch in der Raumfahrt brauchen Sie sehr
viel Hardware.
Sie brauchen in der Industrieautomatisierung sehr viel
anwendungsspezifische Hardware und auch solche Programme mit
GateArrays und dann in der Kommunikation ebenfalls sehr viel solcher
Hardware -Bausteine.
Was ich Ihnen damit andeuten wollte, ist einfach, der Entwurf von
Hardware von solchen Bausteinen, die mit Hardware-Software-Codesign
entwickelt werden, ist ein wahnsinnig großes Geschäftsgebiet.
Das ist etwas, wo man durch einen effizienten Entwurf wirklich
wirtschaftlich aktiv sein kann.
Leider haben wir in Deutschland durch unsere Industriepolitik dafür
gesorgt, dass die Firmen überwiegend ihren Betrieb hier eingestellt
haben und ins Ausland gegangen sind.
Bei so üblichen Schaltpreisen.
Bei den anwendungsspezifischen Schaltpreisen, bei Custom-Design, da
sind wir in Deutschland aber immer noch sehr gut.
Und da gibt es vieles, was man noch machen kann.
Also der ganze Bereich eingebettete Systeme ist ein wirklich
wirtschaftlich sehr wichtiger Bereich.
Und wenn Sie sich anschauen, die Anzahl der Rechner, die es so gibt,
die ist schon sehr hoch.
Aber das ist nur ein Bruchteil, der also jetzt Rechner, PCs und
ähnliches.
Die Anzahl der Prozessoren in eingebetteten Systemen, die ist riesig.
Ein Vielfaches von dem, was Sie so normalerweise an Laptops mit sich
rumschleppen oder an Rechnern, an Arbeitsplätzen sehen.
Das heißt, der Markt für solche Anwendungen ist ein Vielfaches größer
als der Markt für normale PCs.
Das heißt, hier sind ganz interessante Geschäftsbereiche.
Und hier wird einiges bestimmt, was die sicheren Möglichkeiten der
Wirtschaft angeht.
Konkurrenzfähigkeit der Wirtschaft hängt sehr viel von Intelligenz in
irgendwelchen Produktionssteuerungen ab und ähnliches.
Da wird ganz viel an solchen intelligenten Systemen gebraucht, die man
in einem Hardware-Software- Codesign entwickelt.
Und darauf wollte ich hier im Wesentlichen hinweisen.
Ich kann immer wieder betonen, der Wirtschaftsingenieur sollte wissen,
welche Potenziale die Informationstechnologie bietet.
Nicht nur im Bezug auf das Schreiben von Java-Programmen, sondern auch
im Bezug auf diese anderen Komponenten, die ich Ihnen hier gerade
vorgestellt habe.
Das ist nochmal ein Hinweis auf die Bonusklausur.
Und damit sind wir am Ende dieses Kapitels.
Und ich komme damit zum Kapitel, bei dem es gehen wird, um
Codierungen, Zahlen darstellen.
Ich hätte schon mal gesagt, ich bin leider mit der Zweiteinteilung
nicht so hingekommen, wie ich das gehofft hatte.
Und deswegen möchte ich mich ein bisschen beeilen mit dem
Vorlesungsstoff.
Deswegen muss ich leider auch den Anteil der vierstündigen Vorlesungen
etwas erhöhen, gegenüber der vierstündigen Planung.
Das werde ich Ihnen aber Anfang des Jahres mitteilen, wie viel wir
davon noch brauchen werden.
Also.
Codierungen, Zahlen darstellen.
Ich habe Ihnen jetzt einiges erzählt über die Hardware.
Wie kann ich Funktionen im Rechner tatsächlich umsetzen?
Wie kann ich Bausteine erstellen, mit denen ich
Informationsverarbeitung machen kann?
Die andere Frage ist, wie kann ich eigentlich dafür sorgen, dass
Informationen geeignet verarbeitet werden können?
Das sind hier wahnsinnig viele Unterabschnitte, durch die wir jetzt
gleich im Anschluss durchgehen werden.
Nicht durch alle.
Dieser Teil hier, der bleibt ein bisschen außen vor.
Den habe ich nur zur Information eingebaut.
Interessantes Gebiet.
Kommunikation um etwas geheim oder auf eine vertrauliche Art und
Weise.
Vor allen Dingen werden wir uns zum nächsten Mal damit beschäftigen
müssen, wie kann ich hier auch Informationen in den Rechner
hineinbekommen und dann geeignet verarbeiten.
Was heißt das eigentlich, dass ich irgendeine Information in den
Rechner lege?
Was habe ich eigentlich für Informationen?
Ich habe irgendwelche Zahlen oder Buchstaben, die möchte ich geeignet
darstellen können.
Also Zahlen.
Natürliche Zahlen.
Ganze Zahlen.
Also positiv, negativ.
Rationale Zahlen.
Reelle Zahlen.
Kann ich eigentlich im Rechner irgendetwas darstellen, was keine
rationale Zahl ist?
Wenn das keine rationale Zahl ist, ist es eine irrationale Zahl, für
die ich keine endliche Darstellung habe.
Ich kann im Rechner nur Dinge darstellen, die endliche Darstellungen
haben.
Also alles, was ich im Rechner darstellen kann, ist eigentlich immer
nur eine rationale Zahl.
Reelle Zahlen kann ich gar nicht darstellen.
Richtig, irrationale Zahlen.
Ich kann sie approximieren.
Ich muss mir überlegen, wie kann ich damit geeignet umgehen?
Wenn Sie aber gucken, was Sie machen in allen möglichen Anwendungen,
Statistikanwendungen, irgendwelche PAD-Systeme oder was immer Sie
berechnen, ganz oft haben Sie reelle Zahlen, mit denen Sie umgehen
wollen.
Die sind im Rechner aber nicht vorhanden.
Im Rechner sind rationale Zahlen vorhanden, mit einer endlichen
Genauigkeit.
Das heißt, da gibt es gewisse Probleme, mit denen man geeignet umgehen
muss.
Und auf den Punkt muss ich Sie auf jeden Fall hinweisen.
Also, Zahlen, Wahrheitsbilder, das ist ganz einfach.
True und false, 0 und 1, die haben wir zur Verfügung.
Texte, Zeichenketten, die sollen fest im Alphabet liegen.
Wie stelle ich eigentlich Buchstaben im Rechner dar?
Und dann nicht nur Texte, Sprache, Bilder, Videos.
Wie kann ich die eigentlich im Rechner darstellen?
Wie zeichne ich die Vorlesung auf?
Das, was ich hier male, wenn ich ein schönes Bild plane, das sind
irgendwelche schönen Bilder, die werden abgespeichert im Rechner.
Wie wird das eigentlich gemacht?
Kann ich auf das Objekt jetzt hier wieder zugreifen?
Kann ich leider nicht, weil das einfach nur als Frame abgespeichert
wird.
Es gibt Systeme, bei denen man das als Objekt wieder abspeichert, eine
ganz andere Art der Informationsverarbeitung.
Wie macht man das eigentlich?
Oder bei Videos, wie kann ich ein Video oder ein Film oder irgendwie,
wie kann ich die geeignet abspeichern?
Das muss ich auch irgendwie machen.
Also es gibt sehr, sehr viele verschiedene Datentypen, die ich
entwickeln muss, um Informationen aus der realen Welt im Rechner
abzuspeichern.
Ein Bereich, der übrigens noch ganz außen vor ist, sind irgendwelche
Gerüche.
Sie könnten Gerüche darstellen, ein- und ausgeben, im Rechner.
Interessante Vorstellung, wie man das beeinflussen könnte.
Eigentlich reicht es, wenn Sie Geruchsempfindungen wahrnehmen können.
Wenn Sie also einfach sagen, ich möchte jetzt, dass mein Empfänger
eine Geruchsempfindung bekommt, die sehr schön ist oder sehr schlecht
oder sowas, muss man entsprechend die Beeinflussung von Genitalien
machen.
Da Sie sowieso mit irgendwelchen Komponenten am Kopf rumlaufen werden,
die für die Kommunikation zuständig sind, kann man dann natürlich auch
entsprechend durch Auswendung von Signalen dafür sorgen, dass gewisse
Rezeptoren im Genitalien beeinflusst werden und eine Geruchsempfindung
ausgenutzt wird.
Das ist nicht Fiktion.
Das kann man tatsächlich machen.
Irgendwann.
Noch nicht für jeden verzichtbar, aber irgendwann wird das verzichtbar
sein.
Also, viele verschiedene Informationen irgendwie muss ich die
darstellen.
Hier sind so ein paar Sachen angegeben.
Das ist das Einfachste, also irgendetwas dual darzustellen, mit 0 und
1.
Auch das ist mit 0 und 1, aber schon in einem gewissen Format.
ASCII, American Standard Code for Information Interchange.
Sie werden das da etwas genauer kennen.
Die Probleme sind, im Rechner kann ich eigentlich nur zwei
verschiedene Zustände unterscheiden.
Positives, ich kann also Signale 0 und 1, bzw.
VDD und Ground kann ich unterscheiden, Großpotential,
Lieblingspotential, das alles.
Deswegen machen wir alles mit zwei Bits.
Es ist auch effizient in der Informationsdarstellung.
Das heißt, ich muss alles im Endeffekt als binäre Wörter darstellen.
Die Frage ist, wie mache ich das auf geeignete Art und Weise?
Und ich muss diese Information übertragen können.
Auf verschiedene Strecken, drahtgebunden, nicht drahtgebunden und
ähnliches.
Ich muss Bilder übertragen können.
Ich muss mich darum kümmern, was passiert, wenn ich Dinge übertrage.
Können die vertraulich bleiben oder nicht?
Früher war das für das Militär wichtig, mittlerweile ist es für e
-Commerce und digitale Signaturen wichtig, dass ich vertraulich etwas
schicken kann oder kryptographische Methoden einsetzen kann in der
Kommunikation.
Und ich muss manchmal übersetzen von einer Sprache in eine andere.
Es gibt Anwendungen, bei denen Sie das Telefon auf Deutsch
freisprechen und Ihr Kommunikationspartner in Japan hört, Sie
Japanisch sprechen.
Das geht.
Ja?
Das wäre dann eine Art der Übersetzung von einer Sprache in die
andere.
Es gibt die schönen Sprachübersetzungswerkzeuge, die bei Google oder
bei Babelfish oder ähnliches oder Leo, Babelfish ist noch netter, da
können Sie ganze Texte übersetzen.
Also das sind so Dinge, die muss man irgendwie im Rechner machen
können.
Weil Übersetzung natürlich gerade schwierig ist, Übersetzung von einer
anderen Sprache ist relativ einfach.
Und dann kommen wir weiter rein, wenn wir davon reden, wir wollen
etwas darstellen, dann heißt das, wir müssen irgendwie etwas aus der
realen Welt, natürlich aus einem Bereich A, in einer Art, in einem
Bildbereich B, irgendwie darstellen können.
Das ist eine Codierung.
Das sind Abbildungen.
Abbildungen sind mathematisch leicht modellierbar.
Und dann muss ich sehen, kann ich das nur in der einen Richtung, kann
ich es auch wieder umkehren?
Was ist mit Fehlern, die auftreten können?
Kann ich die erkennen?
Kann ich sie korrigieren?
Wenn ich Daten hinstecke über eine über irgendeine Drahtstrecke oder
Punktstrecke, kann ich Fehler korrigieren.
Wenn ich Daten aus dem Speicher hole, kann ich das korrigieren, wenn
dort ein Bitfehler aufgetreten ist.
Dann Redundanz.
Wenn Sie sich den Text hier anschauen auf dieser Seite, da ist ganz
viel Redundanz drin.
Könnte ganz viel rausstreiken.
Und Sie würden immer noch erkennen, was da drin ist.
Es gibt so Beispiele, wo Sie Texte bekommen, da steht nichts
Vernünftiges drin, aber es gibt einige Elemente, die Sie erinnern an
Wörter, die Sie kennen und aus dem Zusammenhang können Sie den Text
lesen.
Ich habe das leider zum Beispiel nicht da, aber es gibt so schöne
Beispiele für solche Texte, die, wenn Sie sie wörtlich angucken, ist
da kein einziges richtiges Wort drin in einer Sprache, aber Sie können
es lesen.
Das heißt, da ist sehr viel Redundanz in unserer Sprache drin.
Und die Frage ist, wenn ich jetzt etwas abspeichern will, muss ich
dann wirklich alle diese Buchstaben auf dieser Seite abspeichern?
Ich muss ja nur die Informationen abspeichern.
Also kann ich durch diese Abbildung, die ich hier machen möchte,
darüber, kann ich dadurch vielleicht den Speicherplatz deutlich
reduzieren, den ich brauche, um etwas darzustellen.
Sie setzen sowas alles ein, wenn Sie jeden Teil sippen, dann
reduzieren Sie die Redundanz in der Darstellung einer Datei.
Sie können es anschließend wieder zurückgewinnen, weil Sie die
Informationen abgespeichert haben und nicht die konkrete Darstellung.
Sie können aus der Information wieder die Originaldarstellung wieder
erzeugen.
Also das ist etwas, was Sie alle nutzen mit mit mit mit Sipp und
ähnlichem.
So.
Ich werde also jetzt hier Ihnen ein paar Dinge dazu mal jetzt kurz
vorstellen.
Wie kann man das machen?
Ich habe also Alphabet A und B.
Das Alphabet A und B, das wissen Sie ja aus dem ersten Kapitel.
Wir machen jetzt also eine Kodierung, indem wir Zeichen eines
Alphabets kodieren in irgendeiner Form.
Also eine 2, das Zeichen 2, könnte ich zum Beispiel abbilden auf 1 0.
Zwei Zeichen, 1 0.
Das Zeichen 3 könnte ich abbilden auf 1 1.
Zufällig ist das eine übliche Kodierung als Dualzahl.
Da habe ich also eine Darstellung eines Zeichens, also meinetwegen
meine Ziffern, durch irgendwelche 0 1 Folgen, über Alphabet 0 1.
Das wäre eine solche Kodierung.
Das, was ich dann bekomme, als Bilder meiner Symbole aus dem Alphabet
A, das wäre der Code.
Und jedes einzelne Element dort drin wäre ein Codewort.
Also das hier wäre ein Codewort, das ist auch ein Codewort.
Und die Menge aller dieser Codewörter wäre dann der Code.
Und die Abbildung ist die Kodierung.
Ein einfaches Beispiel wäre eine Zählkodierung.
Wenn Sie sowas noch kennen, ein altes Telefon, da haben Sie hier eine
Wählscheibe.
Da können Sie also hier irgendwo einen Finger reinstecken und können
dann die Scheibe drehen und dann springt sie wieder zurück.
Wenn Sie also hier bis zum Anschlag gegangen sind, das läuft zurück.
Dann wird genau das hier passieren, was dort steht.
Es werden dann Signale erzeugt.
So viele Ls, oder die klackern manchmal, man hört auch ein bisschen
das.
Da wird die Anzahl der Ls im Prinzip verändert und am Ende nochmal ein
Abschlusszeichen 0.
Oder O.
Also zwei Zeichen, L und O, hätten auch 1 und 0 sein können, wird aber
hier so dargestellt.
O und L.
Und je nachdem wie weit, die Ziffern sind hier so angeordnet, dass Sie
eben für die 0, die ist ganz unten, müssen Sie ganz rum und dann
rattert das hier durch, dann haben Sie hier Ihre 10, 11 und ein O am
Ende.
Also das ist eine Zähl- codierung.
Und was hier interessant ist, wenn Sie sich irgendwo so ein Wort
anschauen, Sie können die eindeutig unterscheiden voneinander.
Wenn ich hier hinschreibe, L, O, L, O, dann sagen Sie sofort, aha, das
ist also hier 1 und 2.
Das heißt, Sie können sofort die Trennungen feststellen, durch die O's
haben Sie die Trennung.
Ich erwähne das, weil diese Eigenschaft, dass hier kein Codewort
Präfix eines anderen Codewortes ist, also wir haben nirgends ein
Codewort, das so aussieht, dass mittendrin irgend so ein O auftaucht,
das O ist nur am Ende.
Dadurch ist kein Codewort Präfix eines anderen Codewortes.
Sie können sofort so eine Unterteilung machen, wenn Sie längere Folge
von solchen Signalen haben.
Andere Codierungen.
Morse-Codierungen.
Wer von Ihnen kann das Morse-Alphabet?
Wer hat das erste Morse-Alphabet?
Also, wer kann Morsen?
Keiner von Ihnen.
Keiner war beim Bund und war als Funkleiter tätig und hat dort Morsen
gelernt.
Also, Morsen ist ganz wichtig, oder auch als Seemann muss man das auch
wissen.
Da werden Zeichen durch Folgen von unterschiedlich langen Signalen
dargestellt.
Und zwar zum Beispiel das S hat drei kurze Punkte, das O hat drei
lange, das S hat drei kurze.
SOS, Save Our Souls, hat also das Dit-Dit-Dit-Da-Da-Da-Dit-Dit-Dit.
Hört sich in etwa so an, wenn Sie das hören, so ein Morse-Zeichen.
So.
Und wir sehen hier, jedem Zeichen wird ein Punkt oder eine Kombination
von Punkten und Strichen zugeordnet.
Punkten, in der Regel gesprochen als Dit und Strichen als Dat.
Dit-Dit-Dit-Da-Da-Da-Dit-Dit-Dit.
Das ist SOS.
Ja, ganz einfach.
So.
Wenn ich mir das genauer anschaue, dann kann ich hier einen Kotbaum
aufmalen.
Und dieser Kotbaum sieht so aus, dass ich also hier zum Beispiel für,
das habe ich hier nicht alles aufgemalt, ich habe hier nur die Striche
aufgemalt, kann aber die Punkte dazufügen, die brauchen wir nicht auf,
kann ich dazu malen.
Also, hier ist immer ein Punkt, da wo kein Strich ist, soll also
praktisch ein Punkt kodiert sein.
Das heißt, wenn ich das I kodieren will, habe ich einen Punkt.
Wenn ich das I kodieren will, habe ich zwei Punkte.
Das S drei Punkte, das H vier Punkte, die 5, fünf Punkte.
Das heißt, welche Folge vom Zeichen habe ich hiermit angegeben?
Hm.
Oder hier unten?
Was ist das denn?
Dit-Dit-Dit-Da-Da-Da-Dit.
Was ist das?
Ganz viele E's?
Oder ist das ein H?
Oder H und S oder irgend sowas?
Das können Sie hier nicht feststellen.
Hier ist, wie man ja hier auch sieht, das E, die Kodierung vom E, ist
ein Präfix von allen Kurs, die hier unten drunter sind in dem Bau.
Oder die Kodierung von dem K ist ein Präfix von C und Y.
Das heißt, wenn Sie das einfach so aneinanderreihen, können Sie gar
nicht feststellen, was das eigentlich sein soll.
Sie müssen das nur irgendwie unterteilen können.
Das heißt, da kommen wir gleich noch drauf, dass man für eine
wirkliche Nutzung das noch irgendwie umbauen muss.
Also ich brauche eigentlich eine eindeutige Umkehrabbildung.
Und für das, glaube ich, noch voraus, das, was Sie hier sehen bei der
Morse -Kodierung, ist, also wenn ich jetzt eine Folge von Zeichen
abbilde, haben Sie hier zweimal – ups, was ist das hier, das soll da
gar nicht stehen – haben Sie hier zweimal die gleiche Zeichenfolge,
sowohl für das Wort Esel als auch für Seine.
Gleiche Folge von Zeichen.
Das heißt, Sie können für diese Abbildungen, diese Abbildung, die
jetzt eine einfache Fortsetzung der Abbildung auf Maltabet ist, wie
man das macht, habe ich Ihnen schon mal vorgestellt, wie man eine
Fortsetzung macht, Sie können die nicht sofort umkehren, Sie können
gar nicht feststellen, bei dieser Kodierung, wie eigentlich die
Aufteilung dieser Zeichen sein wird.
Dazu müssen wir uns noch ein bisschen mehr überlegen.
Zurück zu dieser
Anfangsinformation, die hier steht auf der Folie.
Es gibt für Kodierungen gewisse Klassifizierungen.
Wenn ich also ein Zeichen durch ein anderes Zeichen ersetze, redet man
häufig nicht von einer Kodierung, sondern von einer Chiffrierung.
Das sind also die typischen Chiffren.
Später im Abschnitt 7.7 sehen Sie, es gibt Cäsar-Chiffren, es gibt
Vigenère -Chiffren und ähnliche.
Das ist Substitution von Zeichen.
Sie können jedes Zeichen durch eine Bitfolge fester Länge angeben.
Jedes, könnte man zum Beispiel jede dezimale Zahl durch vier Bits
kodieren.
Dann hätten Sie eine Blockkodierung, bei der alle Kodwörter die
gleiche Länge haben.
Wenn das der Fall wäre, können Sie sofort eine längere Folge von
Kodwörtern haben.
Sie haben eine feste Länge, dann wissen Sie, dann brauche ich nur hier
entsprechend dazu einzuteilen, dass es meine einzelnen Kodwörter sind.
Ja?
Wenn das unterschiedliche Längen sind, wie bei der Morse-Kodierung,
können Sie das nicht einfach so einteilen.
Wenn ich in die Menge der 0,1-Folgen abbilde, dann ist das eine Biler
-Kodierung.
Und wenn ich dann noch in Blöcke von N-Bit-Blöcke aus...also in N-Bit
-Blöcke, das heißt 0,1-Folgen der Länge N abbilde, dann haben wir eine
N -Bit-Kodierung.
Und wir brauchen also zum Beispiel für Zeichen in der Regel eine 8-Bit
-Kodierung.
Da kommen wir gleich noch dran.
Das also sind die unterschiedlichen Kods, die man anschaut.
Und für gewisse Dinge brauchen wir eine Kodierung mit variablen
Kodwortlängen, für andere machen wir eine feste Kodierung.
Und bei der C-Kodierung ist es eben so, dass Sie, das hatte ich Ihnen
gesagt, da haben wir immer das O da drin.
Das O gibt uns gerade die Trennung an.
Damit können wir eindeutig aus dem Wort, aus dem kodierten Wort oder
der Folge der kodierten Wörter sofort die ursprünglichen Kodwörter
wieder ableiten.
Das ist ganz einfach, indem wir einfach hier bei dem O das über das
Trennen voneinander.
Für die Morse-Abbildung gibt es so keine eindeutige Umkehrfolge.
Das wäre natürlich schlecht.
Dann schicken Sie eine Nachricht und der Empfänger kann das gar nicht
dekodieren.
Also müssen Sie das anders machen.
Tatsächlich macht man das so, dass man, da unten steht das Beispiel
schon, die habe ich falsch animiert.
Was ich also mache, ist, dass ich mir jetzt überlege, wann ist eine
Funktion eigentlich umkehrbar?
Zunächst mal brauchen Sie den Begriff der injektiven Funktion.
Das kennen Sie alles aus Mathe.
Eindeutige Abbildung, das heißt, Sie bilden, wenn Sie irgendwelche
Werte haben, x1, x2, dann wissen Sie eben, es darf nicht passieren,
dass die beide auf den gleichen Wert gehen von z.
Ja, das darf nicht der gleiche Wert sein.
Oder...
Ich wollte nicht auf den gleichen Wert...
Schalten wir mal an y.
Wenn das der Fall wäre, wissen Sie ja nicht, wenn Sie jetzt
zurückgehen wollen, war das y das Bild von x1 oder von x2.
Das heißt, injektiv ist eine Abbildung, wenn Sie von unterschiedlichen
Argumenten immer auf unterschiedliche Bilder kommen.
Wenn das gewährleistet ist, dann können Sie die Abbildung auch wieder
inventieren.
Wir haben dann die Umkehrabbildung.
Und wenn wir jetzt das kurz beziehen, dann können wir von einer
Dekodierung reden.
Wir können aus den Codewörtern eindeutig wieder die Symbole erzeugen,
sofern die Dekodierung injektiv ist.
Die Zählkodierung ist injektiv.
Die Morse-Kodierung ist auch injektiv.
Es werden keine zwei Zeichen auf die gleiche Folge abgebildet.
Aber wir hatten gesehen, die Erweiterung, die natürliche Fortsetzung
der Funktion, die war nicht eindeutig umkehrbar.
Und jetzt sagen wir, dass eine Kodierung die sogenannte Fano-Bedingung
erfüllt.
Fano war ein Wissenschaftler.
Wenn, und hier sehen Sie, dass ich die Kasten hätte länger machen
müssen, wenn kein Codewort Anfang eines anderen Codewortes ist.
Also, wenn ich irgendeine...
Ich habe hier einen Codewort.
Ich habe also Codewörter U und W.
Beides Codewörter.
Das ist mein W.
Und wenn ich feststelle, ich habe hier U stehen und da V.
Das kann es gar nicht geben.
Das V ist garantiert lambda.
Ja, so etwas darf es gar nicht geben.
Bei der Morse-Kodierung ist diese Eigenschaft vorhanden.
Da ist die Kodierung von S und E so, dass die Kodierung von E ist ein
Anfangsstück der Kodierung von S.
Deswegen, da ist diese Eigenschaft nicht erfüllt.
Hier ist es erfüllt.
Also die Morse-Kodierung ist injektiv, aber nicht die natürliche
Fortsetzung, weil eben diese Eigenschaft nicht erfüllt ist.
Wenn die Eigenschaft erfüllt ist, dass kein Codewort Anfangsstück
eines anderen Codewortes ist, brauche ich nur durch eine Folge von
Zeichen durchzugehen und ich kann eindeutig diese Unterteilung machen
in meine unterschiedlichen Codewörter, weil ich sie eindeutig zuordnen
kann.
Deswegen ist es dann tatsächlich dekodierbar.
Und wenn ich das bei der Morse-Kodierung reparieren will, dann muss
ich also dafür sorgen, dass ich immer eine kurze Pause mache zwischen
den einzelnen Zeichen, zwischen den einzelnen Codewörtern.
Die Morse -Kodierung ist hier angedeutet durch den Doppelkreuz.
Tatsächlich wird das halt durch eine kurze Pause immer angedeutet und
dann kann man das tatsächlich mitbekommen, kann das dann
interpretieren.
Da gibt es schon erstaunliche Fähigkeiten derjenigen, die damit
umgehen.
Irgendwie habe ich hier ein paar Sachen nicht richtig gelöscht.
Das wurde alles gelöscht, was hier steht.
Ich habe das etwas umgebaut.
So.
Das ist also die Fahnenbedingung.
Wenn die Fahnenbedingung erfüllt ist, kann ich einen Code eindeutig
dekodieren.
Und jetzt ist natürlich so, dass wenn also die natürliche Fortsetzung
einer Kodierung indektiv ist, dann muss natürlich auch die Abbildung
selbst, die Kodierung selbst indektiv gewesen sein, weil sie ja auch
im Alphabet übereinstimmt mit dem C.
In der Gegenrechtlichkeit ist das natürlich nicht.
Indektiv heißt nicht.
C-Stern auch indektiv.
Und wenn ein indektives C aber die Fahnenbedingung erfüllt, dann ist
das C-Stern auch indektiv.
Können Sie sich überlegen, habe ich kurz angedeutet, warum das der
Fall ist.
Und jetzt haben wir noch zwei Minuten, um ein weiteres Thema
anzusprechen, nämlich die Fehlererkennung und Korrektur.
Ich hatte gesagt, wenn ich Informationen von einem Ort auf den anderen
transportiere, ja, irgendwelche Zahlen folgen, dann kann es passieren,
dass während der Übertragung irgendwann mal das Wort aus einer 1 zu 0
wird.
Kann ich das erkennen?
Oder muss ich mit diesen Fehlern leben?
Die Frage ist, wie geht das eigentlich?
Kann ich auftretende Fehler erkennen?
Das ist immerhin schon wichtig.
Oder kann ich sie vielleicht sogar korrigieren?
Das wäre natürlich noch besser.
Ich mache daraus wieder eine 1.
Ich kann das erkennen.
Das kann kein Wort, das da entstanden ist, kein Codewort gewesen sein.
Das muss die 0110 gewesen sein.
Solche Dinge gibt es.
Und wir werden uns jetzt beschränken auf N-Bit-Codierungen.
Und wir werden uns jetzt anschauen, Möglichkeiten, wie man solche
Fehlererkennung und Korrektur machen kann.
Und dazu schauen wir uns folgendes an.
Wir vergleichen zwei Wörter.
Dadurch, dass wir sie übereinander legen.
Und vergleichen jeweils jede einzelne Bit-Position.
Das sollen jetzt die gleichen sein.
Und wenn hier überall das Gleiche steht, dann ist das in Ordnung.
Das heißt, ich schaue mir mal an, was hier steht und was dort steht.
Und wenn x gleich y ist, ist das in Ordnung.
Wenn die unterschiedlich sind, dann zähle ich das als eine
Unterscheidung.
Das heißt, ich zähle alle Unterschiede zwischen xy und yy.
Diese beiden Wörter, x und y.
Und das sind jetzt xy und yy.
Und der Hemminger-Stand ist gerade die Anzahl der unterscheidenden
Positionen in einem solchen Raum.
Das heißt zum Beispiel 0, 1, 1, 0 und 0, 1, 0, 0.
Die haben gerade einen Hemminger-Stand von 1.
Also, dass hier x und y ist, dann wäre h von x, y gerade gleich 1 in
dem Fall.
Und wenn ich hier eben noch eine 1 hätte, dann wäre das Ganze nicht 1,
sondern 2.
So kann ich die Hemminger-Abstände messen.
Und jetzt möchte ich gerne Ihnen nur kurz andeuten, dass ich dann noch
angeben kann für eine Reihe von Codewörtern die jeweiligen Abstände.
Wenn ich also meine vielen Codewörter habe, dann ist der minimale
Abstand zwischen zwei Codewörtern gerade die Hemminger-Distanz.
Und Sie werden nächstes Mal sehen, am Mittwoch, dass man daraus dann
schöne Sachen machen kann.
Man kann dann Fehlerkorrektur und Fehlererkennungseigenschaften
anleiten.
Da kommen wir beim nächsten Mal.
Kurze Vorschau.
Vielen Dank für die Aufmerksamkeit.
Wir sehen uns Mittwochmorgen noch einmal.
Frohe Weihnachten.