Ćwiczenie nr 2. Celki parametryzowane w pakiecie CADENCE

 

Wprowadzenie do celek parametryzowanych

Celki parametryzowane to celki, w których użytkownik może wpływać na wygląd ich layout’u (czyli topografii masek) poprzez zmianę parametrów liczbowych. Parametryzowane mogą być wymiary, proporcje, liczba obiektów lub ich rozmieszczenie. Każdy z tych parametrów ma swoją wartość domyślną, zwaną też wartością referencyjną.

Celki parametryzowane są znacznie bardziej uniwersalne niż celki o stałych wymiarach. Przede wszystkim znajdują zastosowanie przy projektowaniu mikroczujników i mikromechanizmów krzemowych.

W pakiecie Cadence, celki parametryzowane można projektować stosując jedną z dwóch technik:

Pierwsza z tych technik pozwala na stosunkowo prostą i szybką parametryzację celki, ale ma sporo ograniczeń. Wszystkie operacje wykonuje się wizualnie, po czym celkę trzeba skompilować. Można też skompilować celkę parametryzowaną do języka SKILL i poddać ją dalszym modyfikacjom w celu uzyskania efektów niemożliwych do uzyskania przy projektowaniu wyłącznie techniką wizualną.

Druga technika polega na bezpośrednim określaniu współrzędnych poszczególnych obiektów tworzących layout, co stwarza ogromne możliwości, ale wymaga znacznie większego nakładu pracy i znacznie większej wiedzy niż projektowanie techniką wizualną.

Linie rozciągania (Stretch Lines)

Narysowanie linii rozciągania powoduje, że wszystkie obiekty przez które przechodzi linia lub jej przedłużenie zostaną w tym miejscu rozciągnięte (lub ściśnięte) w kierunku prostopadłym do tej linii. Zatem, aby uzyskać rozciąganie w kierunku poziomym (X), trzeba narysować linię pionową, a aby uzyskać rozciąganie w kierunku pionowym (Y) trzeba narysować linię poziomą. Linie rozciągania mogą być też łamane pod kątem prostym, aby było możliwe rozciąganie poszczególnych obiektów wzdłuż tej samej osi, ale w różnych miejscach. Należy jednak pamiętać o tym, że mimo że linia jest łamana, to nadal rozciąganie ma miejsce tylko wzdłuż jednego kierunku, odpowiedniego dla danego typu linii. Końce każdej linii rozciągania wzdłuż kierunku X są domyślnie przedłużone w nieskończoność w kierunku pionowym, a linii rozciągania wzdłuż kierunku Y – w kierunku poziomym.

Uwaga: Cadence nie pozwala na to, żeby przy prowadzeniu łamanej linii rozciągania wzdłuż kierunku X, jej poziome odcinki przecinały jakiekolwiek obiekty. Podobnie, pionowe odcinki łamanej linii rozciągania wzdłuż kierunku Y nie mogą przecinać żadnych obiektów. Można jednak sobie z tym poradzić tymczasowo odsuwając na bok przeszkadzające obiekty i przywracając je do pierwotnego stanu po poprowadzeniu linii.

Dla danej linii rozciągającej definiuje się dwie wielkości: wyrażenie arytmetyczne opisujące wymiar dowolnego obiektu przecinanego przez tę linię, uzależniony od parametrów celki oraz rzeczywisty wymiar tego obiektu (tj. tak jak narysowano), zwany wymiarem referencyjnym, który jest przyjmowany jako domyślny. Różnica tych dwóch wielkości jest długością o jaką będą rozciągnięte wszystkie obiekty przecięte przez linię (lub leżące na jej przedłużeniu) dla danych wartości parametrów celki (rys. 1).

rys. 1

Grupy powtarzanych obiektów (Repeat Groups)

Umożliwiają powtarzanie wybranych obiektów określoną liczbę razy (uzależnioną od parametrów celki) z zachowaniem określonego odstępu o między nimi. Obiekty mogą być powielane wzdłuż kierunku X (tylko w prawo), wzdłuż kierunku Y (tylko w górę) oraz jednocześnie w obydwu kierunkach (w prawo i w górę). Można podać, czy obiekty powtarzane przecinane przez daną linię rozciągającą mają być rozciągane czy nie.

