Ćwiczenie nr 5. Automatyczna synteza layout’ów układów cyfrowych z wykorzystaniem programu Cell Ensemble
Wprowadzenie
Przedmiotem tego ćwiczenia jest synteza topografii masek (layout'u) prostego układu cyfrowego, opisanego w postaci schematu logicznego w p
rogramie Composer. Synteza schemat -> topografia masek jest często potocznie zwana Place&Route.
W niniejszym ćwiczeniu do syntezy zostanie zastosowany syntetyzator
Cell Ensemble wchodzący w skład pakietu Cadence IC Package oraz technologia Alcatel CMOS 0,7 mm, z czego wynikają następujące ograniczenia:
- Przy prowadzeniu połączeń dysponujemy jedynie dwiema warstwami metalu, co znacznie zwiększa zapotrzebowanie na powierzchnię potrzebną na połączenia
- Nie możemy prowadzić połączeń ponad celkami, co powoduje dalszy wzrost zapotrzebowania na powierzchnię potrzebną na połączenia.
Jednakże wybrana technologia ma jedną podstawową zaletę – po zakończeniu syntezy można zobaczyć kompletny layout układu. Zazwyczaj, celki standardowe (elementy) wykorzystywane do syntezy są dostępne jedynie w postaci "czarnej skrzynki" o rzeczywistych wymiarach i z doprowadzeniami, natomiast ich layout'y nie są znane. Technologia
Alcatel 0,7 stanowi tu wyjątek.
Rezultat syntezy, do którego będziemy dążyć jest pokazany na rys. 1.

rys. 1
Floorplan
Pierwszym etapem syntezy jest tzw. floorplan, czyli wstępne rozplanowanie rozmieszczenia rdzenia i doprowadzeń wejścia-wyjścia (padów) na powierzchni krzemu. W skład rdzenia wchodzą wszystkie celki standardowe realizujące funkcje logiczne układu, takie jak bramki czy przerzutniki.
W przypadku rozważanego układu, całkowita powierzchnia, którą będzie on zajmował, będzie wyznaczona nie przez rozmiar rdzenia, ale przez pady, ponieważ układ ten ma stosunkowo dużą liczbę padów relatywnie do liczby element
ów rdzenia.
I/O Placement
Terminem tym określamy rozmieszczenie padów, które generalnie można podzielić na 3 grupy:
- Pady (bufory) wejściowe (w tym pady doprowadzające sygnały zegarowe)
- Pady wyjściowe, które bardzo często pełnią także funkcję trójstanowych buforów wyjściowych
- Pady zasilające, doprowadzające zasilanie do celek rdzenia oraz do buforów wejścia-wyjścia.
Pady zasilające mogą być zwielokrotnione (w przypadku naszego układu są zdwojone), jeżeli rdzeń jest duży, albo jest duże zapotrzebowanie na prąd buforów wyjściowych. W wielu dzisiejszych układach (np. w dużych mikroprocesorach) stosuje się osobne zasilanie dla rdzenia i padów (tzw. układy dwunapięciowe). Chodzi o to, aby rdzeń zasilać jak najniższym napięciem, aby zminimalizować pobór mocy i wyd
zielanie ciepła, ale jednocześnie zasilać pady wyjściowe wyższym napięciem, aby móc z nich uzyskać większy prąd wyjściowy, co z kolei zwiększa maksymalną częstotliwość układu jako całości.
Masa i zasilanie wszystkich padów układu powinna być połączona i tworzyć ciągłe magistrale. Jeżeli pady nie przylegają do siebie, to aby zapewnić ciągłość magistral, między pady należy wstawić specjalne celki zwane
IO fillers. Aby z kolei zapewnić ciągłość tych magistrali w narożnikach układu, wstawia się tam tzw. celki narożne (corner cells), widoczne na rys 1.
W programie Cell Ensemble można rozmieścić pady automatycznie. Wówczas syntetyzator stara się tak rozmieścić pady, aby całkowita powierzchnia przez nie zajmowana była jak najmniejsza (chyba że to rdzeń wyznacza wielkość układu). Może jednak powstać taki problem, że pady są nie w takiej kolejności jakbyśmy chcieli i np. pady zasilające są przemieszane z padami wyjściowymi. Dlatego istnieje możliwość zdefiniowania, które końcówki i w jakiej kolejności mają się znaleźć na których bokach. Wówczas syntetyzator będzie starał się w miarę możliwości zrealizować takie rozmieszczenie, lub przynajmniej będzie do niego dążył. Plik, w którym definiuje się te wytyczne nosi nazwę IO frame file i składa się z linii wykorzystujących następujący wzorzec:
nazwa_padu bok pozycja
na przykład
|INB0 left 0
|INB7 left 7
Umowną kolejność padów na poszczególnych bokach objaśnia rys. 2

rys. 2
Placement
Terminem tym określa się rozmieszczenie celek w rdzeniu. Zazwyczaj zachodzi ono automatycz
nie, a projektant jedynie kontroluje parametry tego procesu.
W przypadku większości układów cyfrowych, wszystkie celki należące do rdzenia mają taką samą wysokość i są układane w rzędach, pomiędzy którymi powstają kanały, którymi będą prowadzone połączenia między celkami (rys. 1). Wyjątek stanowią tzw.
bloki, czyli stosunkowo duże fragmenty (moduły) syntezowane wcześniej i przy rozmieszczaniu traktowane już jako nierozerwalne całości. Bloki rozmieszcza się w pierwszej kolejności, a dopiero potem rozmieszcza się pojedyncze celki standardowe. Czasem o rozmieszczeniu bloków decyduje projektant, a nie program.
W procesie rozmieszczania celek w rdzeniu, zazwyczaj wstawia się między nie dodatkowe celki zwane
feedthroughs albo spacers, które mają za zadanie wyrównać długości wszystkich rzędów (jak justowanie druku) oraz ułatwić zamianę celek miejscami w procesie iteracyjnego placementu.
Placement jest wykonywany w dwóch fazach:
- Wstępne rozmieszczenie celek (
initial placement albo constructive placement). W najprostszym przypadku może to być rozmieszczenie losowe, ale w większości przypadku jest ono wstępnie optymalizowane pod kątem minimalizacji długości połączeń, np. metodą krystalizacji
- Iteracyjna optymalizacja rozmieszczenia początkowego (
iterative placement improvement). W tej fazie rozmieszczenie celek optymalizuje się raczej pod kątem minimalizacji liczby przecięć (kolizji) połączeń i równomiernego rozkładu ich zagęszczenia, a nie długości połączeń.
W większości przypadków placement nie kończy się na rozmieszczeniu bloków oraz celek występujących na schemacie logicznym. Zazwyczaj trzeba wstawić dodatkowe celki zwane glue cells , takie jak:
- power cells, czyli celki rezerwujące specjalne przerwy w rzędach, które są później wykorzystywane przez dodatkowe ścieżki skutecznie doprowadzające zasilanie do celek znajdujących się w głębi rzędów
- bufory zegarowe, których głównym zadaniem jest zmniejszenie obciążenia widzianego na wejściach zegarowych układu oraz minimalizacja opóźnień sygnału zegarowego na wejściach odległych od siebie celek
- celki stanowiące zakończenia rzędów (
cap cells).
Routing
Terminem tym określa się prowadzenie połączeń elektrycznych w kanałach pomiędzy celkami. Jako że poprowadzenie wszystkich połączeń naraz byłoby zbyt skomplikowane dla
routera, proces ten rozdziela się na dwie fazy:
Globalny (swobodny) routing (global routing albo loose routing), w którym router określa, przez które kanały i w jakiej kolejności będą przechodziły poszczególne połączenia, ale dokładny przebieg połączenia w tych kanałach nie jest jeszcze znany na tym etapie
Szczegółowy (końcowy) routing (detail routing albo final routing), w którym router ustala dokładny przebieg poszczególnych połączeń przez kanały wybrane w poprzedniej fazie.
Często przed rozpoczęciem routingu globalnego, planuje się przebieg połączeń zasilających i zegarowych, ponieważ mogą mieć one krytyczny wpływ na działanie układu. W szczególności tworzy się specjalne drabinki połączeń dla zasilania i masy wewnątrz rdzenia i poza nim (
power ladders albo power stripes). Dzięki temu każda celka, bez względu na to w którym miejscu rdzenia się znajduje, jest poprawnie zasilana (tzn. napięcia VDD i VSS mieszczą się w granicach tolerancji), ponieważ mimo przepływu dużego prądu zasilającego nie ma znaczących spadków napięć. Drabinki te są doskonale widoczne na rys. 1. Podobnie, czasem prowadzi się specjalne połączenia także dla sieci dystrybucji zegara (clock trunk).
Jeżeli jednak nie planujemy wstępnie przebiegu połączeń zasilających i zegarowych, to trzeba przynajmniej nadać im wysoki priorytet, aby router rozpoczął routing globalny od poprowadzenia tych połączeń co może znacznie skrócić ich długość. Najwyższy priorytet powinny mieć połączenia zasilające, następnie zegarowe, a dopiero potem pozostałe.
W czasie routingu szczegółowego może okazać się, że w wyniku przekroczenia dopuszczalnej gęstości połączeń w pewnych kanałach, nie da się poprowadzić wszystkich połączeń. Wówczas Cell Ensemble poszerza te kanały kosztem całkowitej powierzchni zajmowanej przez rdzeń. W przypadku układu z rys. 1 istnieje duży zapas, ponieważ i tak minimalna powierzchnia zajmowana przez ten układ jest limitowana przez pady, a nie przez rozmiary rdzenia. Z drugiej strony, opcjonalnie router może zwężać kanały, w których jest mniej połączeń niż się mieści, co zmniejszy rozmiary rdzenia, ale w przypadku naszego układu i tak to nic by nie dało, ponieważ padów nie da się już bardziej ścisnąć.
Laboratorium nr 1. Wstępne planowanie rozmieszczenia (Floorplan)
Przejść do podkatalogu digital w swoim katalogu domowym i uruchomić Design Framework II poleceniem UNIX’a: startcds &
Przejść do programu Library Manager, odszukać bibliotekę Digital, a w niej celkę CHIP i otworzyć widok schematic. Powinno się wtedy otworzyć okno programu Composer ze schematem logicznym układu, który ma być poddany syntezie
Z menu programu Composer wybrać polecenie Tools -> Floorplan/Schematics. Powinno pojawić się dodatkowe polecenie menu: Floorplan
Uruchomić program Hierarchy Browser
Z menu wybrać polecenie Floorplan -> Hierarchy Browser... Pojawi się wtedy formularz pokazany na rys. 3

rys. 3
Wypełnić formularz w sposób pokazany na rysunku i kliknąć OK. Na ekranie powinno pojawić się okno programu Hierarchy Browser
Ustawić przyszłe środowisko programu Cell Ensemble
Z menu programu Hierarchy Browser wybrać polecenie Utilities -> Environment...
Wypełnić formularz tak jak pokazano na rys. 4 i kliknąć przycisk Change Default Global Signal Names
Wypełnić formularz tak jak pokazano na rys. 5 i kliknąć OK aby powrócić do formularza z rys. 3
Kliknąć OK aby zakończyć ustawianie środowiska

rys. 4

rys. 5
Zapoznać się z hierarchiczną strukturą układu
- Zaznaczyć celkę
CHIP widoczną w oknie programu Hierarchy Browser
W menu wybrać polecenie Window -> Utilities -> Expand Selected aby obejrzeć listę celek bezpośrednio wchodzących w skład celki CHIP
W podobny sposób obejrzeć zawartość wyświetlonych celek, aż całe drzewo hierarchii układu stanie się widoczne
Zaznaczyć samą celkę CHIP i z menu wybrać polecenie Generate Physical Hierarchy
Opuścić program Hierarchy Browser poleceniem Window -> Close
Przejść do programu Library Manager i korzystając z polecenia Edit -> Copy... skopiować widok autoLayout celki CHIP do widoku layout
Otworzyć widok layout celki CHIP. Na ekranie pojawi się okno programu Virtuoso
Z menu okna Virtuoso wybrać polecenie Tools -> Floorplan/P&R -> Cell Ensemble. Powinny pojawić się dodatkowe polecenia menu: Floorplan, Analyze, Place, Route oraz “pływające” okno OSW (Object Selection Window)
Zainicjalizować floorplan
- Z menu wybrać polec
enie Floorplan -> Reinitialize...
Wypełnić formularz w sposób pokazany na rys. 6 i kliknąć OK

rys. 6
Zapisać bieżący widok poleceniem Design -> Save (F2)
Laboratorium nr 2. Rozmieszczenie padów wejścia-wyjścia (I/O Placement)
Otworzyć widok layout celki CHIP o ile nie jest otwarty
Wstępnie rozmieścić automatycznie pady na krzemie
- Z menu wybrać polecenie
Floorplan -> I/O Place...
Wypełnić formularz w sposób pokazany na rys. 7 i kliknąć OK

rys. 7
Tymczasowo rozsunąć pady tak, aby uzyskać dostatecznie duże odstępy między nimi
- Z menu wybrać polecenie
Place -> IO Commands -> Justify...
Wypełnić formularz w sposób pokazany na rys. 8 i kliknąć OK

rys. 8
Wczytać docelowe rozmieszczenie padów z pliku I/O frame file
Z menu wybrać polecenie Place -> IO Commands -> Read Initial File...
W formularzu wpisać nazwę pliku: CHIP.iof (rys. 9) i kliknąć OK

rys. 9
Docelowo rozmieścić pady najciaśniej, jak to tylko możliwe
- Z menu wybrać polecenie
Place -> IO Commands -> Justify...
W polu IO to IO Spacing wpisać wartość 0 i kliknąć OK
Wstawić celki narożne
- Z menu wybrać polecenie
Place -> IO Commands -> Add Corners...
W formularzu (rys. 11) kliknąć przycisk Browse
W bibliotece MTC22300 odszukać celkę CORNER_400, zaznaczyć widok abstract (rys. 10)

rys. 10
Kliknąć Close aby powrócić do poprzedniego formularza, który powinien wyglądać mniej więcej tak, jak pokazano na rys. 11

rys. 11
Kliknąć OK aby wstawić wybrane celki narożne
Zapisać bieżący layout wywołując z menu polecenie Design -> Save (F2)
Zapisać kopię widoku jako widok IOplaced
Z menu wybrać polecenie Design -> Save As...
Wypełnić formularz w sposób pokazany na rys. 12 i kliknąć OK

rys. 12
Po wykonaniu tej części ćwiczenia, bieżący widok powinien przypominać layout z rys. 13

rys. 13
Laboratorium nr 3. Rozmieszczenie celek standardowych (Placement)
Otworzyć widok layout celki CHIP o ile nie jest otwarty
Ustawić wymiary przyszłego rdzenia i liczbę przyszłych rzędów
W oknie OSW zaznaczyć pole Region, odznaczając jednocześnie wszystkie inne pola
Zaznaczyć region o nazwie default (czyli jedyny istniejący region)
Z menu wybrać polecenie Edit -> Properties... (q)
Wypełnić formularz tak jak pokazano na rys. 14 i kliknąć OK

rys. 14
Automatycznie rozmieścić celki standardowe
- Z menu wybrać polecenie
Place -> Automatic...
W oknie formularza (rys. 16) kliknąć przycisk Browse
W bibliotece MTC23000 odszukać celkę CSPACER, zaznaczyć widok abstract (rys. 15) i kliknąć Close aby powrócić do poprzedniego formularza

rys. 15
Wypełnić resztę formularza tak jak pokazano na rys. 16 i kliknąć OK. Obserwować postęp placement’u w oknie głównym icfb

rys. 16
Wstawić w rzędy celek standardowych pomocnicze celki zasilające (power cells)
- Z menu wybrać polecenie
Place -> Power Cell -> Add Auto...
- W polu wyboru formularza (rys. 18) wybrać waria
nt Use Pre-Defined Power Cells
- Kliknąć przycisk
Browse
- W bibliotece MTC23000 odszukać celkę CFEED, zaznaczyć widok abstract (rys. 17) i kliknąć Close aby powrócić do poprzedniego formularza

rys. 17
- Wypełnić resztę formularza tak jak pokazano na rys. 18 i kliknąć przycisk
Pre-Define Power Cells

rys. 18
- W formularzu (rys. 19) kliknąć przycisk
Power Cell Browse
- W bibliotece MTC23000 odszukać celkę CBAR_FEED, zaznaczyć widok abstract (rys. 19) i kliknąć Close aby powrócić do poprzedniego formularza

rys. 19
- W formularzu z rys. 19 kliknąć przycisk
Left Cap Cell Browse
- W bibliotece MTC23000 odszukać celkę CENDROW, zaznaczyć widok abstract (rys. 20) i kliknąć Close aby powrócić do poprzedniego formularza

rys. 20
- Kliknąć przycisk
Right Cap Cell Browse i powtórzyć kroki opisane w punkcie i. Wówczas formularz powinien wyglądać tak jak pokazuje rys. 21

rys. 21
- Kliknąć
OK aby powrócić do formularza z rys. 18
- Kliknąć
OK i obserwować postęp placement’u w oknie głównym icfb
Zapisać bieżący widok
Zapisać kopię bieżącego widoku jako widok placed
Po wykonaniu tej części ćwiczenia, bieżący widok powinien przypominać layout z rys. 22

rys. 22
Laboratorium nr 4. Automatyczne prowadzenie połączeń (Routing)
Otworzyć widok layout celki CHIP o ile nie jest otwarty
Zmienić domyślne parametry ścieżek zasilających i zegarowych
- Z menu wybrać polecenie
Route -> Modify Net -> Modify Net Properties... Pojawi się wtedy formularz pokazany na rys. 23

rys. 23
W polu Net Names wpisać węzeł VDD! (rys. 23)
Zaznaczyć opcję Edit Net Width i w polu obok po prawej stronie wpisać wartość 9
Kliknąć Apply aby zmienić parametry ścieżek związanych z węzłem VDD!
Powtórzyć kroki b-d dla węzła VSS!
Odznaczyć opcję Edit Net Width
W polu Net Names wpisać węzły: |CLK |net57 (rys. 24)

rys. 24
Zaznaczyć opcję Edit Net Priority i w polu obok po prawej stronie wpisać wartość 105
Zaznaczyć opcję Edit Net Type i w polu wyboru obok wybrać wariant clock
Kliknąć OK aby zapamiętać zmiany i zamknąć formularz
Utworzyć kanały, którymi będą biegły połączenia
Z menu wybrać polecenie Route -> Channels -> Create...
Wypełnić formularz tak jak pokazano na rys. 25 i kliknąć OK aby utworzyć kanały

rys. 25
Utworzyć drabinkę zasilającą wewnątrz rdzenia
- Z menu wybrać polecenie
Route -> Special Net Route -> Route Power Ladders...
Wypełnić formularz w sposób pokazany na rys. 26 i kliknąć OK

rys. 26
Sprawdzić rezultat wykonanej operacji w oknie głównym icfb
Utworzyć drabinkę zasilającą doprowadzającą zasilanie z padów do rdzenia
- Z menu wybrać polecenie
Route -> Special Net Route -> Route Rail... Na ekranie pojawi się formularz pokazany na rys. 27

rys. 27
Wypełnić formularz tak jak pokazano na rysunku i nie zamykając formularza przejść z powrotem do okna Virtuoso
Kolejno kliknąć lewym przyciskiem myszy w kanały oznaczone na rys. 28 jako H1, H2, V1 i V2 aby w tych kanałach utworzyć połączenia zasilające

rys. 28
Jeżeli omyłkowo zostały utworzone połączenia w kanałach, w których nie miało ich być, to w formularzu z rys. 27 należy zmienić Routing Mode na Delete i kliknąć w te kanały
Po połączeniu wszystkich czterech kanałów powrócić do formularza i kliknąć przycisk Connectivity Checker. Przy braku błędów powinien on wyświetlić komunikat mówiący, że wszystkie zakończenia węzła VDD! są połączone (rys. 29)

rys. 29
W analogiczny sposób powtórzyć kroki b-e dla węzła VSS!
Kliknąć Cancel aby zamknąć formularz z rys. 27 i powrócić do okna Virtuoso
Routing globalny
- Z menu wybrać polecenie
Route -> Global Route -> Automatic... Na ekranie pojawi się wtedy formularz pokazany na rys. 30

rys. 30
- W polu wyboru Method wybrać wariant both (czyli auto+optimize)
- W polu Options kliknąć przycisk Automatic
- Wypełnić formularz zgodnie ze wzorem pokazanym na rys. 31 i kliknąć
OK

rys. 31
- W polu Options kliknąć przycisk Optimizer
- Wypełnić formularz zgodnie ze wzorem pokazanym na rys. 32 i kliknąć
OK

rys. 32
- W formularzu z rys. 30 kliknąć
OK aby rozpocząć routing globalny i obserwować jego przebieg w oknie głównym icfb
Routing szczegółowy
- Z menu wybrać polecenie
Route -> Detail Route -> Automatic... Na ekranie pojawi się formularz pokazany na rys. 33

rys. 33
Wypełnić formularz zgodnie ze wzorem pokazanym na rysunku
W polu Options kliknąć przycisk Compact
Wypełnić formularz zgodnie ze wzorem pokazanym na rys. 34 i kliknąć OK

rys. 34
W formularzu z rys. 33 kliknąć OK aby rozpocząć routing szczegółowy i obserwować jego przebieg w oknie głównym icfb
Przemieścić zawartość wszystkich kanałów na pierwszy plan (tzw. eksplozja kanałów)
- Z menu wybrać polecenie
Route -> Detail Route -> Explode Channels...
Obserwować wynik operacji w oknie icfb
Sprawdzić layout pod kątem występowania zwarć oraz nie zakończonych połączeń
- Z menu wybrać polecenie
Route -> Check...
W formularzu (rys. 34) zaznaczyć obydwie opcje i kliknąć OK
Obserwować wyniki testów. W razie wykrycia błędów zwrócić się do prowadzącego zajęcia
Zapisać bieżący widok
Zapisać kopię bieżącego widoku jako widok routed
Usunąć niepotrzebne już celki odpowiadające kanałom
- Przejść do programu
Library Manager i w bibliotece Digital zaznaczyć celkę CHIP_ChannelsH2 tak, aby żaden z jej widoków nie był zaznaczony
Z menu programu Library Manager wybrać polecenie Edit -> Delete. Na ekranie pojawi się formularz pokazany na rys. 35

rys. 35
W polu filtra sekcji Don't Delete wpisać wzór CHIP_* i kliknąć przycisk Select. Powinny się zaznaczyć wszystkie celki zaczynające się od CHIP_Channels, odpowiadające kanałom
Kliknąć przycisk ze strzałką skierowaną w lewo (<----) aby przeznaczyć zaznaczone celki do usunięcia. Powinny się one pojawić na liście Delete
Kliknąć OK aby skasować zaznaczone celki. Powinno wyświetlić się okno z prośbą o potwierdzenie usunięcia 30 celek, których nazwy rozpoczynają się od CHIP_Channels.
Upewnić się, że na liście celek nie ma celki CHIP i kliknąć OK aby zatwierdzić kasowanie
Po wykonaniu tej części ćwiczenia, bieżący widok powinien przypominać layout z rys. 36

rys. 36
Laboratorium nr 5. Utworzenie layout'u końcowego
Korzystając z programu Library Manager otworzyć widok routed celki CHIP
Zastąpić widoki abstract celek standardowych widokami layout tak, aby były widoczne ich layout'y, a nie tylko wymiary i układ końcówek
Z menu okna Virtuoso wybrać polecenie Floorplan -> Replace View...
Wypełnić formularz tak jak pokazano na rys. 36 i kliknąć OK

rys. 36
Zwiększyć liczbę wyświetlanych poziomów hierarchii layout'u tak, aby layout'y wszystkich celek standardowych (w tym padów) były poprawnie wyświetlane
- Z menu wybrać polecenie
Design -> Options -> Display... (e)
W polu Display Levels formularza ustawić From 0 To 4
Kliknąć przycisk Apply, a następnie Save To (przy zaznaczonym wariancie Cellview) aby zapamiętać nowe parametry wyświetlania w bieżącym widoku
Kliknąć OK aby powrócić do okna Virtuoso
Zapisać bieżący layout
Po zakończeniu tego ćwiczenia powinno się otrzymać layout pokazany na rys. 1