1
00:00:00,000 --> 00:00:20,724
36C3 Vorspannmusik
2
00:00:20,724 --> 00:00:24,610
Chipforge: Ich weiß nicht, wer von euch
das alles mitgekriegt hat. Letztes Jahr
3
00:00:24,610 --> 00:00:28,600
waren wir hier zu dritt auf der Bühne,
gleicher Saal und haben unsere
4
00:00:28,600 --> 00:00:34,150
LibreSilicon Technologie vorgestellt. Wir
haben damals schon Testwafer dabeigehabt.
5
00:00:34,150 --> 00:00:40,270
Sozusagen. Jetzt das Update. Vorneweg erst
mal ein Disclaimer. Weil ist 'ne heikle
6
00:00:40,270 --> 00:00:47,170
Sache. Okay, das ist jetzt mal so im
Groben der Überblick, was ich machen will.
7
00:00:47,170 --> 00:00:50,380
Also nochmal einen kurzen Abriss zu
LibreSilicon, wo unser Projekt gerade
8
00:00:50,380 --> 00:00:54,220
steht. Und dann würde ich ganz gerne so
mit den Basics anfangen bei den
9
00:00:54,220 --> 00:01:03,250
Standardzellen und mich so langsam
vorarbeiten. Okay, also das Update: Der
10
00:01:03,250 --> 00:01:08,950
Leviathanch hat 2017 einen Lightning Talk
gehalten und hat gesagt "Wir brauchen
11
00:01:08,950 --> 00:01:14,920
irgendwie eine freie Technologie." Ich
fand das richtig super. Hab mich sofort
12
00:01:14,920 --> 00:01:21,490
bei ihm gemeldet. Und wir haben in 2018
wirklich angefangen, uns da Gedanken zu
13
00:01:21,490 --> 00:01:26,950
machen, durchzuwurschteln und haben
angefangen, wirklich mit einem Micron.
14
00:01:26,950 --> 00:01:33,610
Also mit einem "µ" Technologie zu machen.
Grund für ein µ war, unsere Bewegung
15
00:01:33,610 --> 00:01:38,170
dazu, dass es 5-Volt Toleranz - Also man
kann sozusagen Blüter freundlich damit
16
00:01:38,170 --> 00:01:43,360
arbeiten, Maker freundlich. Das ist so die
Technologie, die noch dokumentiert worden
17
00:01:43,360 --> 00:01:49,480
ist. So Ende 70er, Anfang 80er Jahre, wo
man sozusagen von vorne bis hinten, alles
18
00:01:49,480 --> 00:01:55,150
irgendwo in der Literatur noch findet in
Lehrbüchern. Und so einordnungsmäßig: Das
19
00:01:55,150 --> 00:02:03,640
ist dieses etwa so die Generation so vom
486. Dann haben wir wie gesagt, letztes
20
00:02:03,640 --> 00:02:10,480
Jahr hier auf der Bühne die Präsentationen
gemacht von unserem Testwafer. Was neu
21
00:02:10,480 --> 00:02:17,140
hinzugekommen ist seitdem in 2019: Uns ist
das Geld ausgegangen, um jetzt sozusagen
22
00:02:17,140 --> 00:02:22,870
jetzt nochmal ein Jahr den Reinraum zu
mieten in Hongkong. Es kamen die Unruhen
23
00:02:22,870 --> 00:02:28,210
in Hongkong dazu, und die Unruhen haben
dazu geführt, dass die Uni zugemacht
24
00:02:28,210 --> 00:02:32,440
worden ist. Wir gesagt haben: "Wir beenden
das Semester". Es findet kein Lehrbetrieb
25
00:02:32,440 --> 00:02:36,700
mehr statt. Das heißt aber auch: Wir sind
jetzt erst mal draußen aus dem Reinraum
26
00:02:36,700 --> 00:02:42,370
und können sozusagen erst einmal Paperwork
machen. Es ist ein bisschen ungünstig,
27
00:02:42,370 --> 00:02:47,620
unbefriedigend. Deswegen gucken wir nach
Alternativen. Wenn jemand sozusagen einen
28
00:02:47,620 --> 00:02:53,410
Reinraum hat, Zugriff drauf, sagt" Wir
können es mit einer Maschinenliste
29
00:02:53,410 --> 00:03:00,520
abklären, ob das passt und wie weit wir da
kommen". Wir haben wegen der
30
00:03:00,520 --> 00:03:06,640
Geldgeschichte, die meistens auch dranhing
schon lange eine Gofunding campaign laufen
31
00:03:06,640 --> 00:03:13,000
mit bisher einer Einzahlung. Also es ist
nicht unbedingt so massentauglich, gebe
32
00:03:13,000 --> 00:03:21,460
ich zu. Die Links dazu: Also erste
LibreSilicon, das ist die Projektseite.
33
00:03:21,460 --> 00:03:31,480
Dann haben wir bei GitHub die
Standardzellen drinne. Da findet die
34
00:03:31,480 --> 00:03:35,740
Hauptentwicklung statt - das Repository.
Und unten drunter ist nochmal so eine
35
00:03:35,740 --> 00:03:40,960
Wikiseite. Da wollte ich eigentlich alles
das, was ich heute auch so zum Besten
36
00:03:40,960 --> 00:03:44,920
gebe, immer mal wieder dokumentieren, weil
ich festgestellt habe: In der Ecke
37
00:03:44,920 --> 00:03:56,290
existiert sehr, sehr viel Nachholbedarf.
Da fehlt einfach das Wissen in der Masse.
38
00:03:56,290 --> 00:04:04,180
Wenn jemand sozusagen jetzt damit
rumspielen möchte: "git clone" unter
39
00:04:04,180 --> 00:04:11,740
diesem Repository. Können Sie sich
reinlegen und der Designflow für Chip
40
00:04:11,740 --> 00:04:19,420
Design ist im Regelfall so: Einer fängt an
Code zu schreiben, Verilog, VHDL oder
41
00:04:19,420 --> 00:04:25,470
SpinalHDL. Wie auch immer, er testet das
aus. Also er simuliert es mit einem
42
00:04:25,470 --> 00:04:29,550
Simulator, dafür gibt's freie Tools - kein
Problem. Und versucht es zu verifizieren.
43
00:04:29,550 --> 00:04:37,230
Dafür gibts auch Ansätze. Und dann wird
das Ding so etwas wie 'kompiliert'. Nennt
44
00:04:37,230 --> 00:04:42,840
sich in dem Fall aber 'Synthese'. Dafür
gibt es das 'Yosys' Tool von Clifford. Das
45
00:04:42,840 --> 00:04:46,590
kann nicht nur FPGAs. Wenn man ihnen die
richtige Bibliothek gibt, dann kann es
46
00:04:46,590 --> 00:04:54,540
auch ASICs. Was dabei herauskommt, ist
eine Netzliste. Das heißt so, weil es
47
00:04:54,540 --> 00:05:01,110
einfach haufenweise Komponenten enthält:
UND-Gatter, ODER-Gatter, Flipflops alles
48
00:05:01,110 --> 00:05:07,290
Mögliche, was mit dem Code beschrieben
worden ist und die Verbindungen dazu -
49
00:05:07,290 --> 00:05:12,960
also die Drähte dazwischen. Die Zellen
natürlich, die müssen wir uns erst
50
00:05:12,960 --> 00:05:16,560
einfallen lassen. Das ist eigentlich das
Ziel von dem Talk, euch das Nahe zu
51
00:05:16,560 --> 00:05:23,610
bringen. Die Zellen werden platziert im
Layout. Dafür braucht man sozusagen auch
52
00:05:23,610 --> 00:05:29,250
die Layoutinformation, welchen Layer sie
benutzen, wie sie aufgebaut sind. Das muss
53
00:05:29,250 --> 00:05:34,770
alles zusammengepackt werden, und am Ende
kommt ein GDS II file raus. GDS II ist ein
54
00:05:34,770 --> 00:05:39,416
anderes Format. Muss man sich vergleichbar
vorstellen wie beim PCB Design. Also wenn
55
00:05:39,416 --> 00:05:43,170
man ein Board macht das, was hinten als
'gerber' file dann sozusagen in die
56
00:05:43,170 --> 00:05:49,800
Herstellung geht. Das ist halt beim ASIC
ein GDS II. Damit werden die Masken
57
00:05:49,800 --> 00:05:59,030
gemacht und über die Standardzellen wollen
wir mal reden. Okay, die Ziele für so eine
58
00:05:59,030 --> 00:06:03,740
Bibliothek. Wenn man sich ein bisschen
umguckt, dann sieht man, vielleicht bei
59
00:06:03,740 --> 00:06:09,380
GitHub oder woanders, sagen wir mal so,
Studentenprojekte, die nachgewiesen
60
00:06:09,380 --> 00:06:12,470
haben, was ein paar Zellen machen können,
die in Design flow, mit irgendwelchen
61
00:06:12,470 --> 00:06:18,380
kommerziellen Tools. Die Bibliotheken sind
relativ begrenzt. Einfach, weil der
62
00:06:18,380 --> 00:06:23,750
Aufwand dafür groß ist. Eine typische
Studenten Bibliothek, die hat vielleicht
63
00:06:23,750 --> 00:06:28,400
30, 40 Zellen. Das ist aber eine
Größenordnung, die ist absolut
64
00:06:28,400 --> 00:06:35,810
unzureichend für ein richtiges Design. Da
sind Zellen drinnen, die man sich so als
65
00:06:35,810 --> 00:06:39,140
Menschen vorstellen kann. Also die
typischen Und-Oder-Gatter, vielleicht noch
66
00:06:39,140 --> 00:06:44,270
ein XOR, vielleicht noch zwei, drei
Flipflops, ein paar Ledges. Und das wars
67
00:06:44,270 --> 00:06:53,060
im Ganzen. Aber Kombinatorik, also
Komplexität kann viel, viel größer sein.
68
00:06:53,060 --> 00:06:59,540
Kommerzielle Bibliotheken haben 150, 200
Zellen. Da sind dann auch schon andere
69
00:06:59,540 --> 00:07:03,440
Funktionalitäten drin. Also Flipflops zum
Beispiel gibt's dann auch mit der Scan-
70
00:07:03,440 --> 00:07:08,600
Fähigkeit, dass man für Testen in Scan-
Pfaden lange Ketten zusammenhängen kann.
71
00:07:08,600 --> 00:07:15,140
So etwas fehlt bei Standard-Zellen. Das
würde ich ganz gerne anders lösen. Aber
72
00:07:15,140 --> 00:07:22,160
egal. Ziele auch für uns: LibreSilicon,
wir wollen so wenig Energie wie möglich
73
00:07:22,160 --> 00:07:27,260
dabei verbraten. Also wir geben uns Mühe
beim Prozess schon mit der Isolierung,
74
00:07:27,260 --> 00:07:33,500
dass wir keinen Leakage-Strom, also keinen
Leck-Strom und beim Cell Design auch,
75
00:07:33,500 --> 00:07:39,050
indem wir die Transistoren entsprechend
dimensionieren, dass wir wenig Energie
76
00:07:39,050 --> 00:07:43,490
verbraten haben. Weil CMOS, also die
Technologie die wir anpeilen, die
77
00:07:43,490 --> 00:07:48,740
verbraucht Energie beim Schalten. Also
nicht im statischen Zustand, wenn der
78
00:07:48,740 --> 00:07:53,900
Clock zum Beispiel flat wäre, also fest
liegen würde, also auf 0 oder 1, würde das
79
00:07:53,900 --> 00:08:04,620
Ding so gut wie... jetzt ist das Mikro
weg? Doch, da ist es! Okay, es würde so
80
00:08:04,620 --> 00:08:08,070
gut wie gar keinen Strom gebrauchen. Erst
in dem Augenblick, wenn eine Takt-Flanke
81
00:08:08,070 --> 00:08:12,840
kommt und jetzt die Speicherzellen innen
drin umschalten, also ihren Zustand
82
00:08:12,840 --> 00:08:18,570
wechseln. Dann gibt es einen Moment, wo
die Gatetransistoren beide durchschalten.
83
00:08:18,570 --> 00:08:25,710
Und dann wird Strom verbraucht, oder
Energie. So, wir wollen auch schnelle
84
00:08:25,710 --> 00:08:29,310
Zellen haben, so schnell wie geht. Das ist
ein bisschen konträr zu der Forderung
85
00:08:29,310 --> 00:08:34,980
vorhin, weniger Energie. Aber wir können
die Transistoren ziemlich klein machen und
86
00:08:34,980 --> 00:08:38,700
sozusagen den bestmöglichen Kompromiss
dafür finden. Und wir wollen auch, dass
87
00:08:38,700 --> 00:08:44,940
die Zellen klein werden, weil nach
Herstellung bezahlt man einen Chip nicht
88
00:08:44,940 --> 00:08:50,580
nach dem, was drauf ist und wieviel Gatter
ich drauf habe oder welche Funktionalität.
89
00:08:50,580 --> 00:08:55,650
Sondern ich bezahle rein nach Fläche. Das
heißt also, wenn ich eine Zellbibliothek
90
00:08:55,650 --> 00:08:59,070
habe, die klein ist, wenn ich sozusagen
das ganze Design klein halten kann,
91
00:08:59,070 --> 00:09:06,720
bezahle ich auch weniger dafür. Das sind
jetzt so Standardzellen, das hier ist so
92
00:09:06,720 --> 00:09:09,780
eine ganz typische, wir haben vielleicht
den einen oder anderen in der Uni schon
93
00:09:09,780 --> 00:09:14,250
gehabt, ein NAND-Gatter mit zwei
Eingängen. Ich hab mal links das Symbol,
94
00:09:14,250 --> 00:09:22,200
rechts dazu die Tabelle. Wenn man sich das
ankuckt, beim NAND ist ganz typisch:
95
00:09:22,200 --> 00:09:27,180
Solange wie beide Eingänge nicht
gleichzeitig 1 sind, ist der Ausgang immer
96
00:09:27,180 --> 00:09:32,820
auf 1. Erst in dem Augenblick, wenn beide
Eingänge auf 1 schalten, dann geht der
97
00:09:32,820 --> 00:09:38,010
Ausgang auf 0. Das ist sozusagen die
invertierte UND-Funktion, also NAND. Unten
98
00:09:38,010 --> 00:09:45,270
drunter noch die Formel in der üblichen
Notation, wie es dann praktisch gemacht
99
00:09:45,270 --> 00:09:51,960
wird. Und so sieht das aus. Für die Grafik
muss ich mich ein bisschen entschuldigen.
100
00:09:51,960 --> 00:09:58,380
Die habe ich mir generieren lassen, und da
sind noch ein paar Artefakte drin. Die
101
00:09:58,380 --> 00:10:01,410
Leitungen hier. Aber im Prinzip sieht
man's ja. Man sieht die Transistoren
102
00:10:01,410 --> 00:10:07,320
unten, die beiden n-Kanal, dass die in
einer Reihe sind. Man sieht die oben
103
00:10:07,320 --> 00:10:17,990
p-Kanal parallel. NOR, das ist mehr oder
weniger invers dazu. Links wieder das
104
00:10:17,990 --> 00:10:23,930
Symbol, das amerikanische, rechts die
Tabelle und das wieder ganz typisch: Wenn
105
00:10:23,930 --> 00:10:29,900
beide Eingänge 0 sind, kommt hinten eine 1
raus. Sobald aber ein Eingang eine 1 hat,
106
00:10:29,900 --> 00:10:41,660
ist es hinten eine 0. Und die Notation
dazu. Und auch die Transistoren. Da sieht
107
00:10:41,660 --> 00:10:45,950
man sozusagen, man kann es sich so
gespiegelt vorstellen: Wir haben unten die
108
00:10:45,950 --> 00:10:50,630
n-Kanal Transistoren, die sind jetzt in
dem Fall parallel, und wir haben oben die
109
00:10:50,630 --> 00:10:59,300
p-Kanal, die sind in Reihe. Das ist ein
XOR, Exclusiv-Oder. Da habe ich auch die
110
00:10:59,300 --> 00:11:04,100
Tabelle hingemacht. Die beiden Eingänge
müssen sich unterscheiden, damit hinten
111
00:11:04,100 --> 00:11:10,400
eine 1 rauskommt. Ansonsten ist es eine 0.
Dafür habe ich jetzt keine Implementierung
112
00:11:10,400 --> 00:11:18,050
dabei, weil dafür gibt es irgendwo so
fünf, sechs, sieben Varianten, welche ich
113
00:11:18,050 --> 00:11:22,190
sozusagen in die Standard-Bibliothek rein
nehmen werde. Hab ich noch nicht letztlich
114
00:11:22,190 --> 00:11:30,410
ausgeknobelt. Da werde ich mich später mal
drum kümmern. Das ist die inverse Funktion
115
00:11:30,410 --> 00:11:35,510
dazu. Das wird auch gern als XNOR
bezeichnet. Ich bezeichne es halt kürzer
116
00:11:35,510 --> 00:11:40,910
mit Äquivalenz-Gatter. Muss man sich
vorstellen, wie ein XOR, allerdings
117
00:11:40,910 --> 00:11:45,620
wirklich invertiert dazu. Das heißt also,
wenn beide Eingänge unterschiedlich sind,
118
00:11:45,620 --> 00:11:52,670
dann habe ich die 0. Ansonsten, wenn sie
gleich sind, kommt die 1 raus. Dafür gibt
119
00:11:52,670 --> 00:11:55,940
es auch wieder die gleiche Anzahl der
Implementierungen, einfach weil man es
120
00:11:55,940 --> 00:12:01,250
wieder symmetrisch gegenüber dem XOR
machen kann. So, jetzt wird es ein
121
00:12:01,250 --> 00:12:05,630
bisschen blutiger. Das sind jetzt ein paar
Beispiele, die man sich auch noch
122
00:12:05,630 --> 00:12:10,940
vorstellen kann an Zellen. Nicht nur das,
was sonst nur in Lehrbüchern drin ist. Das
123
00:12:10,940 --> 00:12:18,090
sind sogenannte Komplex-Gatter, und wenn
man sich das oben anguckt, man sieht
124
00:12:18,090 --> 00:12:22,470
sozusagen erst vorne dran eine kleine
Funktion, ein UND oder ein OR, und danach
125
00:12:22,470 --> 00:12:26,460
noch eine andere, wieder mit dem nächsten
Eingang. Das kann man beliebig lang
126
00:12:26,460 --> 00:12:30,240
treiben, denn unten die Variante, dass man
sozusagen paarweise das zusammenfasst,
127
00:12:30,240 --> 00:12:37,290
kann man auch beliebig weit treiben. Man
kann dieses Prinzip, dass man Transistoren
128
00:12:37,290 --> 00:12:42,120
so miteinander verkettet, dass genau diese
Funktion rauskommt, aber die Transistor-
129
00:12:42,120 --> 00:12:46,290
Anordnung drinnen einfach und
übersichtlich kann man sehr weit treiben.
130
00:12:46,290 --> 00:12:53,910
Und das möchte ich in der Standard-
Bibliothek auch machen. Kommen wir später
131
00:12:53,910 --> 00:12:59,940
zu, dazu muss ich mich was erklären dazu,
wie weit man gehen kann. Das ist jetzt ein
132
00:12:59,940 --> 00:13:08,340
Beispiel für ein NAND mit vier Eingängen.
Ich weiß nicht, ob ihr euch noch daran
133
00:13:08,340 --> 00:13:12,180
erinnert, and das NAND mit zwei Eingängen,
da hatten wir unten die Transistoren in
134
00:13:12,180 --> 00:13:18,660
Reihe, oben die in parallel. Oh, das
ist ein AND, stimmt. Ich habe da den
135
00:13:18,660 --> 00:13:22,860
Buffer übersehen, hinten. Okay, und ganz
rechts, da müssen wir hingucken. Da ist
136
00:13:22,860 --> 00:13:29,430
nochmal ein kleiner Inverter hinten dran.
Der invertiert ist, also habe ich kein
137
00:13:29,430 --> 00:13:36,180
NAND sondern ein AND. Fangen wir mit dem
Buffer an zu erklären. Das ist ein
138
00:13:36,180 --> 00:13:41,400
wichtiger Punkt. Also eine Design-
Entscheidung, die ich in der Standard-
139
00:13:41,400 --> 00:13:48,030
Zellenbibliothek getroffen habe. Wenn wir
uns vorstellen, dass über jeden Transistor
140
00:13:48,030 --> 00:13:52,080
von den vier in der langen Kette zwischen
Drain und Source, also den beiden
141
00:13:52,080 --> 00:13:57,990
Enden hier. Ich gehe mal kurz rüber. Also
dem unteren Ende und dem da oben drüber,
142
00:13:57,990 --> 00:14:03,600
Drain und Source, wenn da drüben ein
Spannungsabfall ist, also sozusagen immer
143
00:14:03,600 --> 00:14:07,650
eine kleine Differenz. Der Transistor
schaltet völlig durch. Trotzdem sind diese
144
00:14:07,650 --> 00:14:10,410
beiden Pole nicht auf dem gleichen
Potenzial. Da gibt es immer eine kleine
145
00:14:10,410 --> 00:14:13,980
Differenz. Wenn ich das jetzt aber viermal
mache, alle vier hintereinander
146
00:14:13,980 --> 00:14:19,500
durchgeschaltet werden, addiert sich das
trotzdem auf. Das kann dazu führen, dass
147
00:14:19,500 --> 00:14:24,990
dieser Ausgangspegel, der jetzt in dieser
langen Leitung da rauskommt, nicht mehr
148
00:14:24,990 --> 00:14:28,360
Rail-to-Rail ist, also nicht mehr wirklich
an die Betriebsspannung herangeht, sondern
149
00:14:28,360 --> 00:14:36,790
wirklich eine deutliche Differenz dazu
aufweist. Um diese nicht mehr zu Rail-to-
150
00:14:36,790 --> 00:14:40,900
Rail-Fähigkeit ein bisschen rauszunehmen,
ich will ja danach eigentlich eine Leitung
151
00:14:40,900 --> 00:14:47,650
treiben, fange ich an, mir den Ausgangs-
Pegel sozusagen wieder schön zu
152
00:14:47,650 --> 00:14:51,370
invertieren. Also einfach wieder einen
Inverter hinten dran, weil dann nach dem
153
00:14:51,370 --> 00:14:56,920
Inverter habe ich sozusagen wieder
deutliche, klarere Pegel. Und eine
154
00:14:56,920 --> 00:15:00,190
Designentscheidung, die ich getroffen
habe, in der Standard-Bibliothek ist, ich
155
00:15:00,190 --> 00:15:06,340
konfiguriere ab wieviel Transistoren in
einer Reihe ich sozusagen dieses Recovery
156
00:15:06,340 --> 00:15:10,900
hinten machen muss. Also wieder buffern
muss. Meine Faustregel, mit der ich im
157
00:15:10,900 --> 00:15:17,320
Augenblick arbeite, sind vier
Transistoren. Das ist aber im Tool, was
158
00:15:17,320 --> 00:15:21,280
ich schreibe, konfigurierbar. Also, ich
kann mir auch was vorstellen wo es nur mit
159
00:15:21,280 --> 00:15:25,150
dreien oder mit zweien schon gemacht wird,
wenn es notwendig wird. Weil: vier
160
00:15:25,150 --> 00:15:29,740
Transistoren ist für einen Mikron ganz super.
Wenn wir aber Technologien benutzen, die
161
00:15:29,740 --> 00:15:34,870
deutlich kleiner werden, dann haben wir
ein Schwellspannungsproblem. Diese
162
00:15:34,870 --> 00:15:41,980
Spannung vorne an den Transistoren, also
am Gate zum Source. Das gibt's so eine
163
00:15:41,980 --> 00:15:45,310
gewisse Schwellspannung, ab der der
Transistor eingentlich schaltet. Das
164
00:15:45,310 --> 00:15:52,870
addiert sich auch auf. Wir kriegen also
sozusagen auch wieder addierende Pegel. Es
165
00:15:52,870 --> 00:15:59,530
ist einfach unangenehm. Wir müssen das
begrenzen, und dafür habe ich auch noch
166
00:15:59,530 --> 00:16:07,540
einen zweiten Parameter drinne. Bis wie
viele Transistoren ich sozusagen in dieser
167
00:16:07,540 --> 00:16:12,940
Kette erlaube. Also ein Buffer hinten, ab
wann ich sozusagen den Inverter dranmache.
168
00:16:12,940 --> 00:16:23,950
Und das zweite ist, wie viel ich in einer
Reihe erlaube. Also nochmal kurz
169
00:16:23,950 --> 00:16:27,730
zusammenrechnen, also bei zwei Stack-
Transistoren - also die in einer Reihe,
170
00:16:27,730 --> 00:16:31,150
nennen sich "stacked" im Englischen, ich
weiß gar nicht, wie man das ins Deutsche
171
00:16:31,150 --> 00:16:37,270
übersetzen sollte. Wir sagen es gestapelt
oder sowas. Wo man zwei Transistoren hat,
172
00:16:37,270 --> 00:16:41,770
wegen der Schwellspannung vorne. Wenn
diese Betriebsspannung so klein ist und
173
00:16:41,770 --> 00:16:45,160
die Schwellspannung zu groß dafür, dass
man gar nicht mehr die Pegel erreicht zum
174
00:16:45,160 --> 00:16:50,500
Ein und Ausschalten. Dann hat man den
Effekt, dass die Bibliothek viel zu klein
175
00:16:50,500 --> 00:16:52,720
wird. Da sind wir wieder in der
Größenordnung von diesen
176
00:16:52,720 --> 00:16:59,110
Studentenbibliotheken mit 30 Zellen oder
so. Wenn man drei erlaubt, drei
177
00:16:59,110 --> 00:17:05,920
Transistorenstapel, dann ist man so bei
Bibliotheken, die jetzt mit diesen ganzen
178
00:17:05,920 --> 00:17:11,770
winzigen Nodes mit 14 Nanometer oder sowas
auftauchen. Die können nicht mehr vier
179
00:17:11,770 --> 00:17:17,830
Transistoren. Vier Transistoren, aber wenn
wir das können, haben wir plötzlich eine
180
00:17:17,830 --> 00:17:23,560
riesige Komplexität an Komplexgattern, die
möglich sind. Das geht laut 'nem Paper.
181
00:17:23,560 --> 00:17:26,980
Ich habe es noch nicht ausprobiert. Ich
bin noch nicht so weit. Da, sagt einer --
182
00:17:26,980 --> 00:17:33,310
oder behauptet einer, es geht bis zu
4000. Meine Anzahl kommen wir noch dazu,
183
00:17:33,310 --> 00:17:38,470
die ich bisher erreicht habe. Also Buffer-
limit bei größer gleich drei Transistoren.
184
00:17:38,470 --> 00:17:45,580
Gut, das ist so eine Annahme. Okay. Aber
wie kommen wir eigentlich zu diesen ganzen
185
00:17:45,580 --> 00:17:51,550
Komplexgattern. Wir hätten die vier
Beispiele drinnen. Wir kommen von einem
186
00:17:51,550 --> 00:17:58,330
Komplexgatter zum nächsten, indem man
einen Trick anwendet, und zwar, indem wir
187
00:17:58,330 --> 00:18:02,560
sagen: Wir können ja noch zu dem Netzwerk,
was wir haben. Also dem Pull-Up, das waren
188
00:18:02,560 --> 00:18:06,700
die Oberen oder Pull-Up-Netzwerk, dem
unteren, noch zusätzlich Transistor
189
00:18:06,700 --> 00:18:13,270
hinzufügen. Einen in Serie, seriell, also
in Reihe. Wir müssen nur dafür sorgen,
190
00:18:13,270 --> 00:18:18,400
dass wir logisch äquivalent in dem
komplementären Netzwerk, dazu einen
191
00:18:18,400 --> 00:18:24,340
parallel machen. Das geht halt bei CMOS
schön. Und dafür habe ich mir ein Tool
192
00:18:24,340 --> 00:18:30,520
geschrieben, was immer noch ein bisschen
buggy läuft. Auch schon mal ganz gut.
193
00:18:30,520 --> 00:18:36,400
Also, wie gesagt, seriell einen
hinzufügen, parallel im anderen Netzwerk.
194
00:18:36,400 --> 00:18:41,920
Wenn ich einen Pull-Up mache, seriell
erweiter, muss ich einen Pull-Down im
195
00:18:41,920 --> 00:18:49,540
Komplementären machen und vice versa.
Okay, weil es sozusagen eine Sache ist,
196
00:18:49,540 --> 00:18:54,580
die keiner noch so richtig durchexerziert
hat, habe ich angefangen mit Paperwork.
197
00:18:54,580 --> 00:19:00,310
Also ich hab gesagt: "Okay, ich nehme mal
das einfachste CMOS Netzwerk, was ich mir
198
00:19:00,310 --> 00:19:03,430
vorstellen kann, dass es ganz links mit
den zwei Transistoren das ist ein
199
00:19:03,430 --> 00:19:08,230
Inverter". Und dann habe ich gesagt, mit
diesem Inverter, mit diesem Prinzip kann
200
00:19:08,230 --> 00:19:15,340
ich sozusagen erweitern zu einem, NOR
zwei, also NOR mit zwei Eingängen. Aber
201
00:19:15,340 --> 00:19:19,960
jetzt ein bisschen hinguckt, sieht man da
links da. Von wegen Inverter er
202
00:19:19,960 --> 00:19:24,580
A-Transistor hat plötzlich ein
Brüderchen an der Seite gekriegt, A1 in
203
00:19:24,580 --> 00:19:29,140
parallel und oben hat sozusagen eine Serie
bekommen. Auch wieder A1. Sieht ein
204
00:19:29,140 --> 00:19:34,180
bisschen komisch aus, weil ich mir in den
Namensregeln zwischendurch mal geändert
205
00:19:34,180 --> 00:19:40,930
habe. Aber das wär so die Idee. Das
Gleiche hat man auch für NAND gemacht.
206
00:19:40,930 --> 00:19:46,480
Wieder den Inverter hergenommen, hab
gesagt "Okay, jetzt erweitere ich das
207
00:19:46,480 --> 00:19:51,040
andere Netzwerk, weil ich sozusagen das
Pull down Netzwerk wieder seriell
208
00:19:51,040 --> 00:19:58,510
erweitert, Pull up in parallel. Eine ganze
Weile hochgetrieben. Also sozusagen von
209
00:19:58,510 --> 00:20:03,100
NAND2, NOR2 das wiedererweitert und so
weiter und da bin ich zu Sunarzelle
210
00:20:03,100 --> 00:20:12,400
vorbeigekommen. Ein paar Leute haben mich
im Club um nur solche Sachen zeichnen
211
00:20:12,400 --> 00:20:15,610
sehen, habe mich schon ein bisschen
meschugge gehalten, war aber ein bisschen
212
00:20:15,610 --> 00:20:23,350
sowieso Sodoku, das beruhigt und es kommt
auch so etwas raus. Es sind sozusagen
213
00:20:23,350 --> 00:20:32,170
jetzt vier Beispiele, die ich gescannt
habe. Die sind alle, Teile davon sind noch
214
00:20:32,170 --> 00:20:38,210
gar nicht eingetragen worden ins make-
file, ebenfalls beim Paperwork ist im
215
00:20:38,210 --> 00:20:41,870
Augenblick so. Ich habe zwei dicke
216
00:20:41,870 --> 00:20:49,430
Aktenordner voll mit Papier. Nur diese
Ableitung, so geschätzt, würde mal sagen
217
00:20:49,430 --> 00:20:55,310
so 500, 600 Zellen. Alles nur
Komplexgatter und alle mit diesem Limit
218
00:20:55,310 --> 00:21:01,850
vier Transistoren gestacked. Ja, ich habe
das Gefühl, ich bin noch ganz, ganz weit
219
00:21:01,850 --> 00:21:08,030
weg von complied, also von vollständig,
weil die Zellen im Augenblick noch dazu
220
00:21:08,030 --> 00:21:15,410
tendieren, so lange Bäume zu bilden. Also
alternierend bei dem mehr gesehen hat.
221
00:21:15,410 --> 00:21:20,720
Also sieht man ja: AND, OR, AND, OR. Nur
im Namen sieht man ein bisschen von der
222
00:21:20,720 --> 00:21:23,720
Funktion und rechts oben diese
Bleistiftzeichnung sieht man auch die
223
00:21:23,720 --> 00:21:29,540
Funktion. Also ich habe sozusagen
erweitert, habe immer geguckt, wie sieht
224
00:21:29,540 --> 00:21:36,050
die Funktion aus. Es war jedenfalls
Arbeit, okay. Und das ist dann so ein
225
00:21:36,050 --> 00:21:40,430
Zwischending. Wir sagen, das ist schon ein
bisschen fülliger, weil man dann auch mal
226
00:21:40,430 --> 00:21:52,490
zwei OR-Funktionen nebeneinander hat oder
zwei AND. Okay. Und diese ganze Arbeit,
227
00:21:52,490 --> 00:22:00,890
die ich mir erst einmal mit Papier gemacht
habe, wollte ich ja irgendwie auch meinem
228
00:22:00,890 --> 00:22:07,190
Tool beibringen. Hab gesagt: "Okay,
brauche ein Tool, ich hab jetzt erst mal
229
00:22:07,190 --> 00:22:34,400
das hier zum Vorführen. Kriege ich es
hin? Nein. Jetzt mal das hier zumachen.
230
00:22:34,400 --> 00:22:36,980
Da
hat er mir jetzt die Manuel Pages
231
00:22:36,980 --> 00:22:58,520
gebastelt dafür. Und ich guck mir jetzt
mal mit euch die zusammen an! Warum nicht?
232
00:22:58,520 --> 00:23:30,040
Vertippt? Wahrscheinlich. Es sieht genauso
aus.
233
00:23:30,040 --> 00:23:35,680
So jetzt mit der klassischen
Variante. Also. Das ist jetzt mit Klicki-
234
00:23:35,680 --> 00:23:39,790
bunti. Das ist jetzt die Manual Page dazu. Ich
habe das Tool "Popcorn" genannt, einfach
235
00:23:39,790 --> 00:23:45,670
weil gefühlt die Zellen einfach
wirklich hacken. Man schüttet den Mais
236
00:23:45,670 --> 00:23:48,940
irgendwo in Topf rein, gibt ein bisschen
Wärme dazu, und dann macht das Blub-Blub-
237
00:23:48,940 --> 00:23:58,780
Blub, dann kommen die ganzen Zellen raus.
Das war mein Hintergedanke dazu. Ja. Ihr
238
00:23:58,780 --> 00:24:03,190
könnt es euch angucken, ist im Github
drinne. Da ist es auch ein bisschen
239
00:24:03,190 --> 00:24:09,790
beschrieben, wie es funktioniert. Hier ist
dieses Bufferlimit drinne. Das kann ich
240
00:24:09,790 --> 00:24:13,090
als Parameter übergeben. Ich kann den
Zellennamen übergeben, der dabei
241
00:24:13,090 --> 00:24:17,980
rauskommen soll, weil, das weiß ich ja
inzwischen, mein Paperarbeit gemacht habe.
242
00:24:17,980 --> 00:24:25,300
Ich kann das noch mit String richtig lang
beschreiben für die Doku. Hier sind
243
00:24:25,300 --> 00:24:28,660
Formate, die ich ganz gerne später mal
hätte, die noch nicht alle funktionieren.
244
00:24:28,660 --> 00:24:34,420
Helpscreen. Was haben wir hier? Hier haben
wir die Nummern der gestackten
245
00:24:34,420 --> 00:24:40,060
Transistoren, limitierend. Und hier sind
die Methoden, die man sozusagen drauf
246
00:24:40,060 --> 00:24:46,510
werfen kann. Ich hatte ja erklärt, man
kann einen Transistor seriell machen dazu,
247
00:24:46,510 --> 00:24:53,890
einen anderen parallel erweitern. Das war
eine kurze Vereinfachung, weil je nachdem
248
00:24:53,890 --> 00:24:57,970
bei welcher Zelle ich gerade bin, muss ich
auch die Namensregeln anpassen. Also ob
249
00:24:57,970 --> 00:25:02,620
ich jetzt nur den Buchstaben, also den
nächsten Buchstaben im Alphabet nehme,
250
00:25:02,620 --> 00:25:06,940
weil ich jetzt ein neues Gatter aufgemacht
habe oder neue Funktionalität. Oder ob ich
251
00:25:06,940 --> 00:25:10,390
sozusagen jetzt Eingänge nur
durchnummeriere. Deswegen kommen hier
252
00:25:10,390 --> 00:25:14,350
jetzt solche Methoden raus, wie NAND und
NOR, dass sozusagen mit durchnummerieren
253
00:25:14,350 --> 00:25:20,890
und AOE-OAE, das ist dann sozusagen mit
einem neuen Buchstaben. Hier sind noch
254
00:25:20,890 --> 00:25:24,910
zwei Methoden drin, die lassen heute mal
großzügig weg: Pull-up, Pull-Down. Die
255
00:25:24,910 --> 00:25:31,590
funktionieren auch nicht. Brauche ich aber
in ein paar Exotengatter. Mit dem Gatter
256
00:25:31,590 --> 00:25:49,640
komme ich jetzt nicht weiter, muss etwas
anderes machen. Also Prinzip, wie gesagt,
257
00:25:49,640 --> 00:25:55,880
mit dem Tool ... Mäuschen ... so. Ich
nehme mir ein Zell-File her, also eine
258
00:25:55,880 --> 00:25:59,840
Zellbeschreibung, schicke das durchs
Popcorn durch und kriege hinten wieder
259
00:25:59,840 --> 00:26:05,780
eine erweiterte Zellschreibung rein. Ich
kann auch mal ... Moment, das ist das
260
00:26:05,780 --> 00:26:18,890
Falsche. So eine Zellbeschreibung hier
rüber nehmen. Da ist sie. Das geht
261
00:26:18,890 --> 00:26:23,420
irgendwie los, dass ich Kommentare erlaube,
dass ich ein .cell habe, wie ich das Ding
262
00:26:23,420 --> 00:26:29,930
dann nenne. Ich hab ein .inputs drin,
wo ich sozusagen die ganzen
263
00:26:29,930 --> 00:26:35,360
Eingangssignale auflisten kann. Outputs
äquivalent. Clocks sogar, wenn ich
264
00:26:35,360 --> 00:26:40,820
Latches, Flipflops habe, brauche ich auch
Clocks. Ich hab sogar da, damit ich weiß,
265
00:26:40,820 --> 00:26:45,560
wenn es zuende ist ein .end dabei. Und ich
habe sozusagen die ganzen Transistoren
266
00:26:45,560 --> 00:26:50,660
eigentlich hier, so als Circuits dabei, wo
ich sage: "Welchen Typ von Transistor hab
267
00:26:50,660 --> 00:26:55,400
ich? Einen PMOS, einen NMOS?" Ich sage,
wie der Knoten heißt, der am git
268
00:26:55,400 --> 00:27:01,520
angeschlossen ist. Drain, Source, Balk und
so weiter. Hier habe ich die Nummer
269
00:27:01,520 --> 00:27:05,840
drinne, der wievielte Transistor das schon
beim Stacken ist. Also wenn ich es
270
00:27:05,840 --> 00:27:09,440
generiere, kriege ich sozusagen frei Haus
geliefert, deswegen gleich mit
271
00:27:09,440 --> 00:27:17,390
reingeschrieben. Ich hab mir zum Scematic
malen, das ich auch schön ein Schaltbild
272
00:27:17,390 --> 00:27:20,780
davon bekomme, auch gleich die Koordinaten
reingeschrieben, weil es sehe ich ja auch,
273
00:27:20,780 --> 00:27:24,620
wenn ich es seriell mache, muss ich
sozusagen nur die x-Achse ändern, wenn ich
274
00:27:24,620 --> 00:27:27,950
parallel machen muss, muss ich noch die
y-Achse ändern. Das war sozusagen ein
275
00:27:27,950 --> 00:27:34,730
Beifang. Size ist so eine Geschichte. Da
will ich die Größe vom Transistor mit
276
00:27:34,730 --> 00:27:40,880
reinschreiben. Da gibt es eine Methode,
dass man die Transistoren so
277
00:27:40,880 --> 00:27:47,030
dimensioniert, dass halt den Kompromiss
zwischen Schnell- und Power-sparen, also
278
00:27:47,030 --> 00:27:51,730
Energie-sparen machen. Gibts so eine
Methode, die nennt sich Logical Effort.
279
00:27:51,730 --> 00:27:58,360
Das ist aber noch nicht so richtig
implementiert. Wenn die Zelle
280
00:27:58,360 --> 00:28:02,200
funktioniert, wenn sie okay ist, dann gehe
ich einmal drüber und rechne mir das aus.
281
00:28:02,200 --> 00:28:11,110
On-the-fly wird ein bisschen schwierig.
So, aber haben wir nicht nur komplexe
282
00:28:11,110 --> 00:28:20,080
Gatter, wir haben ja auch Latches, also
Speicherzellen, die ... Okay, da muss ich
283
00:28:20,080 --> 00:28:28,090
vielleicht nochmal sagen zur Benamung: im
Deutschen werden solche Zellen auch gerne
284
00:28:28,090 --> 00:28:35,200
Flipflops genannt. Das halte ich aber
sozusagen für inkorrekt. Wir haben hier
285
00:28:35,200 --> 00:28:42,640
Zellen, die zwar speichern, die aber Takt-
Zustands-gesteuert sind, so wie es früher
286
00:28:42,640 --> 00:28:46,480
mal hieß: richtig, klares Deutsch: Takt-
Zustandsgesteuert. Die Amerikaner sagen
287
00:28:46,480 --> 00:28:51,130
dazu Latch. Das heißt also, wenn wir zum
Beispiel einen High-Pegel haben, am Clock
288
00:28:51,130 --> 00:28:55,300
oder einen Low-Pegel, dann ist das Ding
transparent. Und wenn dann aber der andere
289
00:28:55,300 --> 00:28:59,770
Pegel angelegt wird, dann speichert er den
Wert der vorher sozusagen während
290
00:28:59,770 --> 00:29:07,690
dieser transparenten Phase angelegen
hat. Es gibt im Gegensatz dazu gibt es
291
00:29:07,690 --> 00:29:13,870
Flipflops, die sind sozusagen nicht Takt-
Zustands-gesteuert, sondern Takt-Flanken-
292
00:29:13,870 --> 00:29:18,820
gesteuert. In dem Augenblick, wo wirklich
die Flanke wird, da wird der Wert rein
293
00:29:18,820 --> 00:29:23,800
gelatcht. Im Prinzip ist es so, dass
Flipflops nur zwei Latches hintereinander
294
00:29:23,800 --> 00:29:30,520
sind. Also wenn ich z.B. vorne als erste
Stufe ein Low-aktives Latch habe und
295
00:29:30,520 --> 00:29:34,600
danach ein High aktives Latch, erreiche
ich, dass bei einem Clock, der jetzt in
296
00:29:34,600 --> 00:29:39,340
einer Low-Phase ist, vorne, das
transparent ist. Das würde dann beim
297
00:29:39,340 --> 00:29:44,920
Taktflankenwechsel, also bei der
steigenden Flanke, zu machen, und hinten
298
00:29:44,920 --> 00:29:48,820
wäre es dafür transparent. Das ist
sozusagen genau dieser Umschaltpunkt, die
299
00:29:48,820 --> 00:29:53,200
Flanke. Dann haben wir zum Beispiel ein
posEdge, also eine steigende Flanke für
300
00:29:53,200 --> 00:30:00,070
ein Flip-Flop. Aber wie gesagt: Latches
sind für mich Takt-Zustands-gesteuert und
301
00:30:00,070 --> 00:30:06,140
Flipflops sind Takt-Flanken-gesteuert. Das
hier ist jetzt ein Latch. Ich weiß nicht,
302
00:30:06,140 --> 00:30:14,000
ob jemand irgendwie von euch ein bisschen
damit klarkommt. Wir haben hier links zwei
303
00:30:14,000 --> 00:30:19,340
Inverter. Also da ganz vorne, kommt ein
Signal rein, das hab ich mit X benannt.
304
00:30:19,340 --> 00:30:24,470
Das ist mein Clock, den invertiere ich
einmal, kriege also ein 180 Grad
305
00:30:24,470 --> 00:30:29,420
phasengedrehtes Signal, und dann
invertiere ich den nochmal. Dann komme ich
306
00:30:29,420 --> 00:30:36,140
auf um 360 Grad phasengedrehtes Signal.
Warum? 360 ist eigentlich das gleiche, wie
307
00:30:36,140 --> 00:30:41,570
vorne dran. Aber ich habe den Effekt. Ich
habe meinen Takt, also die ganzen Signale,
308
00:30:41,570 --> 00:30:46,070
die Transistoren, die dahinter von dem
abhängig sind, erst einmal so etwas wie
309
00:30:46,070 --> 00:30:49,850
gepuffert. Ich habe sozusagen im Netzwerk,
was von draußen reinkommt, nicht mehr so
310
00:30:49,850 --> 00:30:54,140
eine große Last, und ich habe damit den
Effekt, dass sie sozusagen einen
311
00:30:54,140 --> 00:30:59,030
zweiphasigen Takt erreicht habe. Und
diesen benutze ich denn bei den
312
00:30:59,030 --> 00:31:03,200
Transistoren hintendran zum Schalten. Und
wenn man sich das jetzt ein bisschen
313
00:31:03,200 --> 00:31:13,160
anguckt. Hier diese Stufe da oben. Das ist
ein Inverter, der kann aber Tristate
314
00:31:13,160 --> 00:31:18,740
erreichen. Das heißt also, wenn die
Taktsignale, die Clock unten und oben, die
315
00:31:18,740 --> 00:31:25,730
Transistoren, wenn die gerade ungünstig
stehen, dann ist es dieser Stufe egal, was
316
00:31:25,730 --> 00:31:30,140
vorne an dem D-Eingang, am Daten-Eingang
für ein Signal anliegt. Er lässt es
317
00:31:30,140 --> 00:31:35,240
nicht durch, invertiert nicht. Treibe
sozusagen ... wie soll ich es sagen ....
318
00:31:35,240 --> 00:31:41,810
Wenn der Clock richtig liegt, treibe ich
das rein und hab aber von hinten die
319
00:31:41,810 --> 00:31:46,490
Rückführung drinne, die genau so einen
Tristate-fähigen Inverter hat, der aber
320
00:31:46,490 --> 00:31:51,290
gegenphasig arbeitet. Das heißt also, die
beiden, also der linke Inverter und der
321
00:31:51,290 --> 00:31:55,760
rechte Inverter treiben gleichzeitig einen
Knoten, nämlich der von dem Inverter in
322
00:31:55,760 --> 00:32:01,490
der Mitte und hinter diesen Inverter in
der Mitte da hab ich den Daten-Ausgang.
323
00:32:01,490 --> 00:32:12,750
Das ist die kleinste, stabilste Latch-
Schaltung, die ich so kenne. Das ist jetzt
324
00:32:12,750 --> 00:32:18,120
sozusagen das Gleiche nochmal für Low-
aktiv deswegen, deswegen da "Latch" mit
325
00:32:18,120 --> 00:32:24,900
dem "N" hintendran. Da hab ich sozusagen
genau die gleiche Schaltung. Sieht genauso
326
00:32:24,900 --> 00:32:29,670
aus, nur dass jetzt die Clock-Signale
andersherum angeschlossen sind gegenüber
327
00:32:29,670 --> 00:32:34,170
dem davor. So, um es ein bisschen
komplizierter zu machen, habe ich jetzt
328
00:32:34,170 --> 00:32:38,730
mal ein Beispiel dabei. Da hab ich ein
Latch, was High-aktiv ist, also mit
329
00:32:38,730 --> 00:32:45,180
positiver Flanke, ja positiven Level
arbeitet, was ein Clock-enable hat: Ich
330
00:32:45,180 --> 00:32:50,022
kann also den Clock zulassen oder
unterdrücken, und was noch nen asynchronen
331
00:32:50,022 --> 00:32:54,990
Reset drinnen hat. Und das Ganze ist, die
Funktion ist so optimiert, dass ich
332
00:32:54,990 --> 00:32:59,010
wirklich die minimale Anzahl von
Transistoren erreiche dabei. Ich hätte
333
00:32:59,010 --> 00:33:01,620
jetzt sagen können, ich nehme den Reset-
Eingang, der muss jetzt eine andere
334
00:33:01,620 --> 00:33:06,270
Polarität haben. Hätte ich dafür wieder
einen Inverter gebraucht, habe ich aber
335
00:33:06,270 --> 00:33:12,780
nicht. Also mein Reset ist da oben
Entschuldigung mit P3 irgendwo so rechts
336
00:33:12,780 --> 00:33:17,820
oben in der Ecke. Er ist in dem Fall
wirklich High-Aktiv. Wenn ich einen Set-
337
00:33:17,820 --> 00:33:23,490
Eingang nehme, das Gegenteil dazu, dann
hätte ich ihn Low-Aktiv und das Clock-
338
00:33:23,490 --> 00:33:26,940
Enable-Signal, was ich vorne dran habe,
das richtet sich auch darum wieder, ob ich
339
00:33:26,940 --> 00:33:33,180
jetzt ein High-aktives oder ein Low-
aktives Clock Signal haben möchte. Moment,
340
00:33:33,180 --> 00:33:39,060
das war zurück. Okay, das ist noch ein
Punkt, der ist offen. Zu viele Baustellen.
341
00:33:39,060 --> 00:33:42,330
Also Ich will eigentlich von einem
Scematic so wie ihr das gerade gesehen
342
00:33:42,330 --> 00:33:49,020
habt für den Latch, auch wieder zu meiner
Zellbeschreibung kommen. Ich habe für das
343
00:33:49,020 --> 00:33:53,940
Scematic allerdings ein OpenSource-Tool
benutzt, was eigentlich aus dem PCB-
344
00:33:53,940 --> 00:34:01,050
Bereich kommt, GNU-EDA. So aus der Ecke.
Und dafür gibt es die Möglichkeit, auch
345
00:34:01,050 --> 00:34:04,560
Netzlistern, also auch einen Exporter zu
schreiben. Ich habe mir die Mühe noch
346
00:34:04,560 --> 00:34:08,730
nicht gemacht. Aber das werde ich machen
auf alle Fälle für alle Zellen, die ich
347
00:34:08,730 --> 00:34:12,390
sozusagen händisch machen muss, also die
nicht durch Popcorn generiert worden sind.
348
00:34:12,390 --> 00:34:25,200
Okay. Popcorn, Popcorn. Wenn wir jetzt
hier mal ganz schnell das da machen. Also,
349
00:34:25,200 --> 00:34:32,700
wenn wir mal in den Katalog reingucken. Da
sind jetzt hier. Oh, da ist schon was
350
00:34:32,700 --> 00:34:43,830
drin. Machen wir mal leer. Okay, da haben
wir so ein paar Makefiles drinnen. Also
351
00:34:43,830 --> 00:34:47,100
Katalog ist ein Verzeichnis wo ich die
ganzen Zellbeschreibungen drinnen sammle.
352
00:34:47,100 --> 00:34:53,040
Ich hab ein GNUmakefilel, das ist mein
großes, da sind die Hauptfunktionalitäten
353
00:34:53,040 --> 00:34:58,470
drin. Und ich hab dann so ein paar drinnen
mit stacked2, stacked3 und so weiter, die
354
00:34:58,470 --> 00:35:01,980
betreffen die Anzahl der gestackten
Transistoren, also der gestapelten
355
00:35:01,980 --> 00:35:03,960
Transistoren die ich zulasse. Alle Zellen,
356
00:35:03,960 --> 00:35:08,160
die ich z.B. maximal drei gestackte
Transistoren haben, wären in dem Makefile
357
00:35:08,160 --> 00:35:12,660
mit dem stacked3 drinnen. Es hat den
Vorteil, wenn ich jetzt in der
358
00:35:12,660 --> 00:35:15,720
Konfiguration, dazu kommen wir hoffentlich
noch, wenn mir die Zeit nicht wegläuft,
359
00:35:15,720 --> 00:35:21,525
angebe, ich habe so und so viel als Limit
für meinen Transistor, dass er mir das
360
00:35:21,525 --> 00:35:24,180
entsprechende Makefile als höchstes
Makefile nimmt, alle anderen wären
361
00:35:24,180 --> 00:35:34,710
sozusagen inkludiert. OK. "make catalog" .
Kann man sich sozusagenen Katalog machen.
362
00:35:34,710 --> 00:35:40,860
Zieht man Popcorn mal ran. Machen wir das
mal schnell. So weit läuft er leider noch
363
00:35:40,860 --> 00:35:51,510
nicht. So und da bricht das schon ab. Das
ist in dem Fall deshalb, weil meine Zellen
364
00:35:51,510 --> 00:35:55,110
noch nicht durchgängig sind. Ich habe
leider in meinem Makefile Zellen drin, die
365
00:35:55,110 --> 00:36:00,090
er noch nicht generieren kann. Da habe ich
noch die Paperwork, muss ich wirklich mal
366
00:36:00,090 --> 00:36:05,520
von vorne bis hinten alles durch. Aber im
Augenblick ist für mich wichtiger, dass es
367
00:36:05,520 --> 00:36:08,850
läuft, als es jetzt an der Stelle erst mal
vorstellen. Aber es würde genauso
368
00:36:08,850 --> 00:36:12,060
ablaufen. Ich habe sozusagen die ganzen
Ableitungen im Makefile drinnen. Ich sage
369
00:36:12,060 --> 00:36:16,620
"make catalog" und er generiert mir alle
Zellen. Alle kombinatorischen Zellen so.
370
00:36:16,620 --> 00:36:26,280
Und wie gesagt, dass also die Warnung ist
ernst gemeint. Wenn jemand beabsichtigt,
371
00:36:26,280 --> 00:36:30,750
selber mal so eine Zellbibliothek zu
machen oder zu generieren, er sollte
372
00:36:30,750 --> 00:36:35,970
wissen, was er tut, weil der Effekt auf
eure Schaltung oder auf dem Chip ist
373
00:36:35,970 --> 00:36:42,810
einfach mal desaströs, wenn das schief
geht. OK. Makefiles bei mir haben immer
374
00:36:42,810 --> 00:36:46,710
die Möglichkeiten einen Helpscreen
drinnen. Kann ich auch mal schnell
375
00:36:46,710 --> 00:36:52,920
vorführen. Also wenn ich jetzt sage
"make", dann krieg ich bei mir einen
376
00:36:52,920 --> 00:37:00,390
Helpscreen. In dem Fall ist es jetzt das
Globale, also ich hab eine Möglichkeiten,
377
00:37:00,390 --> 00:37:04,410
eine Distribution zu machen. Da so am Ende
alles rein wenn es fertig ist. "make
378
00:37:04,410 --> 00:37:07,830
tools" hatte ich ja schon mal gemacht,
"make catalog" auch schon. Ich kann aber
379
00:37:07,830 --> 00:37:11,460
auch die Dokumentation dafür generieren.
Also für die ganzen Zellen, die ich oder
380
00:37:11,460 --> 00:37:15,930
die Popcorn generiert und ich selber auch
händisch gemalt habe. Dafür gibt es dann
381
00:37:15,930 --> 00:37:21,540
sozusagen ein Datenblatt, wo dann drin
steht, wie das Schaltbild aussieht, wie
382
00:37:21,540 --> 00:37:26,370
das Scematic aussieht. Welche Files ich
alle dazu gefunden habe, oder das Tool
383
00:37:26,370 --> 00:37:31,410
dazu gefunden hat, also Layoutfiles,
Simulationsfiles und so weiter. Das soll
384
00:37:31,410 --> 00:37:43,590
alles rein. Okay, jetzt wird's nochmal ein
bisschen blutig. Es gibt Mosis-Rules.
385
00:37:43,590 --> 00:37:49,140
Mosis ist ein amerikanisches
Universitätsprogramm, vergleichbar mit dem
386
00:37:49,140 --> 00:37:55,530
europäischen Europractice. Die bieten so
ein Service an für Universitäten, dass man
387
00:37:55,530 --> 00:37:59,580
sagen kann, ich hab hier einen Chip, und
ich möchte irgendwie 20 oder 30 Exemplare
388
00:37:59,580 --> 00:38:03,570
dafür haben, dann machen die so ein Multi-
Project-Wafer wo sozusagen mehrere
389
00:38:03,570 --> 00:38:08,130
Projekte drauf sind. Schieben dann mal so
ein Schiffchen mit 20 30 Wafern durch die
390
00:38:08,130 --> 00:38:15,030
Fab und das wars. Aber die haben auch mal
definiert Designrules. Also fürs Layout
391
00:38:15,030 --> 00:38:21,240
die Abstände definiert, die
Größenordnungen für Metal, für Poly, für
392
00:38:21,240 --> 00:38:26,880
alles mögliche, und diese Rules sind so
gemacht, dass sie auf möglichst viele
393
00:38:26,880 --> 00:38:30,720
Technologien von ihren Klienten oder den
Fabs die da hinten dranhängen auch
394
00:38:30,720 --> 00:38:37,740
funktionieren. Das ist so der kleinste
gemeinsame Nenner. Hat aber den Vorteil,
395
00:38:37,740 --> 00:38:42,150
dass sie wirklich recht robust sind, wenn
man danach designed. Dann hat man
396
00:38:42,150 --> 00:38:43,290
vielleicht nicht irgendwie das allerletzte
397
00:38:43,290 --> 00:38:47,250
rausgekitzelt aus der Technologie, die
vielleicht eine Fab anbietet oder
398
00:38:47,250 --> 00:38:52,200
irgendwelche Spezialitäten nicht benutzt.
Aber man kann sozusagen damit gut
399
00:38:52,200 --> 00:38:58,470
arbeiten. Und diese Rules sind als PDF zum
runterladen, kann man sich angucken. Gut
400
00:38:58,470 --> 00:39:05,220
gemacht, okay. Die machen also die Rules
dafür, die sind so in drei Stufen
401
00:39:05,220 --> 00:39:12,000
definiert. SCMOS wie scalable CMOS. Das
ist so, ja CMOS, die haben, angefangen mit
402
00:39:12,000 --> 00:39:18,900
zwei, drei Mikrons oder sowas. Dann gab es
dieses Sub-Mikron. Da so über den Daumen
403
00:39:18,900 --> 00:39:26,460
hätte ich gesagt, alles so kleiner gleich
0,8 µ. Noch ein Stückchen kleiner ist
404
00:39:26,460 --> 00:39:31,560
dann Deep-sub-micron. Also alles wo dann
irgendwie schon ganz komische Effekte dazu
405
00:39:31,560 --> 00:39:37,650
kommen, also 0,35 oder so etwas. Also 0,35µ
muss man umrechnen, das sind 350
406
00:39:37,650 --> 00:39:43,470
Nanometer. Klingt für heutzutage riesig,
aber es ist so. Ich habe jetzt noch bei
407
00:39:43,470 --> 00:39:48,780
diesen Rules, die benutze ich ja in meinem
Tool, noch eine vierte Möglichkeit
408
00:39:48,780 --> 00:39:55,380
eingebaut, wo ich sage, ich möchte es ganz
gerne, dass die Leute in der Lage sind,
409
00:39:55,380 --> 00:40:00,750
ein extra Rulefile rein zu laden, also mit
diesen ganzen Angaben, was von diesen drei
410
00:40:00,750 --> 00:40:07,860
Schemen die da im PDF sind, abweicht. Da
wollte ich auch noch jetzt mal kurz
411
00:40:07,860 --> 00:40:30,517
zeigen, wie dieses aussieht. Schreiben
sollte man können. Das ist erst mal der Header.
412
00:40:30,517 --> 00:40:38,650
Das ist in Sceme geschrieben. Also nicht
erschrecken. Da sind die ganzen Rules, die
413
00:40:38,650 --> 00:40:45,985
es so gibt drinnen mit den Nummern, so wie
sie im PDF sind. Da habe ich mir einen
414
00:40:45,985 --> 00:40:53,410
kleinen Vektor definiert, wo ich die vier
Werte reinschreibe. Und das ist jetzt.
415
00:40:53,410 --> 00:40:58,420
Moment, wo geht's los. Das ist mal so ein
bisschen so ein Anfang. Also dass ich auch
416
00:40:58,420 --> 00:41:03,040
ASCII-Art reingemacht hat, um Rules zu
erklären, um welche Abstände es geht. In
417
00:41:03,040 --> 00:41:06,640
dem Fall haben wir die Rule 1.1, und die
sagt von wegen bei einem nwell, die kann
418
00:41:06,640 --> 00:41:13,120
halt eine bestimmte Breite, Länge haben,
und die muss halt irgendwie eingehalten
419
00:41:13,120 --> 00:41:18,670
werden. Da steht ja Minimum nwell pwell
Rule. Und so zieht sich das halt irgendwie
420
00:41:18,670 --> 00:41:22,870
das ganze Dokument runter. Tabelle dazu,
die sozusagen einen von den vier Werten
421
00:41:22,870 --> 00:41:27,550
herauspickt. Je nachdem, mit welchem
Parameter ich reinkomme. Nächste Rule,
422
00:41:27,550 --> 00:41:32,920
1.2, da ist dann bei der nwell oder pwell
der Abstand dazwischen einzuhalten und so
423
00:41:32,920 --> 00:41:40,060
weiter. Die Rules benutze ich für das
Layouttool. Ok, und jetzt wollen wir
424
00:41:40,060 --> 00:41:48,310
hier raus. Ahm Ups. Also die Rules sind
alle in Lambda definiert, das ist noch ein
425
00:41:48,310 --> 00:41:53,980
wichtiger Punkt. Oh, fünf Minuten, ok.
Lambda meint die Hälfte der Featuresize,
426
00:41:53,980 --> 00:41:57,940
also wenn jemand sagt, eine Technologie
mit einem Mikron, dann ist das ein Mikron
427
00:41:57,940 --> 00:42:07,210
die Featuresize. Lambda meint also
sozusagen die Hälfte davon. Und in der
428
00:42:07,210 --> 00:42:11,620
Größenordnung sind all diese Regeln
angegeben. Die geben also sozusagen nicht
429
00:42:11,620 --> 00:42:15,454
absolute Werte an, von wegen, wenn ich
jetzt 0.8µ hab, müssen das so und so
430
00:42:15,454 --> 00:42:19,738
viele Mykrometer sein, sondern sie geben
das in Lambda an und sagen: drei Lambda,
431
00:42:19,738 --> 00:42:23,950
zwei Lambda sind mehr oder weniger alles
ganze Integerwerte. Und es hat halt den
432
00:42:23,950 --> 00:42:27,640
Vorteil, dass man über mehrere
Generationen hinweg runterskalieren kann,
433
00:42:27,640 --> 00:42:31,880
so wie es da in dem Punkt auch kam. Von
wegen erst mal scaleable CMOS, dann gehts
434
00:42:31,880 --> 00:42:38,060
ins Submikron und dann Deep-Submikron. Das
funktioniert, aber irgendwann funkioniert
435
00:42:38,060 --> 00:42:40,700
es nicht mehr, deswegen haben sie die
neuen Stufen eingeführt, in denen
436
00:42:40,700 --> 00:42:45,770
sozusagen die Regeln wieder ein bisschen
breiter sind. Okay, jetzt haben wir hier
437
00:42:45,770 --> 00:42:52,130
so eine Zelle. Ist auch ein Punkt, den ich
erklären muss. Das ist eine 6-Track-Zelle.
438
00:42:52,130 --> 00:42:55,700
Wenn man sich da die blauen Streifen
vorstellt, die so horizontal drüber
439
00:42:55,700 --> 00:43:01,130
laufen, das ist Metal, also Metall eins.
Das habe ich einmal ganz unten, da ist es
440
00:43:01,130 --> 00:43:06,680
grau und einmal ganz oben. VDD. Also
Betriebsspannung. Die Dinger haben laut
441
00:43:06,680 --> 00:43:12,530
Mosis-Rules, sieht man an den Kästchen
auch, eine Breite von 4 Lambda. Das ist
442
00:43:12,530 --> 00:43:17,570
sozusagen der Minimalabstand für das
Metall, und in den Mosis-Rules steht, auch
443
00:43:17,570 --> 00:43:21,590
drinnen, wie groß der Abstand zum nächsten
Metal sein muss, also zu dem gleichen
444
00:43:21,590 --> 00:43:26,240
wieder Metall. Das sind auch wieder 4
Lambda, wenn man sich das so vorstellt,
445
00:43:26,240 --> 00:43:30,290
vier Lambda, die Leitung selber, vier
Lambda Lücke, nächste Metall - dann kommt
446
00:43:30,290 --> 00:43:36,980
man auf ein Raster als von 8 Lambda, und
dieses Raster wird auch beim Routing
447
00:43:36,980 --> 00:43:41,960
benutzt. Also wenn man über die Zellen
hinweg routen will, weil sich das halt so
448
00:43:41,960 --> 00:43:44,382
schön durchzieht, also nicht nur Metal
eins und dann zwei und drei und so weiter.
449
00:43:44,382 --> 00:43:51,680
Und das nennen die halt so Tracks, und es
hat sich eingebürgert in der Branche, dass
450
00:43:51,680 --> 00:43:56,960
die Zellhöhe, also wie hoch so eine Zelle
ist, in Anzahl dieser Tracks angegeben
451
00:43:56,960 --> 00:44:01,130
wird. Das hier ist also ein Beispiel für
6-Track, das ist so eine kleine Zelle.
452
00:44:01,130 --> 00:44:05,900
Funktioniert bei diesem NAND immer noch
ganz gut. Wenn ich jetzt aber so eine
453
00:44:05,900 --> 00:44:10,640
Monster Komplexzellen hatte, wie am Anfang
irgendwie mal gezeigt, dann funktioniert
454
00:44:10,640 --> 00:44:15,440
das nicht mehr. Dann muss es größer
werden. Okay, das wäre jetzt mal mit
455
00:44:15,440 --> 00:44:20,120
sieben Tracks. Man sieht das Raster wird
schon ein bisschen kleiner, und das
456
00:44:20,120 --> 00:44:24,620
gleiche hier nochmal mit zehn. Jetzt hat
man schon den Effekt: Für das NAND2 ist
457
00:44:24,620 --> 00:44:29,390
zehn Tracks schon ziemlich groß, nämlich
ziemlich viel Luft in der Mitte. Für die
458
00:44:29,390 --> 00:44:32,750
Komplexgatter, die irgendwie reinkommen,
da wird es vielleicht doch schon wieder
459
00:44:32,750 --> 00:44:36,170
ein bisschen knapper. Also man muss
sozusagen an der Stelle immer die Balance
460
00:44:36,170 --> 00:44:40,160
finden. Wie groß macht man die Zellen -
Man will sie ja nicht zu groß machen, wenn
461
00:44:40,160 --> 00:44:47,370
man sich den Platz verschenkt - Aber man
will auch Funktionalität drin haben. Okay,
462
00:44:47,370 --> 00:44:56,640
so wie sollte man eigentlich mit dem Ding
rum spielen? Ich habe... wo ist es... Da.
463
00:44:56,640 --> 00:45:07,790
Also wenn ich das jetzt hier mache. Im
Templates hab ich ein toml-File drinnen.
464
00:45:07,790 --> 00:45:12,680
Und das ist dazu gedacht, die
Konfiguration zu machen. Also dass ich
465
00:45:12,680 --> 00:45:16,580
wirklich die Werte reinschreiben kann. Da
sieht man wieder das Limit vier. Also
466
00:45:16,580 --> 00:45:21,830
wieviel Transistoren ich stacken möchte,
kann ich angeben. Buffern, ab wann ich
467
00:45:21,830 --> 00:45:25,610
sozusagen mit dem Buffer hinten anfangen
möchte. In dem Fall ist auch erst mal vier
468
00:45:25,610 --> 00:45:29,690
drinnen. Bei den Zellen ist es so, dass
sie sagen, wie hoch das ist. Mein
469
00:45:29,690 --> 00:45:41,360
Beispielfile, was ich habe. Ich sage 11
Tracks. Ups. Jetzt ist was weg. Dann
470
00:45:41,360 --> 00:45:46,880
Terminals, also auf welcher Ebene mache
ich die Übergabe zum Routing? Also was ist
471
00:45:46,880 --> 00:45:50,780
sozusagen für die Zelle die Ein- und
Ausgänge? Wo soll der Router ran gehen? In
472
00:45:50,780 --> 00:45:58,760
dem Fall sage ich, es soll bitte schön auf
Metal II sein. Ja, Connectivity,
473
00:45:58,760 --> 00:46:01,730
Restricted. Es gibt auch solche Sachen, wo
man sagt, man darf an die Zelle nur
474
00:46:01,730 --> 00:46:06,020
waagerecht ran, oder man darf nur
senkrecht ran. Oder man lässt es sozusagen
475
00:46:06,020 --> 00:46:09,800
offen. Ich habe gesagt erst mal für mein
Beispiel unrestricted. Also ich habe keine
476
00:46:09,800 --> 00:46:15,770
Vorgaben gemacht, ob nur waagerecht oder
nur senkrecht. Dann kommen hier noch so
477
00:46:15,770 --> 00:46:20,960
Transistorgeschichten rein. Der
Transistor, Featursize, meistens als 'L'
478
00:46:20,960 --> 00:46:25,790
bezeichnet, ist sozusagen die Länge und
die Weite dazu, also wie breit der Kanal
479
00:46:25,790 --> 00:46:29,180
ist, also nicht, wie lang, sondern wie
breit. Und dieses Verhältnis dazwischen
480
00:46:29,180 --> 00:46:33,950
wird immer gern als Ratio angegeben. Und
laut Mosis-Rules ist das Kleinste, was wir
481
00:46:33,950 --> 00:46:39,680
sozusagen nutzen können dafür 1,5. Das
heißt also, wenn ich eine Featursize habe
482
00:46:39,680 --> 00:46:48,050
von einem Mikron, ist mein L das Lambda 2
und die Weite ist dazu 3. Jetzt kommt noch
483
00:46:48,050 --> 00:46:52,970
ein Punkt Gamma dazu. Ok, versuchen wir
ganz schnell zu erklären. Die
484
00:46:52,970 --> 00:46:57,920
Ladungsträgerbeweglichkeit für P-Kanal und
N-Kanal-Transistoren ist unterschiedlich.
485
00:46:57,920 --> 00:47:03,890
Bei N-Kanal bewegen sich die Elektronen.
Und bei P-Kanal bewegt sich ja sozusagen
486
00:47:03,890 --> 00:47:07,760
gar nichts. Und dann wandern die Löcher
mit, wenn sich die Elektronen drüber
487
00:47:07,760 --> 00:47:12,890
bewegen. Ganz grob ausgedrückt. Um das
aber auszugleichen in der Geschwindigkeit,
488
00:47:12,890 --> 00:47:19,220
man will ja eigentlich sozusagen, dass
P-Kanal und N-Kanal etwa gleich sind, weil
489
00:47:19,220 --> 00:47:22,230
man sonst unterschiedliche
Verzögerungszeiten hat für Schaltvorgänge,
490
00:47:22,230 --> 00:47:27,240
fängt man damit an, den
P-Kanaltransistor größer zu machen. Und
491
00:47:27,240 --> 00:47:31,800
wie viel im Verhältnis zu dem N-Kanal er
größer wird, das wird ganz gerne als Gamma
492
00:47:31,800 --> 00:47:36,240
angegeben. Ich habe hier erst einmal zwei
reingeschrieben. Das ist so ein üblicher
493
00:47:36,240 --> 00:47:41,130
Schätzwert, ist nicht ideal, ist nicht
ausbalanciert, ist nicht perfekt. Das
494
00:47:41,130 --> 00:47:47,940
hängt nämlich davon ab, wie gut P-Kanal
und N-Kanal dotiert sind und so weiter. Es
495
00:47:47,940 --> 00:47:53,400
geht auch bis zu drei. Wenn ich zum
Beispiel irgendwas haben möchte, was
496
00:47:53,400 --> 00:47:59,520
Seitenkanalangriffen standhält, sozusagen
den Peak nicht sieht, dann sollte man den
497
00:47:59,520 --> 00:48:07,890
Wert ausbalancieren. Ok. Sizing ist die
Geschichte, ja. Wir werden immer knapper
498
00:48:07,890 --> 00:48:18,570
hier. Ja, ok. Also da will ich hin zeigt
zur Präsentation Bin ich noch ein
499
00:48:18,570 --> 00:48:21,720
bisschen weg von. Irgendwann, also von
wegen... ihr nehmt das TOML-File her...
500
00:48:21,720 --> 00:48:27,510
Beispiel... konfiguriert euch das, passt
euch das an, wie er es braucht. Ihr drückt
501
00:48:27,510 --> 00:48:31,650
einfach "make dist", also wie
"distribution". Ihr kriegt den ganzen Sack
502
00:48:31,650 --> 00:48:35,490
voll, kann eine ganze Weile dauern. Aber
ihr kriegt danach Schematics, ihr kriegt
503
00:48:35,490 --> 00:48:40,110
Layouts, kriegt die Dokumentation und habt
sozusagen wirklich was "ready to use" für
504
00:48:40,110 --> 00:48:46,770
yosys oder für die ganzen anderen Tools,
ist alles dabei. Und das Ganze soll Open
505
00:48:46,770 --> 00:48:51,657
Source sein. Steht ja jetzt schon bei
GitHub So, jetzt Q & A.
506
00:48:51,657 --> 00:48:54,900
Herald: Dann bitte ich jetzt einmal um
einen herzlichen Applaus für Chipforge.
507
00:48:54,900 --> 00:49:00,496
Applaus
508
00:49:00,496 --> 00:49:03,400
H: Und wir beginnen mit der Fragerunde.
Wir haben drei Mikrofone hier im Saal. Wer
509
00:49:03,400 --> 00:49:09,160
eine Frage hat, einfach zum Mikrofon
gehen. Es gibt schon eine Frage aus dem
510
00:49:09,160 --> 00:49:18,250
Internet.
Signal Angel: Hallo. Die Frage aus dem
511
00:49:18,250 --> 00:49:22,600
Internet lautet: Wie viel würde es kosten,
einen Quadratmillimeter Platz auf so einem
512
00:49:22,600 --> 00:49:28,450
Die zu kaufen? Für irgendeinen Knoten, wo
du den Preis gerade weißt. Wie lange wird
513
00:49:28,450 --> 00:49:35,110
es dauern?
C: Okay. Also unser Background ist ja, wir
514
00:49:35,110 --> 00:49:39,160
wollen eigentlich ein freies Silizium
machen, also wirklich auch diesen Prozess
515
00:49:39,160 --> 00:49:45,580
freilegen. Das ist das, was Leviathan in
Hongkong da vorantreibt. Da ist es so,
516
00:49:45,580 --> 00:49:51,760
dieser Quadratmillimeter wäre einfach zu
haben. Also die Wafer-Kosten wären
517
00:49:51,760 --> 00:49:56,110
irgendwie so bei 100 Hongkong-Dollar, wenn
ich das richtig glaub ich in Erinnerung
518
00:49:56,110 --> 00:50:01,630
habe, also durch 10, wären das irgendwie
10 Dollar für einen Wafer, 4 Zoll, relativ
519
00:50:01,630 --> 00:50:08,140
klein, und es würden noch die Maskenkosten
dazu kommen. Da müsste ich jetzt lügen. Es
520
00:50:08,140 --> 00:50:11,290
sind aber auch irgendwie nur ein paar
Tausend oder so. Fünf oder sechs Tausend,
521
00:50:11,290 --> 00:50:16,360
so in der Größenordnung. Vielleicht 10.000
Dollar. Der Rest ist eigene Manpower im
522
00:50:16,360 --> 00:50:19,510
Labor.
SA: Danke.
523
00:50:19,510 --> 00:50:23,080
C: Und du kannst dir so viele Chips
davon machen wie du lustig bist, wenn wir
524
00:50:23,080 --> 00:50:26,530
so weit sind. Also wir würden ganz gerne
zurück ins Labor, aber dafür brauchen wir
525
00:50:26,530 --> 00:50:31,750
halt die Gebühr für den Reinraum.
H: Danke für die Antwort. Die nächste
526
00:50:31,750 --> 00:50:34,960
Frage. Mikrofon 2, bitte!
Mikrofon 2: So wie das jetzt aussieht,
527
00:50:34,960 --> 00:50:39,010
könnt ihr ja die Layouts für eure
Standardzellen oder wollt ihr zumindest
528
00:50:39,010 --> 00:50:41,909
mal, automatisch generieren lassen zu
gewissen Graden.
529
00:50:41,909 --> 00:50:43,750
C: Ja
M: Könnt ihr das dann auch direkt einem
530
00:50:43,750 --> 00:50:47,710
Tool beibringen, dass es aus einer
synthetisierten Netzliste schon direkt
531
00:50:47,710 --> 00:50:53,200
versucht so, ich sage mal, Makro-Zellen zu
synthetisieren. Das wird irgendwann nicht
532
00:50:53,200 --> 00:50:56,890
mehr gehen, aber für kleinere könnte ich
mir das vorstellen. Kannst du da was dazu
533
00:50:56,890 --> 00:51:01,720
sagen?
C: Ja. Der Weg wäre ein bisschen
534
00:51:01,720 --> 00:51:06,940
umständlich. Eigentlich ist es so, die
Tools wie yosys, also die sozusagen, die
535
00:51:06,940 --> 00:51:11,230
Synthese machen, die sind ja immer extrem
davon abhängig, wie gut die Bibliothek
536
00:51:11,230 --> 00:51:15,370
ist, die yosys zur Verfügung steht. Und
wenn wir aber eine Bibliothek haben, die
537
00:51:15,370 --> 00:51:20,290
relativ begrenzt und klein ist, dann kann
yosys nur entsprechend Ergebnisse liefern.
538
00:51:20,290 --> 00:51:24,460
Wenn wir allerdings in der Lage sind, hier
mit diesem Popcorn und so weiter die
539
00:51:24,460 --> 00:51:28,420
Bibliothek zu liefern, die wirklich mehr
oder weniger allumfassend ist, dann hat
540
00:51:28,420 --> 00:51:33,010
yosys auch viel viel viel mehr
Möglichkeiten zu optimieren, sozusagen in
541
00:51:33,010 --> 00:51:39,130
Richtung Delay, in Richtung
Energieaufnahme und so weiter. Also wir
542
00:51:39,130 --> 00:51:42,310
geben sozusagen dem Tool dann viel, viel
mehr Möglichkeiten. Es kann natürlich
543
00:51:42,310 --> 00:51:46,300
sein, dass es denn ein bisschen länger
braucht, einfach weil es sozusagen den
544
00:51:46,300 --> 00:51:51,460
ganzen Suchraum durchgehen muss. Aber die
Ergebnisse sind einfach mal besser.
545
00:51:51,460 --> 00:51:55,558
H: Okay. Als nächstes am Mikrofon 1,
bitte!
546
00:51:55,558 --> 00:52:01,930
Mikrofon 1: Okay, also das sieht ja schon
mal ganz gut aus, aber hast du schon
547
00:52:01,930 --> 00:52:06,790
Transmission-Gates, Analog-Multiplexer und
Schmidt-Trigger angeguckt oder machst du
548
00:52:06,790 --> 00:52:10,630
die dann von Hand?
C: Okay, also die Sachen generiere ich
549
00:52:10,630 --> 00:52:17,020
nicht mit dem Popcorn. Die Multiplexer
mache ich händisch. Ja, Multiplexe sind
550
00:52:17,020 --> 00:52:22,180
auch wieder in verschiedenen Stack-Zellen
drinnen. Multiplexer, also diese
551
00:52:22,180 --> 00:52:25,330
Transmission-Gates in den Multiplexern,
die haben aber einen ganz hässlichen
552
00:52:25,330 --> 00:52:29,590
Nachteil. Die gehen wieder in meine Bilanz
rein mit den Anzahl gestackten
553
00:52:29,590 --> 00:52:34,450
Transistoren. Weil sie ja sozusagen nur
diesen Pfad drinnen haben und kein, wie
554
00:52:34,450 --> 00:52:42,310
soll ich sagen, Renewing, oder Refresh vom
Pegel machen. Also das Zeug mache ich auf
555
00:52:42,310 --> 00:52:47,050
alle Fälle von Hand, ja. Und Schmidt-
Trigger werden für mich in die
556
00:52:47,050 --> 00:52:51,100
Standardzellenbibliothek nicht reinkommen.
Die kommen in die IO Zellen, weil da
557
00:52:51,100 --> 00:52:56,325
brauche ich sie.
H: Alles klar. Dann war noch eine Frage am
558
00:52:56,325 --> 00:53:00,670
Mikrofon 2.
Mikrofon2: Jo, servus! Die Frage ist, weil
559
00:53:00,670 --> 00:53:04,990
du ja gemeint hast, ihr wollt schon auch
bisschen so den Prozess öffnen,
560
00:53:04,990 --> 00:53:08,530
opensourcen. Wenn man jetzt ein bisschen
vom Hintergrund, von der Chemie her
561
00:53:08,530 --> 00:53:14,170
bisschen weiß, was da an Chemikalien in
die Hand zu nehmen ist. Für wie
562
00:53:14,170 --> 00:53:20,170
realistisch hältst du es, dass Hobbyisten
sowas sicher handhaben können? Und wie
563
00:53:20,170 --> 00:53:23,410
sind eure Pläne in die Richtung? Wie wollt
ihr das handhaben? Also, wie wollt ihr es
564
00:53:23,410 --> 00:53:26,530
den Leuten näher bringen, ohne sie dabei
umzubringen, um es mal etwas überspitzt zu
565
00:53:26,530 --> 00:53:29,710
sagen.
C: Ja, das ist ein berechtigter Einwand.
566
00:53:29,710 --> 00:53:35,410
Man sollte wissen, was man tut. Man kann
sich damit mit Chemikalien auch mal ganz
567
00:53:35,410 --> 00:53:41,290
schnell seine Klamotten durchbrennen. Wie
auch immer, hat David schon ausprobiert.
568
00:53:41,290 --> 00:53:48,100
Nein, also es gibt Leute, die machen so
was in der Küche, die Jerry Elzwood. Ich
569
00:53:48,100 --> 00:53:50,320
hoffe, ich habe es so richtig
ausgesprochen. Und die gute Frau mit dem
570
00:53:50,320 --> 00:53:56,740
C64 Hack und sowas. Gibt es bei YouTube-
Videos wie die sozusagen so'n Furnace,
571
00:53:56,740 --> 00:54:01,630
also so ein Ofen mit Silizium und sowas in
Ihrer Küche macht und die spielt da mit
572
00:54:01,630 --> 00:54:06,340
dampfender Floursäure oder irgendie sowas.
Sieht nicht gesund aus, aber Sie macht es.
573
00:54:06,340 --> 00:54:10,150
Angucken. Einfach YouTube gucken. Die
574
00:54:10,150 --> 00:54:12,760
Videos gibt's.
Mikrofon 2: Ich kenne sie. Ich kann als
575
00:54:12,760 --> 00:54:15,130
Chemiker dazu sagen: In Deutschland steht
da dafür die Polizei vor der Tür.
576
00:54:15,130 --> 00:54:21,280
Chipsforge kichert
H: Alles klar. Dann haben wir noch ein
577
00:54:21,280 --> 00:54:26,440
paar Fragen am Mikrofon Drei.
Mikrofon 3: Ja, also du hast ja schön
578
00:54:26,440 --> 00:54:31,000
gezeigt, was du alles für Standardzellen
implementierst. Wie sieht das aus mit dem
579
00:54:31,000 --> 00:54:35,200
Timing und der Simulation für die ganze
Synthese und dann das place and route, ist
580
00:54:35,200 --> 00:54:40,720
ja auch eine wichtige Rolle.
C: Der Punkt kam jetzt ein bisschen in den
581
00:54:40,720 --> 00:54:47,890
letzten Minuten zu kurz. Wenn wir das
Layout haben, dann machen wir mit diesem
582
00:54:47,890 --> 00:54:52,330
Magic, also mit diesem Layout-Tool, das
wir benutzten, eine Parameter-Extraktion.
583
00:54:52,330 --> 00:54:56,410
Wir bekommen also aus diesem Layout wieder
ein Spice-Modell zurück mit den
584
00:54:56,410 --> 00:55:00,640
parasitären Werten, also für Kapazität,
für Widerstand und so weiter. Das
585
00:55:00,640 --> 00:55:04,930
simulieren wir und ich habe für die
Latches und so sowas habe ich in meiner
586
00:55:04,930 --> 00:55:08,220
Spice-Simulation, in meiner Testbench,
rudimentär solche Sachen schon
587
00:55:08,220 --> 00:55:12,960
implementiert. Dass ich wirklich sage bei
20 prozent von der Flanke mess ich bis zu
588
00:55:12,960 --> 00:55:16,230
80 prozent an der Flanke oder sowas. Also
dass ich wirklich dieses Timing
589
00:55:16,230 --> 00:55:22,890
automatisch im Spice ausmesse.
H: Ja, die nächste Frage an Mikrofon 3
590
00:55:22,890 --> 00:55:29,400
Mikrofon 3: Dankeschön! Habt ihr schon
Simulationsmodelle von euren Transistoren,
591
00:55:29,400 --> 00:55:33,690
die ihr dann in Spice nutzen könnt? Weil
das es ja tatsächlich bisher das war ja
592
00:55:33,690 --> 00:55:39,900
recht viel für viele Technologien deswegen
auch zum Beispiel dem Mosis-Standard Ding.
593
00:55:39,900 --> 00:55:44,520
Aber gibts schon Ergebnisse von
Simulationensparametern, von den
594
00:55:44,520 --> 00:55:49,830
Transistoren, die dann gefertigt werden?
C: Also ist es so. Die Modelle z.B. für
595
00:55:49,830 --> 00:55:54,480
den Transistor BSIM3, BSIM4 und so weiter.
Die sind ja standardisiert. Es geht nur
596
00:55:54,480 --> 00:55:58,500
noch darum, welche Werte jetzt, da in
dieses Modell reingefüttert werden. Also
597
00:55:58,500 --> 00:56:04,530
für die Kapazitäten am Gate und so weiter.
Die Größe ist klar, aber wie die Dotierung
598
00:56:04,530 --> 00:56:09,270
aussieht. Diese Sachen, also diese Werte,
die wir da rein füttern müssen, die hängen
599
00:56:09,270 --> 00:56:12,900
eigentlich alle an unserem Testwafer dran,
also den wir vor einem Jahr vorgestellt
600
00:56:12,900 --> 00:56:15,990
haben. Da haben wir nämlich exakt diese
Strukturen drauf, um solche Sachen
601
00:56:15,990 --> 00:56:21,165
auszumessen. Das heißt also, wenn wir den
Wafer sozusagen bis zum Ende prozessiert
602
00:56:21,165 --> 00:56:24,210
haben und jetzt vielleicht auch im
nächsten Reinraum dann nochmal gemacht
603
00:56:24,210 --> 00:56:27,676
haben, dann haben wir wirklich diese Werte
da. Dann können wir die in Spice
604
00:56:27,676 --> 00:56:31,140
reinfüttern. Das ist eine relativ einfache
Sache, und dann haben wir auch die
605
00:56:31,140 --> 00:56:33,000
korrekten Werte dafür.
M3: Gut, Dankeschön.
606
00:56:33,000 --> 00:56:37,200
H: Und noch eine Frage an Mikrofon 3,
bitte.
607
00:56:37,200 --> 00:56:41,760
M3: Ich würde gerne wissen: Wie groß ist
denn so ein Transistor und sind die nicht
608
00:56:41,760 --> 00:56:47,790
ziemlich langsam dann?
C: OK, wir machen ja ... also fangen erst
609
00:56:47,790 --> 00:56:54,180
mal an mit einem Mikron. Ein Mikron, das
heißt also diese Featuresize oder die
610
00:56:54,180 --> 00:57:01,944
Länge vom Kanal zwischen Drain und Source
ist ein Mykro. Das heißt also 2 hoch minus
611
00:57:01,944 --> 00:57:11,340
sechs Meter. Ja? Doch. Milli - Tausend.
Ja. Dazu, wie gesagt das Ratio, also diese
612
00:57:11,340 --> 00:57:17,250
Weite dazu, wäre dann sozusagen den 1,5
Mikron. Also das ist die Transistorgröße
613
00:57:17,250 --> 00:57:23,640
... ist relativ groß. Wir haben aber vom
Equipment in Hongkong, oder hatten die
614
00:57:23,640 --> 00:57:29,280
Möglichkeit, also das, wie wir uns das
angeguckt ... das Equipment ging runter
615
00:57:29,280 --> 00:57:33,240
bis 500 Nanometer. Das heißt also, wenn
unsere Technologie funktioniert, können
616
00:57:33,240 --> 00:57:38,610
wir relativ einfach sozusagen den 0,7 oder
0,8 mikron Node auslassen und gleich nach
617
00:57:38,610 --> 00:57:43,560
0,5 gehen. Das gab das Equipment her, also
die Maschinen, Fotolitografie, die dazu
618
00:57:43,560 --> 00:57:48,150
hängen. Wenn wir sozusagen Equipment
hätten, Zugriff darauf, was noch kleiner
619
00:57:48,150 --> 00:57:50,850
geht, dann müssten wir vielleicht mal
wieder ein bisschen experimentieren, also
620
00:57:50,850 --> 00:57:57,030
wieder Testwafer dafür machen. Aber dann
können wir sozusagen auch runterskalieren.
621
00:57:57,030 --> 00:58:00,600
Aber wir sind da noch, muss ich auch
zugeben, wir sind da noch in einem
622
00:58:00,600 --> 00:58:06,450
Bereich, der optisch sichtbar ist. Also
AB-Limit, das ist so bei 240, 250
623
00:58:06,450 --> 00:58:10,830
Nanometern, also die Wellenlänge vom
Licht, was man optisch noch sehen kann.
624
00:58:10,830 --> 00:58:15,900
Das heißt also, unsere Transistoren sieht
man noch im optischen Mikroskop. Das, was
625
00:58:15,900 --> 00:58:19,830
sozusagen jetzt irgendwie so die aktuellen
Prozessoren sind, die irgendwie, weiß ich
626
00:58:19,830 --> 00:58:24,210
nicht, bei 14, 20 Nanometern oder sowas
sind. Die sind optisch nicht mehr
627
00:58:24,210 --> 00:58:29,520
sichtbar. Aber optisch sichtbar heißt auch
für uns, man kann sozusagen wirklich mit
628
00:58:29,520 --> 00:58:33,120
einer Kamera, USB-Kamera oder sowas wie
andere Leute schon gemacht haben durchs
629
00:58:33,120 --> 00:58:38,520
Mikroskop durchfotografieren, den ganzen
Chip aufnehmen und ein Reverse Engineering
630
00:58:38,520 --> 00:58:41,820
draufmachen, das heißt, also auch
nachträglich feststellen, ob eine
631
00:58:41,820 --> 00:58:47,010
Manipulation an unserem Chip stattgefunden
hat. Das betrachten wir in dem Fall
632
00:58:47,010 --> 00:58:49,860
sozusagen als Sicherheitsfeature, das man
noch sehen kann.
633
00:58:49,860 --> 00:58:53,430
H: Dann gibt es noch eine letzte Frage aus
dem Internet.
634
00:58:53,430 --> 00:58:59,340
SA: Die Frage aus dem Internet lautet, ob
ihr mal versucht hat, Standardzellen für
635
00:58:59,340 --> 00:59:03,180
die Transistoren eines kommerziellen
Fertigers damit zu erzeugen und ob das
636
00:59:03,180 --> 00:59:07,440
funktioniert und was dagegen spricht.
C: Es würde funktionieren. Theoretisch ja.
637
00:59:07,440 --> 00:59:16,410
Was dagegen spricht, ist ein gewisses NDA.
Die Hersteller geben sozusagen ungern die
638
00:59:16,410 --> 00:59:22,350
Informationen raus. Wir müssten sozusagen
ein NDA unterschreiben, um von denen die
639
00:59:22,350 --> 00:59:27,780
physikalischen Angaben zu den ganzen
Layern zu bekommen. Welche physikalischen
640
00:59:27,780 --> 00:59:32,469
Eigenschaften haben und so weiter. Also
die sogenannte PDK, vielleicht habt ihr da
641
00:59:32,469 --> 00:59:37,680
mal was von gehört. Das steht aber unter
'nem NDA. Die Zellen, die wir danach
642
00:59:37,680 --> 00:59:42,720
generieren, die würden sozusagen auch
automatisch wieder unter Verschluss
643
00:59:42,720 --> 00:59:47,790
bleiben müssen. Es würde gehen. Also man
könnte, also sagen wir mal andersrum, ein
644
00:59:47,790 --> 00:59:52,470
kommerzieller Hersteller könnte am Ende
diese Tools, die wir hier schreiben,
645
00:59:52,470 --> 00:59:58,080
benutzen, um sich seine eigenen Zellen zu
generieren. Ja. In die Richtung geht's.
646
00:59:58,080 --> 01:00:05,610
Aber es ist machbar.
H: Wenn ich keine weiteren Fragen mehr
647
01:00:05,610 --> 01:00:10,769
sehe, dann bitte ich nochmal um eine
herzliche Runde Applaus für Chipforge.
648
01:00:10,769 --> 01:00:13,319
Applaus
649
01:00:13,319 --> 01:00:28,929
36C3 Outro
650
01:00:28,929 --> 01:00:39,160
Untertitel erstellt von c3subtitles.de
im Jahr 2020. Mach mit und hilf uns!