PUCY - Etap II - mikrokontroler 8-bitowy



Podobne dokumenty
LEKCJA TEMAT: Zasada działania komputera.

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci ROM w FPGA

Logiczny model komputera i działanie procesora. Część 1.

MIKROKONTROLERY I MIKROPROCESORY

Projekt prostego procesora

2. Architektura mikrokontrolerów PIC16F8x... 13

WOJSKOWA AKADEMIA TECHNICZNA im. Jarosława Dąbrowskiego LABORATORIUM UKŁADÓW PROGRAMOWALNYCH I SPECJALIZOWANYCH

Programowanie Układów Logicznych kod kursu: ETD6203 W dr inż. Daniel Kopiec. Pamięć w układach programowalnych

Systemy Czasu Rzeczywistego FPGA

Architektura typu Single-Cycle

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa Wstęp... 11

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci RAM w FPGA.

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

Altera Quartus II. Opis niektórych komponentów dostarczanych razem ze środowiskiem. Opracował: mgr inż. Leszek Ciopiński

Podstawy działania układów cyfrowych...2 Systemy liczbowe...2 Kodowanie informacji...3 Informacja cyfrowa...4 Bramki logiczne...

Systemy uruchomieniowe

Systemy Czasu Rzeczywistego FPGA

Architektura komputerów

Systemy Czasu Rzeczywistego FPGA

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYNTEZA UKŁADÓW CYFROWYCH ES2D100005

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Mikroprocesory i Mikrosterowniki

PROGRAMOWALNE STEROWNIKI LOGICZNE

Architektura komputerów. Układy wejścia-wyjścia komputera

Język opisu sprzętu VHDL

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

Programowalne Układy Cyfrowe Laboratorium

Sposoby projektowania systemów w cyfrowych

Struktura i działanie jednostki centralnej

PROJEKT I OPTYMALIZACJA STRUKTURY LOGICZNEJ DYDAKTYCZNEGO SYSTEMU MIKROPROCESOROWEGO DLA LABORATORIUM PROJEKTOWANIA ZINTEGROWANEGO

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Magistrala. Magistrala (ang. Bus) służy do przekazywania danych, adresów czy instrukcji sterujących w różne miejsca systemu komputerowego.

ARCHITEKTURA PROCESORA,

Programowalne układy logiczne

Budowa i zasada działania komputera. dr Artur Bartoszewski

Organizacja typowego mikroprocesora

Lista zadań nr 1. Zagadnienia stosowanie sieci Petriego (ang. Petri net) jako narzędzia do modelowania algorytmów sterowania procesami

Programowanie Mikrokontrolerów

Interfejs urządzeń peryferyjnych

Mikroprocesory i Mikrosterowniki

Architektura komputerów

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYNTEZA UKŁADÓW CYFROWYCH ES2D100005

Specyfika projektowania Mariusz Rawski

Architektura komputerów wer. 7

Kurs Podstawowy S7. Spis treści. Dzień 1

4. Karta modułu Slave

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

USB interface in 8-bit microcontrollers PIC18F family manufactured by Microchip.

Programowanie w językach asemblera i C

Projektowanie. Projektowanie mikroprocesorów

Programowalne układy logiczne

Programator procesorów rodziny AVR AVR-T910

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

Zagadnienia zaliczeniowe z przedmiotu Układy i systemy mikroprocesorowe elektronika i telekomunikacja, stacjonarne zawodowe

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Opracował: Jan Front

Projektowanie Urządzeń Cyfrowych

Architektura komputerów

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

Podstawy programowania

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Systemy Wbudowane. Założenia i cele przedmiotu: Określenie przedmiotów wprowadzających wraz z wymaganiami wstępnymi: Opis form zajęć

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

WPROWADZENIE Mikrosterownik mikrokontrolery

Systemy Czasu Rzeczywistego FPGA

