36C3 Vorspannmusik Chipforge: Ich weiß nicht, wer von euch das alles mitgekriegt hat. Letztes Jahr waren wir hier zu dritt auf der Bühne, gleicher Saal und haben unsere LibreSilicon Technologie vorgestellt. Wir haben damals schon Testwafer dabeigehabt. Sozusagen. Jetzt das Update. Vorneweg erst mal ein Disclaimer. Weil ist 'ne heikle Sache. Okay, das ist jetzt mal so im Groben der Überblick, was ich machen will. Also nochmal einen kurzen Abriss zu LibreSilicon, wo unser Projekt gerade steht. Und dann würde ich ganz gerne so mit den Basics anfangen bei den Standardzellen und mich so langsam vorarbeiten. Okay, also das Update: Der Leviathanch hat 2017 einen Lightning Talk gehalten und hat gesagt "Wir brauchen irgendwie eine freie Technologie." Ich fand das richtig super. Hab mich sofort bei ihm gemeldet. Und wir haben in 2018 wirklich angefangen, uns da Gedanken zu machen, durchzuwurschteln und haben angefangen, wirklich mit einem Micron. Also mit einem "µ" Technologie zu machen. Grund für ein µ war, unsere Bewegung dazu, dass es 5-Volt Toleranz - Also man kann sozusagen Blüter freundlich damit arbeiten, Maker freundlich. Das ist so die Technologie, die noch dokumentiert worden ist. So Ende 70er, Anfang 80er Jahre, wo man sozusagen von vorne bis hinten, alles irgendwo in der Literatur noch findet in Lehrbüchern. Und so einordnungsmäßig: Das ist dieses etwa so die Generation so vom 486. Dann haben wir wie gesagt, letztes Jahr hier auf der Bühne die Präsentationen gemacht von unserem Testwafer. Was neu hinzugekommen ist seitdem in 2019: Uns ist das Geld ausgegangen, um jetzt sozusagen jetzt nochmal ein Jahr den Reinraum zu mieten in Hongkong. Es kamen die Unruhen in Hongkong dazu, und die Unruhen haben dazu geführt, dass die Uni zugemacht worden ist. Wir gesagt haben: "Wir beenden das Semester". Es findet kein Lehrbetrieb mehr statt. Das heißt aber auch: Wir sind jetzt erst mal draußen aus dem Reinraum und können sozusagen erst einmal Paperwork machen. Es ist ein bisschen ungünstig, unbefriedigend. Deswegen gucken wir nach Alternativen. Wenn jemand sozusagen einen Reinraum hat, Zugriff drauf, sagt" Wir können es mit einer Maschinenliste abklären, ob das passt und wie weit wir da kommen". Wir haben wegen der Geldgeschichte, die meistens auch dranhing schon lange eine Gofunding campaign laufen mit bisher einer Einzahlung. Also es ist nicht unbedingt so massentauglich, gebe ich zu. Die Links dazu: Also erste LibreSilicon, das ist die Projektseite. Dann haben wir bei GitHub die Standardzellen drinne. Da findet die Hauptentwicklung statt - das Repository. Und unten drunter ist nochmal so eine Wikiseite. Da wollte ich eigentlich alles das, was ich heute auch so zum Besten gebe, immer mal wieder dokumentieren, weil ich festgestellt habe: In der Ecke existiert sehr, sehr viel Nachholbedarf. Da fehlt einfach das Wissen in der Masse. Wenn jemand sozusagen jetzt damit rumspielen möchte: "git clone" unter diesem Repository. Können Sie sich reinlegen und der Designflow für Chip Design ist im Regelfall so: Einer fängt an Code zu schreiben, Verilog, VHDL oder SpinalHDL. Wie auch immer, er testet das aus. Also er simuliert es mit einem Simulator, dafür gibt's freie Tools - kein Problem. Und versucht es zu verifizieren. Dafür gibts auch Ansätze. Und dann wird das Ding so etwas wie 'kompiliert'. Nennt sich in dem Fall aber 'Synthese'. Dafür gibt es das 'Yosys' Tool von Clifford. Das kann nicht nur FPGAs. Wenn man ihnen die richtige Bibliothek gibt, dann kann es auch ASICs. Was dabei herauskommt, ist eine Netzliste. Das heißt so, weil es einfach haufenweise Komponenten enthält: UND-Gatter, ODER-Gatter, Flipflops alles Mögliche, was mit dem Code beschrieben worden ist und die Verbindungen dazu - also die Drähte dazwischen. Die Zellen natürlich, die müssen wir uns erst einfallen lassen. Das ist eigentlich das Ziel von dem Talk, euch das Nahe zu bringen. Die Zellen werden platziert im Layout. Dafür braucht man sozusagen auch die Layoutinformation, welchen Layer sie benutzen, wie sie aufgebaut sind. Das muss alles zusammengepackt werden, und am Ende kommt ein GDS II file raus. GDS II ist ein anderes Format. Muss man sich vergleichbar vorstellen wie beim PCB Design. Also wenn man ein Board macht das, was hinten als 'gerber' file dann sozusagen in die Herstellung geht. Das ist halt beim ASIC ein GDS II. Damit werden die Masken gemacht und über die Standardzellen wollen wir mal reden. Okay, die Ziele für so eine Bibliothek. Wenn man sich ein bisschen umguckt, dann sieht man, vielleicht bei GitHub oder woanders, sagen wir mal so, Studentenprojekte, die nachgewiesen haben, was ein paar Zellen machen können, die in Design flow, mit irgendwelchen kommerziellen Tools. Die Bibliotheken sind relativ begrenzt. Einfach, weil der Aufwand dafür groß ist. Eine typische Studenten Bibliothek, die hat vielleicht 30, 40 Zellen. Das ist aber eine Größenordnung, die ist absolut unzureichend für ein richtiges Design. Da sind Zellen drinnen, die man sich so als Menschen vorstellen kann. Also die typischen Und-Oder-Gatter, vielleicht noch ein XOR, vielleicht noch zwei, drei Flipflops, ein paar Ledges. Und das wars im Ganzen. Aber Kombinatorik, also Komplexität kann viel, viel größer sein. Kommerzielle Bibliotheken haben 150, 200 Zellen. Da sind dann auch schon andere Funktionalitäten drin. Also Flipflops zum Beispiel gibt's dann auch mit der Scan- Fähigkeit, dass man für Testen in Scan- Pfaden lange Ketten zusammenhängen kann. So etwas fehlt bei Standard-Zellen. Das würde ich ganz gerne anders lösen. Aber egal. Ziele auch für uns: LibreSilicon, wir wollen so wenig Energie wie möglich dabei verbraten. Also wir geben uns Mühe beim Prozess schon mit der Isolierung, dass wir keinen Leakage-Strom, also keinen Leck-Strom und beim Cell Design auch, indem wir die Transistoren entsprechend dimensionieren, dass wir wenig Energie verbraten haben. Weil CMOS, also die Technologie die wir anpeilen, die verbraucht Energie beim Schalten. Also nicht im statischen Zustand, wenn der Clock zum Beispiel flat wäre, also fest liegen würde, also auf 0 oder 1, würde das Ding so gut wie... jetzt ist das Mikro weg? Doch, da ist es! Okay, es würde so gut wie gar keinen Strom gebrauchen. Erst in dem Augenblick, wenn eine Takt-Flanke kommt und jetzt die Speicherzellen innen drin umschalten, also ihren Zustand wechseln. Dann gibt es einen Moment, wo die Gatetransistoren beide durchschalten. Und dann wird Strom verbraucht, oder Energie. So, wir wollen auch schnelle Zellen haben, so schnell wie geht. Das ist ein bisschen konträr zu der Forderung vorhin, weniger Energie. Aber wir können die Transistoren ziemlich klein machen und sozusagen den bestmöglichen Kompromiss dafür finden. Und wir wollen auch, dass die Zellen klein werden, weil nach Herstellung bezahlt man einen Chip nicht nach dem, was drauf ist und wieviel Gatter ich drauf habe oder welche Funktionalität. Sondern ich bezahle rein nach Fläche. Das heißt also, wenn ich eine Zellbibliothek habe, die klein ist, wenn ich sozusagen das ganze Design klein halten kann, bezahle ich auch weniger dafür. Das sind jetzt so Standardzellen, das hier ist so eine ganz typische, wir haben vielleicht den einen oder anderen in der Uni schon gehabt, ein NAND-Gatter mit zwei Eingängen. Ich hab mal links das Symbol, rechts dazu die Tabelle. Wenn man sich das ankuckt, beim NAND ist ganz typisch: Solange wie beide Eingänge nicht gleichzeitig 1 sind, ist der Ausgang immer auf 1. Erst in dem Augenblick, wenn beide Eingänge auf 1 schalten, dann geht der Ausgang auf 0. Das ist sozusagen die invertierte UND-Funktion, also NAND. Unten drunter noch die Formel in der üblichen Notation, wie es dann praktisch gemacht wird. Und so sieht das aus. Für die Grafik muss ich mich ein bisschen entschuldigen. Die habe ich mir generieren lassen, und da sind noch ein paar Artefakte drin. Die Leitungen hier. Aber im Prinzip sieht man's ja. Man sieht die Transistoren unten, die beiden n-Kanal, dass die in einer Reihe sind. Man sieht die oben p-Kanal parallel. NOR, das ist mehr oder weniger invers dazu. Links wieder das Symbol, das amerikanische, rechts die Tabelle und das wieder ganz typisch: Wenn beide Eingänge 0 sind, kommt hinten eine 1 raus. Sobald aber ein Eingang eine 1 hat, ist es hinten eine 0. Und die Notation dazu. Und auch die Transistoren. Da sieht man sozusagen, man kann es sich so gespiegelt vorstellen: Wir haben unten die n-Kanal Transistoren, die sind jetzt in dem Fall parallel, und wir haben oben die p-Kanal, die sind in Reihe. Das ist ein XOR, Exclusiv-Oder. Da habe ich auch die Tabelle hingemacht. Die beiden Eingänge müssen sich unterscheiden, damit hinten eine 1 rauskommt. Ansonsten ist es eine 0. Dafür habe ich jetzt keine Implementierung dabei, weil dafür gibt es irgendwo so fünf, sechs, sieben Varianten, welche ich sozusagen in die Standard-Bibliothek rein nehmen werde. Hab ich noch nicht letztlich ausgeknobelt. Da werde ich mich später mal drum kümmern. Das ist die inverse Funktion dazu. Das wird auch gern als XNOR bezeichnet. Ich bezeichne es halt kürzer mit Äquivalenz-Gatter. Muss man sich vorstellen, wie ein XOR, allerdings wirklich invertiert dazu. Das heißt also, wenn beide Eingänge unterschiedlich sind, dann habe ich die 0. Ansonsten, wenn sie gleich sind, kommt die 1 raus. Dafür gibt es auch wieder die gleiche Anzahl der Implementierungen, einfach weil man es wieder symmetrisch gegenüber dem XOR machen kann. So, jetzt wird es ein bisschen blutiger. Das sind jetzt ein paar Beispiele, die man sich auch noch vorstellen kann an Zellen. Nicht nur das, was sonst nur in Lehrbüchern drin ist. Das sind sogenannte Komplex-Gatter, und wenn man sich das oben anguckt, man sieht sozusagen erst vorne dran eine kleine Funktion, ein UND oder ein OR, und danach noch eine andere, wieder mit dem nächsten Eingang. Das kann man beliebig lang treiben, denn unten die Variante, dass man sozusagen paarweise das zusammenfasst, kann man auch beliebig weit treiben. Man kann dieses Prinzip, dass man Transistoren so miteinander verkettet, dass genau diese Funktion rauskommt, aber die Transistor- Anordnung drinnen einfach und übersichtlich kann man sehr weit treiben. Und das möchte ich in der Standard- Bibliothek auch machen. Kommen wir später zu, dazu muss ich mich was erklären dazu, wie weit man gehen kann. Das ist jetzt ein Beispiel für ein NAND mit vier Eingängen. Ich weiß nicht, ob ihr euch noch daran erinnert, and das NAND mit zwei Eingängen, da hatten wir unten die Transistoren in Reihe, oben die in parallel. Oh, das ist ein AND, stimmt. Ich habe da den Buffer übersehen, hinten. Okay, und ganz rechts, da müssen wir hingucken. Da ist nochmal ein kleiner Inverter hinten dran. Der invertiert ist, also habe ich kein NAND sondern ein AND. Fangen wir mit dem Buffer an zu erklären. Das ist ein wichtiger Punkt. Also eine Design- Entscheidung, die ich in der Standard- Zellenbibliothek getroffen habe. Wenn wir uns vorstellen, dass über jeden Transistor von den vier in der langen Kette zwischen Drain und Source, also den beiden Enden hier. Ich gehe mal kurz rüber. Also dem unteren Ende und dem da oben drüber, Drain und Source, wenn da drüben ein Spannungsabfall ist, also sozusagen immer eine kleine Differenz. Der Transistor schaltet völlig durch. Trotzdem sind diese beiden Pole nicht auf dem gleichen Potenzial. Da gibt es immer eine kleine Differenz. Wenn ich das jetzt aber viermal mache, alle vier hintereinander durchgeschaltet werden, addiert sich das trotzdem auf. Das kann dazu führen, dass dieser Ausgangspegel, der jetzt in dieser langen Leitung da rauskommt, nicht mehr Rail-to-Rail ist, also nicht mehr wirklich an die Betriebsspannung herangeht, sondern wirklich eine deutliche Differenz dazu aufweist. Um diese nicht mehr zu Rail-to- Rail-Fähigkeit ein bisschen rauszunehmen, ich will ja danach eigentlich eine Leitung treiben, fange ich an, mir den Ausgangs- Pegel sozusagen wieder schön zu invertieren. Also einfach wieder einen Inverter hinten dran, weil dann nach dem Inverter habe ich sozusagen wieder deutliche, klarere Pegel. Und eine Designentscheidung, die ich getroffen habe, in der Standard-Bibliothek ist, ich konfiguriere ab wieviel Transistoren in einer Reihe ich sozusagen dieses Recovery hinten machen muss. Also wieder buffern muss. Meine Faustregel, mit der ich im Augenblick arbeite, sind vier Transistoren. Das ist aber im Tool, was ich schreibe, konfigurierbar. Also, ich kann mir auch was vorstellen wo es nur mit dreien oder mit zweien schon gemacht wird, wenn es notwendig wird. Weil: vier Transistoren ist für einen Mikron ganz super. Wenn wir aber Technologien benutzen, die deutlich kleiner werden, dann haben wir ein Schwellspannungsproblem. Diese Spannung vorne an den Transistoren, also am Gate zum Source. Das gibt's so eine gewisse Schwellspannung, ab der der Transistor eingentlich schaltet. Das addiert sich auch auf. Wir kriegen also sozusagen auch wieder addierende Pegel. Es ist einfach unangenehm. Wir müssen das begrenzen, und dafür habe ich auch noch einen zweiten Parameter drinne. Bis wie viele Transistoren ich sozusagen in dieser Kette erlaube. Also ein Buffer hinten, ab wann ich sozusagen den Inverter dranmache. Und das zweite ist, wie viel ich in einer Reihe erlaube. Also nochmal kurz zusammenrechnen, also bei zwei Stack- Transistoren - also die in einer Reihe, nennen sich "stacked" im Englischen, ich weiß gar nicht, wie man das ins Deutsche übersetzen sollte. Wir sagen es gestapelt oder sowas. Wo man zwei Transistoren hat, wegen der Schwellspannung vorne. Wenn diese Betriebsspannung so klein ist und die Schwellspannung zu groß dafür, dass man gar nicht mehr die Pegel erreicht zum Ein und Ausschalten. Dann hat man den Effekt, dass die Bibliothek viel zu klein wird. Da sind wir wieder in der Größenordnung von diesen Studentenbibliotheken mit 30 Zellen oder so. Wenn man drei erlaubt, drei Transistorenstapel, dann ist man so bei Bibliotheken, die jetzt mit diesen ganzen winzigen Nodes mit 14 Nanometer oder sowas auftauchen. Die können nicht mehr vier Transistoren. Vier Transistoren, aber wenn wir das können, haben wir plötzlich eine riesige Komplexität an Komplexgattern, die möglich sind. Das geht laut 'nem Paper. Ich habe es noch nicht ausprobiert. Ich bin noch nicht so weit. Da, sagt einer -- oder behauptet einer, es geht bis zu 4000. Meine Anzahl kommen wir noch dazu, die ich bisher erreicht habe. Also Buffer- limit bei größer gleich drei Transistoren. Gut, das ist so eine Annahme. Okay. Aber wie kommen wir eigentlich zu diesen ganzen Komplexgattern. Wir hätten die vier Beispiele drinnen. Wir kommen von einem Komplexgatter zum nächsten, indem man einen Trick anwendet, und zwar, indem wir sagen: Wir können ja noch zu dem Netzwerk, was wir haben. Also dem Pull-Up, das waren die Oberen oder Pull-Up-Netzwerk, dem unteren, noch zusätzlich Transistor hinzufügen. Einen in Serie, seriell, also in Reihe. Wir müssen nur dafür sorgen, dass wir logisch äquivalent in dem komplementären Netzwerk, dazu einen parallel machen. Das geht halt bei CMOS schön. Und dafür habe ich mir ein Tool geschrieben, was immer noch ein bisschen buggy läuft. Auch schon mal ganz gut. Also, wie gesagt, seriell einen hinzufügen, parallel im anderen Netzwerk. Wenn ich einen Pull-Up mache, seriell erweiter, muss ich einen Pull-Down im Komplementären machen und vice versa. Okay, weil es sozusagen eine Sache ist, die keiner noch so richtig durchexerziert hat, habe ich angefangen mit Paperwork. Also ich hab gesagt: "Okay, ich nehme mal das einfachste CMOS Netzwerk, was ich mir vorstellen kann, dass es ganz links mit den zwei Transistoren das ist ein Inverter". Und dann habe ich gesagt, mit diesem Inverter, mit diesem Prinzip kann ich sozusagen erweitern zu einem, NOR zwei, also NOR mit zwei Eingängen. Aber jetzt ein bisschen hinguckt, sieht man da links da. Von wegen Inverter er A-Transistor hat plötzlich ein Brüderchen an der Seite gekriegt, A1 in parallel und oben hat sozusagen eine Serie bekommen. Auch wieder A1. Sieht ein bisschen komisch aus, weil ich mir in den Namensregeln zwischendurch mal geändert habe. Aber das wär so die Idee. Das Gleiche hat man auch für NAND gemacht. Wieder den Inverter hergenommen, hab gesagt "Okay, jetzt erweitere ich das andere Netzwerk, weil ich sozusagen das Pull down Netzwerk wieder seriell erweitert, Pull up in parallel. Eine ganze Weile hochgetrieben. Also sozusagen von NAND2, NOR2 das wiedererweitert und so weiter und da bin ich zu Sunarzelle vorbeigekommen. Ein paar Leute haben mich im Club um nur solche Sachen zeichnen sehen, habe mich schon ein bisschen meschugge gehalten, war aber ein bisschen sowieso Sodoku, das beruhigt und es kommt auch so etwas raus. Es sind sozusagen jetzt vier Beispiele, die ich gescannt habe. Die sind alle, Teile davon sind noch gar nicht eingetragen worden ins make- file, ebenfalls beim Paperwork ist im Augenblick so. Ich habe zwei dicke Aktenordner voll mit Papier. Nur diese Ableitung, so geschätzt, würde mal sagen so 500, 600 Zellen. Alles nur Komplexgatter und alle mit diesem Limit vier Transistoren gestacked. Ja, ich habe das Gefühl, ich bin noch ganz, ganz weit weg von complied, also von vollständig, weil die Zellen im Augenblick noch dazu tendieren, so lange Bäume zu bilden. Also alternierend bei dem mehr gesehen hat. Also sieht man ja: AND, OR, AND, OR. Nur im Namen sieht man ein bisschen von der Funktion und rechts oben diese Bleistiftzeichnung sieht man auch die Funktion. Also ich habe sozusagen erweitert, habe immer geguckt, wie sieht die Funktion aus. Es war jedenfalls Arbeit, okay. Und das ist dann so ein Zwischending. Wir sagen, das ist schon ein bisschen fülliger, weil man dann auch mal zwei OR-Funktionen nebeneinander hat oder zwei AND. Okay. Und diese ganze Arbeit, die ich mir erst einmal mit Papier gemacht habe, wollte ich ja irgendwie auch meinem Tool beibringen. Hab gesagt: "Okay, brauche ein Tool, ich hab jetzt erst mal das hier zum Vorführen. Kriege ich es hin? Nein. Jetzt mal das hier zumachen. Da hat er mir jetzt die Manuel Pages gebastelt dafür. Und ich guck mir jetzt mal mit euch die zusammen an! Warum nicht? Vertippt? Wahrscheinlich. Es sieht genauso aus. So jetzt mit der klassischen Variante. Also. Das ist jetzt mit Klicki- bunti. Das ist jetzt die Manual Page dazu. Ich habe das Tool "Popcorn" genannt, einfach weil gefühlt die Zellen einfach wirklich hacken. Man schüttet den Mais irgendwo in Topf rein, gibt ein bisschen Wärme dazu, und dann macht das Blub-Blub- Blub, dann kommen die ganzen Zellen raus. Das war mein Hintergedanke dazu. Ja. Ihr könnt es euch angucken, ist im Github drinne. Da ist es auch ein bisschen beschrieben, wie es funktioniert. Hier ist dieses Bufferlimit drinne. Das kann ich als Parameter übergeben. Ich kann den Zellennamen übergeben, der dabei rauskommen soll, weil, das weiß ich ja inzwischen, mein Paperarbeit gemacht habe. Ich kann das noch mit String richtig lang beschreiben für die Doku. Hier sind Formate, die ich ganz gerne später mal hätte, die noch nicht alle funktionieren. Helpscreen. Was haben wir hier? Hier haben wir die Nummern der gestackten Transistoren, limitierend. Und hier sind die Methoden, die man sozusagen drauf werfen kann. Ich hatte ja erklärt, man kann einen Transistor seriell machen dazu, einen anderen parallel erweitern. Das war eine kurze Vereinfachung, weil je nachdem bei welcher Zelle ich gerade bin, muss ich auch die Namensregeln anpassen. Also ob ich jetzt nur den Buchstaben, also den nächsten Buchstaben im Alphabet nehme, weil ich jetzt ein neues Gatter aufgemacht habe oder neue Funktionalität. Oder ob ich sozusagen jetzt Eingänge nur durchnummeriere. Deswegen kommen hier jetzt solche Methoden raus, wie NAND und NOR, dass sozusagen mit durchnummerieren und AOE-OAE, das ist dann sozusagen mit einem neuen Buchstaben. Hier sind noch zwei Methoden drin, die lassen heute mal großzügig weg: Pull-up, Pull-Down. Die funktionieren auch nicht. Brauche ich aber in ein paar Exotengatter. Mit dem Gatter komme ich jetzt nicht weiter, muss etwas anderes machen. Also Prinzip, wie gesagt, mit dem Tool ... Mäuschen ... so. Ich nehme mir ein Zell-File her, also eine Zellbeschreibung, schicke das durchs Popcorn durch und kriege hinten wieder eine erweiterte Zellschreibung rein. Ich kann auch mal ... Moment, das ist das Falsche. So eine Zellbeschreibung hier rüber nehmen. Da ist sie. Das geht irgendwie los, dass ich Kommentare erlaube, dass ich ein .cell habe, wie ich das Ding dann nenne. Ich hab ein .inputs drin, wo ich sozusagen die ganzen Eingangssignale auflisten kann. Outputs äquivalent. Clocks sogar, wenn ich Latches, Flipflops habe, brauche ich auch Clocks. Ich hab sogar da, damit ich weiß, wenn es zuende ist ein .end dabei. Und ich habe sozusagen die ganzen Transistoren eigentlich hier, so als Circuits dabei, wo ich sage: "Welchen Typ von Transistor hab ich? Einen PMOS, einen NMOS?" Ich sage, wie der Knoten heißt, der am git angeschlossen ist. Drain, Source, Balk und so weiter. Hier habe ich die Nummer drinne, der wievielte Transistor das schon beim Stacken ist. Also wenn ich es generiere, kriege ich sozusagen frei Haus geliefert, deswegen gleich mit reingeschrieben. Ich hab mir zum Scematic malen, das ich auch schön ein Schaltbild davon bekomme, auch gleich die Koordinaten reingeschrieben, weil es sehe ich ja auch, wenn ich es seriell mache, muss ich sozusagen nur die x-Achse ändern, wenn ich parallel machen muss, muss ich noch die y-Achse ändern. Das war sozusagen ein Beifang. Size ist so eine Geschichte. Da will ich die Größe vom Transistor mit reinschreiben. Da gibt es eine Methode, dass man die Transistoren so dimensioniert, dass halt den Kompromiss zwischen Schnell- und Power-sparen, also Energie-sparen machen. Gibts so eine Methode, die nennt sich Logical Effort. Das ist aber noch nicht so richtig implementiert. Wenn die Zelle funktioniert, wenn sie okay ist, dann gehe ich einmal drüber und rechne mir das aus. On-the-fly wird ein bisschen schwierig. So, aber haben wir nicht nur komplexe Gatter, wir haben ja auch Latches, also Speicherzellen, die ... Okay, da muss ich vielleicht nochmal sagen zur Benamung: im Deutschen werden solche Zellen auch gerne Flipflops genannt. Das halte ich aber sozusagen für inkorrekt. Wir haben hier Zellen, die zwar speichern, die aber Takt- Zustands-gesteuert sind, so wie es früher mal hieß: richtig, klares Deutsch: Takt- Zustandsgesteuert. Die Amerikaner sagen dazu Latch. Das heißt also, wenn wir zum Beispiel einen High-Pegel haben, am Clock oder einen Low-Pegel, dann ist das Ding transparent. Und wenn dann aber der andere Pegel angelegt wird, dann speichert er den Wert der vorher sozusagen während dieser transparenten Phase angelegen hat. Es gibt im Gegensatz dazu gibt es Flipflops, die sind sozusagen nicht Takt- Zustands-gesteuert, sondern Takt-Flanken- gesteuert. In dem Augenblick, wo wirklich die Flanke wird, da wird der Wert rein gelatcht. Im Prinzip ist es so, dass Flipflops nur zwei Latches hintereinander sind. Also wenn ich z.B. vorne als erste Stufe ein Low-aktives Latch habe und danach ein High aktives Latch, erreiche ich, dass bei einem Clock, der jetzt in einer Low-Phase ist, vorne, das transparent ist. Das würde dann beim Taktflankenwechsel, also bei der steigenden Flanke, zu machen, und hinten wäre es dafür transparent. Das ist sozusagen genau dieser Umschaltpunkt, die Flanke. Dann haben wir zum Beispiel ein posEdge, also eine steigende Flanke für ein Flip-Flop. Aber wie gesagt: Latches sind für mich Takt-Zustands-gesteuert und Flipflops sind Takt-Flanken-gesteuert. Das hier ist jetzt ein Latch. Ich weiß nicht, ob jemand irgendwie von euch ein bisschen damit klarkommt. Wir haben hier links zwei Inverter. Also da ganz vorne, kommt ein Signal rein, das hab ich mit X benannt. Das ist mein Clock, den invertiere ich einmal, kriege also ein 180 Grad phasengedrehtes Signal, und dann invertiere ich den nochmal. Dann komme ich auf um 360 Grad phasengedrehtes Signal. Warum? 360 ist eigentlich das gleiche, wie vorne dran. Aber ich habe den Effekt. Ich habe meinen Takt, also die ganzen Signale, die Transistoren, die dahinter von dem abhängig sind, erst einmal so etwas wie gepuffert. Ich habe sozusagen im Netzwerk, was von draußen reinkommt, nicht mehr so eine große Last, und ich habe damit den Effekt, dass sie sozusagen einen zweiphasigen Takt erreicht habe. Und diesen benutze ich denn bei den Transistoren hintendran zum Schalten. Und wenn man sich das jetzt ein bisschen anguckt. Hier diese Stufe da oben. Das ist ein Inverter, der kann aber Tristate erreichen. Das heißt also, wenn die Taktsignale, die Clock unten und oben, die Transistoren, wenn die gerade ungünstig stehen, dann ist es dieser Stufe egal, was vorne an dem D-Eingang, am Daten-Eingang für ein Signal anliegt. Er lässt es nicht durch, invertiert nicht. Treibe sozusagen ... wie soll ich es sagen .... Wenn der Clock richtig liegt, treibe ich das rein und hab aber von hinten die Rückführung drinne, die genau so einen Tristate-fähigen Inverter hat, der aber gegenphasig arbeitet. Das heißt also, die beiden, also der linke Inverter und der rechte Inverter treiben gleichzeitig einen Knoten, nämlich der von dem Inverter in der Mitte und hinter diesen Inverter in der Mitte da hab ich den Daten-Ausgang. Das ist die kleinste, stabilste Latch- Schaltung, die ich so kenne. Das ist jetzt sozusagen das Gleiche nochmal für Low- aktiv deswegen, deswegen da "Latch" mit dem "N" hintendran. Da hab ich sozusagen genau die gleiche Schaltung. Sieht genauso aus, nur dass jetzt die Clock-Signale andersherum angeschlossen sind gegenüber dem davor. So, um es ein bisschen komplizierter zu machen, habe ich jetzt mal ein Beispiel dabei. Da hab ich ein Latch, was High-aktiv ist, also mit positiver Flanke, ja positiven Level arbeitet, was ein Clock-enable hat: Ich kann also den Clock zulassen oder unterdrücken, und was noch nen asynchronen Reset drinnen hat. Und das Ganze ist, die Funktion ist so optimiert, dass ich wirklich die minimale Anzahl von Transistoren erreiche dabei. Ich hätte jetzt sagen können, ich nehme den Reset- Eingang, der muss jetzt eine andere Polarität haben. Hätte ich dafür wieder einen Inverter gebraucht, habe ich aber nicht. Also mein Reset ist da oben Entschuldigung mit P3 irgendwo so rechts oben in der Ecke. Er ist in dem Fall wirklich High-Aktiv. Wenn ich einen Set- Eingang nehme, das Gegenteil dazu, dann hätte ich ihn Low-Aktiv und das Clock- Enable-Signal, was ich vorne dran habe, das richtet sich auch darum wieder, ob ich jetzt ein High-aktives oder ein Low- aktives Clock Signal haben möchte. Moment, das war zurück. Okay, das ist noch ein Punkt, der ist offen. Zu viele Baustellen. Also Ich will eigentlich von einem Scematic so wie ihr das gerade gesehen habt für den Latch, auch wieder zu meiner Zellbeschreibung kommen. Ich habe für das Scematic allerdings ein OpenSource-Tool benutzt, was eigentlich aus dem PCB- Bereich kommt, GNU-EDA. So aus der Ecke. Und dafür gibt es die Möglichkeit, auch Netzlistern, also auch einen Exporter zu schreiben. Ich habe mir die Mühe noch nicht gemacht. Aber das werde ich machen auf alle Fälle für alle Zellen, die ich sozusagen händisch machen muss, also die nicht durch Popcorn generiert worden sind. Okay. Popcorn, Popcorn. Wenn wir jetzt hier mal ganz schnell das da machen. Also, wenn wir mal in den Katalog reingucken. Da sind jetzt hier. Oh, da ist schon was drin. Machen wir mal leer. Okay, da haben wir so ein paar Makefiles drinnen. Also Katalog ist ein Verzeichnis wo ich die ganzen Zellbeschreibungen drinnen sammle. Ich hab ein GNUmakefilel, das ist mein großes, da sind die Hauptfunktionalitäten drin. Und ich hab dann so ein paar drinnen mit stacked2, stacked3 und so weiter, die betreffen die Anzahl der gestackten Transistoren, also der gestapelten Transistoren die ich zulasse. Alle Zellen, die ich z.B. maximal drei gestackte Transistoren haben, wären in dem Makefile mit dem stacked3 drinnen. Es hat den Vorteil, wenn ich jetzt in der Konfiguration, dazu kommen wir hoffentlich noch, wenn mir die Zeit nicht wegläuft, angebe, ich habe so und so viel als Limit für meinen Transistor, dass er mir das entsprechende Makefile als höchstes Makefile nimmt, alle anderen wären sozusagen inkludiert. OK. "make catalog" . Kann man sich sozusagenen Katalog machen. Zieht man Popcorn mal ran. Machen wir das mal schnell. So weit läuft er leider noch nicht. So und da bricht das schon ab. Das ist in dem Fall deshalb, weil meine Zellen noch nicht durchgängig sind. Ich habe leider in meinem Makefile Zellen drin, die er noch nicht generieren kann. Da habe ich noch die Paperwork, muss ich wirklich mal von vorne bis hinten alles durch. Aber im Augenblick ist für mich wichtiger, dass es läuft, als es jetzt an der Stelle erst mal vorstellen. Aber es würde genauso ablaufen. Ich habe sozusagen die ganzen Ableitungen im Makefile drinnen. Ich sage "make catalog" und er generiert mir alle Zellen. Alle kombinatorischen Zellen so. Und wie gesagt, dass also die Warnung ist ernst gemeint. Wenn jemand beabsichtigt, selber mal so eine Zellbibliothek zu machen oder zu generieren, er sollte wissen, was er tut, weil der Effekt auf eure Schaltung oder auf dem Chip ist einfach mal desaströs, wenn das schief geht. OK. Makefiles bei mir haben immer die Möglichkeiten einen Helpscreen drinnen. Kann ich auch mal schnell vorführen. Also wenn ich jetzt sage "make", dann krieg ich bei mir einen Helpscreen. In dem Fall ist es jetzt das Globale, also ich hab eine Möglichkeiten, eine Distribution zu machen. Da so am Ende alles rein wenn es fertig ist. "make tools" hatte ich ja schon mal gemacht, "make catalog" auch schon. Ich kann aber auch die Dokumentation dafür generieren. Also für die ganzen Zellen, die ich oder die Popcorn generiert und ich selber auch händisch gemalt habe. Dafür gibt es dann sozusagen ein Datenblatt, wo dann drin steht, wie das Schaltbild aussieht, wie das Scematic aussieht. Welche Files ich alle dazu gefunden habe, oder das Tool dazu gefunden hat, also Layoutfiles, Simulationsfiles und so weiter. Das soll alles rein. Okay, jetzt wird's nochmal ein bisschen blutig. Es gibt Mosis-Rules. Mosis ist ein amerikanisches Universitätsprogramm, vergleichbar mit dem europäischen Europractice. Die bieten so ein Service an für Universitäten, dass man sagen kann, ich hab hier einen Chip, und ich möchte irgendwie 20 oder 30 Exemplare dafür haben, dann machen die so ein Multi- Project-Wafer wo sozusagen mehrere Projekte drauf sind. Schieben dann mal so ein Schiffchen mit 20 30 Wafern durch die Fab und das wars. Aber die haben auch mal definiert Designrules. Also fürs Layout die Abstände definiert, die Größenordnungen für Metal, für Poly, für alles mögliche, und diese Rules sind so gemacht, dass sie auf möglichst viele Technologien von ihren Klienten oder den Fabs die da hinten dranhängen auch funktionieren. Das ist so der kleinste gemeinsame Nenner. Hat aber den Vorteil, dass sie wirklich recht robust sind, wenn man danach designed. Dann hat man vielleicht nicht irgendwie das allerletzte rausgekitzelt aus der Technologie, die vielleicht eine Fab anbietet oder irgendwelche Spezialitäten nicht benutzt. Aber man kann sozusagen damit gut arbeiten. Und diese Rules sind als PDF zum runterladen, kann man sich angucken. Gut gemacht, okay. Die machen also die Rules dafür, die sind so in drei Stufen definiert. SCMOS wie scalable CMOS. Das ist so, ja CMOS, die haben, angefangen mit zwei, drei Mikrons oder sowas. Dann gab es dieses Sub-Mikron. Da so über den Daumen hätte ich gesagt, alles so kleiner gleich 0,8 µ. Noch ein Stückchen kleiner ist dann Deep-sub-micron. Also alles wo dann irgendwie schon ganz komische Effekte dazu kommen, also 0,35 oder so etwas. Also 0,35µ muss man umrechnen, das sind 350 Nanometer. Klingt für heutzutage riesig, aber es ist so. Ich habe jetzt noch bei diesen Rules, die benutze ich ja in meinem Tool, noch eine vierte Möglichkeit eingebaut, wo ich sage, ich möchte es ganz gerne, dass die Leute in der Lage sind, ein extra Rulefile rein zu laden, also mit diesen ganzen Angaben, was von diesen drei Schemen die da im PDF sind, abweicht. Da wollte ich auch noch jetzt mal kurz zeigen, wie dieses aussieht. Schreiben sollte man können. Das ist erst mal der Header. Das ist in Sceme geschrieben. Also nicht erschrecken. Da sind die ganzen Rules, die es so gibt drinnen mit den Nummern, so wie sie im PDF sind. Da habe ich mir einen kleinen Vektor definiert, wo ich die vier Werte reinschreibe. Und das ist jetzt. Moment, wo geht's los. Das ist mal so ein bisschen so ein Anfang. Also dass ich auch ASCII-Art reingemacht hat, um Rules zu erklären, um welche Abstände es geht. In dem Fall haben wir die Rule 1.1, und die sagt von wegen bei einem nwell, die kann halt eine bestimmte Breite, Länge haben, und die muss halt irgendwie eingehalten werden. Da steht ja Minimum nwell pwell Rule. Und so zieht sich das halt irgendwie das ganze Dokument runter. Tabelle dazu, die sozusagen einen von den vier Werten herauspickt. Je nachdem, mit welchem Parameter ich reinkomme. Nächste Rule, 1.2, da ist dann bei der nwell oder pwell der Abstand dazwischen einzuhalten und so weiter. Die Rules benutze ich für das Layouttool. Ok, und jetzt wollen wir hier raus. Ahm Ups. Also die Rules sind alle in Lambda definiert, das ist noch ein wichtiger Punkt. Oh, fünf Minuten, ok. Lambda meint die Hälfte der Featuresize, also wenn jemand sagt, eine Technologie mit einem Mikron, dann ist das ein Mikron die Featuresize. Lambda meint also sozusagen die Hälfte davon. Und in der Größenordnung sind all diese Regeln angegeben. Die geben also sozusagen nicht absolute Werte an, von wegen, wenn ich jetzt 0.8µ hab, müssen das so und so viele Mykrometer sein, sondern sie geben das in Lambda an und sagen: drei Lambda, zwei Lambda sind mehr oder weniger alles ganze Integerwerte. Und es hat halt den Vorteil, dass man über mehrere Generationen hinweg runterskalieren kann, so wie es da in dem Punkt auch kam. Von wegen erst mal scaleable CMOS, dann gehts ins Submikron und dann Deep-Submikron. Das funktioniert, aber irgendwann funkioniert es nicht mehr, deswegen haben sie die neuen Stufen eingeführt, in denen sozusagen die Regeln wieder ein bisschen breiter sind. Okay, jetzt haben wir hier so eine Zelle. Ist auch ein Punkt, den ich erklären muss. Das ist eine 6-Track-Zelle. Wenn man sich da die blauen Streifen vorstellt, die so horizontal drüber laufen, das ist Metal, also Metall eins. Das habe ich einmal ganz unten, da ist es grau und einmal ganz oben. VDD. Also Betriebsspannung. Die Dinger haben laut Mosis-Rules, sieht man an den Kästchen auch, eine Breite von 4 Lambda. Das ist sozusagen der Minimalabstand für das Metall, und in den Mosis-Rules steht, auch drinnen, wie groß der Abstand zum nächsten Metal sein muss, also zu dem gleichen wieder Metall. Das sind auch wieder 4 Lambda, wenn man sich das so vorstellt, vier Lambda, die Leitung selber, vier Lambda Lücke, nächste Metall - dann kommt man auf ein Raster als von 8 Lambda, und dieses Raster wird auch beim Routing benutzt. Also wenn man über die Zellen hinweg routen will, weil sich das halt so schön durchzieht, also nicht nur Metal eins und dann zwei und drei und so weiter. Und das nennen die halt so Tracks, und es hat sich eingebürgert in der Branche, dass die Zellhöhe, also wie hoch so eine Zelle ist, in Anzahl dieser Tracks angegeben wird. Das hier ist also ein Beispiel für 6-Track, das ist so eine kleine Zelle. Funktioniert bei diesem NAND immer noch ganz gut. Wenn ich jetzt aber so eine Monster Komplexzellen hatte, wie am Anfang irgendwie mal gezeigt, dann funktioniert das nicht mehr. Dann muss es größer werden. Okay, das wäre jetzt mal mit sieben Tracks. Man sieht das Raster wird schon ein bisschen kleiner, und das gleiche hier nochmal mit zehn. Jetzt hat man schon den Effekt: Für das NAND2 ist zehn Tracks schon ziemlich groß, nämlich ziemlich viel Luft in der Mitte. Für die Komplexgatter, die irgendwie reinkommen, da wird es vielleicht doch schon wieder ein bisschen knapper. Also man muss sozusagen an der Stelle immer die Balance finden. Wie groß macht man die Zellen - Man will sie ja nicht zu groß machen, wenn man sich den Platz verschenkt - Aber man will auch Funktionalität drin haben. Okay, so wie sollte man eigentlich mit dem Ding rum spielen? Ich habe... wo ist es... Da. Also wenn ich das jetzt hier mache. Im Templates hab ich ein toml-File drinnen. Und das ist dazu gedacht, die Konfiguration zu machen. Also dass ich wirklich die Werte reinschreiben kann. Da sieht man wieder das Limit vier. Also wieviel Transistoren ich stacken möchte, kann ich angeben. Buffern, ab wann ich sozusagen mit dem Buffer hinten anfangen möchte. In dem Fall ist auch erst mal vier drinnen. Bei den Zellen ist es so, dass sie sagen, wie hoch das ist. Mein Beispielfile, was ich habe. Ich sage 11 Tracks. Ups. Jetzt ist was weg. Dann Terminals, also auf welcher Ebene mache ich die Übergabe zum Routing? Also was ist sozusagen für die Zelle die Ein- und Ausgänge? Wo soll der Router ran gehen? In dem Fall sage ich, es soll bitte schön auf Metal II sein. Ja, Connectivity, Restricted. Es gibt auch solche Sachen, wo man sagt, man darf an die Zelle nur waagerecht ran, oder man darf nur senkrecht ran. Oder man lässt es sozusagen offen. Ich habe gesagt erst mal für mein Beispiel unrestricted. Also ich habe keine Vorgaben gemacht, ob nur waagerecht oder nur senkrecht. Dann kommen hier noch so Transistorgeschichten rein. Der Transistor, Featursize, meistens als 'L' bezeichnet, ist sozusagen die Länge und die Weite dazu, also wie breit der Kanal ist, also nicht, wie lang, sondern wie breit. Und dieses Verhältnis dazwischen wird immer gern als Ratio angegeben. Und laut Mosis-Rules ist das Kleinste, was wir sozusagen nutzen können dafür 1,5. Das heißt also, wenn ich eine Featursize habe von einem Mikron, ist mein L das Lambda 2 und die Weite ist dazu 3. Jetzt kommt noch ein Punkt Gamma dazu. Ok, versuchen wir ganz schnell zu erklären. Die Ladungsträgerbeweglichkeit für P-Kanal und N-Kanal-Transistoren ist unterschiedlich. Bei N-Kanal bewegen sich die Elektronen. Und bei P-Kanal bewegt sich ja sozusagen gar nichts. Und dann wandern die Löcher mit, wenn sich die Elektronen drüber bewegen. Ganz grob ausgedrückt. Um das aber auszugleichen in der Geschwindigkeit, man will ja eigentlich sozusagen, dass P-Kanal und N-Kanal etwa gleich sind, weil man sonst unterschiedliche Verzögerungszeiten hat für Schaltvorgänge, fängt man damit an, den P-Kanaltransistor größer zu machen. Und wie viel im Verhältnis zu dem N-Kanal er größer wird, das wird ganz gerne als Gamma angegeben. Ich habe hier erst einmal zwei reingeschrieben. Das ist so ein üblicher Schätzwert, ist nicht ideal, ist nicht ausbalanciert, ist nicht perfekt. Das hängt nämlich davon ab, wie gut P-Kanal und N-Kanal dotiert sind und so weiter. Es geht auch bis zu drei. Wenn ich zum Beispiel irgendwas haben möchte, was Seitenkanalangriffen standhält, sozusagen den Peak nicht sieht, dann sollte man den Wert ausbalancieren. Ok. Sizing ist die Geschichte, ja. Wir werden immer knapper hier. Ja, ok. Also da will ich hin zeigt zur Präsentation Bin ich noch ein bisschen weg von. Irgendwann, also von wegen... ihr nehmt das TOML-File her... Beispiel... konfiguriert euch das, passt euch das an, wie er es braucht. Ihr drückt einfach "make dist", also wie "distribution". Ihr kriegt den ganzen Sack voll, kann eine ganze Weile dauern. Aber ihr kriegt danach Schematics, ihr kriegt Layouts, kriegt die Dokumentation und habt sozusagen wirklich was "ready to use" für yosys oder für die ganzen anderen Tools, ist alles dabei. Und das Ganze soll Open Source sein. Steht ja jetzt schon bei GitHub So, jetzt Q & A. Herald: Dann bitte ich jetzt einmal um einen herzlichen Applaus für Chipforge. Applaus H: Und wir beginnen mit der Fragerunde. Wir haben drei Mikrofone hier im Saal. Wer eine Frage hat, einfach zum Mikrofon gehen. Es gibt schon eine Frage aus dem Internet. Signal Angel: Hallo. Die Frage aus dem Internet lautet: Wie viel würde es kosten, einen Quadratmillimeter Platz auf so einem Die zu kaufen? Für irgendeinen Knoten, wo du den Preis gerade weißt. Wie lange wird es dauern? C: Okay. Also unser Background ist ja, wir wollen eigentlich ein freies Silizium machen, also wirklich auch diesen Prozess freilegen. Das ist das, was Leviathan in Hongkong da vorantreibt. Da ist es so, dieser Quadratmillimeter wäre einfach zu haben. Also die Wafer-Kosten wären irgendwie so bei 100 Hongkong-Dollar, wenn ich das richtig glaub ich in Erinnerung habe, also durch 10, wären das irgendwie 10 Dollar für einen Wafer, 4 Zoll, relativ klein, und es würden noch die Maskenkosten dazu kommen. Da müsste ich jetzt lügen. Es sind aber auch irgendwie nur ein paar Tausend oder so. Fünf oder sechs Tausend, so in der Größenordnung. Vielleicht 10.000 Dollar. Der Rest ist eigene Manpower im Labor. SA: Danke. C: Und du kannst dir so viele Chips davon machen wie du lustig bist, wenn wir so weit sind. Also wir würden ganz gerne zurück ins Labor, aber dafür brauchen wir halt die Gebühr für den Reinraum. H: Danke für die Antwort. Die nächste Frage. Mikrofon 2, bitte! Mikrofon 2: So wie das jetzt aussieht, könnt ihr ja die Layouts für eure Standardzellen oder wollt ihr zumindest mal, automatisch generieren lassen zu gewissen Graden. C: Ja M: Könnt ihr das dann auch direkt einem Tool beibringen, dass es aus einer synthetisierten Netzliste schon direkt versucht so, ich sage mal, Makro-Zellen zu synthetisieren. Das wird irgendwann nicht mehr gehen, aber für kleinere könnte ich mir das vorstellen. Kannst du da was dazu sagen? C: Ja. Der Weg wäre ein bisschen umständlich. Eigentlich ist es so, die Tools wie yosys, also die sozusagen, die Synthese machen, die sind ja immer extrem davon abhängig, wie gut die Bibliothek ist, die yosys zur Verfügung steht. Und wenn wir aber eine Bibliothek haben, die relativ begrenzt und klein ist, dann kann yosys nur entsprechend Ergebnisse liefern. Wenn wir allerdings in der Lage sind, hier mit diesem Popcorn und so weiter die Bibliothek zu liefern, die wirklich mehr oder weniger allumfassend ist, dann hat yosys auch viel viel viel mehr Möglichkeiten zu optimieren, sozusagen in Richtung Delay, in Richtung Energieaufnahme und so weiter. Also wir geben sozusagen dem Tool dann viel, viel mehr Möglichkeiten. Es kann natürlich sein, dass es denn ein bisschen länger braucht, einfach weil es sozusagen den ganzen Suchraum durchgehen muss. Aber die Ergebnisse sind einfach mal besser. H: Okay. Als nächstes am Mikrofon 1, bitte! Mikrofon 1: Okay, also das sieht ja schon mal ganz gut aus, aber hast du schon Transmission-Gates, Analog-Multiplexer und Schmidt-Trigger angeguckt oder machst du die dann von Hand? C: Okay, also die Sachen generiere ich nicht mit dem Popcorn. Die Multiplexer mache ich händisch. Ja, Multiplexe sind auch wieder in verschiedenen Stack-Zellen drinnen. Multiplexer, also diese Transmission-Gates in den Multiplexern, die haben aber einen ganz hässlichen Nachteil. Die gehen wieder in meine Bilanz rein mit den Anzahl gestackten Transistoren. Weil sie ja sozusagen nur diesen Pfad drinnen haben und kein, wie soll ich sagen, Renewing, oder Refresh vom Pegel machen. Also das Zeug mache ich auf alle Fälle von Hand, ja. Und Schmidt- Trigger werden für mich in die Standardzellenbibliothek nicht reinkommen. Die kommen in die IO Zellen, weil da brauche ich sie. H: Alles klar. Dann war noch eine Frage am Mikrofon 2. Mikrofon2: Jo, servus! Die Frage ist, weil du ja gemeint hast, ihr wollt schon auch bisschen so den Prozess öffnen, opensourcen. Wenn man jetzt ein bisschen vom Hintergrund, von der Chemie her bisschen weiß, was da an Chemikalien in die Hand zu nehmen ist. Für wie realistisch hältst du es, dass Hobbyisten sowas sicher handhaben können? Und wie sind eure Pläne in die Richtung? Wie wollt ihr das handhaben? Also, wie wollt ihr es den Leuten näher bringen, ohne sie dabei umzubringen, um es mal etwas überspitzt zu sagen. C: Ja, das ist ein berechtigter Einwand. Man sollte wissen, was man tut. Man kann sich damit mit Chemikalien auch mal ganz schnell seine Klamotten durchbrennen. Wie auch immer, hat David schon ausprobiert. Nein, also es gibt Leute, die machen so was in der Küche, die Jerry Elzwood. Ich hoffe, ich habe es so richtig ausgesprochen. Und die gute Frau mit dem C64 Hack und sowas. Gibt es bei YouTube- Videos wie die sozusagen so'n Furnace, also so ein Ofen mit Silizium und sowas in Ihrer Küche macht und die spielt da mit dampfender Floursäure oder irgendie sowas. Sieht nicht gesund aus, aber Sie macht es. Angucken. Einfach YouTube gucken. Die Videos gibt's. Mikrofon 2: Ich kenne sie. Ich kann als Chemiker dazu sagen: In Deutschland steht da dafür die Polizei vor der Tür. Chipsforge kichert H: Alles klar. Dann haben wir noch ein paar Fragen am Mikrofon Drei. Mikrofon 3: Ja, also du hast ja schön gezeigt, was du alles für Standardzellen implementierst. Wie sieht das aus mit dem Timing und der Simulation für die ganze Synthese und dann das place and route, ist ja auch eine wichtige Rolle. C: Der Punkt kam jetzt ein bisschen in den letzten Minuten zu kurz. Wenn wir das Layout haben, dann machen wir mit diesem Magic, also mit diesem Layout-Tool, das wir benutzten, eine Parameter-Extraktion. Wir bekommen also aus diesem Layout wieder ein Spice-Modell zurück mit den parasitären Werten, also für Kapazität, für Widerstand und so weiter. Das simulieren wir und ich habe für die Latches und so sowas habe ich in meiner Spice-Simulation, in meiner Testbench, rudimentär solche Sachen schon implementiert. Dass ich wirklich sage bei 20 prozent von der Flanke mess ich bis zu 80 prozent an der Flanke oder sowas. Also dass ich wirklich dieses Timing automatisch im Spice ausmesse. H: Ja, die nächste Frage an Mikrofon 3 Mikrofon 3: Dankeschön! Habt ihr schon Simulationsmodelle von euren Transistoren, die ihr dann in Spice nutzen könnt? Weil das es ja tatsächlich bisher das war ja recht viel für viele Technologien deswegen auch zum Beispiel dem Mosis-Standard Ding. Aber gibts schon Ergebnisse von Simulationensparametern, von den Transistoren, die dann gefertigt werden? C: Also ist es so. Die Modelle z.B. für den Transistor BSIM3, BSIM4 und so weiter. Die sind ja standardisiert. Es geht nur noch darum, welche Werte jetzt, da in dieses Modell reingefüttert werden. Also für die Kapazitäten am Gate und so weiter. Die Größe ist klar, aber wie die Dotierung aussieht. Diese Sachen, also diese Werte, die wir da rein füttern müssen, die hängen eigentlich alle an unserem Testwafer dran, also den wir vor einem Jahr vorgestellt haben. Da haben wir nämlich exakt diese Strukturen drauf, um solche Sachen auszumessen. Das heißt also, wenn wir den Wafer sozusagen bis zum Ende prozessiert haben und jetzt vielleicht auch im nächsten Reinraum dann nochmal gemacht haben, dann haben wir wirklich diese Werte da. Dann können wir die in Spice reinfüttern. Das ist eine relativ einfache Sache, und dann haben wir auch die korrekten Werte dafür. M3: Gut, Dankeschön. H: Und noch eine Frage an Mikrofon 3, bitte. M3: Ich würde gerne wissen: Wie groß ist denn so ein Transistor und sind die nicht ziemlich langsam dann? C: OK, wir machen ja ... also fangen erst mal an mit einem Mikron. Ein Mikron, das heißt also diese Featuresize oder die Länge vom Kanal zwischen Drain und Source ist ein Mykro. Das heißt also 2 hoch minus sechs Meter. Ja? Doch. Milli - Tausend. Ja. Dazu, wie gesagt das Ratio, also diese Weite dazu, wäre dann sozusagen den 1,5 Mikron. Also das ist die Transistorgröße ... ist relativ groß. Wir haben aber vom Equipment in Hongkong, oder hatten die Möglichkeit, also das, wie wir uns das angeguckt ... das Equipment ging runter bis 500 Nanometer. Das heißt also, wenn unsere Technologie funktioniert, können wir relativ einfach sozusagen den 0,7 oder 0,8 mikron Node auslassen und gleich nach 0,5 gehen. Das gab das Equipment her, also die Maschinen, Fotolitografie, die dazu hängen. Wenn wir sozusagen Equipment hätten, Zugriff darauf, was noch kleiner geht, dann müssten wir vielleicht mal wieder ein bisschen experimentieren, also wieder Testwafer dafür machen. Aber dann können wir sozusagen auch runterskalieren. Aber wir sind da noch, muss ich auch zugeben, wir sind da noch in einem Bereich, der optisch sichtbar ist. Also AB-Limit, das ist so bei 240, 250 Nanometern, also die Wellenlänge vom Licht, was man optisch noch sehen kann. Das heißt also, unsere Transistoren sieht man noch im optischen Mikroskop. Das, was sozusagen jetzt irgendwie so die aktuellen Prozessoren sind, die irgendwie, weiß ich nicht, bei 14, 20 Nanometern oder sowas sind. Die sind optisch nicht mehr sichtbar. Aber optisch sichtbar heißt auch für uns, man kann sozusagen wirklich mit einer Kamera, USB-Kamera oder sowas wie andere Leute schon gemacht haben durchs Mikroskop durchfotografieren, den ganzen Chip aufnehmen und ein Reverse Engineering draufmachen, das heißt, also auch nachträglich feststellen, ob eine Manipulation an unserem Chip stattgefunden hat. Das betrachten wir in dem Fall sozusagen als Sicherheitsfeature, das man noch sehen kann. H: Dann gibt es noch eine letzte Frage aus dem Internet. SA: Die Frage aus dem Internet lautet, ob ihr mal versucht hat, Standardzellen für die Transistoren eines kommerziellen Fertigers damit zu erzeugen und ob das funktioniert und was dagegen spricht. C: Es würde funktionieren. Theoretisch ja. Was dagegen spricht, ist ein gewisses NDA. Die Hersteller geben sozusagen ungern die Informationen raus. Wir müssten sozusagen ein NDA unterschreiben, um von denen die physikalischen Angaben zu den ganzen Layern zu bekommen. Welche physikalischen Eigenschaften haben und so weiter. Also die sogenannte PDK, vielleicht habt ihr da mal was von gehört. Das steht aber unter 'nem NDA. Die Zellen, die wir danach generieren, die würden sozusagen auch automatisch wieder unter Verschluss bleiben müssen. Es würde gehen. Also man könnte, also sagen wir mal andersrum, ein kommerzieller Hersteller könnte am Ende diese Tools, die wir hier schreiben, benutzen, um sich seine eigenen Zellen zu generieren. Ja. In die Richtung geht's. Aber es ist machbar. H: Wenn ich keine weiteren Fragen mehr sehe, dann bitte ich nochmal um eine herzliche Runde Applaus für Chipforge. Applaus 36C3 Outro Untertitel erstellt von c3subtitles.de im Jahr 2020. Mach mit und hilf uns!