Dla każdej grupy powtarzanych obiektów definiuje się dwie wielkości: liczbę powtórzeń uzależnioną od parametrów celki oraz odstęp między początkami powtarzanych obiektów (czyli odstęp między sąsiednimi krawędziami + wymiar pojedynczego obiektu wzdłuż danego kierunku) (rys. 2).

rys. 2

Wyrażenie Dependent Stretch jest długością, o jaką rozciągnie się łączny obszar zajmowany przez powielone obiekty w stosunku do obszaru zajmowanego przez pojedynczy obiekt. Jest ono obliczane automatycznie na podstawie liczby obiektów i odstępu między nimi. Wyrażenie wpisane w tym polu może być wykorzystane jako Expression for Stretch dla tzw. zależnej linii rozciągania (dependent stretch line). Dzięki zastosowaniu takiej linii, wszystkie obiekty (warstwy) przecinane przez nią mogą być automatycznie rozciągane o długość obszaru zajmowanego przez dodatkowe (powielone) obiekty (rys. 3).

rys. 3

Warto zwrócić uwagę na to, że przy definiowaniu zależnych linii rozciągania, wartość referencyjna jest ignorowana.

Parametryzowany tranzystor NMOS

Przedmiotem ćwiczenia jest zaprojektowanie tranzystora NMOS o zmiennej długości kanału L i szerokości kanału W. Layout bazowy tego tranzystora jest przedstawiony na rys. 4a. Dla podanych parametrów W i L, tranzystor zmienia swoje wymiary oraz dopasowuje liczbę kontaktów do drenu i źródła stosownie do zadanej szerokości kanału (rys. 4b).

rys. 4a rys. 4b

Aby uzyskać żądany efekt, trzeba wykonać następujące operacje:

  1. Rozciągnąć bramkę polikrzemową w poziomie wraz z warstwą dyfuzji oraz przesunąć jeden z kontaktów o długość równą { L – 0,8 } mm
  2. Rozciągnąć bramkę polikrzemową w pionie wraz z warstwą dyfuzji o { W – 2 } mm
  3. Powtórzyć obydwa kontakty w pionie w odstępie pcStep = hc + ysp = 2,2 mm i w liczbie równej

gdzie fix jest funkcją zaokrąglającą w dół argument do liczby całkowitej

Laboratorium nr 1 – Parametryzacja layout’u tranzystora MOS

  1. Przejść do katalogu ~/pcell i uruchomić Cadence poleceniem startcds&
  2. Przejść do programu Library Manager i w bibliotece Pcells odszukać celkę o nazwie nmos
  3. Skopiować widok layout celki nmos do widoku layout.1
  4. Otworzyć widok layout.1. Powinien się wtedy uruchomić program Virtuoso Layout Editor z layout’em tranzystora NMOS
  5. Z menu wybrać polecenie Tools -> Pcell. W menu głównym okna powinna pojawić się dodatkowa grupa poleceń Pcell
  6. Utworzenie linii rozciągania rozciągającej tranzystor w poziomie
    1. Z menu wybrać polecenie Pcell -> Stretch -> Stretch in X...
    2. Poprowadzić linię pokazaną na rys. 5 (linia pogrubiona) i kliknąć podwójnie myszą w koniec linii. Pojawi się wtedy formularz rozciągania w kierunku poziomym (rys. 6)
    3. rys. 5

    4. Wypełnić formularz zgodnie ze wzorem na rys. 6 i kliknąć OK

    rys. 6

  7. Utworzenie linii rozciągania rozciągającej tranzystor w pionie
    1. Z menu wybrać polecenie Pcell -> Stretch -> Stretch in Y...
    2. Poprowadzić linię pokazaną na rys. 7 (linia pogrubiona) i kliknąć podwójnie myszą w koniec linii. Pojawi się wtedy formularz rozciągania w kierunku pionowym (rys. 8)
    3. rys. 7

    4. Wypełnić formularz zgodnie ze wzorem na rys. 8 i kliknąć OK

    rys. 8

  8. Utworzenie grupy powtarzanych kontaktów do źródła i drenu
    1. Z menu wybrać polecenie Pcell -> Repetition -> Repeat in Y...
    2. Zaznaczyć obydwa kontakty (rys. 9) i kliknąć podwójnie w jeden z nich. Pojawi się wtedy formularz powtarzania w pionie (rys. 10)
    3. rys. 9

    4. Wypełnić formularz zgodnie ze wzorem z rys. 10 i kliknąć OK. Funkcja fix zaokrągla w dół liczbę ułamkową do liczby całkowitej. Wyrażenie pcStep odpowiada odstępowi między początkami (tj. dolnymi krawędziami powtarzanych kontaktów)

    rys. 10

  9. Skompilować celkę parametryzowaną wywołując polecenie Pcell -> Compile -> To Pcell i upewnić się o braku błędów podczas kompilacji (log w oknie głównym Cadence)
  10. Zapisać celkę wywołując polecenie Design -> Save (F2)
  11. Wyświetlić informację o parametrach celki. W tym celu wybrać polecenie Pcell -> Parameters -> Summarize
  12. Przejść do programu Library Manager. Odszukać bibliotekę PCells i utworzyć w niej nową celkę o nazwie testPCell (rys. 11)
  13. rys. 11

  14. Otworzyć widok layout celki testPCells i wypróbować sparametryzowany tranzystor nmos dla różnych wartości parametrów W i L. Do tego celu użyć polecenia Create -> Instance... (i) (rys. 12)

