SMASH jest jedynym symulatorem wielopoziomowym, wielosygnałowym
dostępnym na rynku. Wielopoziomowy oznacza, że SMASH obsługuje zarówno
analogowe, ciągłe sygnały jak i dyskretne sygnały cyfrowe; nie jest już
ograniczony do poziomu
układu lub struktury - obsługuje również poziomy funkcjonalności zachowania
się układu.
Dla maksymalnej kompatybilności z narzędziami EDA, SMASH wykorzystuje
składnię programu SPICE dla opisów
analogowych, Verilog-HDL i VHDL dla cyfrowych, ABCD (kombinacja SPICE
i C) dla analogowych zachowawczych i C
dla algorytmów DSP.
SMASH umożliwia różne typy połączenia między różnymi modelami,
które obsługuje. SMASH nie tylko zapewnia największą elastyczność pod względem
różnorodności modelowania, ale również najprostsze połączenia, a co za
tym idzie, największą
przydatność. Analogowe sygnały mogą łączyć analogowe elementy (urządzenia
MOS, rezystory itp.), porty analogowych
zachowawczych modułów (ABCD) porty Verilog i porty VHDL.
Dla sygnałów Verilog automatycznie są przeprowadzane konwersje, aby
przełożyć poziomy logiczne na napięcia i impedancje.
Dostarczony jest standardowy model, który może być zastąpiony modelem
zdefiniowanym przez użytkownika lub i przez
standardowe parametry globalne. Dokładność procesu konwersji przy granicy
analogowo-cyfrowej nie jest ograniczona przez
symulator. Dostarczony jest model domyślny, który zapewnia dostateczną
dokładność w większości przypadków. Jeśli
użytkownik sądzi, że potrzebuje większej dokładności, może dostosować
interfejs do własnych upodobań ( jest dostępnych ok. 80 parametrów, które
mu w tym pomogą...). Dla sygnałów VHDL, znaczące połączenia z analogowymi
elementami zawierają sygnały std_logic a także sygnały real type. Połączenia
pomiędzy sygnałami Verilog i VHDL są jednolite. Standardowe konwersje
są stosowane pomiędzy sygnałami std_logic i modelem logicznym Verilog.
Łączenie modeli z różnych źródeł jest bardzo proste. Plik na najwyższym
poziomie kontroluje najwyższy poziom hierarchii.
Może on zawierać kod SPICE'a, wraz z kodem Verilog i/lub kodem VHDL.
Odwołania do zewnętrznych podukładów
SPICE'a, modułów Verilog lub jednostek VHDL są wykonywane przez mechanizm
bibliotek. Zewnętrzne ( zewnętrzne do
głównej netlisty) pliki w SPICE, ABCD, Verilog lub VHDL mogą być użyte
i można się do nich odwoływać za pomocą
prostych sformułowań z pliku wzorca. Nie ma tu jednak zagadkowych
"połączeniowych" plików. Nie ma tu takiej sytuacji, jak występuje w innych
tzw. rozwiązaniach sygnałów mieszanych, gdzie struktura katalogów i plików
jest dość złożona i praktycznie nie nadaje się do użytku, jeśli chodzi
o debuggowanie.
Dla modelowania analogowych układów SMASH używa ABCD, który jest analogową
odmianą HDL opartą na
połączeniu SPICE'a i C. SPICE udostępnia podstawową semantykę opisu
strukturalnego , a C udostępnia równania.
Używając ABCD, można dodać to, czego brakuje w SPICE. Można nadal używać
modeli, makromodeli itp. bez żadnych
zmian.
SMASH umożliwia przeprowadzanie różnorodnych analiz, m.in.: punktu pracy, przejściowej, małego sygnału, szumów, transferu DC, parametryczną i Monte Carlo.
SMASH używać może dwóch algorytmów dla symulacji analogowej. Domyślnie
jest stosowany algorytm tzw. metody
bezpośredniej. Wszystkie symulatory analogowe używają algorytmu, który
należy do tej klasy, aby rozwiązać trudne układy
analogowe. Te, które nie używają żadnego algorytmu metody bezpośredniej,
nie są w stanie rozwiązać wszystkich klas
układów.
Niektóre specjalne klasy układów mają własności, które czynią algorytmy
"oparte na relaksacji" bardzo efektywnymi jeśli się
je zastosuje. Dotyczy to cyfrowych układów CMOS, które mają takie własności
jak np. uprzywilejowane kierunki przepływu sygnału. Aby obsłużyć efektywnie
tę klasę układów, SMASH prezentuje drugi algorytm, zwany ".relax". Algorytm
ten łatwo obsługuje duże układy, ponieważ układ jest uprzednio poddany
symulacji (aby umożliwić śledzenie przepływu sygnałów) i tylko aktywne
części układu są symulowane. Nie mają tu zastosowania żadne macierze, jako
że jest to przypadek z algorytmami metody bezpośredniej, co przyczynia
się do liniowego wzrostu CPU w miarę jak rozmiar układu się
zwiększa. Algorytm ".relax" obsługuje napięcia i natężenia, nie jest algorytmem
"switch-level".
Można uzyskać dokładne dane pomiarowe, ponieważ jest to prawdziwie analogowa
symulacja, nie pseudo logiczna ani
jakakolwiek inna pośredniego poziomu. W SMASHU, wraz z algorytmem ".relax"
użyte mogą być albo standardowe modele
(EPFL-EKV, Bsim3v3 lub MM9) lub zastrzeżony model 'poziom 6' tranzystora.
Model 'poziom 6' jest prostym modelem MOS, podobnym do modelu 'poziom
1'. We wszystkich algorytmach "opartych na
relaksacji", równania modelu, które określają prąd w tranzystorze,
muszą być obliczane wiele razy. Więc dla maksymalnej
wydajności model musi być prosty, w innym przypadku korzyści wynikające
z wykorzystania opóźnienia i przestawiania
sygnałów są zmniejszone przez złożoność modelu. Wyniki otrzymane
z symulacji przeprowadzonej przy pomocy algorytmu ".relax" przy użyciu
'poziomu 6' , mogą mieć o ok. 10 % lepszą dokładność w porównaniu do wyników
otrzymanych w trakcie normalnej symulacji. Jeśli symuluje się przy użyciu
algorytmu relax i modeli standardowych, otrzymuje się tą samą dokładność,
ale większą szybkość.
SMASH nie używa żadnego zastrzeżonego języka cyfrowego dla cyfrowych
symulacji. Jest on oparty na
standardach przemysłowych (Verilog-HDL i VHDL), zatwierdzonych przez
IEEE. Dzięki temu nie trzeba uczyć się nowego
języka. Nie zachodzi również potrzeba instalowania nowego oprogramowania,
gdyż projekty są przenośne na inne narzędzie
EDA.
SMASH oferuje pełną symulację zgodną z IEEE 1364 Verilog-HDL, a także
z VHDL.
SMASH symuluje Verilog i VHDL używając pojedynczego jądra symulacji.
Struktury danych niskiego poziomu i algorytmy są
używane zarówno przez symulacje Verilog jak i VHDL.
Jeśli chodzi o Verilog-HDL, SMASH umożliwia modelowanie na wszystkich
poziomach, od strukturalnego (bramki) do RTL
(synteza) aż do w pełni funkcjonalnych poziomów. SMASH nie wymaga używania
jakiegokolwiek zewnętrznego symulatora
Verilog. SMASH zawiera pełny parser Verilog-HDL i narzędzia do symulacji
Pracując ze SMASH-em, możemy korzystać z zewnętrznych bibliotek Verilog-HDL
SMASH implementuje pełny standard Verilog-HDL IEEE. "Pełny" oznacza
nie tylko strukturalną część Verilog-HDL, ale
również RTL i poziomy funkcjonalne. Implementacja jest oparta
na manualach OVI Reference Manuals. Zostały
wprowadzone jedynie drobne zmiany, aby dostosować się do standardów
IEEE. SMASH zapewnia format SDF (Standard Delay File). Użycieformatów standardowych
umożliwia łatwe importowanie zewnętrznych bibliotek
Jeśli chodzi o VHDL, SMASH umożliwia modelowanie również na poziomie
RTL. SMASH nie wymaga używania
jakiegokolwiek zewnętrznego symulatora VHDL, zawiera bowiem pełny parser
Verilog-HDL i narzędzia do symulacji
Pracując ze SMASH-em, możemy korzystać z zewnętrznych bibliotek VHDL.
Krok 1.
Po zainstalowaniu SMASH-a, uruchom go. Następnie pojawi się okno dialogowe,
które umożliwia wybór pliku. Po znalezieniu naszego pliku z rozszerzeniem
RC.NSX, podwójnie klikamy na nim.
Krok 2.
Następnie pojawiają się dwa okna RC.NSX i RC.PAT. Plik RC.NSX jest
plikiem netlisty, który zawiera opis układu. Plik RC.PAT jest plikiem wzorca,
zawiera opis wyjść i dyrektywy symulacji. Znak * jest znakiem komentarza.
Wszystko, co następuje po nim, jest ignorowane.
Krok 3.
Teraz przeprowadzimy symulację naszego układu.
W menu Analysis wybieramy pozycję Operating point. Pojawia
się okno dialogowe. Naciskamy przycisk Run.
Następnie pojawia się okno tekstowe RC.OP.Plik ten zawiera opis napięć
bias point. Napięcia te można znaleźć na wyjściach układu.
Krok 4.
W menu Analyzis wybieramy pozycję Transient>Parameters.
Ukazuje się okno z parametrami analizy przejściowej. Naciskamy przycisk
Run.
Teraz można zaobserwować wykresy analizy przejściowej.
Okna graficzne SMASH-a są zorganizowane w rysunki; rysunek zawiera jeden lub więcej przebiegów. Przebiegi te odpowiadają różnym sygnałom : mogą reprezentować napięcia, formuły składające się ze zbioru sygnałów lub sygnały logiczne. W trakcie symulacji zauważyć można kursor w lewej części ekranu, który podnosi się i obniża co pewien okres czasu. Kursor ten określa bieżący interwał czasowy.
Na wejście podany został impuls. Na wyjściu mońna zaobserwować przesunięte w czasie odpowiedzi. Widać również falę D, która nie jest prawdziwym sygnałem, ale formułą będącą zbiorem sygnałów.
Operacje na wykresach (np. powiększanie) są możliwe, nawet gdy symulacja jest jeszcze przeprowadzana. Można dodać nowy sygnał do okna za pomocą polecenia Add>Analog signals. Okno dialogowe, które wtedy zostanie wyświetlone, ukazuje listę dostępnych sygnałów. Dwukrotnie klikamy na sygnał, który chcemy dodać do wykresu i naciskamy przycisk Done.
Można ponownie zestawić sygnały i poszczególne wykresy przy użyciu metody drag-and-drop: w oknie Transient, klikamy nazwę sygnału, który chcemy przesunąć, następnie przenosimy go i upuszczamy w żądanym miejscu.. Można także wyizolować dany sygnał klikając dwukrotnie jego nazwę - wtedy jedynie ten sygnał będzie wyświetlany. Aby powrócić do poprzedniego sposobu wyświetlania, należy ponownie dwukrotnie kliknąć nazwę tego sygnału.
Przy jakichkolwiek problemach należy postąpić według następujących zaleceń:
1. Sprawiamy, aby okno Transient window pojawiło się na pierwszym
planie (Windows menu, Transient item).
2. Naciskamy klawisz ESC (anuluje to wykonanie bieżącego polecenia).
3. Jesli aktywny jest punkt VievAll (w menu Waveforms),
wybieramy go.
4. Wybieramy polecenie Full-fit w menu Waveforms.
Krok 5.
W menu Analysis wybierz punkt Small signal>Parameters.
Ukaże się okno dialogowe z parametrami Small signal. Kliknij na
przycisku Run. Można teraz zaobserwować analizę AC, w miarę jak
obliczane są przebiegi wykresów.
Krok 6.
W menu Analysis, wybierz punkt DC transfer>Run. Można teraz zobaczyć przebieg analizy DC, w miarę jak obliczane są przebiegi wykresów. Należy zauważyć, ze po wybraniu pozycji Run, ominęliśmy dialog z parametrami i uruchomiliśmy analizę bezpośrednio.
SMASH umożliwia również przeprowadzenie analizy szumów. Po wybraniu punktu Noise>Run z menu Analyzis, w oknie Noise ukaże się nam odpowiedni wykres. Oporniki generują po prostu szum termiczny. Zostaje utworzony plik tekstowy zawierający rezultaty analizy szumu : RC.NZE. Można otworzyć go przy pomocy polecenia File Open.
Krok 7.
Teraz, kiedy wiemy już, jak przebiega prosta analiza, możemy zobaczyć,
co nastąpi, kiedy zmienimy wartość rezystancji; jak wpłynie to na odpowiedź
układu.
W menu Analysis wybieramy punkt Transient>Sweep. Analiza
przejściowa jest wykonywana ponownie z wartością parametru ( w tym przypadku
wartością opornika R1) zmienianą w każdej iteracji. Rezultaty są nakładane
na siebie w tym samym oknie, aby można było łatwo określić wpływ zmiany
parametru na wygląd wykresu.
Klikamy następnie przycisk Get parameter, znajdujący się w pasku
narzędzi, a następnie klikamy na wykres. Za każdym razem, gdy następuje
kliknięcie, wartość parametru, który odpowiada danej krzywej, jest wyświetlana.
Krok 8.
Możemy uruchomić Small signal>Sweep analysis, DC transfer>
Sweep analysis, a także Noise>Sweep analysis. Dla każdej z tych
analiz , wyniki są natychmiastowe i nakładane zostają na siebie w odpowiednich
oknach.
Krok 9.
Teraz uruchomimy analizę Monte Carlo. Możemy zaobserwować, jak zmieniają
się wykresy, jeśli będziemy zmieniać parametry. W menu Analysis
wybieramy Transient>Monte Carlo. Jak zwykle, rezultaty są nakładane
na siebie w tym samym oknie. Możliwe są także inne analizy Monte Carlo
(np. Small signal>Monte Carlo).
Teraz umieszczamy okno Transient window na pierwszym planie
(Windows menu, Transient item). Klikamy przycisk
Get M.C info na pasku narzędzi. Natsępnie klikamy na poszczególne
wykresy. Wartości parametrów odpowiadające tym wykresom pojawiać się będą
za każdym razem w oknie na dole ekranu.
Następnie zamykamy okno RC.MC i naciskamy przycisk Full-fit.
Krok 2.
Teraz przeprowadzimy symulację naszego układu.
W menu Analysis wybieramy pozycję Operating point. Pojawia
się okno dialogowe. Naciskamy przycisk Run.
Następnie pojawia się okno tekstowe MIX.OP. Plik ten zawiera opis napięć
bias point. Napięcia te można znaleźć na wyjściach układu. W pliku tym
znajdziemy również opis napięć transistor bias.
Krok 3.
W menu Analysis wybieramy pozycję Transient>Run.
Można teraz zaobserwować analizę przejściową, z wykresami wyświetlanymi
w miarę jak są one generowane.
Sygnał START jest używany, aby uruchomić i zatrzymać oscylator. Sygnał
OUT i sygnał EQU są prawie identyczne. OUT jest generowany przez wzmacniacz
operacyjny i diodę, a EQU jest generowany przy pomocy równania warunkowego.
Różnica między OUT i EQU zależy od diody.
Krok 4.
Teraz zanalizujemy spektrum wykresów przejściowych. Tym razem będziemy
musieli wprowadzić kilka parametrów.
Najpierw sprawiamy, aby okno Transient było na pierwszym planie.
Wybieramy sygnał V(AA).
Wybieramy pozycję Fourier w menu Waveforms lub klikamy
przycisk Fourier.
Wpisujemy 100 w polu "t0".
Wpisujemy 3000 w polu "tn".
Wpisujemy 10000 w polu "N".
Wybieramy funkcję Blackmann - Harris 4.
Klikamy na przycisk Ok. FFT sygnału V(AA) jest obliczana i tworzone
jest nowe okno FFT, wyświetlające spektrum sygnału V(AA).
Przy użyciu tej samej procedury obliczamy inne FFT dla innych sygnałów;
wyniki będą dodane do okna FFT
Kolejnym krokiem będzie zaprojektowanie topografii układu w Uncle'u.