0:00:00.000,0:00:20.724
36C3 Vorspannmusik
0:00:20.724,0:00:24.610
Chipforge: Ich weiß nicht, wer von euch[br]das alles mitgekriegt hat. Letztes Jahr
0:00:24.610,0:00:28.600
waren wir hier zu dritt auf der Bühne,[br]gleicher Saal und haben unsere
0:00:28.600,0:00:34.150
LibreSilicon Technologie vorgestellt. Wir[br]haben damals schon Testwafer dabeigehabt.
0:00:34.150,0:00:40.270
Sozusagen. Jetzt das Update. Vorneweg erst[br]mal ein Disclaimer. Weil ist 'ne heikle
0:00:40.270,0:00:47.170
Sache. Okay, das ist jetzt mal so im[br]Groben der Überblick, was ich machen will.
0:00:47.170,0:00:50.380
Also nochmal einen kurzen Abriss zu[br]LibreSilicon, wo unser Projekt gerade
0:00:50.380,0:00:54.220
steht. Und dann würde ich ganz gerne so[br]mit den Basics anfangen bei den
0:00:54.220,0:01:03.250
Standardzellen und mich so langsam[br]vorarbeiten. Okay, also das Update: Der
0:01:03.250,0:01:08.950
Leviathanch hat 2017 einen Lightning Talk[br]gehalten und hat gesagt "Wir brauchen
0:01:08.950,0:01:14.920
irgendwie eine freie Technologie." Ich[br]fand das richtig super. Hab mich sofort
0:01:14.920,0:01:21.490
bei ihm gemeldet. Und wir haben in 2018[br]wirklich angefangen, uns da Gedanken zu
0:01:21.490,0:01:26.950
machen, durchzuwurschteln und haben[br]angefangen, wirklich mit einem Micron.
0:01:26.950,0:01:33.610
Also mit einem "µ" Technologie zu machen.[br]Grund für ein µ war, unsere Bewegung
0:01:33.610,0:01:38.170
dazu, dass es 5-Volt Toleranz - Also man[br]kann sozusagen Blüter freundlich damit
0:01:38.170,0:01:43.360
arbeiten, Maker freundlich. Das ist so die[br]Technologie, die noch dokumentiert worden
0:01:43.360,0:01:49.480
ist. So Ende 70er, Anfang 80er Jahre, wo[br]man sozusagen von vorne bis hinten, alles
0:01:49.480,0:01:55.150
irgendwo in der Literatur noch findet in[br]Lehrbüchern. Und so einordnungsmäßig: Das
0:01:55.150,0:02:03.640
ist dieses etwa so die Generation so vom[br]486. Dann haben wir wie gesagt, letztes
0:02:03.640,0:02:10.480
Jahr hier auf der Bühne die Präsentationen[br]gemacht von unserem Testwafer. Was neu
0:02:10.480,0:02:17.140
hinzugekommen ist seitdem in 2019: Uns ist[br]das Geld ausgegangen, um jetzt sozusagen
0:02:17.140,0:02:22.870
jetzt nochmal ein Jahr den Reinraum zu[br]mieten in Hongkong. Es kamen die Unruhen
0:02:22.870,0:02:28.210
in Hongkong dazu, und die Unruhen haben[br]dazu geführt, dass die Uni zugemacht
0:02:28.210,0:02:32.440
worden ist. Wir gesagt haben: "Wir beenden[br]das Semester". Es findet kein Lehrbetrieb
0:02:32.440,0:02:36.700
mehr statt. Das heißt aber auch: Wir sind[br]jetzt erst mal draußen aus dem Reinraum
0:02:36.700,0:02:42.370
und können sozusagen erst einmal Paperwork[br]machen. Es ist ein bisschen ungünstig,
0:02:42.370,0:02:47.620
unbefriedigend. Deswegen gucken wir nach[br]Alternativen. Wenn jemand sozusagen einen
0:02:47.620,0:02:53.410
Reinraum hat, Zugriff drauf, sagt" Wir[br]können es mit einer Maschinenliste
0:02:53.410,0:03:00.520
abklären, ob das passt und wie weit wir da[br]kommen". Wir haben wegen der
0:03:00.520,0:03:06.640
Geldgeschichte, die meistens auch dranhing[br]schon lange eine Gofunding campaign laufen
0:03:06.640,0:03:13.000
mit bisher einer Einzahlung. Also es ist[br]nicht unbedingt so massentauglich, gebe
0:03:13.000,0:03:21.460
ich zu. Die Links dazu: Also erste[br]LibreSilicon, das ist die Projektseite.
0:03:21.460,0:03:31.480
Dann haben wir bei GitHub die[br]Standardzellen drinne. Da findet die
0:03:31.480,0:03:35.740
Hauptentwicklung statt - das Repository.[br]Und unten drunter ist nochmal so eine
0:03:35.740,0:03:40.960
Wikiseite. Da wollte ich eigentlich alles[br]das, was ich heute auch so zum Besten
0:03:40.960,0:03:44.920
gebe, immer mal wieder dokumentieren, weil[br]ich festgestellt habe: In der Ecke
0:03:44.920,0:03:56.290
existiert sehr, sehr viel Nachholbedarf.[br]Da fehlt einfach das Wissen in der Masse.
0:03:56.290,0:04:04.180
Wenn jemand sozusagen jetzt damit[br]rumspielen möchte: "git clone" unter
0:04:04.180,0:04:11.740
diesem Repository. Können Sie sich[br]reinlegen und der Designflow für Chip
0:04:11.740,0:04:19.420
Design ist im Regelfall so: Einer fängt an[br]Code zu schreiben, Verilog, VHDL oder
0:04:19.420,0:04:25.470
SpinalHDL. Wie auch immer, er testet das[br]aus. Also er simuliert es mit einem
0:04:25.470,0:04:29.550
Simulator, dafür gibt's freie Tools - kein[br]Problem. Und versucht es zu verifizieren.
0:04:29.550,0:04:37.230
Dafür gibts auch Ansätze. Und dann wird[br]das Ding so etwas wie 'kompiliert'. Nennt
0:04:37.230,0:04:42.840
sich in dem Fall aber 'Synthese'. Dafür[br]gibt es das 'Yosys' Tool von Clifford. Das
0:04:42.840,0:04:46.590
kann nicht nur FPGAs. Wenn man ihnen die[br]richtige Bibliothek gibt, dann kann es
0:04:46.590,0:04:54.540
auch ASICs. Was dabei herauskommt, ist[br]eine Netzliste. Das heißt so, weil es
0:04:54.540,0:05:01.110
einfach haufenweise Komponenten enthält:[br]UND-Gatter, ODER-Gatter, Flipflops alles
0:05:01.110,0:05:07.290
Mögliche, was mit dem Code beschrieben[br]worden ist und die Verbindungen dazu -
0:05:07.290,0:05:12.960
also die Drähte dazwischen. Die Zellen[br]natürlich, die müssen wir uns erst
0:05:12.960,0:05:16.560
einfallen lassen. Das ist eigentlich das[br]Ziel von dem Talk, euch das Nahe zu
0:05:16.560,0:05:23.610
bringen. Die Zellen werden platziert im[br]Layout. Dafür braucht man sozusagen auch
0:05:23.610,0:05:29.250
die Layoutinformation, welchen Layer sie[br]benutzen, wie sie aufgebaut sind. Das muss
0:05:29.250,0:05:34.770
alles zusammengepackt werden, und am Ende[br]kommt ein GDS II file raus. GDS II ist ein
0:05:34.770,0:05:39.416
anderes Format. Muss man sich vergleichbar[br]vorstellen wie beim PCB Design. Also wenn
0:05:39.416,0:05:43.170
man ein Board macht das, was hinten als[br]'gerber' file dann sozusagen in die
0:05:43.170,0:05:49.800
Herstellung geht. Das ist halt beim ASIC[br]ein GDS II. Damit werden die Masken
0:05:49.800,0:05:59.030
gemacht und über die Standardzellen wollen[br]wir mal reden. Okay, die Ziele für so eine
0:05:59.030,0:06:03.740
Bibliothek. Wenn man sich ein bisschen[br]umguckt, dann sieht man, vielleicht bei
0:06:03.740,0:06:09.380
GitHub oder woanders, sagen wir mal so,[br]Studentenprojekte, die nachgewiesen
0:06:09.380,0:06:12.470
haben, was ein paar Zellen machen können,[br]die in Design flow, mit irgendwelchen
0:06:12.470,0:06:18.380
kommerziellen Tools. Die Bibliotheken sind[br]relativ begrenzt. Einfach, weil der
0:06:18.380,0:06:23.750
Aufwand dafür groß ist. Eine typische[br]Studenten Bibliothek, die hat vielleicht
0:06:23.750,0:06:28.400
30, 40 Zellen. Das ist aber eine[br]Größenordnung, die ist absolut
0:06:28.400,0:06:35.810
unzureichend für ein richtiges Design. Da[br]sind Zellen drinnen, die man sich so als
0:06:35.810,0:06:39.140
Menschen vorstellen kann. Also die[br]typischen Und-Oder-Gatter, vielleicht noch
0:06:39.140,0:06:44.270
ein XOR, vielleicht noch zwei, drei[br]Flipflops, ein paar Ledges. Und das wars
0:06:44.270,0:06:53.060
im Ganzen. Aber Kombinatorik, also[br]Komplexität kann viel, viel größer sein.
0:06:53.060,0:06:59.540
Kommerzielle Bibliotheken haben 150, 200[br]Zellen. Da sind dann auch schon andere
0:06:59.540,0:07:03.440
Funktionalitäten drin. Also Flipflops zum[br]Beispiel gibt's dann auch mit der Scan-
0:07:03.440,0:07:08.600
Fähigkeit, dass man für Testen in Scan-[br]Pfaden lange Ketten zusammenhängen kann.
0:07:08.600,0:07:15.140
So etwas fehlt bei Standard-Zellen. Das[br]würde ich ganz gerne anders lösen. Aber
0:07:15.140,0:07:22.160
egal. Ziele auch für uns: LibreSilicon,[br]wir wollen so wenig Energie wie möglich
0:07:22.160,0:07:27.260
dabei verbraten. Also wir geben uns Mühe[br]beim Prozess schon mit der Isolierung,
0:07:27.260,0:07:33.500
dass wir keinen Leakage-Strom, also keinen[br]Leck-Strom und beim Cell Design auch,
0:07:33.500,0:07:39.050
indem wir die Transistoren entsprechend[br]dimensionieren, dass wir wenig Energie
0:07:39.050,0:07:43.490
verbraten haben. Weil CMOS, also die[br]Technologie die wir anpeilen, die
0:07:43.490,0:07:48.740
verbraucht Energie beim Schalten. Also[br]nicht im statischen Zustand, wenn der
0:07:48.740,0:07:53.900
Clock zum Beispiel flat wäre, also fest[br]liegen würde, also auf 0 oder 1, würde das
0:07:53.900,0:08:04.620
Ding so gut wie... jetzt ist das Mikro[br]weg? Doch, da ist es! Okay, es würde so
0:08:04.620,0:08:08.070
gut wie gar keinen Strom gebrauchen. Erst[br]in dem Augenblick, wenn eine Takt-Flanke
0:08:08.070,0:08:12.840
kommt und jetzt die Speicherzellen innen[br]drin umschalten, also ihren Zustand
0:08:12.840,0:08:18.570
wechseln. Dann gibt es einen Moment, wo[br]die Gatetransistoren beide durchschalten.
0:08:18.570,0:08:25.710
Und dann wird Strom verbraucht, oder[br]Energie. So, wir wollen auch schnelle
0:08:25.710,0:08:29.310
Zellen haben, so schnell wie geht. Das ist[br]ein bisschen konträr zu der Forderung
0:08:29.310,0:08:34.980
vorhin, weniger Energie. Aber wir können[br]die Transistoren ziemlich klein machen und
0:08:34.980,0:08:38.700
sozusagen den bestmöglichen Kompromiss[br]dafür finden. Und wir wollen auch, dass
0:08:38.700,0:08:44.940
die Zellen klein werden, weil nach[br]Herstellung bezahlt man einen Chip nicht
0:08:44.940,0:08:50.580
nach dem, was drauf ist und wieviel Gatter[br]ich drauf habe oder welche Funktionalität.
0:08:50.580,0:08:55.650
Sondern ich bezahle rein nach Fläche. Das[br]heißt also, wenn ich eine Zellbibliothek
0:08:55.650,0:08:59.070
habe, die klein ist, wenn ich sozusagen[br]das ganze Design klein halten kann,
0:08:59.070,0:09:06.720
bezahle ich auch weniger dafür. Das sind[br]jetzt so Standardzellen, das hier ist so
0:09:06.720,0:09:09.780
eine ganz typische, wir haben vielleicht[br]den einen oder anderen in der Uni schon
0:09:09.780,0:09:14.250
gehabt, ein NAND-Gatter mit zwei[br]Eingängen. Ich hab mal links das Symbol,
0:09:14.250,0:09:22.200
rechts dazu die Tabelle. Wenn man sich das[br]ankuckt, beim NAND ist ganz typisch:
0:09:22.200,0:09:27.180
Solange wie beide Eingänge nicht[br]gleichzeitig 1 sind, ist der Ausgang immer
0:09:27.180,0:09:32.820
auf 1. Erst in dem Augenblick, wenn beide[br]Eingänge auf 1 schalten, dann geht der
0:09:32.820,0:09:38.010
Ausgang auf 0. Das ist sozusagen die[br]invertierte UND-Funktion, also NAND. Unten
0:09:38.010,0:09:45.270
drunter noch die Formel in der üblichen[br]Notation, wie es dann praktisch gemacht
0:09:45.270,0:09:51.960
wird. Und so sieht das aus. Für die Grafik[br]muss ich mich ein bisschen entschuldigen.
0:09:51.960,0:09:58.380
Die habe ich mir generieren lassen, und da[br]sind noch ein paar Artefakte drin. Die
0:09:58.380,0:10:01.410
Leitungen hier. Aber im Prinzip sieht[br]man's ja. Man sieht die Transistoren
0:10:01.410,0:10:07.320
unten, die beiden n-Kanal, dass die in[br]einer Reihe sind. Man sieht die oben
0:10:07.320,0:10:17.990
p-Kanal parallel. NOR, das ist mehr oder[br]weniger invers dazu. Links wieder das
0:10:17.990,0:10:23.930
Symbol, das amerikanische, rechts die[br]Tabelle und das wieder ganz typisch: Wenn
0:10:23.930,0:10:29.900
beide Eingänge 0 sind, kommt hinten eine 1[br]raus. Sobald aber ein Eingang eine 1 hat,
0:10:29.900,0:10:41.660
ist es hinten eine 0. Und die Notation[br]dazu. Und auch die Transistoren. Da sieht
0:10:41.660,0:10:45.950
man sozusagen, man kann es sich so[br]gespiegelt vorstellen: Wir haben unten die
0:10:45.950,0:10:50.630
n-Kanal Transistoren, die sind jetzt in[br]dem Fall parallel, und wir haben oben die
0:10:50.630,0:10:59.300
p-Kanal, die sind in Reihe. Das ist ein[br]XOR, Exclusiv-Oder. Da habe ich auch die
0:10:59.300,0:11:04.100
Tabelle hingemacht. Die beiden Eingänge[br]müssen sich unterscheiden, damit hinten
0:11:04.100,0:11:10.400
eine 1 rauskommt. Ansonsten ist es eine 0.[br]Dafür habe ich jetzt keine Implementierung
0:11:10.400,0:11:18.050
dabei, weil dafür gibt es irgendwo so[br]fünf, sechs, sieben Varianten, welche ich
0:11:18.050,0:11:22.190
sozusagen in die Standard-Bibliothek rein[br]nehmen werde. Hab ich noch nicht letztlich
0:11:22.190,0:11:30.410
ausgeknobelt. Da werde ich mich später mal[br]drum kümmern. Das ist die inverse Funktion
0:11:30.410,0:11:35.510
dazu. Das wird auch gern als XNOR[br]bezeichnet. Ich bezeichne es halt kürzer
0:11:35.510,0:11:40.910
mit Äquivalenz-Gatter. Muss man sich[br]vorstellen, wie ein XOR, allerdings
0:11:40.910,0:11:45.620
wirklich invertiert dazu. Das heißt also,[br]wenn beide Eingänge unterschiedlich sind,
0:11:45.620,0:11:52.670
dann habe ich die 0. Ansonsten, wenn sie[br]gleich sind, kommt die 1 raus. Dafür gibt
0:11:52.670,0:11:55.940
es auch wieder die gleiche Anzahl der[br]Implementierungen, einfach weil man es
0:11:55.940,0:12:01.250
wieder symmetrisch gegenüber dem XOR[br]machen kann. So, jetzt wird es ein
0:12:01.250,0:12:05.630
bisschen blutiger. Das sind jetzt ein paar[br]Beispiele, die man sich auch noch
0:12:05.630,0:12:10.940
vorstellen kann an Zellen. Nicht nur das,[br]was sonst nur in Lehrbüchern drin ist. Das
0:12:10.940,0:12:18.090
sind sogenannte Komplex-Gatter, und wenn[br]man sich das oben anguckt, man sieht
0:12:18.090,0:12:22.470
sozusagen erst vorne dran eine kleine[br]Funktion, ein UND oder ein OR, und danach
0:12:22.470,0:12:26.460
noch eine andere, wieder mit dem nächsten[br]Eingang. Das kann man beliebig lang
0:12:26.460,0:12:30.240
treiben, denn unten die Variante, dass man[br]sozusagen paarweise das zusammenfasst,
0:12:30.240,0:12:37.290
kann man auch beliebig weit treiben. Man[br]kann dieses Prinzip, dass man Transistoren
0:12:37.290,0:12:42.120
so miteinander verkettet, dass genau diese[br]Funktion rauskommt, aber die Transistor-
0:12:42.120,0:12:46.290
Anordnung drinnen einfach und[br]übersichtlich kann man sehr weit treiben.
0:12:46.290,0:12:53.910
Und das möchte ich in der Standard-[br]Bibliothek auch machen. Kommen wir später
0:12:53.910,0:12:59.940
zu, dazu muss ich mich was erklären dazu,[br]wie weit man gehen kann. Das ist jetzt ein
0:12:59.940,0:13:08.340
Beispiel für ein NAND mit vier Eingängen.[br]Ich weiß nicht, ob ihr euch noch daran
0:13:08.340,0:13:12.180
erinnert, and das NAND mit zwei Eingängen,[br]da hatten wir unten die Transistoren in
0:13:12.180,0:13:18.660
Reihe, oben die in parallel. Oh, das[br]ist ein AND, stimmt. Ich habe da den
0:13:18.660,0:13:22.860
Buffer übersehen, hinten. Okay, und ganz[br]rechts, da müssen wir hingucken. Da ist
0:13:22.860,0:13:29.430
nochmal ein kleiner Inverter hinten dran.[br]Der invertiert ist, also habe ich kein
0:13:29.430,0:13:36.180
NAND sondern ein AND. Fangen wir mit dem[br]Buffer an zu erklären. Das ist ein
0:13:36.180,0:13:41.400
wichtiger Punkt. Also eine Design-[br]Entscheidung, die ich in der Standard-
0:13:41.400,0:13:48.030
Zellenbibliothek getroffen habe. Wenn wir[br]uns vorstellen, dass über jeden Transistor
0:13:48.030,0:13:52.080
von den vier in der langen Kette zwischen[br]Drain und Source, also den beiden
0:13:52.080,0:13:57.990
Enden hier. Ich gehe mal kurz rüber. Also[br]dem unteren Ende und dem da oben drüber,
0:13:57.990,0:14:03.600
Drain und Source, wenn da drüben ein[br]Spannungsabfall ist, also sozusagen immer
0:14:03.600,0:14:07.650
eine kleine Differenz. Der Transistor[br]schaltet völlig durch. Trotzdem sind diese
0:14:07.650,0:14:10.410
beiden Pole nicht auf dem gleichen[br]Potenzial. Da gibt es immer eine kleine
0:14:10.410,0:14:13.980
Differenz. Wenn ich das jetzt aber viermal[br]mache, alle vier hintereinander
0:14:13.980,0:14:19.500
durchgeschaltet werden, addiert sich das[br]trotzdem auf. Das kann dazu führen, dass
0:14:19.500,0:14:24.990
dieser Ausgangspegel, der jetzt in dieser[br]langen Leitung da rauskommt, nicht mehr
0:14:24.990,0:14:28.360
Rail-to-Rail ist, also nicht mehr wirklich[br]an die Betriebsspannung herangeht, sondern
0:14:28.360,0:14:36.790
wirklich eine deutliche Differenz dazu[br]aufweist. Um diese nicht mehr zu Rail-to-
0:14:36.790,0:14:40.900
Rail-Fähigkeit ein bisschen rauszunehmen,[br]ich will ja danach eigentlich eine Leitung
0:14:40.900,0:14:47.650
treiben, fange ich an, mir den Ausgangs-[br]Pegel sozusagen wieder schön zu
0:14:47.650,0:14:51.370
invertieren. Also einfach wieder einen[br]Inverter hinten dran, weil dann nach dem
0:14:51.370,0:14:56.920
Inverter habe ich sozusagen wieder[br]deutliche, klarere Pegel. Und eine
0:14:56.920,0:15:00.190
Designentscheidung, die ich getroffen[br]habe, in der Standard-Bibliothek ist, ich
0:15:00.190,0:15:06.340
konfiguriere ab wieviel Transistoren in[br]einer Reihe ich sozusagen dieses Recovery
0:15:06.340,0:15:10.900
hinten machen muss. Also wieder buffern[br]muss. Meine Faustregel, mit der ich im
0:15:10.900,0:15:17.320
Augenblick arbeite, sind vier[br]Transistoren. Das ist aber im Tool, was
0:15:17.320,0:15:21.280
ich schreibe, konfigurierbar. Also, ich[br]kann mir auch was vorstellen wo es nur mit
0:15:21.280,0:15:25.150
dreien oder mit zweien schon gemacht wird,[br]wenn es notwendig wird. Weil: vier
0:15:25.150,0:15:29.740
Transistoren ist für einen Mikron ganz super.[br]Wenn wir aber Technologien benutzen, die
0:15:29.740,0:15:34.870
deutlich kleiner werden, dann haben wir[br]ein Schwellspannungsproblem. Diese
0:15:34.870,0:15:41.980
Spannung vorne an den Transistoren, also[br]am Gate zum Source. Das gibt's so eine
0:15:41.980,0:15:45.310
gewisse Schwellspannung, ab der der[br]Transistor eingentlich schaltet. Das
0:15:45.310,0:15:52.870
addiert sich auch auf. Wir kriegen also[br]sozusagen auch wieder addierende Pegel. Es
0:15:52.870,0:15:59.530
ist einfach unangenehm. Wir müssen das[br]begrenzen, und dafür habe ich auch noch
0:15:59.530,0:16:07.540
einen zweiten Parameter drinne. Bis wie[br]viele Transistoren ich sozusagen in dieser
0:16:07.540,0:16:12.940
Kette erlaube. Also ein Buffer hinten, ab[br]wann ich sozusagen den Inverter dranmache.
0:16:12.940,0:16:23.950
Und das zweite ist, wie viel ich in einer[br]Reihe erlaube. Also nochmal kurz
0:16:23.950,0:16:27.730
zusammenrechnen, also bei zwei Stack-[br]Transistoren - also die in einer Reihe,
0:16:27.730,0:16:31.150
nennen sich "stacked" im Englischen, ich[br]weiß gar nicht, wie man das ins Deutsche
0:16:31.150,0:16:37.270
übersetzen sollte. Wir sagen es gestapelt[br]oder sowas. Wo man zwei Transistoren hat,
0:16:37.270,0:16:41.770
wegen der Schwellspannung vorne. Wenn[br]diese Betriebsspannung so klein ist und
0:16:41.770,0:16:45.160
die Schwellspannung zu groß dafür, dass[br]man gar nicht mehr die Pegel erreicht zum
0:16:45.160,0:16:50.500
Ein und Ausschalten. Dann hat man den[br]Effekt, dass die Bibliothek viel zu klein
0:16:50.500,0:16:52.720
wird. Da sind wir wieder in der[br]Größenordnung von diesen
0:16:52.720,0:16:59.110
Studentenbibliotheken mit 30 Zellen oder[br]so. Wenn man drei erlaubt, drei
0:16:59.110,0:17:05.920
Transistorenstapel, dann ist man so bei[br]Bibliotheken, die jetzt mit diesen ganzen
0:17:05.920,0:17:11.770
winzigen Nodes mit 14 Nanometer oder sowas[br]auftauchen. Die können nicht mehr vier
0:17:11.770,0:17:17.830
Transistoren. Vier Transistoren, aber wenn[br]wir das können, haben wir plötzlich eine
0:17:17.830,0:17:23.560
riesige Komplexität an Komplexgattern, die[br]möglich sind. Das geht laut 'nem Paper.
0:17:23.560,0:17:26.980
Ich habe es noch nicht ausprobiert. Ich[br]bin noch nicht so weit. Da, sagt einer --
0:17:26.980,0:17:33.310
oder behauptet einer, es geht bis zu[br]4000. Meine Anzahl kommen wir noch dazu,
0:17:33.310,0:17:38.470
die ich bisher erreicht habe. Also Buffer-[br]limit bei größer gleich drei Transistoren.
0:17:38.470,0:17:45.580
Gut, das ist so eine Annahme. Okay. Aber[br]wie kommen wir eigentlich zu diesen ganzen
0:17:45.580,0:17:51.550
Komplexgattern. Wir hätten die vier[br]Beispiele drinnen. Wir kommen von einem
0:17:51.550,0:17:58.330
Komplexgatter zum nächsten, indem man[br]einen Trick anwendet, und zwar, indem wir
0:17:58.330,0:18:02.560
sagen: Wir können ja noch zu dem Netzwerk,[br]was wir haben. Also dem Pull-Up, das waren
0:18:02.560,0:18:06.700
die Oberen oder Pull-Up-Netzwerk, dem[br]unteren, noch zusätzlich Transistor
0:18:06.700,0:18:13.270
hinzufügen. Einen in Serie, seriell, also[br]in Reihe. Wir müssen nur dafür sorgen,
0:18:13.270,0:18:18.400
dass wir logisch äquivalent in dem[br]komplementären Netzwerk, dazu einen
0:18:18.400,0:18:24.340
parallel machen. Das geht halt bei CMOS[br]schön. Und dafür habe ich mir ein Tool
0:18:24.340,0:18:30.520
geschrieben, was immer noch ein bisschen[br]buggy läuft. Auch schon mal ganz gut.
0:18:30.520,0:18:36.400
Also, wie gesagt, seriell einen[br]hinzufügen, parallel im anderen Netzwerk.
0:18:36.400,0:18:41.920
Wenn ich einen Pull-Up mache, seriell[br]erweiter, muss ich einen Pull-Down im
0:18:41.920,0:18:49.540
Komplementären machen und vice versa.[br]Okay, weil es sozusagen eine Sache ist,
0:18:49.540,0:18:54.580
die keiner noch so richtig durchexerziert[br]hat, habe ich angefangen mit Paperwork.
0:18:54.580,0:19:00.310
Also ich hab gesagt: "Okay, ich nehme mal[br]das einfachste CMOS Netzwerk, was ich mir
0:19:00.310,0:19:03.430
vorstellen kann, dass es ganz links mit[br]den zwei Transistoren das ist ein
0:19:03.430,0:19:08.230
Inverter". Und dann habe ich gesagt, mit[br]diesem Inverter, mit diesem Prinzip kann
0:19:08.230,0:19:15.340
ich sozusagen erweitern zu einem, NOR[br]zwei, also NOR mit zwei Eingängen. Aber
0:19:15.340,0:19:19.960
jetzt ein bisschen hinguckt, sieht man da[br]links da. Von wegen Inverter er
0:19:19.960,0:19:24.580
A-Transistor hat plötzlich ein[br]Brüderchen an der Seite gekriegt, A1 in
0:19:24.580,0:19:29.140
parallel und oben hat sozusagen eine Serie[br]bekommen. Auch wieder A1. Sieht ein
0:19:29.140,0:19:34.180
bisschen komisch aus, weil ich mir in den[br]Namensregeln zwischendurch mal geändert
0:19:34.180,0:19:40.930
habe. Aber das wär so die Idee. Das[br]Gleiche hat man auch für NAND gemacht.
0:19:40.930,0:19:46.480
Wieder den Inverter hergenommen, hab[br]gesagt "Okay, jetzt erweitere ich das
0:19:46.480,0:19:51.040
andere Netzwerk, weil ich sozusagen das[br]Pull down Netzwerk wieder seriell
0:19:51.040,0:19:58.510
erweitert, Pull up in parallel. Eine ganze[br]Weile hochgetrieben. Also sozusagen von
0:19:58.510,0:20:03.100
NAND2, NOR2 das wiedererweitert und so[br]weiter und da bin ich zu Sunarzelle
0:20:03.100,0:20:12.400
vorbeigekommen. Ein paar Leute haben mich[br]im Club um nur solche Sachen zeichnen
0:20:12.400,0:20:15.610
sehen, habe mich schon ein bisschen[br]meschugge gehalten, war aber ein bisschen
0:20:15.610,0:20:23.350
sowieso Sodoku, das beruhigt und es kommt[br]auch so etwas raus. Es sind sozusagen
0:20:23.350,0:20:32.170
jetzt vier Beispiele, die ich gescannt[br]habe. Die sind alle, Teile davon sind noch
0:20:32.170,0:20:38.210
gar nicht eingetragen worden ins make-[br]file, ebenfalls beim Paperwork ist im
0:20:38.210,0:20:41.870
Augenblick so. Ich habe zwei dicke
0:20:41.870,0:20:49.430
Aktenordner voll mit Papier. Nur diese[br]Ableitung, so geschätzt, würde mal sagen
0:20:49.430,0:20:55.310
so 500, 600 Zellen. Alles nur[br]Komplexgatter und alle mit diesem Limit
0:20:55.310,0:21:01.850
vier Transistoren gestacked. Ja, ich habe[br]das Gefühl, ich bin noch ganz, ganz weit
0:21:01.850,0:21:08.030
weg von complied, also von vollständig,[br]weil die Zellen im Augenblick noch dazu
0:21:08.030,0:21:15.410
tendieren, so lange Bäume zu bilden. Also[br]alternierend bei dem mehr gesehen hat.
0:21:15.410,0:21:20.720
Also sieht man ja: AND, OR, AND, OR. Nur[br]im Namen sieht man ein bisschen von der
0:21:20.720,0:21:23.720
Funktion und rechts oben diese[br]Bleistiftzeichnung sieht man auch die
0:21:23.720,0:21:29.540
Funktion. Also ich habe sozusagen[br]erweitert, habe immer geguckt, wie sieht
0:21:29.540,0:21:36.050
die Funktion aus. Es war jedenfalls[br]Arbeit, okay. Und das ist dann so ein
0:21:36.050,0:21:40.430
Zwischending. Wir sagen, das ist schon ein[br]bisschen fülliger, weil man dann auch mal
0:21:40.430,0:21:52.490
zwei OR-Funktionen nebeneinander hat oder[br]zwei AND. Okay. Und diese ganze Arbeit,
0:21:52.490,0:22:00.890
die ich mir erst einmal mit Papier gemacht[br]habe, wollte ich ja irgendwie auch meinem
0:22:00.890,0:22:07.190
Tool beibringen. Hab gesagt: "Okay,[br]brauche ein Tool, ich hab jetzt erst mal
0:22:07.190,0:22:34.400
das hier zum Vorführen. Kriege ich es[br]hin? Nein. Jetzt mal das hier zumachen.
0:22:34.400,0:22:36.980
Da[br]hat er mir jetzt die Manuel Pages
0:22:36.980,0:22:58.520
gebastelt dafür. Und ich guck mir jetzt[br]mal mit euch die zusammen an! Warum nicht?
0:22:58.520,0:23:30.040
Vertippt? Wahrscheinlich. Es sieht genauso[br]aus.
0:23:30.040,0:23:35.680
So jetzt mit der klassischen[br]Variante. Also. Das ist jetzt mit Klicki-
0:23:35.680,0:23:39.790
bunti. Das ist jetzt die Manual Page dazu. Ich[br]habe das Tool "Popcorn" genannt, einfach
0:23:39.790,0:23:45.670
weil gefühlt die Zellen einfach[br]wirklich hacken. Man schüttet den Mais
0:23:45.670,0:23:48.940
irgendwo in Topf rein, gibt ein bisschen[br]Wärme dazu, und dann macht das Blub-Blub-
0:23:48.940,0:23:58.780
Blub, dann kommen die ganzen Zellen raus.[br]Das war mein Hintergedanke dazu. Ja. Ihr
0:23:58.780,0:24:03.190
könnt es euch angucken, ist im Github[br]drinne. Da ist es auch ein bisschen
0:24:03.190,0:24:09.790
beschrieben, wie es funktioniert. Hier ist[br]dieses Bufferlimit drinne. Das kann ich
0:24:09.790,0:24:13.090
als Parameter übergeben. Ich kann den[br]Zellennamen übergeben, der dabei
0:24:13.090,0:24:17.980
rauskommen soll, weil, das weiß ich ja[br]inzwischen, mein Paperarbeit gemacht habe.
0:24:17.980,0:24:25.300
Ich kann das noch mit String richtig lang[br]beschreiben für die Doku. Hier sind
0:24:25.300,0:24:28.660
Formate, die ich ganz gerne später mal[br]hätte, die noch nicht alle funktionieren.
0:24:28.660,0:24:34.420
Helpscreen. Was haben wir hier? Hier haben[br]wir die Nummern der gestackten
0:24:34.420,0:24:40.060
Transistoren, limitierend. Und hier sind[br]die Methoden, die man sozusagen drauf
0:24:40.060,0:24:46.510
werfen kann. Ich hatte ja erklärt, man[br]kann einen Transistor seriell machen dazu,
0:24:46.510,0:24:53.890
einen anderen parallel erweitern. Das war[br]eine kurze Vereinfachung, weil je nachdem
0:24:53.890,0:24:57.970
bei welcher Zelle ich gerade bin, muss ich[br]auch die Namensregeln anpassen. Also ob
0:24:57.970,0:25:02.620
ich jetzt nur den Buchstaben, also den[br]nächsten Buchstaben im Alphabet nehme,
0:25:02.620,0:25:06.940
weil ich jetzt ein neues Gatter aufgemacht[br]habe oder neue Funktionalität. Oder ob ich
0:25:06.940,0:25:10.390
sozusagen jetzt Eingänge nur[br]durchnummeriere. Deswegen kommen hier
0:25:10.390,0:25:14.350
jetzt solche Methoden raus, wie NAND und[br]NOR, dass sozusagen mit durchnummerieren
0:25:14.350,0:25:20.890
und AOE-OAE, das ist dann sozusagen mit[br]einem neuen Buchstaben. Hier sind noch
0:25:20.890,0:25:24.910
zwei Methoden drin, die lassen heute mal[br]großzügig weg: Pull-up, Pull-Down. Die
0:25:24.910,0:25:31.590
funktionieren auch nicht. Brauche ich aber[br]in ein paar Exotengatter. Mit dem Gatter
0:25:31.590,0:25:49.640
komme ich jetzt nicht weiter, muss etwas[br]anderes machen. Also Prinzip, wie gesagt,
0:25:49.640,0:25:55.880
mit dem Tool ... Mäuschen ... so. Ich[br]nehme mir ein Zell-File her, also eine
0:25:55.880,0:25:59.840
Zellbeschreibung, schicke das durchs[br]Popcorn durch und kriege hinten wieder
0:25:59.840,0:26:05.780
eine erweiterte Zellschreibung rein. Ich[br]kann auch mal ... Moment, das ist das
0:26:05.780,0:26:18.890
Falsche. So eine Zellbeschreibung hier[br]rüber nehmen. Da ist sie. Das geht
0:26:18.890,0:26:23.420
irgendwie los, dass ich Kommentare erlaube,[br]dass ich ein .cell habe, wie ich das Ding
0:26:23.420,0:26:29.930
dann nenne. Ich hab ein .inputs drin,[br]wo ich sozusagen die ganzen
0:26:29.930,0:26:35.360
Eingangssignale auflisten kann. Outputs[br]äquivalent. Clocks sogar, wenn ich
0:26:35.360,0:26:40.820
Latches, Flipflops habe, brauche ich auch[br]Clocks. Ich hab sogar da, damit ich weiß,
0:26:40.820,0:26:45.560
wenn es zuende ist ein .end dabei. Und ich[br]habe sozusagen die ganzen Transistoren
0:26:45.560,0:26:50.660
eigentlich hier, so als Circuits dabei, wo[br]ich sage: "Welchen Typ von Transistor hab
0:26:50.660,0:26:55.400
ich? Einen PMOS, einen NMOS?" Ich sage,[br]wie der Knoten heißt, der am git
0:26:55.400,0:27:01.520
angeschlossen ist. Drain, Source, Balk und[br]so weiter. Hier habe ich die Nummer
0:27:01.520,0:27:05.840
drinne, der wievielte Transistor das schon[br]beim Stacken ist. Also wenn ich es
0:27:05.840,0:27:09.440
generiere, kriege ich sozusagen frei Haus[br]geliefert, deswegen gleich mit
0:27:09.440,0:27:17.390
reingeschrieben. Ich hab mir zum Scematic[br]malen, das ich auch schön ein Schaltbild
0:27:17.390,0:27:20.780
davon bekomme, auch gleich die Koordinaten[br]reingeschrieben, weil es sehe ich ja auch,
0:27:20.780,0:27:24.620
wenn ich es seriell mache, muss ich[br]sozusagen nur die x-Achse ändern, wenn ich
0:27:24.620,0:27:27.950
parallel machen muss, muss ich noch die[br]y-Achse ändern. Das war sozusagen ein
0:27:27.950,0:27:34.730
Beifang. Size ist so eine Geschichte. Da[br]will ich die Größe vom Transistor mit
0:27:34.730,0:27:40.880
reinschreiben. Da gibt es eine Methode,[br]dass man die Transistoren so
0:27:40.880,0:27:47.030
dimensioniert, dass halt den Kompromiss[br]zwischen Schnell- und Power-sparen, also
0:27:47.030,0:27:51.730
Energie-sparen machen. Gibts so eine[br]Methode, die nennt sich Logical Effort.
0:27:51.730,0:27:58.360
Das ist aber noch nicht so richtig[br]implementiert. Wenn die Zelle
0:27:58.360,0:28:02.200
funktioniert, wenn sie okay ist, dann gehe[br]ich einmal drüber und rechne mir das aus.
0:28:02.200,0:28:11.110
On-the-fly wird ein bisschen schwierig.[br]So, aber haben wir nicht nur komplexe
0:28:11.110,0:28:20.080
Gatter, wir haben ja auch Latches, also[br]Speicherzellen, die ... Okay, da muss ich
0:28:20.080,0:28:28.090
vielleicht nochmal sagen zur Benamung: im[br]Deutschen werden solche Zellen auch gerne
0:28:28.090,0:28:35.200
Flipflops genannt. Das halte ich aber[br]sozusagen für inkorrekt. Wir haben hier
0:28:35.200,0:28:42.640
Zellen, die zwar speichern, die aber Takt-[br]Zustands-gesteuert sind, so wie es früher
0:28:42.640,0:28:46.480
mal hieß: richtig, klares Deutsch: Takt-[br]Zustandsgesteuert. Die Amerikaner sagen
0:28:46.480,0:28:51.130
dazu Latch. Das heißt also, wenn wir zum[br]Beispiel einen High-Pegel haben, am Clock
0:28:51.130,0:28:55.300
oder einen Low-Pegel, dann ist das Ding[br]transparent. Und wenn dann aber der andere
0:28:55.300,0:28:59.770
Pegel angelegt wird, dann speichert er den[br]Wert der vorher sozusagen während
0:28:59.770,0:29:07.690
dieser transparenten Phase angelegen[br]hat. Es gibt im Gegensatz dazu gibt es
0:29:07.690,0:29:13.870
Flipflops, die sind sozusagen nicht Takt-[br]Zustands-gesteuert, sondern Takt-Flanken-
0:29:13.870,0:29:18.820
gesteuert. In dem Augenblick, wo wirklich[br]die Flanke wird, da wird der Wert rein
0:29:18.820,0:29:23.800
gelatcht. Im Prinzip ist es so, dass[br]Flipflops nur zwei Latches hintereinander
0:29:23.800,0:29:30.520
sind. Also wenn ich z.B. vorne als erste[br]Stufe ein Low-aktives Latch habe und
0:29:30.520,0:29:34.600
danach ein High aktives Latch, erreiche[br]ich, dass bei einem Clock, der jetzt in
0:29:34.600,0:29:39.340
einer Low-Phase ist, vorne, das[br]transparent ist. Das würde dann beim
0:29:39.340,0:29:44.920
Taktflankenwechsel, also bei der[br]steigenden Flanke, zu machen, und hinten
0:29:44.920,0:29:48.820
wäre es dafür transparent. Das ist[br]sozusagen genau dieser Umschaltpunkt, die
0:29:48.820,0:29:53.200
Flanke. Dann haben wir zum Beispiel ein[br]posEdge, also eine steigende Flanke für
0:29:53.200,0:30:00.070
ein Flip-Flop. Aber wie gesagt: Latches[br]sind für mich Takt-Zustands-gesteuert und
0:30:00.070,0:30:06.140
Flipflops sind Takt-Flanken-gesteuert. Das[br]hier ist jetzt ein Latch. Ich weiß nicht,
0:30:06.140,0:30:14.000
ob jemand irgendwie von euch ein bisschen[br]damit klarkommt. Wir haben hier links zwei
0:30:14.000,0:30:19.340
Inverter. Also da ganz vorne, kommt ein[br]Signal rein, das hab ich mit X benannt.
0:30:19.340,0:30:24.470
Das ist mein Clock, den invertiere ich[br]einmal, kriege also ein 180 Grad
0:30:24.470,0:30:29.420
phasengedrehtes Signal, und dann[br]invertiere ich den nochmal. Dann komme ich
0:30:29.420,0:30:36.140
auf um 360 Grad phasengedrehtes Signal.[br]Warum? 360 ist eigentlich das gleiche, wie
0:30:36.140,0:30:41.570
vorne dran. Aber ich habe den Effekt. Ich[br]habe meinen Takt, also die ganzen Signale,
0:30:41.570,0:30:46.070
die Transistoren, die dahinter von dem[br]abhängig sind, erst einmal so etwas wie
0:30:46.070,0:30:49.850
gepuffert. Ich habe sozusagen im Netzwerk,[br]was von draußen reinkommt, nicht mehr so
0:30:49.850,0:30:54.140
eine große Last, und ich habe damit den[br]Effekt, dass sie sozusagen einen
0:30:54.140,0:30:59.030
zweiphasigen Takt erreicht habe. Und[br]diesen benutze ich denn bei den
0:30:59.030,0:31:03.200
Transistoren hintendran zum Schalten. Und[br]wenn man sich das jetzt ein bisschen
0:31:03.200,0:31:13.160
anguckt. Hier diese Stufe da oben. Das ist[br]ein Inverter, der kann aber Tristate
0:31:13.160,0:31:18.740
erreichen. Das heißt also, wenn die[br]Taktsignale, die Clock unten und oben, die
0:31:18.740,0:31:25.730
Transistoren, wenn die gerade ungünstig[br]stehen, dann ist es dieser Stufe egal, was
0:31:25.730,0:31:30.140
vorne an dem D-Eingang, am Daten-Eingang[br]für ein Signal anliegt. Er lässt es
0:31:30.140,0:31:35.240
nicht durch, invertiert nicht. Treibe[br]sozusagen ... wie soll ich es sagen ....
0:31:35.240,0:31:41.810
Wenn der Clock richtig liegt, treibe ich[br]das rein und hab aber von hinten die
0:31:41.810,0:31:46.490
Rückführung drinne, die genau so einen[br]Tristate-fähigen Inverter hat, der aber
0:31:46.490,0:31:51.290
gegenphasig arbeitet. Das heißt also, die[br]beiden, also der linke Inverter und der
0:31:51.290,0:31:55.760
rechte Inverter treiben gleichzeitig einen[br]Knoten, nämlich der von dem Inverter in
0:31:55.760,0:32:01.490
der Mitte und hinter diesen Inverter in[br]der Mitte da hab ich den Daten-Ausgang.
0:32:01.490,0:32:12.750
Das ist die kleinste, stabilste Latch-[br]Schaltung, die ich so kenne. Das ist jetzt
0:32:12.750,0:32:18.120
sozusagen das Gleiche nochmal für Low-[br]aktiv deswegen, deswegen da "Latch" mit
0:32:18.120,0:32:24.900
dem "N" hintendran. Da hab ich sozusagen[br]genau die gleiche Schaltung. Sieht genauso
0:32:24.900,0:32:29.670
aus, nur dass jetzt die Clock-Signale[br]andersherum angeschlossen sind gegenüber
0:32:29.670,0:32:34.170
dem davor. So, um es ein bisschen[br]komplizierter zu machen, habe ich jetzt
0:32:34.170,0:32:38.730
mal ein Beispiel dabei. Da hab ich ein[br]Latch, was High-aktiv ist, also mit
0:32:38.730,0:32:45.180
positiver Flanke, ja positiven Level[br]arbeitet, was ein Clock-enable hat: Ich
0:32:45.180,0:32:50.022
kann also den Clock zulassen oder[br]unterdrücken, und was noch nen asynchronen
0:32:50.022,0:32:54.990
Reset drinnen hat. Und das Ganze ist, die[br]Funktion ist so optimiert, dass ich
0:32:54.990,0:32:59.010
wirklich die minimale Anzahl von[br]Transistoren erreiche dabei. Ich hätte
0:32:59.010,0:33:01.620
jetzt sagen können, ich nehme den Reset-[br]Eingang, der muss jetzt eine andere
0:33:01.620,0:33:06.270
Polarität haben. Hätte ich dafür wieder[br]einen Inverter gebraucht, habe ich aber
0:33:06.270,0:33:12.780
nicht. Also mein Reset ist da oben[br]Entschuldigung mit P3 irgendwo so rechts
0:33:12.780,0:33:17.820
oben in der Ecke. Er ist in dem Fall[br]wirklich High-Aktiv. Wenn ich einen Set-
0:33:17.820,0:33:23.490
Eingang nehme, das Gegenteil dazu, dann[br]hätte ich ihn Low-Aktiv und das Clock-
0:33:23.490,0:33:26.940
Enable-Signal, was ich vorne dran habe,[br]das richtet sich auch darum wieder, ob ich
0:33:26.940,0:33:33.180
jetzt ein High-aktives oder ein Low-[br]aktives Clock Signal haben möchte. Moment,
0:33:33.180,0:33:39.060
das war zurück. Okay, das ist noch ein[br]Punkt, der ist offen. Zu viele Baustellen.
0:33:39.060,0:33:42.330
Also Ich will eigentlich von einem[br]Scematic so wie ihr das gerade gesehen
0:33:42.330,0:33:49.020
habt für den Latch, auch wieder zu meiner[br]Zellbeschreibung kommen. Ich habe für das
0:33:49.020,0:33:53.940
Scematic allerdings ein OpenSource-Tool[br]benutzt, was eigentlich aus dem PCB-
0:33:53.940,0:34:01.050
Bereich kommt, GNU-EDA. So aus der Ecke.[br]Und dafür gibt es die Möglichkeit, auch
0:34:01.050,0:34:04.560
Netzlistern, also auch einen Exporter zu[br]schreiben. Ich habe mir die Mühe noch
0:34:04.560,0:34:08.730
nicht gemacht. Aber das werde ich machen[br]auf alle Fälle für alle Zellen, die ich
0:34:08.730,0:34:12.390
sozusagen händisch machen muss, also die[br]nicht durch Popcorn generiert worden sind.
0:34:12.390,0:34:25.200
Okay. Popcorn, Popcorn. Wenn wir jetzt[br]hier mal ganz schnell das da machen. Also,
0:34:25.200,0:34:32.700
wenn wir mal in den Katalog reingucken. Da[br]sind jetzt hier. Oh, da ist schon was
0:34:32.700,0:34:43.830
drin. Machen wir mal leer. Okay, da haben[br]wir so ein paar Makefiles drinnen. Also
0:34:43.830,0:34:47.100
Katalog ist ein Verzeichnis wo ich die[br]ganzen Zellbeschreibungen drinnen sammle.
0:34:47.100,0:34:53.040
Ich hab ein GNUmakefilel, das ist mein[br]großes, da sind die Hauptfunktionalitäten
0:34:53.040,0:34:58.470
drin. Und ich hab dann so ein paar drinnen[br]mit stacked2, stacked3 und so weiter, die
0:34:58.470,0:35:01.980
betreffen die Anzahl der gestackten[br]Transistoren, also der gestapelten
0:35:01.980,0:35:03.960
Transistoren die ich zulasse. Alle Zellen,
0:35:03.960,0:35:08.160
die ich z.B. maximal drei gestackte[br]Transistoren haben, wären in dem Makefile
0:35:08.160,0:35:12.660
mit dem stacked3 drinnen. Es hat den[br]Vorteil, wenn ich jetzt in der
0:35:12.660,0:35:15.720
Konfiguration, dazu kommen wir hoffentlich[br]noch, wenn mir die Zeit nicht wegläuft,
0:35:15.720,0:35:21.525
angebe, ich habe so und so viel als Limit[br]für meinen Transistor, dass er mir das
0:35:21.525,0:35:24.180
entsprechende Makefile als höchstes[br]Makefile nimmt, alle anderen wären
0:35:24.180,0:35:34.710
sozusagen inkludiert. OK. "make catalog" .[br]Kann man sich sozusagenen Katalog machen.
0:35:34.710,0:35:40.860
Zieht man Popcorn mal ran. Machen wir das[br]mal schnell. So weit läuft er leider noch
0:35:40.860,0:35:51.510
nicht. So und da bricht das schon ab. Das[br]ist in dem Fall deshalb, weil meine Zellen
0:35:51.510,0:35:55.110
noch nicht durchgängig sind. Ich habe[br]leider in meinem Makefile Zellen drin, die
0:35:55.110,0:36:00.090
er noch nicht generieren kann. Da habe ich[br]noch die Paperwork, muss ich wirklich mal
0:36:00.090,0:36:05.520
von vorne bis hinten alles durch. Aber im[br]Augenblick ist für mich wichtiger, dass es
0:36:05.520,0:36:08.850
läuft, als es jetzt an der Stelle erst mal[br]vorstellen. Aber es würde genauso
0:36:08.850,0:36:12.060
ablaufen. Ich habe sozusagen die ganzen[br]Ableitungen im Makefile drinnen. Ich sage
0:36:12.060,0:36:16.620
"make catalog" und er generiert mir alle[br]Zellen. Alle kombinatorischen Zellen so.
0:36:16.620,0:36:26.280
Und wie gesagt, dass also die Warnung ist[br]ernst gemeint. Wenn jemand beabsichtigt,
0:36:26.280,0:36:30.750
selber mal so eine Zellbibliothek zu[br]machen oder zu generieren, er sollte
0:36:30.750,0:36:35.970
wissen, was er tut, weil der Effekt auf[br]eure Schaltung oder auf dem Chip ist
0:36:35.970,0:36:42.810
einfach mal desaströs, wenn das schief[br]geht. OK. Makefiles bei mir haben immer
0:36:42.810,0:36:46.710
die Möglichkeiten einen Helpscreen[br]drinnen. Kann ich auch mal schnell
0:36:46.710,0:36:52.920
vorführen. Also wenn ich jetzt sage[br]"make", dann krieg ich bei mir einen
0:36:52.920,0:37:00.390
Helpscreen. In dem Fall ist es jetzt das[br]Globale, also ich hab eine Möglichkeiten,
0:37:00.390,0:37:04.410
eine Distribution zu machen. Da so am Ende[br]alles rein wenn es fertig ist. "make
0:37:04.410,0:37:07.830
tools" hatte ich ja schon mal gemacht,[br]"make catalog" auch schon. Ich kann aber
0:37:07.830,0:37:11.460
auch die Dokumentation dafür generieren.[br]Also für die ganzen Zellen, die ich oder
0:37:11.460,0:37:15.930
die Popcorn generiert und ich selber auch[br]händisch gemalt habe. Dafür gibt es dann
0:37:15.930,0:37:21.540
sozusagen ein Datenblatt, wo dann drin[br]steht, wie das Schaltbild aussieht, wie
0:37:21.540,0:37:26.370
das Scematic aussieht. Welche Files ich[br]alle dazu gefunden habe, oder das Tool
0:37:26.370,0:37:31.410
dazu gefunden hat, also Layoutfiles,[br]Simulationsfiles und so weiter. Das soll
0:37:31.410,0:37:43.590
alles rein. Okay, jetzt wird's nochmal ein[br]bisschen blutig. Es gibt Mosis-Rules.
0:37:43.590,0:37:49.140
Mosis ist ein amerikanisches[br]Universitätsprogramm, vergleichbar mit dem
0:37:49.140,0:37:55.530
europäischen Europractice. Die bieten so[br]ein Service an für Universitäten, dass man
0:37:55.530,0:37:59.580
sagen kann, ich hab hier einen Chip, und[br]ich möchte irgendwie 20 oder 30 Exemplare
0:37:59.580,0:38:03.570
dafür haben, dann machen die so ein Multi-[br]Project-Wafer wo sozusagen mehrere
0:38:03.570,0:38:08.130
Projekte drauf sind. Schieben dann mal so[br]ein Schiffchen mit 20 30 Wafern durch die
0:38:08.130,0:38:15.030
Fab und das wars. Aber die haben auch mal[br]definiert Designrules. Also fürs Layout
0:38:15.030,0:38:21.240
die Abstände definiert, die[br]Größenordnungen für Metal, für Poly, für
0:38:21.240,0:38:26.880
alles mögliche, und diese Rules sind so[br]gemacht, dass sie auf möglichst viele
0:38:26.880,0:38:30.720
Technologien von ihren Klienten oder den[br]Fabs die da hinten dranhängen auch
0:38:30.720,0:38:37.740
funktionieren. Das ist so der kleinste[br]gemeinsame Nenner. Hat aber den Vorteil,
0:38:37.740,0:38:42.150
dass sie wirklich recht robust sind, wenn[br]man danach designed. Dann hat man
0:38:42.150,0:38:43.290
vielleicht nicht irgendwie das allerletzte
0:38:43.290,0:38:47.250
rausgekitzelt aus der Technologie, die[br]vielleicht eine Fab anbietet oder
0:38:47.250,0:38:52.200
irgendwelche Spezialitäten nicht benutzt.[br]Aber man kann sozusagen damit gut
0:38:52.200,0:38:58.470
arbeiten. Und diese Rules sind als PDF zum[br]runterladen, kann man sich angucken. Gut
0:38:58.470,0:39:05.220
gemacht, okay. Die machen also die Rules[br]dafür, die sind so in drei Stufen
0:39:05.220,0:39:12.000
definiert. SCMOS wie scalable CMOS. Das[br]ist so, ja CMOS, die haben, angefangen mit
0:39:12.000,0:39:18.900
zwei, drei Mikrons oder sowas. Dann gab es[br]dieses Sub-Mikron. Da so über den Daumen
0:39:18.900,0:39:26.460
hätte ich gesagt, alles so kleiner gleich[br]0,8 µ. Noch ein Stückchen kleiner ist
0:39:26.460,0:39:31.560
dann Deep-sub-micron. Also alles wo dann[br]irgendwie schon ganz komische Effekte dazu
0:39:31.560,0:39:37.650
kommen, also 0,35 oder so etwas. Also 0,35µ[br]muss man umrechnen, das sind 350
0:39:37.650,0:39:43.470
Nanometer. Klingt für heutzutage riesig,[br]aber es ist so. Ich habe jetzt noch bei
0:39:43.470,0:39:48.780
diesen Rules, die benutze ich ja in meinem[br]Tool, noch eine vierte Möglichkeit
0:39:48.780,0:39:55.380
eingebaut, wo ich sage, ich möchte es ganz[br]gerne, dass die Leute in der Lage sind,
0:39:55.380,0:40:00.750
ein extra Rulefile rein zu laden, also mit[br]diesen ganzen Angaben, was von diesen drei
0:40:00.750,0:40:07.860
Schemen die da im PDF sind, abweicht. Da[br]wollte ich auch noch jetzt mal kurz
0:40:07.860,0:40:30.517
zeigen, wie dieses aussieht. Schreiben[br]sollte man können. Das ist erst mal der Header.
0:40:30.517,0:40:38.650
Das ist in Sceme geschrieben. Also nicht[br]erschrecken. Da sind die ganzen Rules, die
0:40:38.650,0:40:45.985
es so gibt drinnen mit den Nummern, so wie[br]sie im PDF sind. Da habe ich mir einen
0:40:45.985,0:40:53.410
kleinen Vektor definiert, wo ich die vier[br]Werte reinschreibe. Und das ist jetzt.
0:40:53.410,0:40:58.420
Moment, wo geht's los. Das ist mal so ein[br]bisschen so ein Anfang. Also dass ich auch
0:40:58.420,0:41:03.040
ASCII-Art reingemacht hat, um Rules zu[br]erklären, um welche Abstände es geht. In
0:41:03.040,0:41:06.640
dem Fall haben wir die Rule 1.1, und die[br]sagt von wegen bei einem nwell, die kann
0:41:06.640,0:41:13.120
halt eine bestimmte Breite, Länge haben,[br]und die muss halt irgendwie eingehalten
0:41:13.120,0:41:18.670
werden. Da steht ja Minimum nwell pwell[br]Rule. Und so zieht sich das halt irgendwie
0:41:18.670,0:41:22.870
das ganze Dokument runter. Tabelle dazu,[br]die sozusagen einen von den vier Werten
0:41:22.870,0:41:27.550
herauspickt. Je nachdem, mit welchem[br]Parameter ich reinkomme. Nächste Rule,
0:41:27.550,0:41:32.920
1.2, da ist dann bei der nwell oder pwell[br]der Abstand dazwischen einzuhalten und so
0:41:32.920,0:41:40.060
weiter. Die Rules benutze ich für das[br]Layouttool. Ok, und jetzt wollen wir
0:41:40.060,0:41:48.310
hier raus. Ahm Ups. Also die Rules sind[br]alle in Lambda definiert, das ist noch ein
0:41:48.310,0:41:53.980
wichtiger Punkt. Oh, fünf Minuten, ok.[br]Lambda meint die Hälfte der Featuresize,
0:41:53.980,0:41:57.940
also wenn jemand sagt, eine Technologie[br]mit einem Mikron, dann ist das ein Mikron
0:41:57.940,0:42:07.210
die Featuresize. Lambda meint also[br]sozusagen die Hälfte davon. Und in der
0:42:07.210,0:42:11.620
Größenordnung sind all diese Regeln[br]angegeben. Die geben also sozusagen nicht
0:42:11.620,0:42:15.454
absolute Werte an, von wegen, wenn ich[br]jetzt 0.8µ hab, müssen das so und so
0:42:15.454,0:42:19.738
viele Mykrometer sein, sondern sie geben[br]das in Lambda an und sagen: drei Lambda,
0:42:19.738,0:42:23.950
zwei Lambda sind mehr oder weniger alles[br]ganze Integerwerte. Und es hat halt den
0:42:23.950,0:42:27.640
Vorteil, dass man über mehrere[br]Generationen hinweg runterskalieren kann,
0:42:27.640,0:42:31.880
so wie es da in dem Punkt auch kam. Von[br]wegen erst mal scaleable CMOS, dann gehts
0:42:31.880,0:42:38.060
ins Submikron und dann Deep-Submikron. Das[br]funktioniert, aber irgendwann funkioniert
0:42:38.060,0:42:40.700
es nicht mehr, deswegen haben sie die[br]neuen Stufen eingeführt, in denen
0:42:40.700,0:42:45.770
sozusagen die Regeln wieder ein bisschen[br]breiter sind. Okay, jetzt haben wir hier
0:42:45.770,0:42:52.130
so eine Zelle. Ist auch ein Punkt, den ich[br]erklären muss. Das ist eine 6-Track-Zelle.
0:42:52.130,0:42:55.700
Wenn man sich da die blauen Streifen[br]vorstellt, die so horizontal drüber
0:42:55.700,0:43:01.130
laufen, das ist Metal, also Metall eins.[br]Das habe ich einmal ganz unten, da ist es
0:43:01.130,0:43:06.680
grau und einmal ganz oben. VDD. Also[br]Betriebsspannung. Die Dinger haben laut
0:43:06.680,0:43:12.530
Mosis-Rules, sieht man an den Kästchen[br]auch, eine Breite von 4 Lambda. Das ist
0:43:12.530,0:43:17.570
sozusagen der Minimalabstand für das[br]Metall, und in den Mosis-Rules steht, auch
0:43:17.570,0:43:21.590
drinnen, wie groß der Abstand zum nächsten[br]Metal sein muss, also zu dem gleichen
0:43:21.590,0:43:26.240
wieder Metall. Das sind auch wieder 4[br]Lambda, wenn man sich das so vorstellt,
0:43:26.240,0:43:30.290
vier Lambda, die Leitung selber, vier[br]Lambda Lücke, nächste Metall - dann kommt
0:43:30.290,0:43:36.980
man auf ein Raster als von 8 Lambda, und[br]dieses Raster wird auch beim Routing
0:43:36.980,0:43:41.960
benutzt. Also wenn man über die Zellen[br]hinweg routen will, weil sich das halt so
0:43:41.960,0:43:44.382
schön durchzieht, also nicht nur Metal[br]eins und dann zwei und drei und so weiter.
0:43:44.382,0:43:51.680
Und das nennen die halt so Tracks, und es[br]hat sich eingebürgert in der Branche, dass
0:43:51.680,0:43:56.960
die Zellhöhe, also wie hoch so eine Zelle[br]ist, in Anzahl dieser Tracks angegeben
0:43:56.960,0:44:01.130
wird. Das hier ist also ein Beispiel für[br]6-Track, das ist so eine kleine Zelle.
0:44:01.130,0:44:05.900
Funktioniert bei diesem NAND immer noch[br]ganz gut. Wenn ich jetzt aber so eine
0:44:05.900,0:44:10.640
Monster Komplexzellen hatte, wie am Anfang[br]irgendwie mal gezeigt, dann funktioniert
0:44:10.640,0:44:15.440
das nicht mehr. Dann muss es größer[br]werden. Okay, das wäre jetzt mal mit
0:44:15.440,0:44:20.120
sieben Tracks. Man sieht das Raster wird[br]schon ein bisschen kleiner, und das
0:44:20.120,0:44:24.620
gleiche hier nochmal mit zehn. Jetzt hat[br]man schon den Effekt: Für das NAND2 ist
0:44:24.620,0:44:29.390
zehn Tracks schon ziemlich groß, nämlich[br]ziemlich viel Luft in der Mitte. Für die
0:44:29.390,0:44:32.750
Komplexgatter, die irgendwie reinkommen,[br]da wird es vielleicht doch schon wieder
0:44:32.750,0:44:36.170
ein bisschen knapper. Also man muss[br]sozusagen an der Stelle immer die Balance
0:44:36.170,0:44:40.160
finden. Wie groß macht man die Zellen -[br]Man will sie ja nicht zu groß machen, wenn
0:44:40.160,0:44:47.370
man sich den Platz verschenkt - Aber man[br]will auch Funktionalität drin haben. Okay,
0:44:47.370,0:44:56.640
so wie sollte man eigentlich mit dem Ding[br]rum spielen? Ich habe... wo ist es... Da.
0:44:56.640,0:45:07.790
Also wenn ich das jetzt hier mache. Im[br]Templates hab ich ein toml-File drinnen.
0:45:07.790,0:45:12.680
Und das ist dazu gedacht, die[br]Konfiguration zu machen. Also dass ich
0:45:12.680,0:45:16.580
wirklich die Werte reinschreiben kann. Da[br]sieht man wieder das Limit vier. Also
0:45:16.580,0:45:21.830
wieviel Transistoren ich stacken möchte,[br]kann ich angeben. Buffern, ab wann ich
0:45:21.830,0:45:25.610
sozusagen mit dem Buffer hinten anfangen[br]möchte. In dem Fall ist auch erst mal vier
0:45:25.610,0:45:29.690
drinnen. Bei den Zellen ist es so, dass[br]sie sagen, wie hoch das ist. Mein
0:45:29.690,0:45:41.360
Beispielfile, was ich habe. Ich sage 11[br]Tracks. Ups. Jetzt ist was weg. Dann
0:45:41.360,0:45:46.880
Terminals, also auf welcher Ebene mache[br]ich die Übergabe zum Routing? Also was ist
0:45:46.880,0:45:50.780
sozusagen für die Zelle die Ein- und[br]Ausgänge? Wo soll der Router ran gehen? In
0:45:50.780,0:45:58.760
dem Fall sage ich, es soll bitte schön auf[br]Metal II sein. Ja, Connectivity,
0:45:58.760,0:46:01.730
Restricted. Es gibt auch solche Sachen, wo[br]man sagt, man darf an die Zelle nur
0:46:01.730,0:46:06.020
waagerecht ran, oder man darf nur[br]senkrecht ran. Oder man lässt es sozusagen
0:46:06.020,0:46:09.800
offen. Ich habe gesagt erst mal für mein[br]Beispiel unrestricted. Also ich habe keine
0:46:09.800,0:46:15.770
Vorgaben gemacht, ob nur waagerecht oder[br]nur senkrecht. Dann kommen hier noch so
0:46:15.770,0:46:20.960
Transistorgeschichten rein. Der[br]Transistor, Featursize, meistens als 'L'
0:46:20.960,0:46:25.790
bezeichnet, ist sozusagen die Länge und[br]die Weite dazu, also wie breit der Kanal
0:46:25.790,0:46:29.180
ist, also nicht, wie lang, sondern wie[br]breit. Und dieses Verhältnis dazwischen
0:46:29.180,0:46:33.950
wird immer gern als Ratio angegeben. Und[br]laut Mosis-Rules ist das Kleinste, was wir
0:46:33.950,0:46:39.680
sozusagen nutzen können dafür 1,5. Das[br]heißt also, wenn ich eine Featursize habe
0:46:39.680,0:46:48.050
von einem Mikron, ist mein L das Lambda 2[br]und die Weite ist dazu 3. Jetzt kommt noch
0:46:48.050,0:46:52.970
ein Punkt Gamma dazu. Ok, versuchen wir[br]ganz schnell zu erklären. Die
0:46:52.970,0:46:57.920
Ladungsträgerbeweglichkeit für P-Kanal und[br]N-Kanal-Transistoren ist unterschiedlich.
0:46:57.920,0:47:03.890
Bei N-Kanal bewegen sich die Elektronen.[br]Und bei P-Kanal bewegt sich ja sozusagen
0:47:03.890,0:47:07.760
gar nichts. Und dann wandern die Löcher[br]mit, wenn sich die Elektronen drüber
0:47:07.760,0:47:12.890
bewegen. Ganz grob ausgedrückt. Um das[br]aber auszugleichen in der Geschwindigkeit,
0:47:12.890,0:47:19.220
man will ja eigentlich sozusagen, dass[br]P-Kanal und N-Kanal etwa gleich sind, weil
0:47:19.220,0:47:22.230
man sonst unterschiedliche[br]Verzögerungszeiten hat für Schaltvorgänge,
0:47:22.230,0:47:27.240
fängt man damit an, den[br]P-Kanaltransistor größer zu machen. Und
0:47:27.240,0:47:31.800
wie viel im Verhältnis zu dem N-Kanal er[br]größer wird, das wird ganz gerne als Gamma
0:47:31.800,0:47:36.240
angegeben. Ich habe hier erst einmal zwei[br]reingeschrieben. Das ist so ein üblicher
0:47:36.240,0:47:41.130
Schätzwert, ist nicht ideal, ist nicht[br]ausbalanciert, ist nicht perfekt. Das
0:47:41.130,0:47:47.940
hängt nämlich davon ab, wie gut P-Kanal[br]und N-Kanal dotiert sind und so weiter. Es
0:47:47.940,0:47:53.400
geht auch bis zu drei. Wenn ich zum[br]Beispiel irgendwas haben möchte, was
0:47:53.400,0:47:59.520
Seitenkanalangriffen standhält, sozusagen[br]den Peak nicht sieht, dann sollte man den
0:47:59.520,0:48:07.890
Wert ausbalancieren. Ok. Sizing ist die[br]Geschichte, ja. Wir werden immer knapper
0:48:07.890,0:48:18.570
hier. Ja, ok. Also da will ich hin zeigt[br]zur Präsentation Bin ich noch ein
0:48:18.570,0:48:21.720
bisschen weg von. Irgendwann, also von[br]wegen... ihr nehmt das TOML-File her...
0:48:21.720,0:48:27.510
Beispiel... konfiguriert euch das, passt[br]euch das an, wie er es braucht. Ihr drückt
0:48:27.510,0:48:31.650
einfach "make dist", also wie[br]"distribution". Ihr kriegt den ganzen Sack
0:48:31.650,0:48:35.490
voll, kann eine ganze Weile dauern. Aber[br]ihr kriegt danach Schematics, ihr kriegt
0:48:35.490,0:48:40.110
Layouts, kriegt die Dokumentation und habt[br]sozusagen wirklich was "ready to use" für
0:48:40.110,0:48:46.770
yosys oder für die ganzen anderen Tools,[br]ist alles dabei. Und das Ganze soll Open
0:48:46.770,0:48:51.657
Source sein. Steht ja jetzt schon bei[br]GitHub So, jetzt Q & A.
0:48:51.657,0:48:54.900
Herald: Dann bitte ich jetzt einmal um[br]einen herzlichen Applaus für Chipforge.
0:48:54.900,0:49:00.496
Applaus
0:49:00.496,0:49:03.400
H: Und wir beginnen mit der Fragerunde.[br]Wir haben drei Mikrofone hier im Saal. Wer
0:49:03.400,0:49:09.160
eine Frage hat, einfach zum Mikrofon[br]gehen. Es gibt schon eine Frage aus dem
0:49:09.160,0:49:18.250
Internet.[br]Signal Angel: Hallo. Die Frage aus dem
0:49:18.250,0:49:22.600
Internet lautet: Wie viel würde es kosten,[br]einen Quadratmillimeter Platz auf so einem
0:49:22.600,0:49:28.450
Die zu kaufen? Für irgendeinen Knoten, wo[br]du den Preis gerade weißt. Wie lange wird
0:49:28.450,0:49:35.110
es dauern?[br]C: Okay. Also unser Background ist ja, wir
0:49:35.110,0:49:39.160
wollen eigentlich ein freies Silizium[br]machen, also wirklich auch diesen Prozess
0:49:39.160,0:49:45.580
freilegen. Das ist das, was Leviathan in[br]Hongkong da vorantreibt. Da ist es so,
0:49:45.580,0:49:51.760
dieser Quadratmillimeter wäre einfach zu[br]haben. Also die Wafer-Kosten wären
0:49:51.760,0:49:56.110
irgendwie so bei 100 Hongkong-Dollar, wenn[br]ich das richtig glaub ich in Erinnerung
0:49:56.110,0:50:01.630
habe, also durch 10, wären das irgendwie[br]10 Dollar für einen Wafer, 4 Zoll, relativ
0:50:01.630,0:50:08.140
klein, und es würden noch die Maskenkosten[br]dazu kommen. Da müsste ich jetzt lügen. Es
0:50:08.140,0:50:11.290
sind aber auch irgendwie nur ein paar[br]Tausend oder so. Fünf oder sechs Tausend,
0:50:11.290,0:50:16.360
so in der Größenordnung. Vielleicht 10.000[br]Dollar. Der Rest ist eigene Manpower im
0:50:16.360,0:50:19.510
Labor.[br]SA: Danke.
0:50:19.510,0:50:23.080
C: Und du kannst dir so viele Chips[br]davon machen wie du lustig bist, wenn wir
0:50:23.080,0:50:26.530
so weit sind. Also wir würden ganz gerne[br]zurück ins Labor, aber dafür brauchen wir
0:50:26.530,0:50:31.750
halt die Gebühr für den Reinraum.[br]H: Danke für die Antwort. Die nächste
0:50:31.750,0:50:34.960
Frage. Mikrofon 2, bitte![br]Mikrofon 2: So wie das jetzt aussieht,
0:50:34.960,0:50:39.010
könnt ihr ja die Layouts für eure[br]Standardzellen oder wollt ihr zumindest
0:50:39.010,0:50:41.909
mal, automatisch generieren lassen zu[br]gewissen Graden.
0:50:41.909,0:50:43.750
C: Ja[br]M: Könnt ihr das dann auch direkt einem
0:50:43.750,0:50:47.710
Tool beibringen, dass es aus einer[br]synthetisierten Netzliste schon direkt
0:50:47.710,0:50:53.200
versucht so, ich sage mal, Makro-Zellen zu[br]synthetisieren. Das wird irgendwann nicht
0:50:53.200,0:50:56.890
mehr gehen, aber für kleinere könnte ich[br]mir das vorstellen. Kannst du da was dazu
0:50:56.890,0:51:01.720
sagen?[br]C: Ja. Der Weg wäre ein bisschen
0:51:01.720,0:51:06.940
umständlich. Eigentlich ist es so, die[br]Tools wie yosys, also die sozusagen, die
0:51:06.940,0:51:11.230
Synthese machen, die sind ja immer extrem[br]davon abhängig, wie gut die Bibliothek
0:51:11.230,0:51:15.370
ist, die yosys zur Verfügung steht. Und[br]wenn wir aber eine Bibliothek haben, die
0:51:15.370,0:51:20.290
relativ begrenzt und klein ist, dann kann[br]yosys nur entsprechend Ergebnisse liefern.
0:51:20.290,0:51:24.460
Wenn wir allerdings in der Lage sind, hier[br]mit diesem Popcorn und so weiter die
0:51:24.460,0:51:28.420
Bibliothek zu liefern, die wirklich mehr[br]oder weniger allumfassend ist, dann hat
0:51:28.420,0:51:33.010
yosys auch viel viel viel mehr[br]Möglichkeiten zu optimieren, sozusagen in
0:51:33.010,0:51:39.130
Richtung Delay, in Richtung[br]Energieaufnahme und so weiter. Also wir
0:51:39.130,0:51:42.310
geben sozusagen dem Tool dann viel, viel[br]mehr Möglichkeiten. Es kann natürlich
0:51:42.310,0:51:46.300
sein, dass es denn ein bisschen länger[br]braucht, einfach weil es sozusagen den
0:51:46.300,0:51:51.460
ganzen Suchraum durchgehen muss. Aber die[br]Ergebnisse sind einfach mal besser.
0:51:51.460,0:51:55.558
H: Okay. Als nächstes am Mikrofon 1,[br]bitte!
0:51:55.558,0:52:01.930
Mikrofon 1: Okay, also das sieht ja schon[br]mal ganz gut aus, aber hast du schon
0:52:01.930,0:52:06.790
Transmission-Gates, Analog-Multiplexer und[br]Schmidt-Trigger angeguckt oder machst du
0:52:06.790,0:52:10.630
die dann von Hand?[br]C: Okay, also die Sachen generiere ich
0:52:10.630,0:52:17.020
nicht mit dem Popcorn. Die Multiplexer[br]mache ich händisch. Ja, Multiplexe sind
0:52:17.020,0:52:22.180
auch wieder in verschiedenen Stack-Zellen[br]drinnen. Multiplexer, also diese
0:52:22.180,0:52:25.330
Transmission-Gates in den Multiplexern,[br]die haben aber einen ganz hässlichen
0:52:25.330,0:52:29.590
Nachteil. Die gehen wieder in meine Bilanz[br]rein mit den Anzahl gestackten
0:52:29.590,0:52:34.450
Transistoren. Weil sie ja sozusagen nur[br]diesen Pfad drinnen haben und kein, wie
0:52:34.450,0:52:42.310
soll ich sagen, Renewing, oder Refresh vom[br]Pegel machen. Also das Zeug mache ich auf
0:52:42.310,0:52:47.050
alle Fälle von Hand, ja. Und Schmidt-[br]Trigger werden für mich in die
0:52:47.050,0:52:51.100
Standardzellenbibliothek nicht reinkommen.[br]Die kommen in die IO Zellen, weil da
0:52:51.100,0:52:56.325
brauche ich sie.[br]H: Alles klar. Dann war noch eine Frage am
0:52:56.325,0:53:00.670
Mikrofon 2.[br]Mikrofon2: Jo, servus! Die Frage ist, weil
0:53:00.670,0:53:04.990
du ja gemeint hast, ihr wollt schon auch[br]bisschen so den Prozess öffnen,
0:53:04.990,0:53:08.530
opensourcen. Wenn man jetzt ein bisschen[br]vom Hintergrund, von der Chemie her
0:53:08.530,0:53:14.170
bisschen weiß, was da an Chemikalien in[br]die Hand zu nehmen ist. Für wie
0:53:14.170,0:53:20.170
realistisch hältst du es, dass Hobbyisten[br]sowas sicher handhaben können? Und wie
0:53:20.170,0:53:23.410
sind eure Pläne in die Richtung? Wie wollt[br]ihr das handhaben? Also, wie wollt ihr es
0:53:23.410,0:53:26.530
den Leuten näher bringen, ohne sie dabei[br]umzubringen, um es mal etwas überspitzt zu
0:53:26.530,0:53:29.710
sagen.[br]C: Ja, das ist ein berechtigter Einwand.
0:53:29.710,0:53:35.410
Man sollte wissen, was man tut. Man kann[br]sich damit mit Chemikalien auch mal ganz
0:53:35.410,0:53:41.290
schnell seine Klamotten durchbrennen. Wie[br]auch immer, hat David schon ausprobiert.
0:53:41.290,0:53:48.100
Nein, also es gibt Leute, die machen so[br]was in der Küche, die Jerry Elzwood. Ich
0:53:48.100,0:53:50.320
hoffe, ich habe es so richtig[br]ausgesprochen. Und die gute Frau mit dem
0:53:50.320,0:53:56.740
C64 Hack und sowas. Gibt es bei YouTube-[br]Videos wie die sozusagen so'n Furnace,
0:53:56.740,0:54:01.630
also so ein Ofen mit Silizium und sowas in[br]Ihrer Küche macht und die spielt da mit
0:54:01.630,0:54:06.340
dampfender Floursäure oder irgendie sowas.[br]Sieht nicht gesund aus, aber Sie macht es.
0:54:06.340,0:54:10.150
Angucken. Einfach YouTube gucken. Die
0:54:10.150,0:54:12.760
Videos gibt's.[br]Mikrofon 2: Ich kenne sie. Ich kann als
0:54:12.760,0:54:15.130
Chemiker dazu sagen: In Deutschland steht[br]da dafür die Polizei vor der Tür.
0:54:15.130,0:54:21.280
Chipsforge kichert[br]H: Alles klar. Dann haben wir noch ein
0:54:21.280,0:54:26.440
paar Fragen am Mikrofon Drei.[br]Mikrofon 3: Ja, also du hast ja schön
0:54:26.440,0:54:31.000
gezeigt, was du alles für Standardzellen[br]implementierst. Wie sieht das aus mit dem
0:54:31.000,0:54:35.200
Timing und der Simulation für die ganze[br]Synthese und dann das place and route, ist
0:54:35.200,0:54:40.720
ja auch eine wichtige Rolle.[br]C: Der Punkt kam jetzt ein bisschen in den
0:54:40.720,0:54:47.890
letzten Minuten zu kurz. Wenn wir das[br]Layout haben, dann machen wir mit diesem
0:54:47.890,0:54:52.330
Magic, also mit diesem Layout-Tool, das[br]wir benutzten, eine Parameter-Extraktion.
0:54:52.330,0:54:56.410
Wir bekommen also aus diesem Layout wieder[br]ein Spice-Modell zurück mit den
0:54:56.410,0:55:00.640
parasitären Werten, also für Kapazität,[br]für Widerstand und so weiter. Das
0:55:00.640,0:55:04.930
simulieren wir und ich habe für die[br]Latches und so sowas habe ich in meiner
0:55:04.930,0:55:08.220
Spice-Simulation, in meiner Testbench,[br]rudimentär solche Sachen schon
0:55:08.220,0:55:12.960
implementiert. Dass ich wirklich sage bei[br]20 prozent von der Flanke mess ich bis zu
0:55:12.960,0:55:16.230
80 prozent an der Flanke oder sowas. Also[br]dass ich wirklich dieses Timing
0:55:16.230,0:55:22.890
automatisch im Spice ausmesse.[br]H: Ja, die nächste Frage an Mikrofon 3
0:55:22.890,0:55:29.400
Mikrofon 3: Dankeschön! Habt ihr schon[br]Simulationsmodelle von euren Transistoren,
0:55:29.400,0:55:33.690
die ihr dann in Spice nutzen könnt? Weil[br]das es ja tatsächlich bisher das war ja
0:55:33.690,0:55:39.900
recht viel für viele Technologien deswegen[br]auch zum Beispiel dem Mosis-Standard Ding.
0:55:39.900,0:55:44.520
Aber gibts schon Ergebnisse von[br]Simulationensparametern, von den
0:55:44.520,0:55:49.830
Transistoren, die dann gefertigt werden?[br]C: Also ist es so. Die Modelle z.B. für
0:55:49.830,0:55:54.480
den Transistor BSIM3, BSIM4 und so weiter.[br]Die sind ja standardisiert. Es geht nur
0:55:54.480,0:55:58.500
noch darum, welche Werte jetzt, da in[br]dieses Modell reingefüttert werden. Also
0:55:58.500,0:56:04.530
für die Kapazitäten am Gate und so weiter.[br]Die Größe ist klar, aber wie die Dotierung
0:56:04.530,0:56:09.270
aussieht. Diese Sachen, also diese Werte,[br]die wir da rein füttern müssen, die hängen
0:56:09.270,0:56:12.900
eigentlich alle an unserem Testwafer dran,[br]also den wir vor einem Jahr vorgestellt
0:56:12.900,0:56:15.990
haben. Da haben wir nämlich exakt diese[br]Strukturen drauf, um solche Sachen
0:56:15.990,0:56:21.165
auszumessen. Das heißt also, wenn wir den[br]Wafer sozusagen bis zum Ende prozessiert
0:56:21.165,0:56:24.210
haben und jetzt vielleicht auch im[br]nächsten Reinraum dann nochmal gemacht
0:56:24.210,0:56:27.676
haben, dann haben wir wirklich diese Werte[br]da. Dann können wir die in Spice
0:56:27.676,0:56:31.140
reinfüttern. Das ist eine relativ einfache[br]Sache, und dann haben wir auch die
0:56:31.140,0:56:33.000
korrekten Werte dafür.[br]M3: Gut, Dankeschön.
0:56:33.000,0:56:37.200
H: Und noch eine Frage an Mikrofon 3,[br]bitte.
0:56:37.200,0:56:41.760
M3: Ich würde gerne wissen: Wie groß ist[br]denn so ein Transistor und sind die nicht
0:56:41.760,0:56:47.790
ziemlich langsam dann?[br]C: OK, wir machen ja ... also fangen erst
0:56:47.790,0:56:54.180
mal an mit einem Mikron. Ein Mikron, das[br]heißt also diese Featuresize oder die
0:56:54.180,0:57:01.944
Länge vom Kanal zwischen Drain und Source[br]ist ein Mykro. Das heißt also 2 hoch minus
0:57:01.944,0:57:11.340
sechs Meter. Ja? Doch. Milli - Tausend.[br]Ja. Dazu, wie gesagt das Ratio, also diese
0:57:11.340,0:57:17.250
Weite dazu, wäre dann sozusagen den 1,5[br]Mikron. Also das ist die Transistorgröße
0:57:17.250,0:57:23.640
... ist relativ groß. Wir haben aber vom[br]Equipment in Hongkong, oder hatten die
0:57:23.640,0:57:29.280
Möglichkeit, also das, wie wir uns das[br]angeguckt ... das Equipment ging runter
0:57:29.280,0:57:33.240
bis 500 Nanometer. Das heißt also, wenn[br]unsere Technologie funktioniert, können
0:57:33.240,0:57:38.610
wir relativ einfach sozusagen den 0,7 oder[br]0,8 mikron Node auslassen und gleich nach
0:57:38.610,0:57:43.560
0,5 gehen. Das gab das Equipment her, also[br]die Maschinen, Fotolitografie, die dazu
0:57:43.560,0:57:48.150
hängen. Wenn wir sozusagen Equipment[br]hätten, Zugriff darauf, was noch kleiner
0:57:48.150,0:57:50.850
geht, dann müssten wir vielleicht mal[br]wieder ein bisschen experimentieren, also
0:57:50.850,0:57:57.030
wieder Testwafer dafür machen. Aber dann[br]können wir sozusagen auch runterskalieren.
0:57:57.030,0:58:00.600
Aber wir sind da noch, muss ich auch[br]zugeben, wir sind da noch in einem
0:58:00.600,0:58:06.450
Bereich, der optisch sichtbar ist. Also[br]AB-Limit, das ist so bei 240, 250
0:58:06.450,0:58:10.830
Nanometern, also die Wellenlänge vom[br]Licht, was man optisch noch sehen kann.
0:58:10.830,0:58:15.900
Das heißt also, unsere Transistoren sieht[br]man noch im optischen Mikroskop. Das, was
0:58:15.900,0:58:19.830
sozusagen jetzt irgendwie so die aktuellen[br]Prozessoren sind, die irgendwie, weiß ich
0:58:19.830,0:58:24.210
nicht, bei 14, 20 Nanometern oder sowas[br]sind. Die sind optisch nicht mehr
0:58:24.210,0:58:29.520
sichtbar. Aber optisch sichtbar heißt auch[br]für uns, man kann sozusagen wirklich mit
0:58:29.520,0:58:33.120
einer Kamera, USB-Kamera oder sowas wie[br]andere Leute schon gemacht haben durchs
0:58:33.120,0:58:38.520
Mikroskop durchfotografieren, den ganzen[br]Chip aufnehmen und ein Reverse Engineering
0:58:38.520,0:58:41.820
draufmachen, das heißt, also auch[br]nachträglich feststellen, ob eine
0:58:41.820,0:58:47.010
Manipulation an unserem Chip stattgefunden[br]hat. Das betrachten wir in dem Fall
0:58:47.010,0:58:49.860
sozusagen als Sicherheitsfeature, das man[br]noch sehen kann.
0:58:49.860,0:58:53.430
H: Dann gibt es noch eine letzte Frage aus[br]dem Internet.
0:58:53.430,0:58:59.340
SA: Die Frage aus dem Internet lautet, ob[br]ihr mal versucht hat, Standardzellen für
0:58:59.340,0:59:03.180
die Transistoren eines kommerziellen[br]Fertigers damit zu erzeugen und ob das
0:59:03.180,0:59:07.440
funktioniert und was dagegen spricht.[br]C: Es würde funktionieren. Theoretisch ja.
0:59:07.440,0:59:16.410
Was dagegen spricht, ist ein gewisses NDA.[br]Die Hersteller geben sozusagen ungern die
0:59:16.410,0:59:22.350
Informationen raus. Wir müssten sozusagen[br]ein NDA unterschreiben, um von denen die
0:59:22.350,0:59:27.780
physikalischen Angaben zu den ganzen[br]Layern zu bekommen. Welche physikalischen
0:59:27.780,0:59:32.469
Eigenschaften haben und so weiter. Also[br]die sogenannte PDK, vielleicht habt ihr da
0:59:32.469,0:59:37.680
mal was von gehört. Das steht aber unter[br]'nem NDA. Die Zellen, die wir danach
0:59:37.680,0:59:42.720
generieren, die würden sozusagen auch[br]automatisch wieder unter Verschluss
0:59:42.720,0:59:47.790
bleiben müssen. Es würde gehen. Also man[br]könnte, also sagen wir mal andersrum, ein
0:59:47.790,0:59:52.470
kommerzieller Hersteller könnte am Ende[br]diese Tools, die wir hier schreiben,
0:59:52.470,0:59:58.080
benutzen, um sich seine eigenen Zellen zu[br]generieren. Ja. In die Richtung geht's.
0:59:58.080,1:00:05.610
Aber es ist machbar.[br]H: Wenn ich keine weiteren Fragen mehr
1:00:05.610,1:00:10.769
sehe, dann bitte ich nochmal um eine[br]herzliche Runde Applaus für Chipforge.
1:00:10.769,1:00:13.319
Applaus
1:00:13.319,1:00:28.929
36C3 Outro
1:00:28.929,1:00:39.160
Untertitel erstellt von c3subtitles.de[br]im Jahr 2020. Mach mit und hilf uns!