*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!