rys. 12

Parametryzowana, N-wejsciowa bramka logiczna NAND wykonana w technologii CMOS

Przedmiotem ćwiczenia jest zaprojektowanie parametryzowanego layout’u uniwersalnej, N-wejściowej bramki NAND. Liczba wejść N jest będzie parametrem tej celki. Punktem wyjściowym jest layout inwertera CMOS (rys. 13a). W wyniku parametryzacji bramka powinna się rozszerzać w sposób pokazany na rys. 13b (dla 3 wejść).

rys. 13a rys. 13b

Aby uzyskać żądany efekt, trzeba wykonać następujące operacje:

  1. Powtórzyć N razy bramkę polikrzemową w odstępie 0,8 + 2,8 = 3,6 mm
  2. Rozciągnąć w prawo warstwy dyfuzji tranzystorów NMOS i PMOS, studnię n-well, linie zasilające VDD i VSS oraz przesunąć w prawo kontakty do źródła skrajnego, prawego tranzystora NMOS, stosownie do liczby bramek polikrzemowych
  3. Powtórzyć obszar drenu tranzystora PMOS w liczbie będącej częścią całkowitą wyrażenia { (N+2) / 2 } i w odstępie równym 2 ´ 3,6 = 7,2 mm
  4. Powtórzyć obszar źródła tranzystora PMOS w liczbie będącej częścią całkowitą wyrażenia { (N+1) / 2 } i w odstępie równym 2 ´ 3,6 = 7,2 mm
  5. Rozciągnąć w prawo metal łączący wszystkie dreny tranzystorów aż do drenu skrajnego, prawego tranzystora PMOS, czyli do długości równej 1,4 + (l. drenów – 1) ´ 7,2 mm

