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!