Opis programu SMASH


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.

Symulacje w programie SMASH


Poniżej znajduje się opis symulacji w programie SMASH utworzonych wcześniej układów.
Oto kolejne kroki, które doprowadzą nas do uzyskania symulacji. Przedstawione zostaną analizy, które mogą zostać wykonane.Posłużymy się dwoma przykładami układów. Jeden będzie prostszy, a drugi nieco bardziej skomplikowany.

Przykład 1- układ prosty
Przykład 2- układ złożony

Przykład 1

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.
 

Przykład 2

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 MIX.NSX, podwójnie klikamy na nim. Następnie pojawiają się dwa okna MIX.NSX i MIX.PAT.

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.