Komputer IBM PC niezależnie od modelu składa się z: Jednostki centralnej czyli właściwego komputera Monitora Klawiatury

Tranzystor JFET i MOSFET zas. działania

Budowa komputera Komputer computer computare

PRUS. projekt dokumentacja końcowa

Wstęp Architektura... 13

Rok akademicki: 2013/2014 Kod: EEL s Punkty ECTS: 2. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Mikroprocesor Operacje wejścia / wyjścia

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Technologia informacyjna. Urządzenia techniki komputerowej

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

Podział układów cyfrowych. rkijanka

PLC1: Programowanie sterowników logicznych SIEMENS SIMATIC S7-300/400 - kurs podstawowy

Układy Cyfrowe projekt. Korekcja jasności obrazów w 24-bitowym formacie BMP z użyciem funkcji gamma. Opis głównych modułów sprzętowych

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

CompactPCI. PCI Industrial Computers Manufacturers Group (PICMG)

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Technika cyfrowa projekt: Sumator 4 bitowy równoległy

Metody optymalizacji soft-procesorów NIOS

Technika Mikroprocesorowa

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Architektura komputerów

Transkrypt:

PUCY - Etap II - mikrokontroler 8-bitowy Stefan Szczygielski, Marcin Miszczak 12 stycznia 2009 Streszczenie Celem Etapu II było zaprojektowanie i zaimplementowanie w języku VHDL mikrokontrolera 8-bitowego wykorzystującego interfejsy wejścia/wyjścia utworzone w ramach etapu I (klawiatura PS2 oraz interfejs Centronix). 1. Założenia funkcjonalne Zadany mikrokontroler wyposażony ma być w jednostkę centralną (CPU), pamięć ROM programu (256 bajtów, 0x0000-0x00FF), pamięć RAM dla danych (256 bajtów, 0x0100-0x01FF), wcześniej przygotowane interfejsy wejścia/wyjścia (adresowane w przestrzeni IO pod adresem 0x00). Jednostka CPU ma do dyspozycji 8 rejestrów. Zestaw instrukcji jest w pełni ortogonalny, długość rozkazu jest różna dla poszczególnych instrukcji (1, 2 lub 3 bajty), istnieją instrukcje adresujące 3 rejestry jednocześnie. Całość systemu połączona jest za pomocą 1 wspólnej trójstanonowej szyny komunikacyjnej, którą zarządza CPU. Adresowanie przestrzeni pamięci jest 16-bitowe, przestrzeń IO jest 8-bitowa. Urządzenia podrzędne na magistrali mogą wprowadzać cykle oczekiwania. Dostępny jest zewnętrzny interfejs magistrali. Operacja mnożenia ma być zrealizowane z wykorzystaniem dodatkowej jednostki wykonawczej będącej układem mikroprogramowalnym implementującym tzw. metodę podstawową mnożenia. Powyższe minimalne założenia rozszerzono o elementy ułatwiające wykorzystanie systemu mikrokontrolera: możliwość podglądu oraz programowania pamięci, pracę krokową procesora (zarówno na poziomie cykli rozkazowych, jak i maszynowych) oraz podgląd jego stanu. Na potrzeby sprawnego tworzenia programów postanowiono stworzyć asembler. Dodatkowo skupiono uwagę na możliwości stworzenia opisu systemu w sposób przenośny umożliwiający jego implementację w układach programowalnych różnych producentów, w szczególności Xilinx i Altera. Większość systemu została zaimplementowana w języku VHDL i umieszczona w układzie Spartan 3E firmy Xilinx zainstalowanym na płytce prototypowej NEXYS2 wyprodukowanej przez firmę Digilent. Port wyjściowy umożliwiający drukowanie liczb w kodzie U2 na drukarce został umieszczony w oddzielnym układzie Altera ACEX1K ze względu na jego gotową implementację w języku AHDL specyficzną dla narzędzi i układów tej firmy. 2. Podział na jednostki projektowe Projekt został podzielony na następujące elementy (Rys. 1): top pucy puter - komponent integrujący projekt dla układu Xilinx 1

