TRANSKODER
Treść
Należy wykonać transkoder jako układ kombinacyjny na bramkach NAND oraz inwerterach opisujący podaną poniżej funkcję. Poprzez # oznaczymy dowolną możliwą odpowiedź.
X | Y |
0 | 2 |
1 | 3 |
2 | 6 |
3 | # |
4 | # |
5 | 0 |
6 | 5 |
7 | 4 |
Szkic rozwiązania
W tym celu przekształcamy liczby na system binarny:
x2 | x1 | x0 | y0 | y1 | y2 |
0 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | # | # | # |
1 | 0 | 0 | # | # | # |
1 | 0 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 0 | 0 |
Jak łatwo zauważyć tabelę tę można łatwo zaprezentować jako trzy funkcje logiczne trzech zmiennych. Zmiennymi w takiej sytacji będą: x2, x1, x0, natomiast funkcje będą definiować odpowiednio y0, y1, y2. Przekształcenie to można wykonać za pomocą tabel Karnougha. Jako rezultat otrzymujemy:
y0 = x1
y1 = ~x0
y2 = ~x0 Λ x2 ν x0 Λ ~x2
Wykorzystując prawo podwójnej negacji oraz prawa de Morgana otrzymujemy:
y0 = x1
y1 = ~x0
y2 = ~(~(~x0 Λ x2) Λ ~(x0 Λ ~x2))
Następnie z otrzymanych funkcji logicznych tworzymy schemat pokazany na rysunku 1 oraz przeprowadzamy symulację działania układu.
Rysunek 1. Schemat transkodera.
W tym celu uruchamiamy program Quartus II 9.0sp2 Web Edition. Następnie:
- Tworzymy nowy projekt (File -> New Project Wizard). Wybieramy katalog oraz nazwę projektu. Przechodzimy do następnej zakładki (Next). Przy wyborze Family & Device Settings wybieramy Cyclon II EP2C35F672C6.
- Tworzymy plik z nowym schematem (File -> New -> Design Files -> Block Diagram/Schematic File). Podczas zapisywania nowostworzonego pliku schematu należy pamiętać by nazwa pliku pokrywała się z nazwą projektu (w sytuacji kiedy jako top-level design entity została wybrana inna nazwa należy ją podać jako nazwę pliku).
- Po wprowadzeniu schematu pokazanego na rysunku 1 należy zapisać plik.
- Należy upewnić się, że rodzaj wykonywanej analizy jest ustawiony na Timing: Assignments -> Settings -> Simulator Settings
- Następnie należy skompilować stworzony układ. Faza kompilacji jest podzielona na kilka etapów, dla naszych celów wystarczy jak zostanie wykonany etap Analysis & Synthesisi oraz Fitter. W tym celu wybieramy z menu: Processing -> Start -> Start Analysis & Synthesis (Ctrl + K) a następnie Fitter (można wybrać pełną kompilację jednak jest ona bardziej czasochłonna).
- Aby wykonać symulację należy stworzyć przebiegi sygnałów wejściowych. Tworzymy nowy plik z przebiegami: File -> New -> Verification/Debugging Files -> Vector Waveform File
- Dodajemy do przebiegu listę wejść, którymi będziemy sterować oraz listę wyjść, które będziemy obserwować. Edit -> Insert -> Insert Node or Bus. Wybieramy Node Finder, zaznaczamy Filter=Pins:all, a następnie wybieramy List. Wszystkie wylistowane elementy przenosimy do wybranych elementów i kończymy dodawanie wejść/wyjść.
- W kolejnym kroku tworzymy przebiegi sygnałów wejściowych korzystając z edytora przebiegów (przebieg powinien być podobny do tego pokazanego na rysunku 2.)
Rysunek 2. Przebieg wejściowy.
- Po stworzeniu przebiegu sygnałów wejściowych należy zapisać plik, a następnie wykonać symulację: Processing -> Start Simulation (Ctrl +I). Jako rezultat otrzymamy wykres podobny do tego na rysunku 3.
- Przeanalizuj sygnał y2, co się w nim nie zgadza?
- Porównaj syngały y0 oraz x1. Czy widzisz jakieś nieprawidłowości?
Rysunek 3. Przebieg wyjściowy.
Więcej informacji na temat korzystania z oprogramowania Quartus w celu symulacji można znaleźć tutaj. Tutorial oparty jest na wersji 5.0, natomiast w laboratoriach jest zainstalowana wersja 9.0, jednak idea jest taka sama.
Projekt z wykonanym schematem (bez przebiegow) mozna znalezc tutaj.
Plik z przyporzadkowaniem pinow mozna znalezc tutaj.