Anleitung Laborpraktikum VLSI-Technik: Versuch 3 / Verhalten des „realen IC“ Inhalt 1. Einleitung ........................................................................................................................................................................ 1 2. Erstellen eines Inverters ................................................................................................................................................. 1 3. Erstellen eines Blockes / Modules ................................................................................................................................ 14 4. Bau eines komplexen Gatters: Buffer ........................................................................................................................... 17 1. Einleitung Diese Anleitung soll einen Einblick in die Arbeit mit dem kostenlosen Tool LTSpice (http://www.linear.com/designtools/software/) geben. Ziel ist es einen Inverter zu bauen, um diesen anschließend als Modul/Komplexgatter wiederverwenden zu können. Für den Bau eines Buffers wird dann der definierte Inverter genutzt. Zusätzlich wird erläutert wie man Spannungen und den Stromaufnahme der Schaltung ermitteln kann. Darüber hinaus wird dargestellt wie man einzelne Parameter definiert und dynamisch verändern kann, ohne diese dabei statisch festzulegen. Die Oberfläche ist in Abbildung 1: LTSpice IV zu sehen. Abbildung 1: LTSpice IV 2. Erstellen eines Inverters Zuerst öffnen Sie das Programm LTSpice und wählen Sie, falls noch kein leeres Schematic erstellt wurde, „FileNew Schematic“. Ein Inverter in CMOS besteht aus einem PMOS und einem NMOS Transistor. Hierzu klicken Sie auf das „Component“ Symbol in der oberen Leiste. Nun sollte das Menu aus Abbildung 2: Komponenten aufgehen. Wählen Sie zuerst die Komponente NMOS4 aus und fügen Sie dieses per Linksklick dem Schematic hinzu. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 2: Komponenten Anschließend wählen Sie die PMOS4 Komponente. Nun sollte dasselbe wie in Abbildung 3: NMOS4 und PMOS4 Komponente zu sehen sein. Abbildung 3: NMOS4 und PMOS4 Komponente M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Nun müssen die Transistoren mit den eigenen Transistoren aus der Bibliothek verbunden werden. Hierzu wird direkt der Komponentenname verwendet. Klicken Sie hierzu rechts auf das Wort NMOS. Jetzt sollte ein Menü, wie in Abbildung 4: Verbinden der Transistoren und an die Bibliothek binden aufgehen. Übernehmen Sie die entsprechenden Werte („NMOS_VTG L=ln W=wn“). Das gleiche führen Sie für den PMOS Transistor durch und benennen diesen um („PMOS_VTG L=lp W=wp“). Abbildung 4: Verbinden der Transistoren und an die Bibliothek binden M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Der Komponentenname entspricht der Modelbezeichnung des Transistors in der Bibliothek selbst. Wir verwenden die Modelle NMOS_VTG und PMOS_VTG, welche die Simulationsmodelle mit physikalischer Beschreibung für eine 45nmTechnologie enthalten. Zusätzlich werden direkt die Längen und Weiten der Transistoren im Namen mit angegeben. Für die Längen und Weitenangabe wurden die Parameter wn, wp, ln und lp gewählt. Zusätzlich wurden die Transistoren bereits verbunden. Das Ergebnis ist in Abbildung 5: Benennung der Transistoren mit Parametern zu sehen. Abbildung 5: Benennung der Transistoren mit Parametern Zusätzlich müssen die Parameter definiert werden. Dies erfolgt mittels Spice Direktiven. Hierzu klicken Sie in der oberen Toolbar das Symbol „.op“. Spice Direktiven stellen hierbei direkte Kommandos direkt an den Spice Simulator dar und können in der Netzliste nachvollzogen werden. Diese Direktiven werden im Schematic als Textitem hinzugefügt. Zusätzlich wird der Ausgang mit einem mit der Masse verbundenen Kondensator belastet, was eine Last simulieren soll. Der NMOS_VTG Transistor wird ebenfalls geerdet. Das Ergebnis ist in Abbildung 6: Erdung und Last des Inverters zu sehen. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 6: Erdung und Last des Inverters M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Als nächstes werden die Versorgungspannung und der Eingangswert des Inverters durch zwei Spannungsquellen wiedergegeben. Das Einfügen der Spannungsquellen erfolgt wieder über das „Componenten“ Symbol. Siehe Abbildung 7: Einfügen einer Spannungsquelle. Abbildung 7: Einfügen einer Spannungsquelle Eine Spannungsquelle versorgt die Schaltung mit einer 1 V DC Spannung. Die zweite Spannungsquelle soll eine AC Spannung erzeugen. Um dies zu erreich klicken Sie bei der Spannungsquelle rechts auf den unteren Wert und geben Sie dort „1“ an. Bei der zweiten Quelle geben Sie statt „1“ folgenden Befehl an: „PULSE(0 1 0 20P 20P 4.98N 10N)“. Was AC Spannung mit einer Periode von 10 ns (100MHz) erzeugt mit einer steigenden und fallenden Flanke von 20 ps. Das Ergebnis ist in Abbildung 8: Definieren der Spannungsquellen zu sehen. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 8: Definieren der Spannungsquellen Nun ist die Schaltung Komplett. Drücken Sie nun in der oberen Leiste das „Run“ Symbol. Nun geht ein Fenster auf mit der Simulationsbeschreibung. Geben Sie hier im unteren freien Textfeld unter „Syntax“ Folgendes an: „.tran 0.05p 30n“. Dies bewirkt eine Simulationsdauer von 30 ns bei einer Auflösung von 0.05 ps. Siehe Abbildung 9: Simulationsbeschreibung. Abbildung 9: Simulationsbeschreibung M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Beim Drücken auf OK wird nun ein Fehler, dass der Parameter C nicht verwertbar ist. Es fehlt ein Wert für die Lastkapazität. Klicken Sie rechts auf „C“ und setzen Sie den Wert auf 1f, was einem Femto Farad entspricht. In Abbildung 10: CMOS Inverter ist das finale Layout noch einmal dargestellt. Abbildung 10: CMOS Inverter Drücken Sie nun erneut das „Run“ Symbol. Es geht ein zusätzliches Fenster auf, in dem man sich die Spannungen und Ströme anzeigen lassen kann. Um eine Spannung anzuzeigen machen Sie einen Linksklick auf die entsprechenden Stellen im Schematic (siehe Abbildung 11: Spannung messen). Den Strom kann man sich direkt anzeigen lassen, indem man zusätzlich die „Alt“-Taste drückt. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 11: Spannung messen Ein Wertepaar (z.B. Spannungswert und Zeit) kann man direkt ablesen, indem man im Diagramm auf die entsprechende Stelle geht. Die Werte werden dann direkt in der unteren linken Ecke angezeigt (Siehe Abbildung 12: Werte ablesen). M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 12: Werte ablesen Um jedoch den Strom über eine Zeit zu messen ist es sinnvoll den Wert zu akkumulieren. Dazu setzen wir eine zweite Spannungsquelle nach der Versorgungsspannung ein, die eine Spannung von 0 Volt erzeugt. Diese Spannungsquelle nennen wir VStrommessung. Mit der Spice Direktive „.meas Strom1 avg i(VStrommessung) from=1n to=10n“ geben wir an, dass wir den Strom von der 1 ns bis 10 ns messen wollen. Die beschriebene Schaltung ist in Abbildung 13: Strommessung zu sehen. Der gemessene Strom wird in der „log“-Datei gespeichert. Diese kann man aufrufen indem man „ViewSpice Error Log“ (siehe Abbildung 14: Gemessenen Stromwert anzeigen) auswählt. Hier ist der Strom1 mit gemessenen Wert angegeben. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 13: Strommessung Abbildung 14: Gemessenen Stromwert anzeigen M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Die Funktionalität des Inverters ist in Abbildung 15: Inverter Spannungen dargestellt. In Blau ist der Eingangswert zu sehen. Grün ist der Ausgangswert des Inverters. Abbildung 15: Inverter Spannungen Diese Werte gelten aber nur für eine Transistorgröße. Es ist oft sinnvoll bestimmte Werte dynamisch ändern zu lassen. Hierzu werden die Parameter wn und wp variabel definiert mit den folgenden abgeänderten Spice Direktiven: „.param wp= ‚wn*2‘“ und „.step param wn 20n 100n 10n“ (sieheAbbildung 16: Wn Parameter dynamisch setzen). Dies bedeutet, dass Wn von 20 nm bis 100 nm in 10 nm Schritten variiert wird. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 16: Wn Parameter dynamisch setzen Als Ergebnis bekommen Sie nun mehrere Spannungskurven. Es gibt genau eine Spannungskurve pro Wn Wert (siehe Abbildung 17: Plot verschiedene Wn's). Abbildung 17: Plot verschiedene Wn's M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik 3. Erstellen eines Blockes / Modules Nun haben wir einen Inverter aus Transistoren gebaut. Oft ist es aber nötig die entworfene Schaltung als eigenes Symbol und dahinterstehenden Modul zu gestalten. Hierzu müssen zuerst alle Stromquellen entfernt werden und alle Spice Direktiven. Das Ergebnis ist in Abbildung 18: Inverter als Subcircuit erstellen zu sehen. Abbildung 18: Inverter als Subcircuit erstellen Alle Netze die nach außen sichtbar sein sollen müssen Label erhalten. Dies geschieht durch Klicken des Symboles „Label Net“ in der oberen Leiste. Nun gibt man einem Netz einen Namen und, ob es ein Input, Output oder Bidirektionaler Port ist (siehe Abbildung 19: Die Netze benennen). Abbildung 19: Die Netze benennen M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Die komplette Bezeichnung der Netze ist in Abbildung 20: Komplette Beschreibung der Netze zu sehen. Abbildung 20: Komplette Beschreibung der Netze Die Bezeichnung der Label ist hierbei besonders wichtig. Diese sollten eindeutige Namen haben. Die Schaltung ist nun als „Subcurcuit“ definiert und in der Datei „Inverter_Block_IMD.asc“ gespeichert. Die Datei wird nun auf der der eingebundenen Festplatte <GStud*> gespeichert. Erstellt hierzu einen neuen Ordner „LTSPICE_IMD“. Alle eure Dateien werden nun im Pfad <GStud*\LTSPICE_IMD> gespeichert. Was noch fehlt ist ein Symbol. Hierzu gehen Sie auf „FileNew Symbol“. Es öffnet sich eine leere Zeichenfläche. Speichern Sie zunächst die Datei ab. Der Name vor der Endung muss denselben Namen haben wie der der Schaltung, was in diesem Fall „Inverter_Block_IMD.asy“ ergibt. Auch diese Datei wird im Ordner <GStud*\LTSPICE_IMD> gespeichert. Zeichnen Sie zunächst einen Inverter mit Hilfe der Zeichenprimitiven. Als Beispiel sei hier die Abbildung 21: Inverter zeichnen aufgeführt. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 21: Inverter zeichnen Bis jetzt wurde nur die äußerliche Repräsentation erstellt. Es fehlen noch die Ports. Die Ports müssen hierbei die gleichen Namen tragen, wie die Namen der Netze im Subcurcuit. Wir brauchen in diesem Fall 4 Ports (IN, OUT, VDD, GND). Um einen Port zu erstellen gehen Sie auf „EditAdd Pin/Port“ und platzieren Sie diesen an den geeigneten Stellen. Das Ergebnis ist in Abbildung 22: Inverter Layout mit Pins zu sehen. Abbildung 22: Inverter Layout mit Pins Zusätzlich muss man nun noch den Instanz Namen zum Symbol ergänzen. Dies geschieht durch die Auswahl „EditAttributesAttribute Window. Im neuen Fenster wählt man nun InstName und bestätigt mit Ok. Nun setzt man den Platzhalter im Symbol Layout an eine passende Stelle (sieheAbbildung 23: Instanznamen hinzufügen). Die Namen M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik der Dateien müssen nun gleich sein, sowie die Pinnamen und die Labelnamen der Netze. Sollte dies der Fall sein ordnet LTSpice das Symbol dem Subcicuit zu. Das Symbol kann nun verwendet werden. Abbildung 23: Instanznamen hinzufügen Jetzt kann man mittels des „Component“ Symbol in der oberen Leiste die Liste der Komponenten öffnen und den neu erstellten Inverter auswählen. Hierzu wählen wir unter Top Directory den Pfad, wo das Subcircuit und das Symbol gespeichert wurden. Dies ist in unserem Fall im <GStud*\LTSPICE_IMD> Ordner. Der neue eigens erstellte Inverter sollte nur zur Auswahl zur Verfügung stehen. 4. Bau eines komplexen Gatters: Buffer Ein Buffer besteht aus zwei hintereinander gesetzten Invertern. Dafür sollen die neu erstellten Inverter genutzt werden. Zuerst werden zwei Instanzen des zuvor erstellten Inverters genutzt und verbunden. Spannungsquellen und eine Kapazität am Ausgang dienen als realistische Umgebung. Zusätzlich werden wieder die Spice Direktiven genutzt, um die Transistormodelle einzubinden, sowie die variablen Parameter zu setzen. Das Resultat der Schaltung ist in Abbildung 24: Buffer bestehend aus zwei Invertern zu sehen. Die Ergebnisse sind in Abbildung 25: Simulationsergebnisse dargestellt. M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik Abbildung 24: Buffer bestehend aus zwei Invertern Abbildung 25: Simulationsergebnisse M.Sc. Jan Skodzik Universität Rostock, Fakultät f. Informatik und Elektrotechnik Institut f. Angewandte Mikroelektronik und Datentechnik