Rys. 1: Struktura projektu dpim2pucy puter - komunikacja z interfejsem USB pucy bugger - programator/debugger systemu pucy cpu - procesor register bank - bank rejestrów procesora multiplier - układ mnożący pucy ram - pamięć systemu pucy keyboard - interfejs wejściowy (klawiatura) wbc keyboard - niskopoziomowy sterownik klawiatury wbc keyb2signed - wprowadzanie liczby 8-bit U2 drive7 - sterownik dynamicznego wyświetlacza 7-segmentowego pucy ext bus - interfejs szyny zewnętrznej ext wbc outp - interfejs zewnętrznego portu wyjściowego top pucy lpt - komponent integrujący projekt dla układu Altera outp - drukowanie liczby 8-bit U2 converter - konwerter liczby U2 na poszczególne cyfry wbc lpt - niskopoziomowy sterownik drukarki 2.1. Programator/Debugger Na potrzeby programowania pamięci oraz debugowania zestawu mikroprocesorowego wykorzystano mechanizm komunikacyjny zaimplementowany na płytce prototypowej NEXYS2. Mechanizm ten wykorzystuje interfejs USB 2.0 zawarty w mikrokontrolerze rodziny FX2 firmy Cypress i został 2

przez producenta płytki nazwany Digilent parallel interface model (Dpim). Jego konstrukcja inspirowana jest interfejsem równoległym komputerów IBM PC pracującym w trybie EPP i w skrócie polega na udostępnieniu 256 adresów 8-bitowych w trybie odczytu i zapisu. Za komunikację USB z komputerem PC odpowiada odpowiednio oprogramowany mikrokontroler Cypress CY7C68013A oraz część logiki w układzie FPGA. Dla systemów operacyjnych z rodziny Windows udostępniona jest biblioteka umożliwiająca wykorzystanie tego rodzaju komunikacji we własnych aplikacjach. Więcej na temat tego systemu, jego charakterystyce, możliwościach i programowaniu można znaleźć w dostarczonej dokumentacji (Digilent Parallel Interface Model Reference Manual, DPCUTIL Programmer s Reference Manual). Firma Digilent przygotowała również zarówno przykładowy kod w języku VHDL umożliwiający zastosowanie interfejsu jak i przykładową aplikację wykorzystującą bibliotekę programistyczną języka C. 2.1.1. dpim2pucy puter Komponent dpim2pucy puter jest interfejsem implementującym most pomiędzy interfejsem Dpim a Wishbone. Zaimplementowany interfejs umożliwia dostęp do 8 adresów 8-bitowych zarówno w trybie odczytu jak i zapisu (magistrala adresowa 3-bitowa). Komponent ten został napisany w oparciu o przykładowy plik dpimref.vhd dostarczony przez firmę Digilent. Warto zwrócić uwagę na konieczność rejestrowania sygnałów wejściowych dostarczanych przez układ Cypress ze względu na asynchroniczność jego zegarów w stosunku do zegara układu FPGA. Przykładowy kod tego faktu nie uwzględniał powodując losowe problemy z pracą interfejsu. 2.1.2. pucy bugger Komponent pucy bugger umożliwia ingerencję w zaprojektowany system mikroprocesorowy w czasie jego pracy. Implementuje 7 rejestrów dostępnych za pośrednictwem magistrali Wishbone: dwa adresujące magistralę pamięci (jest ona 16-bitowa), dwa umożliwiające dostęp do pamięci (jeden z nich implementuje odczyt/zapis z postinkrementacją adresu wskazywanego przez rejestry adresowe w celu optymalizacji procesu dostępu do ciągłych obszarów danych) oraz po jednym odpowiednio umożliwiające odczyt licznika rozkazów procesora, odczyt stanu procesora oraz sterowanie sygnałami debugowania (uruchom/zatrzymaj, krok rozkazowy, krok maszynowy, sygnał zatrzymania procesora). Komponent realizuje dostęp do szyny wewnętrznej systemu mikroprocesorowego w trybie aktywnym (może adresować urządzenia i żądać do nich dostępu) wspólnie z procesorem. Procesor zwalnia szynę w stanie zatrzymania, więc aby uniknąć konfliktu wysterowywania szyny komponent pomija cykle dostępu do szyny w przypadku stwierdzenia pracy procesora. 2.1.3. pucy-debug Aplikacja pucy-debug jest interakcyjnym programem konsolowym umożliwiającym programowanie pamięci oraz pracę krokową procesora zestawu mikroprocesorowego. Napisana została w języku C++ przy wykorzystaniu biblioteki komunikacyjnej dpcutil dostarczonej przez firmę Digilent, skompilowana może zostać zarówno kompilatorem środowiska Visual Studio firmy Microsoft jak i darmowym kompilatorem MinGW. Instrukcję korzystania z aplikacji (listę dostępnych poleceń) można uzyskać po wprowadzeniu z klawiatury znaku zapytania (?). 2.2. spasm.pl Simple PUCY (Perl) Assembler jest asemblerem ułatwiającym tworzenie programów dla zestawu mikroprocesorowego, napisany został w postaci skryptu języka Perl. Nazwy mnemoników 3

