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!