Laboratorium nr 2 – Parametryzacja layout’u bramki NAND

  1. Przejść do programu Library Manager. Otworzyć bibliotekę PCells, a w niej celkę o nazwie NAND. Skopiować widok layout celki NAND do widoku layout.1
  2. Otworzyć widok layout.1. Przedstawia on layout inwertera CMOS, który po poddaniu parametryzacji stanie się uniwersalną N-wejściową bramką NAND
  3. Z menu wybrać polecenie Tools -> Pcell. W menu głównym okna powinna pojawić się dodatkowa grupa poleceń Pcell
  4. Uworzenie grupy powtarzanych bramek polikrzemowych
    1. Wybrać polecenie Pcell -> Repetition -> Repeat in X...
    2. Zaznaczyć bramkę polikrzemową i kliknąć podwójnie myszą w bramkę. Otworzy się formularz powtarzania obiektów w kierunku poziomym (rys. 14)
    3. rys. 14

    4. Wpisać liczbę bramek równą N i odstęp między nimi 3,6 mm, zgodnie z powyższym rysunkiem. Wyrażenie diff_stretch wskazuje o ile warstwy dyfuzji tranzystorów NMOS i PMOS, studnia n-well oraz linie zasilające będą musiały się rozszerzyć w poziomie aby zmieściły się dodatkowe bramki i jest obliczane automatycznie na podstawie liczby bramek
    5. Kliknąć OK w celu utworzenia grupy powtarzanych bramek

  5. Utworzenie linii rozciągania zależnej od parametru diff_stretch, rozciągającej w poziomie warstwy dyfuzji tranzystorów NMOS i PMOS, studnię n-well, linie zasilające oraz przesuwającej w prawo kontakty do źródła skrajnego, prawego tranzystora NMOS
    1. Tymczasowo skrócić bramkę polikrzemową oraz zwęzić studnię n-well, tak jak pokazano na rys. 15. Do tego celu użyć polecenia Edit -> Stretch (s)
    2. rys. 15

    3. Wybrać polecenie Pcell -> Stretch -> Stretch in X...
    4. Narysować łamaną linię rozciągania pokazaną na rys. 15 (linia pogrubiona) i kliknąć podwójnie myszą na końcu linii. Otworzy się formularz rozciągania w kierunku poziomym (rys. 16)
    5. rys. 16

    6. Wypełnić formularz zgodnie ze wzorem pokazanym na rys. 16 Wszystkie warstwy, przez które przechodzą pionowe odcinki linii rozciągającej zostaną rozciągnięte o długość równą diff_stretch
    7. Kliknąć OK aby ukończyć tworzenie linii

  6. Utworzenie linii rozciągania, rozciągającej w poziomie metalową ścieżkę łączącą wszystkie dreny tranzystorów PMOS
    1. Wybrać polecenie Pcell -> Stretch -> Stretch in X...
    2. Narysować łamaną linię rozciągania pokazaną na rys. 17 (linia pogrubiona) i kliknąć podwójnie myszą na końcu linii. Otworzy się formularz rozciągania w kierunku poziomym (rys. 18)
    3. rys. 17

    4. Wypełnić formularz zgodnie ze wzorem na rys. 18 i kliknąć OK
    5. rys. 18

    6. Przywrócić pierwotne rozmiary i położenie bramki i studni n-well (rys. 20)

  7. Utworzenie grupy powtarzanych kontaktów do drenów tranzystorów PMOS
    1. Wybrać polecenie Pcell -> Repetition -> Repeat in X...
    2. Zaznaczyć kontakty i metalizację drenu tranzystora PMOS (zobacz rys. 19) i kliknąć podwójnie w dowolny z zaznaczonych obiektów. Otworzy się formularz powtarzania obiektów w kierunku poziomym (rys. 20)
    3. rys. 19

    4. Wypełnić formularz zgodnie ze wzorem pokazanym na rys. 20 i kliknąć OK

    rys. 20

  8. Analogicznie utworzyć grupę powtarzanych kontaktów do źródeł tranzystorów PMOS (rys. 21). W polu Number of Repetitions wpisać funkcję fix((N+1)/2)
  9. rys. 21

  10. Skompilować celkę wywołując polecenie Pcell -> Compile -> To Pcell. Upewnić się, że nie wystąpiły żadne błędy w czasie kompilacji (log w oknie głównym Cadence)
  11. Zmodyfikować typ i domyślną wartość parametru N (tj. liczby wejść) wywołując polecenie Pcell -> Parameters -> Modify... i wypełniając formularz zgodnie ze wzorem pokazanym na rys. 22
  12. rys. 22

  13. Ponownie skompilować celkę i upewnić się o braku błędów
  14. Zapisać celkę wywołując polecenie Design -> Save (F2)
  15. Wyświetlić informację o parametrach celki wywołując polecenie Pcell -> Parameters -> Summarize
  16. W bibliotece PCells otworzyć widok layout celki testPCells i wypróbować sparametryzowaną bramkę NAND dla różnych wartości parametru N. Do tego celu użyć polecenia Create -> Instance... (i) (rys. 23)

rys. 23

 

Laboratorium nr 3* – Parametryzacja layout’u bramki NOR

Wykorzystując doświadczenia zdobyte po wykonaniu poprzedniego ćwiczenia, w analogiczny sposób sparametryzować bramkę NOR. Layout bazowy znajduje się w widoku layout celki NOR w bibliotece Pcells. Sparametryzowaną, N-wejściową bramkę NOR umieścić w celce NOR w widoku layout.1.