odpowiadającym poszczególnym instrukcjom (jmp, ldi, lds, sts, in, out) odpowiadają nazwami, znaczeniem i składnią mnemonikom stosowanym w narzędziach programistycznych gnu dla architektury AVR mikrokontrolerów firmy Atmel. Minimalnie różnią się operacje arytmetyczne (add, sub, mul), które są trójargumentowe - ich parametry to kolejno rejestr przeznaczenia, rejestry argumentów (Rd, Ra, Rb). Mnemonik stop służący do zatrzymania procesora jest odpowiednikiem instrukcji break procesorów AVR. Asembler wspomaga adresowanie za pomocą etykiet, jego działanie jest dwuprzebiegowe. Pierwszy przebieg polega na analizie wszystkich występujących mnemoników pod kątem ich rozmiaru w kodzie programu (mają różne długości, przy czym mnemoniki o danej nazwie mają zawsze taką samą długość niezależnie od swoich argumentów) w celu wygenerowania adresów odpowiadającym poszczególnym symbolom, za drugim przebiegiem generowany jest finalny kod programu. Stałe mogą być zapisane zarówno dziesiętnie jak i szesnastkowo, weryfikowane są ich zakresy (zarówno dla liczb 8-bitowych w kodzie U2 jak i adresów 16-bitowych). Dodatkowo istnieje możliwość definiowania stałych symboli (pseudoinstrukcja.equ). 2.3. CPU 2.3.1. pucy cpu Komponent pucy cpu będący procesorem systemu podłączony jest do programatora/debugera oraz szyny systemowej. Wewnętrznie korzysta z komponentów banku rejestrów register bank oraz układu mnożącego multiplier. Komponent procesora składa się z głównego asynchronicznego procesu maszyny stanów FSM oraz kilku procesów wykonawczych sterującymi poszczególnymi podsystemami. Synchroniczna zmiana stanów następuje w procesie FSM CTRL. Zmiany stanu procesora mogą następować tyko w sytuacji, gdy procesor pracuje bez zatrzymań (run) bądź wykonuje krok instrukcyjny/maszynowy. Związane z trybem pracy rejestry regcpurun, regstep, regmstep są odpowiednio ustawiane w oparciu o sygnały sterujące generowane przez debugger (narastające zbocza na liniach cpu step i, cpu mstep i oraz stan linii cpu run i) jak również i wewnętrzne sygnały takie jak sigcpustep, sigcpumstep, sig- CycleEnd (zakończenie cyklu instrukcyjnego). Proces FSM CTRL wysyła sygnał sigstopallrunningcpuprocesses w sytuacji, gdy procesor jest zatrzymany. Sygnał ten blokuje wykonanie wszelkich operacji przez procesy podsystemów i żąda utrzymanie zawartości wszystkich sygnałów/rejestrów w stanie zgodnym z logiką zatrzymania procesora: między innymi inkrementacja licznika instrukcji ma być wstrzymana, strob zapisu do banku rejestrów wycofany, a szyna danych wprowadzona w stan wysokiej impedancji umożliwiając tym samym dostęp do niej komponentowi programującemu/debugującemu. Oprócz procesów związanych z pracą krokową procesora w komponencie pucy cpu znajdują się dwa istotne z punktu widzenia funkcjonowania CPU procesy wykonawcze: proces banku rejestrów i proces magistrali. Procesy te otrzymują sygnały oznaczone prefiksami odpowiednio sigrboraz sigbus-, które sterują ich działaniem. Oprócz funkcji podstawowych proces banku rejestrów odpowiada również za operacje arytmetyczne (związane z sygnałami sigrbadd, sigrbsum, sigrbmul), a proces magistrali za rejestry operacji (opcode) adresowania rejestrów (regra, regrb, regrb) i magistrali (rega). Sterowanie licznikiem rozkazów odbywa się w ramach procesu PC w oparciu o sygnały sigloadpc oraz sigincpc odpowiedzialne za odpowiednio ładowanie licznika rozkazów wartością z szyny danych (fragment instrukcji) oraz jego inkrementację. Licznik rozkazów jest zerowany pod wpływem sygnału resetu. Takie podzielenie funkcji umożliwiło stworzenie przejrzystego kodu języka VHDL. Zaimplementowanie nowych operacji (instrukcji) wykonywanych przez procesor powinno być możliwe przy 4

relatywnie niedużym nakładzie pracy. 2.3.2. register bank Komponent register bank stanowiący rejestry procesora jest opisany następująco: architecture B e h a v i o r a l of r e g i s t e r b a n k i s type ram type i s array (0 to 7) of s t d l o g i c v e c t o r (7 downto 0 ) ; signal ram : ram type ; begin process ( c l o c k ) begin end i f ; end process ; i f ( r i s i n g e d g e ( c l o c k ) ) then i f ( wren = 1 ) then ram ( c o n v i n t e g e r ( unsigned ( wraddress ) ) ) <= data ; end i f ; qa <= ram ( c o n v i n t e g e r ( unsigned ( r d a d d r e s s a ) ) ) ; qb <= ram ( c o n v i n t e g e r ( unsigned ( r d a d d r e s s b ) ) ) ; Jest to behawioralny opis pamięci trójportowej synchronicznej zgodny z komponentem, który można wygenerować kreatorem funkcji oprogramowania Quartus II firmy Altera (MegaWizard Plug- In Manager Memory Compiler RAM: 3-PORT, Rys. 2). Rys. 2: Komponent register bank wygenerowany za pomocą oprogramowania Quartus II Oprogramowanie firmy Xilinx nie ma problemu z wyekstrahowaniem pamięci trójportowej na podstawie opisu behawioralnego i umieszczeniem jej w dedykowanych komórkach pamięci (wymagany jest stosowne ustawienie opcji ram style, domyślnie pamięć zostanie zrealizowana w elementach LUT ze względu na jej mały rozmiar). Oprogramowanie Quartus II w wersji 8.1 nie potrafi wyekstrahować pamięci trójportowej (jedynie dwuportowe) i dlatego dla zachowania przenośności projektu zastosowano model całkowicie zgodny z komponentem generowanym przez to oprogramowanie. Model synchroniczny został zastosowany ze względu na synchroniczną architekturę dedykowanych bloków pamięci dostępnych w nowszych układach FPGA. W przypadku układów firmy Altera asynchroniczny model dedykowanych bloków pamięci występuje jeszcze w układach ACEX1K, natomiast wszystkie układy z rodziny Cyclone posiadają już pamięci z synchronicznym odczytem. 2.3.3. multiplier Komponent multiplier jest układem mikroprogramowalnym realizującym operację mnożenia metodą podstawową. Układ został zaimplementowany w oparciu o przykład opisany w pliku PUCY 09a Mikroprogramowanie przyklad prosty.pdf, w szczególności sterowania dla poszczególnych elementów układu są identyczne. Mnożone są dwie 8-bitowe liczby w kodzie U2, wynik jest także 8-bitowy. Instrukcje systemu mikroprocesorowego nie wykorzystują bitów przepełnienia, w związku z tym nie jest ono w żaden sposób sygnalizowane. Nie zaimplementowano również dodatkowego kroku 5

Rys. 3: Symulacja działania układu mnożącego korekcyjnego, gdyż modyfikuje on jedynie bardziej znaczący bajt 16-bitowego wyniku. Modyfikacja algorytmu w stosunku do prezentowanego mnożenia liczb w kodzie NKB polega w zasadzie na wstawieniu w miejsce najbardziej znaczącego bitu wyniku odpowiedniego bitu znaku. Działanie komponentu jest sterowane sygnałami strobu we ok i potwierdzenia wy ok analogicznie jak w przypadku działania magistrali Wishbone (Rys. 3). Należy pamiętać o podtrzymaniu danych wejściowych podczas aktywnego stanu linii strobu. Zastosowanie takiego układu mnożącego zostało podyktowane wyłącznie założeniami projektowymi i nie ma żadnego sensu zarówno mając na uwadze wydajność jak i zajętość elementów logicznych docelowego układu FPGA. Alternatywny komponent mnożący simple mul wykorzystuje operację mnożenia dwóch liczb ze znakiem dostępną w języku VHDL i dzięki obecności bloków mnożących w układzie jest bezproblemowo do nich syntezowana. Dzięki temu operacja mnożenia może być wykonywana w sposób kombinacyjny bez dodatkowych cykli opóźnienia. 2.4. Pamięć Specyfikacja systemu mikroprocesorowego wyróżnia dwa rodzaje pamięci: RAM oraz ROM. Ze względu na fakt, iż zdecydowano się na system mający możliwość programowania pamięci ROM programu bez rekonfiguracji układu FPGA, pamięć ROM została zastąpiona pamięcią RAM. Pamięć RAM systemu uzyskała w ten sposób pojemność 512 słów 8-bitowych i zajęła przestrzeń adresową pamięci w zakresie 0x0000-0x01FF. Komponent pucy ram jest opisaną behawioralnie pamięcią synchroniczną: i f ( r i s i n g e d g e ( CLK I ) ) then r e a d y d a t a a d d r <= a i ( SIZE BITS 1 downto 0 ) ; what data address i s ready at output? i f ( w r i = 1 and mrq i = 1 and a i (15 downto SIZE BITS ) = BASE ADDR(15 downto SIZE BITS ) ) then ram ( c o n v i n t e g e r ( unsigned ( a i ( SIZE BITS 1 downto 0 ) ) ) ) <= d i o ; r e a d y d a t a a d d r <= a i ( SIZE BITS 1 downto 0 ) ; what data address i s w r i t t e n? 6

end i f ; data <= ram ( c o n v i n t e g e r ( unsigned ( a i ( SIZE BITS 1 downto 0 ) ) ) ) ; end i f ; asynchronous p a r t i f ( a i = r e a d y d a t a a d d r ) then s i g w t <= 0 ; else s i g w t <= 1 ; end i f ; Pamięć opisana w ten sposób jest syntezowana do dedykowanych komórek pamięci obecnych w układach FPGA zarówno przez narzędzia firmy Xilinx (ISE), jak i Altera (Quartus II). Dzięki takiemu opisowi uzyskano pożądaną przenośność projektu. Sterowanie sygnałem żądania oczekiwania (WT) zrealizowano z wykorzystaniem dodatkowego rejestru, w którym przechowywany jest adres danych zapisanych/dostępnych do odczytu. Kombinacyjne porównanie zawartości tego rejestru z żądanym adresem wystawia sygnał żądania cyklu oczekiwania. Sygnał ten zgodnie z przyjętą konwencją dostępny jest natychmiast w następnym cyklu zegara po wystawieniu sygnałów żądania operacji. 2.5. Porty wejścia/wyjścia 2.5.1. pucy keyboard Komponent pucy keyboard integruje komponenty interfejsu klawiatury przygotowane w ramach etapu I (wbc keyboard, wbc keyb2signed) udostępniając jednocześnie interfejs trójstanowej szyny zastosowanej w całym systemie mikroprocesorowym. Dzięki temu, że komponenty te zostały zaimplementowane przy wykorzystaniu języka VHDL oprócz wymaganego AHDL, można było je zastosować bezpośrednio w układzie programowalnym firmy Xilinx. Do podłączenia klawiatury wykorzystano złącze PS/2, w które została wyposażona płytka prototypowa NEXYS2. 2.5.2. drive7 Płytka prototypowa NEXYS2 posiada 4-cyfrowy wyświetlacz 7-segmentowy sterowany dynamicznie, który wykorzystano do wyświetlania liczby wprowadzanej za pomocą klawiatury. Komponent drive7 jest prostym sterownikiem wyświetlacza dynamicznego umożliwiającym wyświetlenie znaku minus na pierwszej pozycji oraz trzech cyfr na pozostałych pozycjach. Szczegóły obsługi wyświetlacza można znaleźć w dokumentacji płytki dostarczonej przez firmę Digilent. 2.5.3. pucy ext bus Komponent pucy ext bus umożliwia wyprowadzenie wewnętrznej szyny trójstanowej systemu mikroprocesorowego na zewnątrz układu FPGA. Sygnały są aktywne tylko wówczas, gdy procesor bądź progamator realizuje cykle dostępu do komponentów innych, niż wewnętrzne komponenty systemu. W pozostałych przypadkach wyprowadzenia układu FPGA pozostają w stanie wysokiej impedancji. 2.5.4. ext wbc outp Komponent ext wbc outp dekoduje dostępy zapisu do przestrzeni IO pod adresem 0x00 tłumacząc je na zapisy na zewnątrz układu za pośrednictwem interfejsu będącego podzbiorem magistrali Wishbone (implementuje tylko sygnały danych, strobu oraz potwierdzenia). Sygnał potwierdzenia 7

będący sygnałem wejściowym zewnętrznym może być sygnałem asynchronicznym w stosunku do sygnałów układu mikroprocesora i dlatego jest filtrowany analogicznie jak sygnały klawiatury w komponencie wbc keyboard. 2.6. Port wyjściowy 2.6.1. top wbc outp Komponent top wbc outp odpowiada za integrację poszczególnych komponentów portu wyjściowego interfejsu Centronix przygotowanych w ramach etapu I (outp, converter oraz wbc lpt). Ze względu na fakt, iż komponenty odpowiedzialne za obsługę drukarki zostały napisane w języku AHDL specyficznym dla układów firmy Altera, zaimplementowane zostały w odrębnym układzie tej firmy w stosunku do reszty systemu mikroprocesorowego. Transfer danych pomiędzy układami dokonywany jest za pomocą jednokierunkowego interfejsu wykorzystującego podzbiór sygnałów szyny Wishbone (dane, strob, potwierdzenie). Sygnał strobu będący sygnałem wejściowym zewnętrznym asynchronicznym w stosunku do sygnałów układu (każdy z układów programowalnych jest taktowany niezależnym zegarem) jest poddawany filtracji analogicznej jak w przypadku sygnałów klawiatury w komponencie wbc keyboard. 8