MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2....

52
Politechnika Poznańska Wydział Elektryczny Instytut Automatyki i Inżynierii Informatycznej Praca dyplomowa inżynierska MODEL KOMPUTERA PDP-11 W STRUKTURZE FPGA FPGA implementation of PDP-11 minicomputer Benedykt Jakub Jaworski Promotor dr inż. Dariusz Janiszewski Poznań, 2014 r.

Transcript of MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2....

Page 1: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Politechnika PoznańskaWydział Elektryczny

Instytut Automatyki i Inżynierii Informatycznej

Praca dyplomowa inżynierska

MODEL KOMPUTERA PDP-11 W STRUKTURZE FPGAFPGA implementation of PDP-11 minicomputer

Benedykt Jakub Jaworski

Promotordr inż. Dariusz Janiszewski

Poznań, 2014 r.

Page 2: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Streszczenie

W pracy omówiono budowę projektu o otwartym kodzie źródłowym „w11”, implementującegoprocesor o funkcjonalności komputera PDP-11/70 w strukturze FPGA, sposób dostosowania tegoprojektu do konkretnego układu FPGA – Cyclone II firmy Altera, oraz budowę prostego urzą-dzenia wejścia dla tego komputera przy pomocy zestawu uruchomieniowego Arduino Mega 2560.Gotowy układ potrafi wykonywać proste programy w kodzie maszynowym komputera PDP-11.

Abstract

This thesis describes how the open-source project “w11” – which implements PDP-11/70-compatible processor – is constructed, it describes a method of adjusting this project to fitthe specific FPGA chip – Cyclone II manufactured by Altera, and a construction of a simpleinput device for this computer using the development board Arduino Mega 2560. The workingsystem can execute simple programs written in machine code of the PDP-11 computers.

I

Page 3: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Spis treści

1 Wstęp 11.1 Motywacja projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Cel i zakres pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Wprowadzenie do tematyki pracy 32.1 PDP-11 – rys historyczny . . . . . . . . . . . . . . . . . . . . . . . . 3

2.1.1 PDP-11 współcześnie . . . . . . . . . . . . . . . . . . . . . . . 42.2 PDP-11 – architektura komputera . . . . . . . . . . . . . . . . . . . 4

2.2.1 Rejestry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2.2 Pamięć i adresy . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Urządzenia wejścia/wyjścia . . . . . . . . . . . . . . . . . . . . 72.2.3 Budowa rozkazów procesora . . . . . . . . . . . . . . . . . . . 8

2.3 FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.1 Budowa i zasada działania . . . . . . . . . . . . . . . . . . . . 102.3.2 Zastosowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.3.3 Wykorzystany układ FPGA – Cyclone II w zestawie DE1 . . . 12

2.4 Przegląd projektów PDP-11 na FPGA . . . . . . . . . . . . . . . . . 12

3 Analiza projektu „w11” Waltera Müllera 153.1 Elementy procesora . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2 Obsługa pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.3 Urządzenia wejścia/wyjścia – port konsoli . . . . . . . . . . . . . . . 18

4 Dostosowanie projektu „w11” do Cyclone’a II 214.1 Przygotowanie projektu do poprawnej kompilacji . . . . . . . . . . . 21

4.1.1 Schemat w Quartusie II . . . . . . . . . . . . . . . . . . . . . . 214.1.2 Implementacja pamięci . . . . . . . . . . . . . . . . . . . . . . 23

4.2 Budowa urządzeń wejścia/wyjścia . . . . . . . . . . . . . . . . . . . 264.2.1 Wyjście – wyświetlanie słowa procesora . . . . . . . . . . . . . 264.2.2 Wejście – automat i przyciski zestawu DE1 . . . . . . . . . . . 274.2.3 Wyniki symulacji i testów . . . . . . . . . . . . . . . . . . . . . 274.2.4 Wejście – komunikacja przez rozszerzenie 40-pinowe . . . . . . 284.2.5 Wyniki symulacji układu . . . . . . . . . . . . . . . . . . . . . 29

5 Wgrywanie programów za pomocą Arduino 355.1 Funkcje do komunikacji z PDP-11 na Cyclone’ie II . . . . . . . . . . 35

5.1.1 Zapis binarnych danych do pamięci – writeMem . . . . . . . . 355.1.2 Wysyłanie pojedynczego polecenia konsoli . . . . . . . . . . . 36

sendCmd() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36sendData() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

II

Page 4: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

setData() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37setDmuxAddr() . . . . . . . . . . . . . . . . . . . . . . . . . . 37doLatch() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38doRequest() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5.2 Test i uzyskane wyniki . . . . . . . . . . . . . . . . . . . . . . . . . . 38

6 Możliwości dalszego rozwoju 40

7 Podsumowanie 42

A Załączniki 43

Spis tabel 44

Spis rysunków 45

Spis listingów 46

Literatura 47

III

Page 5: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Rozdział 1

Wstęp

1.1 Motywacja projektu

Projekt ten powstał z powodu chęci poznania architektury komputerów PDP-11,nauki obsługi minikomputerów z tej serii i udoskonalenia swojej znajomości językaopisu sprzętu VHDL.

Komputery z rodziny PDP-11 były jednymi z bardziej popularnych minikom-puterów w latach siedemdziesiątych dwudziestego wieku. Produkowano je do latdziewięćdziesiątych, a gdzieniegdzie wykorzystuje się je do dnia dzisiejszego. Miałyone ogromny wkład w rozwój informatyki. Dokładniej ich historię przedstawionow sekcji 2.1.

Warto dodatkowo zaznaczyć, że podobny projekt był już tworzony na Politech-nice Poznańskiej, jednak został wykonany tylko częściowo i nie udało się uruchomićpełnego działającego procesora ([7]).

Z tych powodów powstała ta praca, mająca na celu ukończenie działającegoprocesora PDP-11 w układzie Cyclone II firmy Altera.

1.2 Cel i zakres pracy

Celem projektu było uzyskanie funkcjonującego procesora implementującegoarchitekturę PDP-11 w układzie Cyclone II firmy Altera, z możliwością jego prze-testowania. Zamiast pisać od początku w języku opisu sprzętu pełną implementa-cję procesora, postanowiono wykorzystać gotowy projekt udostępniany na licencjiwolnego oprogramowania.

Wybranym projektem został „w11”, napisany przez Waltera F. J. Müllera – do-kładniej opisany w rozdziale 3. Projekt ten implementuje pełną architekturę PDP-11/70 w języku VHDL. Wiekszość kodu projektu jest napisana zgodnie ze stan-dardem VHDL-a i powinna się bez problemu kompilować na programowalnychukładach logicznych dowolnego producenta, o ile tylko mają one odpowiednio dużozasobów.

Wyjątkiem są układy pamięci oraz implementacje buforów wejścia/wyjścia, pi-sane specyficznie pod układy firmy Xilinx. Również tylko na tych układach projektbył testowany. Oznacza to, że uzyskanie działającego procesora w układzie Cyc-lone II wymagało:

• zapoznania się z budową projektu „w11”,

• sprawdzenia, czy środowisko Quartus II Altery potrafi skompilować ten pro-jekt dla układu Cyclone II,

1

Page 6: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

1.2. Cel i zakres pracy

• zidentyfikowania problemów związanych z kompilacją,

• zlikwidowania tych błędów poprzez poprawienie modułów, w których one wy-stępują na zgodne z układem Altery albo napisanie ich zupełnie od nowa,

• stworzenia od początku pewnych prostych urządzeń wejścia/wyjścia w celuprzetestowania układu.

2

Page 7: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Rozdział 2

Wprowadzenie do tematyki pracy

2.1 PDP-11 – rys historyczny

Układy scalone zawierające wiele tranzysotorów umożliwiły w latach sześćdzie-siątych dwudziestego wieku zmniejszenie wielkości komputerów – funkcjonalnośćimplementowana wcześniej za pomocą lamp elektronowych w urządzeniach, zaj-mujących obszar wielkości pokoju, była teraz realizowana przez urządzenia wiel-kości szafy – tak zwane minikomputery.

Wiodącym producentem minikomputerów przez długi czas była Digital Equip-ment Corporation, w skrócie DEC. Pierwszym minikomputerem tej firmy (i praw-dopodobnie pierwszym na zachodzie, por. [15]) był PDP-8.

W roku 1970 DEC wyprodukowała pierwszy model z serii PDP-11. Był to kom-puter o 16-bitowym słowie, zbudowany z układów TTL w małej skali integracji.PDP-11 niedługo stał się najpopularniejszym minikomputerem w Stanach Zjed-noczonych. Używało go większość uczelni i ośrodków badawczych, zajmującychsię rozwojem informatyki. Był również wykorzystywany do sterowania procesamiw czasie rzeczywistym.

Komputery PDP-11 wprowadziły kilka nowatorskich rozwiązań, które ułatwiałypisanie na nie programów, między innymi:

• ortogonalną listę rozkazów – zastępując m.in. instrukcje typu LOAD i STOREjedną instrukcją MOV, pozwalającą programiście w jednolity sposób obsługiwaćrejestry, pamięć i perfyferia;

• umieszczenie wskaźnika stosu i licznika programu pośród rejestrów ogólnegoprzeznaczenia i danie do nich pełnego dostępu programiście;

• obsługę programową przerwań o czterech poziomach priorytetów.

Część z tych innowacyjnych cech komputerów PDP-11 szeroko się przyjęła i wy-stępuje w większości produkowanych dzisiaj procesorów.

Dostępne były modele PDP-11 o różnej wielkości pamięci operacyjnej, pery-feriach, możliwościach obliczeń (np. część była wyposażona w jednostkę zmien-noprzecinkową, inne nie), co pozwalało na wybór takiej konfiguracji komputera,która odpowiadała potrzebom kupującego i jego możliwościom finansowym.

Dzięki powszechności komputerów z rodziny PDP, to właśnie na nich zaczy-nała się współczesna informatyka. System operacyjny Unics (z później zmienionąpisownią na Unix) został napisany przez Kena Thompsona, Dennisa Ritchiego,Douglasa McIlroya i Joego Ossannę w asemblerze PDP-7. W roku 1973 został

3

Page 8: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.2. PDP-11 – architektura komputera

przepisany w nowym języku programowania – C, co umożliwiło łatwe przenosze-nie go na inne komputery. Dalszy rozwój Uniksa był prowadzony głównie w sie-ciach uczelnianych łączących maszyny PDP-10 (klasy mainframe, o ogromnej jakna ówczesne standardy mocy obliczeniowej) i PDP-11 właśnie. To również na nichRichard Stallman rozpoczął projekt GNU – próbę wolnej implementacji systemuUnix. Historia systemu GNU została opisana w [16].

Komputery PDP-11 powszechnie kopiowano w czasach zimnej wojny w krajachbloku wschodniego, w tym w Polsce, jako komputery z serii SM (ros. СистемаМалых ЭВМ, System Małych Komputerów).

2.1.1 PDP-11 współcześnie

Mimo tego, że od dwóch dekad minikomputery PDP-11 nie są już produko-wane, wciąż bywają wykorzystywane. Może to wynikać z łatwości naprawy takiegokomputera (wymiana odpowiedniego układu TTL) oraz istniejącego na nie opro-gramowania i całej współpracującej z nimi infrastruktury w wykorzystujących jeprzedsiębiorstwach.

Przykładem takiego przedsiębiorstwa jest General Electric w Kanadzie. Jak moż-na przeczytać w [6], GE Canada ogłosiło latem 2013, że poszukuje programi-stów asemblera PDP-11 do obsługi komputera zarządzającego elektrownią jądrowąw Peterborough w prowincji Ontario. GE zamierza wykorzystywać minikomputeryPDP-11 do nadzoru elektrowni jądrowej do roku 2050! Z tego powodu potencjalnyzatrudniony programista zajmowałby się nie tylko utrzymaniem istniejącego kodu,ale również szkoleniem swoich następców.

Skoro utrzymanie elektrowni nie wymaga większej mocy obliczeniowej od ofe-rowanej przez PDP-11, a komputer ten działa bezawaryjnie od kilkudziesięciu lat,to najprawdopodobniej nie ma sensu go wymieniać.

Przykład ten pokazuje, że PDP-11, chociaż dzisiaj już są głównie domeną „infor-matycznej archeologii”, mają wciąż spore znaczenie we współczesnej automatycei energetyce. I prawdopodobnie będą miały takie znaczenie jeszcze przez co naj-mniej kilkadziesiąt lat.

2.2 PDP-11 – architektura komputera

Architektura komputerów PDP-11 definiuje zestaw rozkazów i sposoby ich ob-sługi na 16-bitowych słowach. Dokładne informacje na jej temat można znaleźćw [9] i [10].

Liczby całkowite w komputerach PDP-11 były przechowywane jako 16-bitoweliczby w kodzie uzupełnień do dwóch (U2), co umożliwia wykonywanie operacjina liczbach bez znaku za pomocą tych rozkazów, co na liczbach ze znakiem.

Znaki pisarskie (litery alfabetu łacińskiego, cyfry, znaki przestankowe, poleceniasterujące) były kodowane za pomocą siedmiu bitów w kodzie ASCII.

2.2.1 Rejestry

Komputery PDP-11 miały 8 szesnastobitowych rejestrów ogólnego przeznacze-nia, numerowanych od 0 do 7. Ostatnie dwa dodatkowo spełniały specjalną rolę –rejestr 6 to wskaźnik stosu (SP – ang. Stack Pointer), rejestr 7 to licznik programu(PC – ang. Program Counter).

4

Page 9: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.2. PDP-11 – architektura komputera

bity: 15–8 7–5 4 3 2 1 0specjalne bity zarezerwowane Priorytet CPU T N Z V C

Rysunek 2.1: Organizacja PSW

Na każdym z rejestrów ogólnego przeznaczenie możliwe było wykonanie do-wolnego rozkazu procesora przyjmującego argument. Udostępnienie w ten sposóbprogramiście licznika programu umożliwiło dodatkowe sposoby adresowania i roz-szerzyło możliwości niektórych rozkazów, co zostało dokładniej opisane w sek-cji 2.2.3.

Oprócz rejestrów ogólnego przeznaczenia, każdy procesor PDP-11 udostęp-niał dodatkowe rejestry specjalne, m.in.: słowo stanu procesora (w [10]: PSW –ang. Processor Status Word lub w [9]: PSR – ang. Processor Status Register) orazrejestr konsoli (CS – ang. Console Switch).

Organizację PSW przedstawia rys. 2.1.Bity specjalne nie były domyślnie zdefiniowane w architekturze PDP-11 i mo-

gły mieć różne znaczenie w zależności od modelu, były m.in. wykorzystywanedo wyboru trybu pracy procesora i mapowania długich adresów fizycznych pa-mięci do szesnastobitowych adresów logicznych.

Bity priorytetu procesora decydowały o tym na jakim priorytecie aktualniedziała procesor (możliwe wartości od 0 do 7), służyły one do decydowania o mo-mencie obsłużenia przerwania. Przerwanie było zgłaszane na jednej z czterechszyn przerwań – BR4 do BR7 – odpowiadającej jego priorytetowi. Gdy nadcho-dziło przerwanie o wyższym priorytecie od tego, w którym aktualnie znajdowałsię procesor, zostawało ono obsłużone; w innym przypadku obsługa przerwaniaczekała do momentu obniżenia priorytetu procesora w PSW.

Bit T to bit pracy krokowej (ang. Trace Trap) – gdy ustawiony, procesor zatrzy-mywał wykonywanie programu po każdym pojedynczym wykonanym rozkazie.

Bity N, Z, V, C opisywały wynik operacji procesora, ich dokładniejsze zna-czenie kolejno: N (ang. Negative) – oznaczał, że rozkaz zakończył się ujemnymwynikiem, Z (ang. Zero) – oznaczał, że wynikiem rozkazu jest wartość zero, V(ang. Overflow) – bit przepełnienia, oznaczał przepełnienie wartości w kodzie U2,tj. np. gdy po sumowaniu dwóch wartości o tym samym znaku wynik zmienił znak,C (ang. Carry) – bit przeniesienia, oznaczał przeniesienie bitu z nastarszego biturejestru. Tabela 2.1 pokazuje wartości bitów V i C po wykonaniu przykładowychoperacji dodawania.

Bit V mógł być wykorzystany do rozpoznania niepoprawnego wyniku działaniana liczbach znakowych, z kolei C do wykrycia niepoprawnego wyniku działaniana liczbach bez znaku, oraz do implementacji operacji na wielu słowach.

Rejestr CS służył do ręcznego zarządzania procesorem za pomocą konsoli.

2.2.2 Pamięć i adresy

Standardowo komputery PDP-11 były wyposażone w kilkanaście do kilkudzie-sięciu kilobajtów pamięci operacyjnej.

Pamięć ta była zorganizowana w ośmiobitowych komórkach, w których słowabyły zapisywane w kolejności little endian, czyli pod niższym adresem młodszybajt, a pod wyższym starszy. Jako adres słowa był wykorzystywany adres młod-

5

Page 10: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.2. PDP-11 – architektura komputera

Tabela 2.1: Zachowanie bitów V i C dla przykładowych operacji dodawania; dla uproszczeniaprzyjęto 4-bitową długość słowa

Operacja V Cbinarnie 0011 + 0010 = 0101

0 0dziesiętnie w U2 3 + 2 = 5dziesiętnie bez znaku 3 + 2 = 5

binarnie 0110 + 0011 = 10011 0dziesiętnie w U2 6 + 3 = −7

dziesiętnie bez znaku 6 + 3 = 9

binarnie 1011 + 0110 = 00010 1dziesiętnie w U2 −5 + 6 = 1

dziesiętnie bez znaku 11 + 6 = 1

binarnie 1011 + 1010 = 01011 1dziesiętnie w U2 −5 + (−6) = 5

dziesiętnie bez znaku 11 + 10 = 5

szego bajtu. W efekcie adres słowa był zawsze parzysty, a adresy nieparzysteodwoływały się jedynie do starszego bajtu słowa o adresie o jeden niższym.

Maksymalna wielkość obsługiwanej pamięci zależała od modelu komputera i dłu-gości obsługiwanych przez niego adresów fizycznych pamięci, zazwyczaj było to18 bitów (maksymalna wielkość pamięci – 256 kB), albo – jak w przypadku mo-delu PDP-11/70 – 22 bity (maksymalna wielkość pamięci – 4MB).

Adresy logiczne PDP-11 są zwyczajowo zapisywane w systemie ósemkowymi mają długość szesnastu bitów (jednego słowa). Adresy 160000(8)–177777(8) byłyzarezerwowane i służyły do adresowania urządzeń wejścia/wyjścia i rejestrów pro-cesora. Adresy te, niezależnie od ilości zainstalowanej pamięci czy modelu, byłyzawsze mapowane do adresów fizycznych 760000(8)–777777(8).

Rejestry procesora, w przeciwieństwie do słów w pamięci, miały nadane kolejneadresy, zwiększane co jeden, mimo, że rejestry mogły przechowywać całe słowo.Adresy rejestrów procesora prezentuje tabela 2.2.

Tabela 2.2: Adresy logiczne rejestrów procesora

Rejestr adresósemkowo

CS 177570R0 177700R1 177701R2 177702R3 177703R4 177704R5 177705R6 (SP) 177706R7 (PC) 177707PSW 177776

6

Page 11: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.2. PDP-11 – architektura komputera

Urządzenia wejścia/wyjścia

Urządzenia wejścia/wyjścia komunikowały się z PDP-11 poprzez swoje własnerejestry stanu, dostępne pod specjalnymi adresami w pamięci. Większość pery-feriów miało dowolnie konfigurowane adresy, pod jakimi miały pracować. Częśćnajpowszechniejszych urządzeń miała jednak z góry określone standardowe adresy.

Jednym z takich urządzeń był 60-hercowy zegar (ang. line clock), który służyłdo odmierzania czasu i był obsługiwany przez jeden rejestr oznaczany CS (taksamo, jak rejestr konsoli, od ang. Clock Status), dostępny pod adresem 177546(8).

Najstarszy bit tego rejestru był ustawiany co 1/60 sekundy – z powodu uży-wania kodu uzupełnień do dwóch, pojawienie się tego bitu powodowało nagłązmianę wartości całego rejestru na ujemną, dzięki czemu łatwo było go wykryćza pomocą prostego porównywania. Programista musiał samodzielnie czyścić tenbit po wykryciu pojawienia się go. Urządzenie to umożliwiało łatwe odmierzanieczasu w sekundach poprzez zliczanie pojawiających się pulsów zegara i dzieleniewyniku przez 60.

Kolejnym typowym urządzeniem wejścia/wyjścia był dalekopis (TTY – ang. te-letype), obsługiwany przez cztery rejestry.

Dwa z nich obsługiwały urządzenie wejścia – klawiaturę (ang. keyboard), dwa ko-lejne urządzenie wyjścia – drukarkę znakową (ang. character printer). Sam dale-kopis zazwyczaj był podzielony na dwa takie urządzenia i np. wciśnięcie klawiszana klawiaturze, w przeciwieństwie do typowej maszyny do pisania, nie powodo-wało wydrukowania znaku – drukarka dalekopisu musiała dostać z zewnątrz znakdo wydruku.

W efekcie do obsługi dalekopisu używane były następujące rejestry:

1. Rejestr stanu klawiatury (ang. keyboard status register), pod adresem 177560(8).Bit nr 7 tego rejestru był ustawiany zawsze, gdy pojawił się znak klawiaturydo odebrania w rejestrze danych klawiatury. Bit ten był czyszczony automa-tycznie w momencie wykonania instrukcji pobierającej dostępny znak klawia-tury.

2. Rejestr danych klawiatury (ang. keyboard data register), pod adresem 177562(8).Bity 7–0 tego rejestru przechowywały kod ASCII znaku, przy czym znak byłrzeczywiście kodowany jedynie na siedmiu najmłodszych bitach, a bit naj-starszy to bit parzystości, służący do kontroli błędów. Rejestr ten był tylkodo odczytu (ang. read-only) i umożliwiał pobranie znaku z klawiatury rozka-zem MOVB.

3. Rejestr stanu drukarki (ang. printer status register), pod adresem 177564(8).Bit 7 tego rejestru był ustawiany w czasie, gdy drukarka była gotowa do wy-drukowania znaku, bit ten miał wartość zero od momentu otrzymania znakudo druku, do momentu zakończenia drukowania go, kiedy to znów był auto-matycznie ustawiany.

4. Rejestr danych drukarki (ang. printer data register), pod adresem 177566(8).W momencie zapisania do tego rejestru bajtu znaku (na bity 7–0 rejestru),o ile bit 7 rejestru stanu drukarki był ustawiony, następowało drukowaniepodanego znaku. Rejestr ten był tylko do zapisu (ang. write-only), tzn. że niebyło możliwe odczytanie jego zawartości przez program.

7

Page 12: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.2. PDP-11 – architektura komputera

Zamiast dalekopisu często podłączane były, identyczne z nim z punktu widzeniaprocesora, terminale VT100 (i podobne), złożone z klawiatury i ekranu CRT.

2.2.3 Budowa rozkazów procesora

Rozkazy procesora PDP-11 dzieliły się na jednoargumentowe, dwuargumentowei bezargumentowe (ang. Single-Operand, Double-Operand, No-operand).

Tabela 2.3: Sposoby adresowania argumentów rozkazów

Numersposobu

Nazwa Oznaczeniew asemblerze

Znaczenie

0 rejestrowy Rn Argument znajduje się w podanymrejestrze

1 rejestrowy pośredni (Rn) Argument znajduje się w pamięcipod adresem wskazanym w rejestrze

2 autoinkrementowy (Rn)+ Argument znajduje się pod adre-sem wskazanym w rejestrze; war-tość rejestru zostaje zwiększona o 2(lub 1 w przypadku rozkazu bajto-wego i numeru rejestru niższego niż6) po pobraniu argumentu

3 autoinkrementowanypośredni

@(Rn)+ Argument znajduje się pod adre-sem, wskazanym w pamięci pod ad-resem wskazanym w rejestrze; war-tość rejestru zostaje zwiększona o 2(lub 1 w przypadku rozkazu bajto-wego i numeru rejestru niższego niż6) po pobraniu argumentu

4 autodekrementowy -(Rn) Wartość rejestru najpierw zostajezmniejszona o 2 (lub 1 w przypadkurozkazu bajtowego i numeru rejestruniższego niż 6); następnie pobieranyjest argument spod adresu wskaza-nego w rejestrze

5 autodekrementowypośredni

@-(Rn) Wartość rejestru najpierw zostajezmniejszona o 2 (lub 1 w przypadkurozkazu bajtowego i numeru rejestruniższego niż 6); następnie pobieranyjest argument spod adresu wskaza-nego pod adresem wskazanym w re-jestrze

6 indeksowy X(Rn) Argument znajduje się pod adresemX + (Rn); X znajduje się pod adre-sem wskazanym w PC; PC zostajezwiększony o 2 po pobraniu argu-mentu

7 indeksowy pośredni @X(Rn) Argument znajduje się pod adresemwskazanym w komórce o adresie X;X znajduje się pod adresem wskaza-nym w PC; PC zostaje zwiększonyo 2 po pobraniu argumentu

Kod rozkazu dzieli się na pole kodu operacji (ang. opcode) i argumentów. Polaargumentów są sześciobitowe. Do tego najstarszy bit wszystkich rozkazów pobie-rających argumenty określa, czy rozkaz operuje na słowie (bit 15 równy 0), czy też

8

Page 13: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.3. FPGA

na bajcie (najstarszy bit równy 1 – w asemblerze instrukcje bajtowe oznacza siępoprzez dodanie B do nazwy instrukcji, np. operujące na słowie MOV staje się bajto-wym MOVB). Kod rozkazu jednoargumentowego zatem składa się z dziesięciu bitówoperacji (w tym jednego decydującego, czy to rozkaz bajtowy, czy nie) oraz sze-ściu bitów określających argument. Z kolei kod rozkazu dwuargumentowego składasię z czterech bitów operacji, sześciu bitów określających argument źródłowy (S –ang. source) i sześciu bitów określających argument docelowy (D – ang. destina-tion). Dodatkowo pole argumentu dzieli się na dwie części trzybitowe – sposóbadresowania i numer rejestru. W efekcie cały rozkaz można podzielić na trzybi-towe części, co powoduje, że bardzo wygodne jest zapisywanie rozkazów PDP-11ósemkowo – tak też będą przedstawiane rozkazy procesora w tej pracy za każdymrazem, gdy pojawi się w niej kod maszynowy.

Sposoby adresowania przedstawia tabela 2.3.Dla przykładu kod rozkazu MOV R2,(R4), czyli przesuń słowo z rejestru R2

do adresu wskazanego w rejestrze R4, to ósemkowo w kodzie maszynowym 010214.Najstarszy bit (0) mówi, że instrukcja operuje na słowach; młodsze trzy bity (1) sąwłaściwym kodem operacji i oznaczają MOV; dalsze sześć bitów (02) to pole źródła,z którego kopiowane są dane – 0 mówi, że argument znajduje się w rejestrze, 2mówi, że chodzi o rejestr nr 2; najmłodsze sześć bitów (14) to pole celu, do któregokopiowane są dane – 1 mówi, że argument znajduje się pod adresem wskazanymw rejestrze, 4 mówi, że chodzi o rejestr nr 4.

Wykorzystując do adresowania rejestr siódmy – licznik programu – można uzy-skać ciekawe efekty, ułatwiające programowanie. PC jest zawsze zwiększany o 2po pobraniu kolejnego rozkazu z pamięci, ale jeszcze przed jego wykonaniem. Za-tem jeśli użyjemy sposobu inkrementowanego ze wskazaniem rejestru siódmego,jako argument zostanie pobrane słowo występujące w programie zaraz po rozka-zie, a licznik programu zostanie ponownie zwiększony o 2 po pobraniu argumentu,wskazując jeszcze dalsze słowo. W ten sposób można pisać program, w którym roz-kazy i ich argumenty występują na przemian, bez przejmowania się bezpośrednimiadresami.

Z tego samego, co opisany wyżej, powodu w obu indeksowych sposobach adre-sowania (sposoby 6 i 7) wartość X należy umieszczać w programie zaraz po rozkazieadresującym z ich pomocą. Ponieważ w trakcie wykonywania rozkazu PC wskazujena następne po rozkazie słowo w pamięci, a spod adresu wskazywanego przez PCjest pobierany X.

Dwuargumentowa instrukcja dodająca do siebie dwie liczby (ADD S,D, 06SSDD)istnieje tylko w wersji operujących na słowach. Zamiast jej bajtowego odpowied-nika jest instrukacja odejmowania (SUB S,D, 16SSDD).

Oprócz tego istnieją rozkazy bezargumentowe, służące do ustawiania lub czysz-czenia bitów rejestru stanu procesora i do zatrzymania procesora (instrukcja HALT,000000). Dodatkowo niektóre modele dodawały własne, niestandardowe rozkazy,mogące różnić się budową od przedstawionej tutaj. Listę dostępnych rozkazówwraz ze szczegółowym opisem można znaleźć w [9] i [8].

2.3 FPGA

FPGA (ang. Field Programmable Gate Array – bezpośrednio programowalnamacierz bramek) to programowalny układ logiczny i może zastąpić, o ile wyposa-

9

Page 14: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.3. FPGA

żony jest w odpowiednią ilość zasobów, dowolny logiczny układ scalony.Zazwyczaj układy FPGA są wolniejsze od układów scalonych dedykowanych

do konkretnych zastosowań, jednak mają nad tymi drugimi tę zaletę, że w do-wolnym momencie mogą zostać przeprogramowane. Pozwala to usunąć z takiegoukładu błędy odkryte po jego wdrożeniu, lub całkowicie zmienić jego przeznacze-nie, gdy nie jest już dłużej potrzebny przy aktualnym zastosowaniu.

Dodatkowo istnieje możliwość zrealizowania tak zwanej twardej kopii układuFPGA – czyli układu scalonego o funkcjonalności opisanej programem dla FPGA.Dzięki temu układy FPGA często wykorzystuje się do tworzenia prototypów de-dykowanych układów scalonych, które później realizuje się jako właśnie nieprogra-mowalne kopie projektu dla układu FPGA. Kopia taka działa od FPGA szybcieji zużywa od niego mniej energii.

2.3.1 Budowa i zasada działania

Układy FPGA zbudowane są z:

• matrycy wielu bloków logicznych, które mogą zostać skonfigurowane tak,by realizowały dowolny kombinacyjny układ logiczny o odpowiedniej liczbiewejść i wyjść,

• programowalnych bloków wejściowo-wyjściowych na obrzeżach matrycy blo-ków logicznych,

• konfigurowalnych połączeń pomiędzy poszczególnymi blokami, umożliwiają-cych łączenie bloków w dowolne układy logiczne

Blok logiczny zazwyczaj składa się z kilku komórek logicznych. Uproszczonąbudowę takiej komórki przedstawia rys. 2.2. Ma ona cztery wejścia, tablicę przeglą-dową (ang. look-up table) o trzech wejściach i dwóch wyjściach, realizującą funkcjęlogiczną, sumator dodający wartości z wyjścia tablicy przeglądowej, przerzutniktypu D umożliwiający komórce pracę synchroniczną i multipleksery konfigurującezachowanie komórki logicznej – jeden decyduje, czy wyjścia z tablicy przeglądowejmają być sumowane, czy przekazane bezpośrednio do wyjścia komórki, drugi de-cyduje, czy komórka ma się zachowywać synchronicznie, czy asynchronicznie. Gdysumator jest wyłączony, znaczenie ma również multiplekser adresowany z czwar-tego wejścia komórki, wybierający między pierwszym a drugim sygnałem wyj-ściowym tablicy przeglądowej, robiąc z niej de facto tablicę o czterech wejściachi jednym wyjściu. Oprócz tego do komórki doprowadzony jest sygnał zegarowydla przerzutnika D, carry in z poprzedniej komórki do sumatora i wyprowadzonyz sumatora carry out do następnej komórki.

Odpowiednie zaprogramowanie komórek logicznych i połączeń między blokamilogicznymi pozwalającą uzyskać zachowanie FPGA odpowiadające dowolnemuelektronicznemu układowi, o ile tylko dany układ FPGA posiada wystarczającąliczbę bloków logicznych i połączeń między nimi.

Oprócz tego niektóre układy FPGA posiadają dodatkowe wyspecjalizowanebloki pamięci, programowalne liczniki itd.

Programy na FPGA pisane są w językach opisu sprzętu (HDL-ach – ang. har-dware description languages). Języki takie pozwalają definiować funkcje logiczne,układy-elementy realizujące te funkcje, połączenia między elementami za pomocąsygnałów, zależności między tymi sygnałami itd.

10

Page 15: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.3. FPGA

Look-Up

Table

Full

Adder

mux

mux

DFF mux

a

b

c

d

carry out

carry in clk

clk

out

Rysunek 2.2: Uproszczony schemat komórki logicznej FPGA

Jednymi z najpopularniejszych języków opisu sprzętu są VHDL i Verilog. Pro-gram napisany w takim języku przed wgraniem do układu FPGA musi zostaćskompilowany, tj. muszą zostać wykonane dwie czynności: synteza logiczna – tłu-maczenie opisu zachowania układu w języku opisu sprzętu na realizującą to za-chowanie listę połączeń między bramkami logicznymi, oraz fitting – odwzorowa-nie stworzonej we wcześniejszym kroku listy połączeń w pliku konfiguracyjnymdla konkretnego układu FPGA. Dodatkowo zazwyczaj przeprowadza się jeszczeanalizę czasową, przewidującą czas rozchodzenia się sygnałów w docelowym ukła-dzie FPGA.

Gotowy plik konfiguracyjny dla danego układu należy wgrać do pamięci FPGA,co powoduje odpowiednie ustawienie jego bloków logicznych, i w efekcie realizo-wanie zaprojektowanego w języku opisu sprzętu układu logicznego.

2.3.2 Zastosowania

Układy FPGA dzięki swojej elastyczności znalazły wiele zastosowań, zastępującczęsto tradycyjne układy logiczne.

Są wykorzystywane do obsługi domowych multimediów, np. jako dekodery sy-gnału telewizyjnego czy do odtwarzania i nagrywania płyt DVD albo Blu-Ray.

Wykorzystuje się je jako kontrolery zewnętrznych wyświetlaczy, kontrolery sprzętuAGD, mosty między różnymi typami sieci komputerowych, regulatory silników,układy kryptograficzne do szyfrowania danych itd.

Można nimi zastąpić praktycznie dowolny, gdziekolwiek wykorzystywany, elek-troniczny układ logiczny. W wielu zastosowaniach mają przewagę nad mikrokon-trolerami dzięki temu, że odpowiednio oprogramowane potrafią równolegle obra-biać wiele sygnałów.

Jak wcześniej wspomniano, są również wykorzystywane jako układy prototy-powe przy projektowaniu ASIC-ów (ang. Application Specific Integrated Circuits) –układów scalonych dedykowanych do jednego konkretnego, z góry określonego, za-dania.

Współczesne układy FPGA są w stanie odtwarzać zachowanie procesorów sta-rych komputerów, często łącznie z pamięcią i dodatkowymi układami. Jest toczęsto wykorzystywane przez entuzjastów komputerów sprzed kilkunastu lub kil-kudziesięciu lat.

11

Page 16: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.4. Przegląd projektów PDP-11 na FPGA

W Internecie można znaleźć mnóstwo projektów odtwarzających w językachVHDL i Verilog komputery Commodore 64, większość modeli Amig czy Atari.Część z nich, jak projekt Minimig, odtwarzający komputer Amiga 500 – popu-larną na początku lat dziewięćdziesiątych platformę gier komputerowych – mana celu umożliwienie uruchamiania starych programów i gier na dedykowanymdo tego sprzęcie ze współczesnych nośników danych (Minimig udostępnia inter-fejs, który odczytuje pliki z kopiami amigowych dyskietek z karty MMC i udo-stępnia ich zawartość procesorowi tak, jakby to była fizyczna dyskietka). Inne,jak na przykład Natami, nie odwzorowują konkretnego komputera, ale starają sięuwspółcześnić starą architekturę – projekt Natami ma na celu stworzenie nowo-czesnej Amigi w pełni zgodnej binarnie z procesorem M68000, wykorzystywanymw Amidze 1000, lecz dużo szybszej, pozbawionej błędów oryginału, z rozwiniętymiukładami obsługi multimediów, rozszerzonej m.in. o sprzętową obsługę grafiki 3D.

2.3.3 Wykorzystany układ FPGA – Cyclone II w zestawie DE1

W niniejszej pracy korzystano z zestawu ewaluacyjnego DE1 firmy Terasic.W zestawie tym umieszczony jest układ Cyclone II EP20C20F Altery.

Układ Cyclone II, który opisano dokładnie w [1], oprócz matrycy bloków logicz-nych, posiada wbudowane bloki pamięci i układy mnożące. Każdy blok logicznyzawiera 16 komórek logicznych. Każdy blok pamięci M4K oferuje obsługę pełnychdwóch portów dostępu do pamięci i zawiera 4 kbit pamięci plus bity parzystości(łącznie 4608 bitów). Bloki te mogą być zorganizowane w pamięci o jednym porcielub dwóch portach, o maksymalnej długości komórki 36 bitów i mogą pracowaćz maksymalną prędkości 260MHz. Organizację układu Altera Cyclone II przed-stawia rysunek 2.3.

Układ umieszczony w zestawie Cyclone II zawiera 52 bloki M4K, co umożliwiazaimplementowanie 26 kB pamięci w jego wnętrzu. Jest to wystarczające dla pod-stawowej konfiguracji komputera PDP-11 z 16 kB RAM-u.

Zestaw uruchomieniowy DE1 jest opisany dokładnie w [2]. Pozwala on na pro-ste programowanie Cyclone’a II poprzez interfejs USB, dostarcza również pamięcizewnętrzne: 8MB SDRAM, 4MB FLASH, 512 kB SRAM.

Oprócz tego dostarcza szereg portów wejściowych i wyjściowych, m.in. portDB-9 do komunikacji RS-232, czytnik kart SD, port VGA, zestaw diod, czterywyświetlacze siedmiosegmentowe, zestaw przycisków i przełączników.

Zestaw DE1 jest przedstawiony na rys. 2.4.

2.4 Przegląd projektów PDP-11 na FPGA

Powstało wiele projektów odtwarzających architekturę komputerów PDP-11na układach FPGA, udostępnianych za darmo, najczęściej na zasadach wolnegooprogramowania. Wybrane z nich zostały pokrótce omówione poniżej.PDP2011 – zaawansowany projekt stworzony w VHDL-u. Pozwala skonfigu-

rować procesor tak, aby zachowywał się jak wybrany model z rodziny PDP-11.Możliwe jest uruchomienie go na wielu różnych układach firm Xilinx i Altera.Implementuje jednostkę zarządzania pamięcią, oraz, w zależności od wybranegomodelu procesora, dostarcza specyficznych dla niego instrukcji spoza standardo-wego zestawu instrukcji PDP-11. Posiada jednostkę zmiennoprzecinkową. Potrafisymulować działanie dysków za pomocą kart SD. Jest najbardziej rozbudowanym

12

Page 17: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.4. Przegląd projektów PDP-11 na FPGA

PLL PLLIOEs

PLL PLLIOEs

IOEsLogic

Array

Logic

Array

Logic

Array

Logic

ArrayIOEs

M4K BlocksM4K Blocks

Embedded

Multipliers

Rysunek 2.3: Organizacja układu Cyclone II

Rysunek pochodzi z [1], prawa do niego posiada Altera

Rysunek 2.4: Zestaw ewaluacyjny DE1

Zdjęcie pochodzi z [2], prawa do niego posiada Altera

13

Page 18: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

2.4. Przegląd projektów PDP-11 na FPGA

z przejrzanych projektów. Autor wykluczył możliwość korzystania z projektu w ce-lach komercyjnych. Więcej informacji można znaleźć w [13].Verilog PDP-11 – projekt Brada Parkera, napisany w Verilogu. Powstał dla-

tego, że autorowi brakowało w Internecie implementacji PDP-11 w Verilogu. Pro-jekt odtwarza PDP-11/34. Autorowi udało się uruchomić systemy 2.9BSD, RT-11,szóstą edycję Uniksa i RSTS V4 do linii poleceń. Więcej o tym projekcie możnaprzeczytać w [12].POP11 – japoński projekt stworzony przez Naohiku Shimizu z prywatnego

uniwersytetu Tokai w Tokio. Stworzony we własnościowym języku SFL (Structu-red Function description Language tłumaczonym do Veriloga. Projekt odtwarzaprocesor PDP-11/40. Więcej można przeczytać w [14].w11 – projekt Waltera Müllera odtwarzający pełną strukturę komputera PDP-

11/70. Napisany w VHDL-u, udostępniony na zasadach licencji GPL. Projekt od-twarza pełny komputer PDP-11, symulując urządzenia wejścia/wyjścia na podłą-czonym przez USB do FPGA komputerze klasy PC. Autorowi udało się urucho-mić na nim piątą edycję Uniksa i 2.11BSD. Projekt ten jest mniej skomplikowanyod PDP2011, ale również napisany w zgodnym z większością FPGA VHDL-u i rów-nież dość zaawansowany. Z tego powodu ten projekt został wybrany jako podstawado niniejszej pracy inżynierskiej. Więcej o dziele Waltera Müllera można przeczy-tać w [11].

14

Page 19: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Rozdział 3

Analiza projektu „w11” Waltera Müllera

W ramach tej pracy postanowiono przenieść na układ Altery najbardziej pod-stawowe elementy projektu „w11” autorstwa Waltera F. J. Müllera. Projekt tenimplementuje kompletny system PDP-11 – procesor 11/70 z jednostką zarządzaniapamięcią (choć bez jednostki zmiennoprzecinkowej), zestaw symulowanych urzą-dzeń wejścia/wyjścia itd.

Autor testował swoje rozwiązanie na zestawach z układami FPGA klasy Spartan-3i Spartan-6 firmy Xilinx: S3BOARD, Nexys 2, Nexys 3. Autorowi udało się uru-chomić z powodzeniem dwa pełne systemy operacyjne komputerów PDP-11:

• 5th Edition UNIX,

• 2.11 BSD UNIX.

Projekt ten wciąż ma kilka błędów i czasem zachowuje się odrobinę inaczejniż oryginalny komputer PDP-11/70, jednak zazwyczaj nie mają one wpływuna poprawne działanie systemu operacyjnego i poprawnie napisanych programów.

W ramach tej pracy przeniesiono minimalny działający system obsługującypodstawowe rozkazy procesora PDP-11.

Projekt „w11” napisany został w VHDL-u tak, aby możliwie łatwe było jegoprzeniesienie na inne układy FPGA, na których autor nie testował swojego roz-wiązania. Projekt ten składa się z wielu elementów (ang. entity) realizującychposzczególne zadania, które często zbudowane są z jeszcze mniejszych elementów.

Elementy takie połączone są sygnałami, którymi się ze sobą komunikują. Poni-żej opisano część podstawowych elementów i sygnałów procesora projektu „w11”.

3.1 Elementy procesora

Minimalna konfiguracja procesora składa się z następujących podstawowychelementów:

• ścieżka danych – pdp11_dpath,

• dekoder rozkazów – pdp11_decode,

• sekwenser – pdp11_sequencer,

• układ zgłaszania przerwań – pdp11_irq,

• rejestry systemowe 11/70 – pdp11_sys70,

• kontroler pamięci wirtualnej – pdp11_vmbox.

15

Page 20: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

3.2. Obsługa pamięci

Element pdp11_dpath definiuje komunikację między wewnętrznymi rejestramiprocesora i układami arytmetyczno-logicznymi, i jest zbudowany z mniejszych ele-mentów: pdp11_gpr – dostarczającego rejestry ogólnego przeznaczenia, pdp11_psr –dostarczającego rejestr stanu procesora, pdp11_ounit – jednostki arytmetycznejadresów, obliczającej adresy rozkazów i argumentów, pdp11_aunit – jednostkiarytmetycznej, realizującej podstawowe rozkazy arytmetyczne, takie jak dodawa-nie, odejmowanie, inkrementacja, porównanie, negację…, pdp11_lunit – jednostkilogicznej, realizującej rozkazy logiczne, przesunięcia bitów, przesunięcia słów mię-dzy rejestrami…, pdp11_munit – jednostki wykonującej mnożenie i dzielenie.

Dekoder pdp11_decode pobiera od pdp11_dpath kod instrukcji do wykonania,po czym analizuje go bit po bicie i przekazuje do sekwensera dokładne informa-cje na temat tego w jakim trybie mają pracować kolejne jednostki obliczeniowe,czy dostęp do argumentów wymaga zapisywania nowej wartości, modyfikacji aktu-alnej, czy tylko odczytu, w jaki sposób odbywa się dostęp do argumentów, czy roz-kaz jest bajtowy, czy licznik programu jest nadpisywany itd.

Sekwenser pdp11_sequencer na podstawie znajomości stanu wszystkich ele-mentów procesora zajmuje się sterowaniem nimi, zleca realizację kolejnych rozka-zów programu, obsługuje żądania portu konsoli itd.

Układ pdp11_irq dostaje z zewnątrz sygnały przerwań zewnętrznych – ich prio-rytet i wektor przerwania i na ich podstawie wystawia na wewnętrzną magistralęprocesora żądanie obsłużenia przerwania.

Element pdp11_sys70 implementuje rejestr microbreak, służący do zarządzaniaprzerywanym wykonywaniem programu podczas diagnostyki, i rejestr sysid.

Kontroler pamięci wirtualnej pdp11_vmbox pośredniczy między procesorem a pa-mięcią zewnętrzną. Korzysta z elementu pdp11_ubmap (PDP11/70 UNIBUS Map-per) do mapowania adresów logicznych pamięci na fizyczne, sprawdza poprawnośćżądań dostępu do pamięci logicznej i zajmuje się pobieraniem danych z pamięcii zapisem do niej.

Żądania wysyła sekwenser poprzez sygnały kontrolujące pdp11_vmbox, a ad-res logiczny wystawiany jest przez ścieżkę danych. Natomiast, gdy zażądany jestadres zarezerwowany dla któregoś z wewnętrznych rejestrów, kontroler pamięciwystawia żądanie odczytu odpowiedniego adresu na wewnętrzną magistralę ibus,obsługiwaną przez sygnały IB_MREQ (ibus master request) i IB_SRES (ibus slaveresponse).

Na rysunku 3.1 przedstawione są połączenia pomiędzy poszczególnymi elemen-tami procesora. Pokazane sygnały są dostosowanymi do potrzeb schematu pro-gramu Quartus II wektorowymi odpowiednikami złożonych typów rekordów ory-ginalnego projektu „w11”, jak opisano w sekcji 4.1.1.

3.2 Obsługa pamięci

Obsługą wszystkich żądań pod dowolny adres pamięci w projekcie „w11”, jak wspo-mniano wcześniej, zajmuje się układ pdp11_vmbox. Dostaje on od sekwenserai ścieżki danych żądanie dostępu do słowa lub bajtu o podanym adresie logicznym,po czym wykorzystuje on element pdp11_ubmap do obliczenia adresu fizycznegoodpowiadającego wejściowemu adresowi logicznemu.

Następnie, w zależności od tego, czy miejsce, do którego odwołuje się żądanie,znajduje się pośród wewnętrznych rejestrów procesora, czy też jest to komórka pa-

16

Page 21: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

3.2. Obsługa pamięci

Rysunek3.1:

Schemat

połączeń

międ

zywe

wnętrznymielem

entamip

rocesora

17

Page 22: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

3.3. Urządzenia wejścia/wyjścia – port konsoli

mięci zewnętrznej, kontroler pamięci wirtualnej wysyła żądanie dostępu do danegoadresu fizycznego na magistralę ibus albo do układu pamięci zewnętrznej.

Jako układ pamięci zewnętrznej można wykorzystać dostępny w projekcie ele-ment pdp11_bram, implementujący pamięć blokową o podanej w jego parametrzedługości adresu. Element ten dostaje od kontrolera pamięci wirtualnej żądaniew sygnale EM_MREQ (external memory master request), a odpowiada za pomocąsygnału EM_SRES (external memory slave response).

Sygnał EM_MREQ zawiera w sobie bit żądania (ang. request), zezwolenia zapisu(ang. write enable), bity enable bajtów słowa, bit anulowania (ang. cancel) żąda-nia, 21-bitowy adres fizyczny bez najmłodszego bitu (ponieważ dostęp do pojedyn-czych bajtów realizuje się poprzez bity enable, żądanie wysyłane do zewnętrznejpamięci adresuje bezpośrednio zawsze całe słowo i najmłodszy bit adresu nie jestpotrzebny), 16 bitów danych wejściowych do zapisu w pamięci.

Sygnał EM_SRES zawiera dwa bity potwierdzenia żądania – potwierdzenie od-czytu (ang. acknowledge read), potwierdzenie zapisu (ang. acknowledge write) –oraz 16 bitów danych wyjściowych, odczytanych z pamięci.

Podczas realizowania niniejszej pracy udało się znaleźć błąd w projekcie WalteraMüllera: okazało się, że układ pdp11_vmbox ignoruje bity enable portu konsoli(opisanego niżej), zawsze podczas wykonywania polecenia konsoli ustawia oba bityenable do wartości 1, i w efekcie próby zapisania poprzez ten port jednego bajtupamięci kończyły się nadpisaniem całego słowa.

Udało się zlikwidować ten problem poprzez niewielką modyfikację plikupdp11_vmbox.vhd, definiującego kontroler pamięci wirtualnej, która polegała na do-daniu do instrukcji przypisujących bity enable odpowiednich warunków dotyczą-cych żądania z portu konsoli.

Modyfikacja została przetestowana symulacyjnie, wyniki symulacji przedsta-wione są w dalszej części pracy, w sekcji 4.2.5. Przetestowana modyfikacja zostałaprzesłana pocztą elektroniczną do pana Waltera Müllera, autora projektu „w11”.

3.3 Urządzenia wejścia/wyjścia – port konsoli

Kontrolery urządzeń wejścia/wyjścia w projekcie „w11” domyślnie podłączone sądo portu szeregowego (autor projektu wykorzystywał USB dostępne na zestawachFPGA, z których korzystał) i z nim się komunikują, natomiast same urządzeniaemulowane są na komputerze klasy PC przez, będące częścią projektu, oprogra-mowanie serwera. Dzięki temu można symulować komunikację procesora PDP-11z takimi urządzeniami jak konsola PDP-11, dalekopis, czytnik taśm perforowa-nych, zewnętrzny dysk twardy.

W projekcie inżynierskim opisywanym w tej pracy nie korzystano jednak z ko-munikacji szeregowej ze współczesnym komputerem. Do obsługi wejścia/wyjściawykorzystywano przede wszystkim port konsoli udostępniany przez procesor.

Do komunikacji z nim utworzono w ramach tej pracy specjalny, opisany w sek-cji 4.2.4 układ.

Port konsoli ma trzy sygnały wejściowe:

• CP_CNTL (console port control) – sygnał kontroli konsoli, składa się z trzechsygnałów składowych:

18

Page 23: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

3.3. Urządzenia wejścia/wyjścia – port konsoli

– req – 1 bit – żądanie (ang. request) wykonania polecenia konsoli; gdyustawiona jest wartość 1, jeśli w danym cyklu zegarowym konsola nie jestzajęta, następuje pobranie polecenia konsoli i jego realizacja;

– rnum – 3 bity – numer rejestru, dotyczy poleceń zapisu i odczytu wartościrejestru ogólnego przeznaczenia;

– func – 5 bitów – kod polecenia konsoli, możliwe polecenia to: no operation(brak polecenia do wykonania), cpu start (rozpoczęcie wykonywania pro-gramu przez procesor), cpu stop (zatrzymanie pracy procesora), cpu conti-nue (wznowienie wykonywania programu), cpu step (wykonanie pojedyn-czego rozkazu z programu), cpu reset (reset procesora), read/write register(odczyt/zapis danych z/do rejestru), read/write psw (odczyt/zapis reje-stru stanu procesora), read/write memory (odczyt/zapis danych z/do pa-mięci);

• CP_ADDR (console port address – sygnał adresu konsoli, służy do adresowaniapamięci dla poleceń zapisu i odczytu jej wartości, posiada następujące sygnałyskładowe:

– addr – 21 bitów – adres pamięci bez najmłodszego bitu, poprzez portkonsoli adresuje się zawsze całe słowo pamięci, nie pojedynczy bajt, zatemnajmłodszy bit adresu nie jest potrzebny;

– racc – 1 bit – dostęp do wewnętrznej magistrali ibus;– be – 2 bity – bity enable, wykorzystywane do wyboru, do których bajtówsłowa w pamięci odwołuje się polecenie;

– ena_22bit – 1 bit – bit określający, czy wykorzystywany jest 22-bitowyfizyczny adres pamięci;

– ena_ubmap – 1 bit – bit określający, czy wejściowy adres jest logicznyi powinien zostać przeliczony na fizyczny za pomocą układu pdp11_ubmap;

• CP_DIN – 16 bitów – sygnał danych wejściowych dla poleceń zapisu do pamięcilub rejestrów.

Jako wyjście wyprowadzone są dwa sygnały: CP_DOUT długości 16 bitów, na którywystawiane są odczytane dane, jeśli wykonanym poleceniem był odczyt pamięcilub rejestrów oraz CP_STAT opisujący aktualny stan konsoli, złożony z następują-cych sygnałów składowych, wszystkie poza ostatnim jednobitowe:

• cmdbusy – oznacza, że konsola jest chwilowo zajęta wykonywaniem polecenia,

• cmdack – potwierdzenie polecenia konsoli, pojawia się na jeden cykl zegarowypo zatwierdzeniu wykonywania polecenia konsoli przez sekwenser,

• cmderr – błąd polecenia,

• cmdmerr – błąd dostępu do pamięci podczas wykonywania polecenia konsoli,

• cpugo – bit mówiący o tym, czy procesor aktualnie wykonuje program, czy jestzatrzymany,

• cpustep – flaga step procesora, wykonywanie programu w pojedynczych kro-kach,

19

Page 24: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

3.3. Urządzenia wejścia/wyjścia – port konsoli

• cpuhalt – flaga halt procesora, ustawiana po wykonaniu rozkazu HALT,

• cpuwait – flaga oczekiwania procesora,

• cpurust – sygnał 4-bitowy, opisujący aktualny status procesora.

20

Page 25: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Rozdział 4

Dostosowanie projektu „w11” doCyclone’a II

4.1 Przygotowanie projektu do poprawnej kompilacji

Jak zostało wcześniej wspomniane, projekt Waltera Müllera jest napisany przyużyciu standardowego VHDL-a tak, aby możliwie najłatwiejsze było przeniesieniego na dowolny układ FPGA zdolny go zmieścić. Projekt ten nie oferuje jednaksam z siebie bezpośrednio żadnych urządzeń wejścia/wyjścia, a wykorzystywaneprzez niego pamięci są napisane pod układy firmy Xilinx. Z tego powodu pewneelementy projektu wymagały drobnych modyfikacji.

4.1.1 Schemat w Quartusie II

Postanowiono nadrzędny układ połączeń procesora z pamięcią i układami wej-ścia/wyjścia zrealizować jako plik schematu .bdf programu Quartus II. Wyma-gało to wygenerowania z podstawowych nadrzędnych elementów projektu symbolido schematu.

Projekt „w11” bardzo szeroko wykorzystuje konstrukcję rekordu (ang. record)w języku VHDL. Rekord to złożony typ sygnału, zawierający w sobie krótszesygnały mniejszych typów – podobnie jak na przykład struktura w języku C.

Quartus II nie obsługuje takich złożonych typów na schematach ([3]), co wy-magało napisania specjalnych jednostek konwertujących złożone rekordy projektu„w11” na proste typy wektorów logicznych. Przykładowy kod takiego konwerteraprzedstawiony jest na listingu 4.1.

Analogiczne jednostki przygotowano do konwersji w drugą stronę – z wektorówdo rekordów.

Następnie, wykorzystując tak napisane konwertery i gotowe układy projektu„w11”, działające na rekordach, zdefiniowano w języku VHDL pojedyncze ele-menty procesora, całej jednostki procesora i jednostki pamięci blokowej, nadającesię do wygenerowania z nich symboli dla schematów Quartusa II. Przykład kodujednostki symbolu przedstawiono na listingu 4.2.

Mając przygotowane symbole wszystkich potrzebnych jednostek, zbudowanoschemat połączeń procesora i urządzeń zewnętrznych. Gotowy schemat połączeńmiędzy procesorem, pamięcią i jednostką obsługi konsoli (opisaną w sekcji 4.2.4i rozdziale 5) jest przedstawiony na rys. 4.1.

21

Page 26: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.1. Przygotowanie projektu do poprawnej kompilacji

Rysunek4.1:

Schemat

połączeń

układu

obsłu

giportukonsoli,procesoraip

amięc

i

22

Page 27: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.1. Przygotowanie projektu do poprawnej kompilacji

1 entity cp_addr_rec2vec is -- cp_addr record to standard_logic_vector conversion2 port (3 CP_ADDR_REC : in cp_addr_type; -- input record4 CP_ADDR_V : out slv26 -- output vector5 );6 end cp_addr_rec2vec;78 architecture behavior of cp_addr_rec2vec is9 begin10 CP_ADDR_V(20 downto 0) <= CP_ADDR_REC.addr; -- slv22_111 CP_ADDR_V(21) <= CP_ADDR_REC.racc; -- slbit12 CP_ADDR_V(23 downto 22) <= CP_ADDR_REC.be; -- slv213 CP_ADDR_V(24) <= CP_ADDR_REC.ena_22bit; -- slbit14 CP_ADDR_V(25) <= CP_ADDR_REC.ena_ubmap; -- slbit15 end behavior;

Listing 4.1: Przykład konwertera rekordu do wektora

1 entity pdp11_bram_symb2 is2 generic (3 AWIDTH : positive := 13); -- address width4 port (5 CLK : in slbit; -- clock6 GRESET : in slbit; -- global reset7 EM_MREQ : in slv42; -- em request8 EM_SRES : out slv18 -- em response9 );10 end pdp11_bram_symb2;1112 architecture behavior of pdp11_bram_symb2 is13 signal EM_MREQ_REC : em_mreq_type;14 signal EM_SRES_REC : em_sres_type;15 begin16 EM_MREQ_VEC : entity work.em_mreq_vec2rec port map(17 EM_MREQ_V => EM_MREQ,18 EM_MREQ_REC => EM_MREQ_REC19 );2021 EM_SRES_VEC : entity work.em_sres_rec2vec port map(22 EM_SRES_REC => EM_SRES_REC,23 EM_SRES_V => EM_SRES24 );2526 pdp11_bram_entity : pdp11_bram27 generic map (28 AWIDTH => AWIDTH) -- address width29 port map (30 CLK => CLK, -- clock31 GRESET => GRESET, -- global reset32 EM_MREQ => EM_MREQ_REC, -- em request33 EM_SRES => EM_SRES_REC -- em response34 );35 end behavior;

Listing 4.2: Kod jednostki służącej do wygenerowania symbolu pamięci blokowej

4.1.2 Implementacja pamięci

Źródłowy projekt wykorzystuje logikę pamięci blokowej synchronicznej o dwóchwejściach danych, adresów i zezwolenia zapisu (ang. write enable), jak i dwóchwyjściach danych, napisaną w VHDL-u. Dodatkowo, pamięć ma logikę odczytu

23

Page 28: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.1. Przygotowanie projektu do poprawnej kompilacji

przed zapisem. Pozwala to równocześnie dostać się do dwóch komórek pamięcio dwóch różnych adresach, przeprowadzając niezależnie na każdej z nich odczytlub zapis, a w przypadku zapisu, na odpowiednim wyjściu z pamięci pojawiają siędane, które były zapisane w danej komórce przed aktualnie dokonywanym zapisem.

Niestety, jak można przeczytać w [1], pamięć blokowa dostępna w Cyclone’ie IInie ma możliwości działania z taką logiką. Podczas próby syntezy logicznej układupamięci blokowej, Quartus II rozpoznawał, że użyto logiki pamięci RAM i próbo-wał ją umieścić w blokach pamięci docelowego układu FPGA (ang. RAM infer-ring), jednak w momencie napotkania nieobsługiwanego zachowania pamięci in-formował, że dla pamięci o dwóch portach nieobsługiwane jest zachowanie czytaj-przed-zapisem, a ponieważ nie dało się zrealizować całych 16 kB pamięci za pomocązwykłych komórek logicznych czy rejestrów, kompilacja zostawała przerywana błę-dem.

1 -- Do taktowania pamięci użyto2 -- bezpośrednio wejścia zegara:3 proc_clka: process (CLKA)4 begin5 if rising_edge(CLKA) then67 -- odczyt następuje przed zapisem8 -- synchronicznie, lecz tylko,9 -- gdy ustawiony enable:10 if ENA = '1' then11 R_DOA <= sv_ram(ADDRA);12 if WEA = '1' then13 sv_ram(ADDRA) := DIA;14 end if;15 end if;16 end if;17 end process proc_clka;

1 -- dodano proces przepuszczający zegar2 -- tylko, gdy ustawiony enable:3 proc_ena : process(ENA, CLKA)4 begin5 if ENA = '1' then6 CLKA2 <= CLKA;7 else8 CLKA2 <= '0';9 end if;10 end process proc_ena;1112 -- proces logiki pamięci zależy13 -- od zmodyfikowanego zegara14 -- bez bezpośredniej zależności od enable:15 proc_clka: process (CLKA2)16 begin17 if rising_edge(CLKA2) then18 if WEA = '1' then19 sv_ram(ADDRA) := DIA;20 end if;21 -- odczyt po zapisie:22 R_DOA <= sv_ram(ADDRA);23 end if;24 end process proc_clka;

Listing 4.3: Porównanie oryginalnej logiki pamięci (po lewej) ze zmodyfikowaną dla Cyclone’a II(po prawej)

Wymusiło to zmianę logiki pamięci na taką, którą Quartus II potrafi umieścićw układzie Cyclone II. Z tego powodu odwrócono kolejność przy jednoczesnymzapisie i czytaniu pamięci z odczytu-przed-zapisem na zapis-przed-odczytem.

Oprócz tego problemem okazał się sygnał enable doprowadzony do każdegoportu, bez którego nie może odbyć się odczyt pamięci. Oprogramowanie Alterywystąpienie dodatkowego warunku (ENA = '1' i ENB = '1' kolejno dla portówA i B pamięci) odczytu traktowało jako odczyt asynchroniczny, przez co znównie mogło dopasować bloków pamięci FPGA do wymogów logiki pamięci.

Problem ten został rozwiązany poprzez dodanie do elementu pamięci dodat-kowych sygnałów wewnętrznych zegara, na które w osobnym procesie podawanyjest wejściowy sygnał zegarowy, gdy enable jest w stanie wysokim, a stan niskiw innych przypadkach.

Na listingu 4.3 widać porównanie kodu implementującego logikę portu A pa-mięci w oryginalnym projekcie i przerobioną dla potrzeb układu Altery. Port Bjest opisany analogicznym kodem. Dla uproszczenia kodu, z listingu usunięto kod

24

Page 29: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.1. Przygotowanie projektu do poprawnej kompilacji

przekształcający adres pamięci z wektora bitów do typu całkowitego.Tak zmodyfikowana pamięć działa i jest poprawnie obsługiwana przez proce-

sor, jednak nie umożliwia poprawnej obsługi błędów. Na przykład gdy w programiepojawi się operacja zapisu słowa do pamięci, a w rejestrze z adresem pojawi sięwartość nieparzysta (czyli adres starszego bajtu słowa, niepoprawny jako adrescałego słowa, jak opisano w sekcji 3.2), procesor powinien zwrócić błąd dostępudo pamięci i anulować zapis (pozostawiając w pamięci starą wartość). Z powodubraku zachowania odczyt-przed-zapisem, procesor nie jest w stanie anulować za-pisu.

Próbowano rozwiązać ten problem poprzez zbudowanie bardziej zaawansowa-nego układu dostępu do pamięci RAM, który przy każdym poleceniu zapisu pa-mięci najpierw odczytywałby starą zawartość adresowanej komórki i zapisywałją w swoim wewnętrznym rejestrze, a dopiero później zapisywałby nową wartość,podając jako wyjście pamięci wciąż starą, odczytaną wcześniej.

Niestety z jakichś powodów rozwiązanie takie nie chciało działać, powodującże każda próba zapisu do pamięci kończyła się oczekiwaniem procesora w nie-skończoność, pomimo wystawiania przez układ sygnału potwierdzenia wykonaniaoperacji (ang. acknowledge). Prawdopodobnie wynikało to z niedokładnego zro-zumienia przeze mnie działania sygnałów elementu pdp11_bram, w efekcie wspo-mniany bardziej zaawansowany układ wystawiał je w złej kolejności.

Gdyby taki układ zarządzania pamięcią udało się zrealizować (jest to jeden z ele-mentów do dalszego rozwoju projektu), można by go wykorzystać do zarządzaniapamięcią zewnętrzną, np. dostępną w zestawie DE1 pamięcią SDRAM o pojemno-ści 8MB lub pamięcią FLASH o pojemności 4MB. Jednak z powodu ograniczeniado bloków pamięci Cyclone’a II, ograniczono wykorzystany RAM do 16 kB.

W każdym razie, ze zmodyfikowaną, jak wyżej opisano, pamięcią udało się uzy-skać pierwszą poprawną symulację działania procesora. Na rys. 4.2 widać przebiegisygnałów portu konsoli, za pomocą których do pamięci zapisywany jest prostyprogram dodający dwie liczby (MOV R0,R2; ADD R1,R2; w kodzie maszynowym,podawane w sygnale cons_din), oraz wpisywane do rejestrów R0 i R1 wartościkolejno 3 i 2. Z wykresu cons_dout widać odczytaną z rejestru R2 po wykonaniuprogramu przewidywaną wartość 5.

Rysunek 4.2: Pierwsza udana symulacja z działającą pamięcią

Symulacja ta dowiodła, że sam procesor działa (wykonuje operacje arytme-tyczne), możliwe jest zapisywanie i odczytywanie wartości z rejestrów, oraz żemożliwe jest zapisanie programu do pamięci, jak i wykonanie go.

25

Page 30: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

4.2 Budowa urządzeń wejścia/wyjścia

Projekt Waltera Müllera symulował urządzenia wejścia/wyjścia komputera PDP-11 za pomocą serwera napisanego w języku C++, uruchamianego na kompueterzeklasy PC z systemem uniksopodobnym. FPGA, na którym projekt ten jest uru-chomiony musi się komunikować z komputerem za pomocą magistrali USB.

Jak można przeczytać w [2], zestaw testowy DE1, na którym realizowano te-mat tej pracy inżynierskiej, nie pozwala na bezpośrednią komunikację przez portUSB, który wykorzystywany jest jedynie do programowania FPGA i debugowaniawgranych projektów.

DE1 udostępnia port DB9 do komunikacji w standardzie RS-232, zatem teo-retycznie możliwe jest takie przekształcenie oryginalnego kodu Waltera Müllera,aby wykorzystać komunikację w tym standardzie szeregowym zamiast USB.

Jednak z powodu braku komputera z portem RS-232 czy przejściówki RS-232–USB, postanowiłem zaimplementować proste urządzenia wejściowe i wyjściowew inny sposób.

4.2.1 Wyjście – wyświetlanie słowa procesora

Jako urządzenie wyjścia wykorzystano dostępne w ramach zestawu DE1 czterywyświetlacze siedmiosegmentowe, na których zrealizowano wyświetlanie czterechcyfr w systemie szesnastkowym. Rozwiązanie takie było bardzo proste do zaim-plementowania oraz umożliwia wyświetlanie liczby szesnastobitowej (po 4 bityreprezentowane przez jedną cyfrę na jednym wyświetlaczu). Dzięki temu możnaw prosty sposób wyświetlić całe słowo komputera PDP-11, a to umożliwia jegoproste testowanie.

Stworzono obiekt dekodera czterobitowych liczb binarnych na wyświetlacz sied-miosegmentowy, który potrafi wyświetlić wszystkie cyfry systemu szesnastkowego.Sposób wyświetlenia każdej cyfry pokazuje rysunek 4.3.

Rysunek 4.3: Sposób przedstawienia cyfr szesnastkowych na wyświetlaczusiedmiosegmentowym,odpowiednio:

0 1 2 3 4 5 6 78 9 A B C D E F

Rysunek jest własną modyfikacją grafiki autorstwa użytkownika H2g2bob Wikipedii, udostępnionej na licencji GFDLpod adresem https://commons.wikimedia.org/wiki/File:7_segment_display_labeled.svg

Ponieważ całą obsługę wejść i wyjść oparto o port konsoli (który został szerzejopisany w sekcji 3.3), sygnał CP_DOUT zawierający dane wyjściowe tego portu po-dzielony został na grupy czterobitowe, a te następnie doprowadzone do wcześniejprzygotowanych instancji dekodera liczb binarych na wyświetlacz siedmiosegmen-towy. Wyjścia z dekoderów zostały kolejno podłączone do odpowiednich wejść

26

Page 31: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

wyświetlaczy – dekoder najmłodszych czterech bitów do wyświetlacza najbardziejpo prawej stronie, dekoder bitów najstarszych do wyświetlacza po lewej.

4.2.2 Wejście – automat i przyciski zestawu DE1

Jako wejście początkowo wykorzystano napisany w VHDL-u prosty automatstanów, który w zależności od aktualnego stanu, wystawiał inne polecenie na portkonsoli PDP-11. Kolejne stany odpowiadały za wgrywanie do pamięci kolejnychpoleceń programu w kodzie maszynowym oraz odpowiednich wartości do rejestrów(np. adres początku programu do licznika programu), a później rozpoczęcie wyko-nywania programu (polecenie cpu start) i odczytanie wartości wynikowej. Rysu-nek 4.4 przedstawia przykładowe stany takiego prostego automatu wgrywającegoprogram do PDP-11.

funkcja:write register

nr rejestru: 1

dane: 0x02

S0

funkcja:write register

nr rejestru: 2

dane: 0x05

S1

KEY0

funkcja:

write register

nr rejestru: 7 (PC)

dane: 0x00

S2

KEY0

funkcja:write memory

adres: 0

dane: MOV R1,R3

S3

KEY0

S4

KEY0

funkcja:

write memory

adres: 1

dane: ADD R2,R3

S5

KEY0

funkcja:write memory

adres: 1

dane: HALT

S6

KEY0

funkcja:

cpu run

S7

KEY0

funkcja:read register

nr rejestru: 3

Rysunek 4.4: Przykładowy automat stanu wgrywający program do PDP-11 przez port konsoli

Przejścia między kolejnymi stanami były wykonywane po naciśnięciu przyciskuKEY0 zestawu DE1, a żądania wykonania polecenia konsoli z danego stanu byływysyłane po wciśnięciu przycisku KEY1. Wynik działania programu – w postaci od-czytanej wartości wynikowej z pamięci bądź któregoś z rejestrów, był wyświetlanyna opisanych wcześniej wyświetlaczach siedmiosegmentowych. W ten sposób byłomożliwe proste sprawdzenie, czy urządzenie działa po wgraniu projektu na fizycznyrzeczywisty układ Cyclone II.

4.2.3 Wyniki symulacji i testów

Przeprowadzono prostą symulację tego rozwiązania, która dowiodła jego po-prawnego działania. Wykorzystano do niej automat stanów przedstawiony na rys.4.4. Wynik symulacji przedstawiono na rysunku 4.5.

Malejące zbocze sygnału KEY[0] powoduje przejście do kolejnego stanu, niskistan KEY[1] powoduje wysłanie żądania wykonania polecenia konsoli.

Sygnały LEDR[0]–LEDR[7] są w stanie wysokim, gdy automat znajduje się w od-powiadającym ich numerze stanie. LEDR[8] sygnalizuje, że konsola jest zajęta,a LEDR[9] znajduje się w stanie wysokim w czasie, gdy procesor wykonuje pro-gram. Docelowo, na fizycznym układzie, sygnały te były doprowadzone do kolej-nych czerwonych diod dostępnych w zestawie DE1.

27

Page 32: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

Rysunek 4.5: Symulacja programowania za pomocą automatu stanów

Wgrywany program, podobnie jak w pierwszej przeprowadzonej symulacji, re-alizuje dodawanie dwóch liczb zapisanych do rejestrów. Liczbami w rejestrach sątym razem 2 i 5. Zostaje wykonana operacja R3 ← 2+ 5, wynik możemy odczytaćz sygnału dout. Jak widać na wykresie, jest to spodziewane 7.

Zrealizowane tego typu automaty stanów, wgrywające do PDP-11 krótkie pro-gramy złożone z kilku instrukcji, działają bez żadnych problemów na płytce DE1,za każdym razem poprawnie zapisując program w pamięci i wywołując jego wy-konanie.

4.2.4 Wejście – komunikacja przez rozszerzenie 40-pinowe

Ostatecznie bardziej rozbudowane urządzenie wejścia, umożliwiające wgrywa-nie bardziej skomplikowanych programów zrealizowano, budując układ do komu-nikacji równoległej między portem konsoli PDP-11 a zewnętrznym urządzeniemprogramującym poprzez dostępne w zestawie DE1 dwa gniazda z czterdziestomapinami każde. Piny danego gniazda można ustawić jako wejściowe albo wyjściowe.Wykorzystano osiemnaście pinów wejściowych i dwa piny wyjściowe. Na piny wyj-ściowe wystawiane są sygnały zajętości konsoli (CP_STAT.cmdbusy) oraz działaniaprocesora (CP_STAT.cpugo).

Układ składa się z demultipleksera, przekazującego w zależności od podanegoadresu dane do jednego z czterech kolejnych rejestrów równoległych. Pierwszyz nich (o adresie 0) przechowuje młodszy bajt (bity od 7 do 0) wejścia danychconsoli (CP_DIN), kolejny (adres 1) przechowuje starszy bajt wejścia danych konsoli(bity od 15 do 8), trzeci rejestr (adres 2) przechowuje numer rejestru (bity 2–0,sygnał CP_CNTL.rnum), kod polecenia konsoli (bity 7–3, sygnał CP_CNTL.func) orazdwa bity enable dostępu do pamięci (bity 9–8, sygnał CP_ADDR.be), czwarty rejestr(adres 3) przechowuje 14 bitów adresu pamięci polecenia konsoli – w połączeniuz bitami enable daje to 15-bitowy adres logiczny komórki pamięci, a więc o jedenbit więcej niż potrzeba do zaadresowania 16 kB dostępnej pamięci.

Rysunek 4.6 pokazuje schemat budowy tego układu. Rejestry równoległe zapa-miętują dane, będące na wejściu w momencie narastającego zbocza sygnału zega-rowego i przekazują je na zewnątrz. Wyjścia rejestrów są bezpośrednio połączonedo odpowiadających im sygnałów portu konsoli procesora.

Jak widać na schemacie z rys. 4.1, wejście danych zostało podłączone do pi-

28

Page 33: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

DMUX

REG 8bit

REG 8bit

REG 10bit

REG 14bit

DATA[13..0]

CLK

DATA[7..0]

DATA[7..0]

DATA[9..0]

DATA[13..0]

CLK

CLK

CLK

CLKCP_DIN[7..0]

CP_DIN[15..8]

CP_CNTL.rnum[2..0]

CP_CNTL.func[4..0]

CP_ADDR.be[2..0]

CP_ADDR.addr[14..1]

CP_ADDR.addr[21..15]

CP_STAT.cmdbusy

CP_STAT.cpugo

A0A1

REG_ADDR[1..0]

CP_CNTL.req

Rysunek 4.6: Schemat budowy układu służącego do wydawania poleceń konsoli poprzez komuni-kację równoległą

nów 13–0 rozszerzenia GPIO_0 zestawu DE1, wejście adresu rejestrów równoległychdo pinów 14–15, a wejście zegarowe rejestrów i wejście żądania wykonania polece-nia konsoli kolejno do pinów 16 i 17.

Aby wykonać przy użyciu tego układu polecenie konsoli, urządzenie zewnętrznemusi podać adres rejestru równoległego młodszego bajtu danych (binarnie 00)na demultiplekser, następnie podać młodszy bajt danych na młodsze 8 bitów 14-bitej szyny wchodzącej na wejście demultipleksera, po czym podać puls na pinzegara. Następnie musi powtórzyć tę czynność ze starszym bajtem danych i adre-sem rejestru 01. Później z numerem rejestru procesora (jeśli wywoływane poleceniekonsoli tego wymaga), kodem polecenia konsoli i bitami enable na odpowiednichbitach wejścia demultipleksera i adresem rejestru 10. Jeśli polecenie wymaga ad-resu pamięci, urządzenie musi podać również ów adres na rejestr o adresie 11,po czym zatwierdzić pulsem zegara.

Gdy wszystkie potrzebne dane polecenia konsoli zostaną zapamiętane w reje-strach, urządzenie zewnętrzne podaje stan wysoki na wejście żądania wykonaniapolecenia konsoli (CP_CNTL.req). Wówczas PDP-11 zaczyna to polecenie wykony-wać i wystawia jedynkę na linii CP_STAT.cmdbusy – zajęty, wykonując poleceniekonsoli.

Jako zewnętrzne urządzenie programujące wykorzystłem posiadany przeze mniezestaw uruchomieniowy Arduino Mega 2560, który bardzo łatwo się programuje.Program dla Arduino do komunikacji z PDP-11 opisano dokładniej w rozdziale 5.

4.2.5 Wyniki symulacji układu

Rysunek 4.7 przedstawia wynik symulacji całego układu do komunikacji mię-dzy portem konsoli PDP-11 a zewnętrznym urządzeniem. Zasymulowane sygnałyzewnętrzne odpowiadają tym, jakie podaje zestaw Arduino podłączony i oprogra-mowany jak opisano w rozdziale 5.

Sygnały CP_DOUT, CP_DIN, DATA_IN są przedstawione szesnastkowo, DATA_INto dane przypisywane do CP_DIN poprzez dwa pierwsze rejestry równoległe. Kodpolecenia konsoli CP_CNTL.func jest przedstawiony jako liczba ósemkowa.

Z przedstawionych sygnałów można odczytać, że wgrywany jest program ana-logiczny do tego z listingu 5.8, jednak z inną zawartością pamięci pod adresami 14i 16. Pod pierwszym adresem zapisana zostaje liczba 0123(16), pod drugim zostaje

29

Page 34: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

0000

000E

0010

0000

2419

......

12C

1...

1302

...60

42...

0A82

...00

C2

...10

8C...

0000

...01

23...

1801

...00

0000

0E00

1000

00

12C

113

0260

420A

8200

C2

108C

0000

0123

1801

0000

000E

0010

0000

{000

......

{000

0000

...{0

0000

00...

{000

0000

...{0

0000

00...

{000

0000

...{0

0000

00...

{000

0000

...{0

00...

...{0

00...

...{0

0000

0000

0000

0000

0000

} 0

{11}

0 0

...{0

00...

X0

12

34

56

78

08

UU

1110

1101

U {

...U

......0

{10

10...

...0 {

1010

......0

{10

10...

...0 {

1010

......0

{10

10...

...0 {

1010

......0

{10

10...

...0 {

1010

......0

{...

0 {.

.....0

{...

0 {.

.....0

{...

0 {.

.....0

{...

0 {.

.....0

{...

0 {.

.....0

{...

XX

2521

0124

X0

73

40

......

...0.

.....

......

0...

......

...0.

.....

......

0...

......

...0.

.....

......

0...

0000

...0.

.....

......

0...

......

...0.

..00

00...

0...

......

...0.

.....

......

0000

...00

00...

0008

01

23

01

23

01

23

01

23

01

23

01

23

01

23

01

23

01

23

01

23

01

23

01

23

01

23

01

23

0.00

000

us20

us

40 u

s60

us

80 u

s10

0 us

120

us14

0 us

160

us18

0 us

CP

_DO

UT

0000

000E

0010

0000

2419

CP

_DIN

......

12C

1...

1302

...60

42...

0A82

...00

C2

...10

8C...

0000

...01

23...

1801

...00

0000

0E00

1000

00

DA

TA

_IN

12C

113

0260

420A

8200

C2

108C

0000

0123

1801

0000

000E

0010

0000

CP

_AD

DR

{000

......

{000

0000

...{0

0000

00...

{000

0000

...{0

0000

00...

{000

0000

...{0

0000

00...

{000

0000

...{0

00...

...{0

00...

...{0

0000

0000

0000

0000

0000

} 0

{11}

0 0

...{0

00...

addr

X0

12

34

56

78

08

beU

U11

1011

01

CP

_CN

TL

U {

...U

......0

{10

10...

...0 {

1010

......0

{10

10...

...0 {

1010

......0

{10

10...

...0 {

1010

......0

{10

10...

...0 {

1010

......0

{...

0 {.

.....0

{...

0 {.

.....0

{...

0 {.

.....0

{...

0 {.

.....0

{...

0 {.

.....0

{...

req

func

XX

2521

0124

rnum

X0

73

40

D_I

N...

......

0...

......

...0.

.....

......

0...

......

...0.

.....

......

0...

......

...0.

..00

00...

0...

......

...0.

.....

......

0...

0000

...0.

.....

......

0...

......

...00

00...

0000

...00

08

RE

G_A

DD

R0

12

30

12

30

12

30

12

30

12

30

12

30

12

30

12

30

12

30

12

30

12

30

12

30

12

30

12

3

RE

G_C

LK

Ent

ity:te

stbn

ch A

rchi

tect

ure:

test

bnch

_arc

h D

ate:

Sat

Jan

25

17:3

0:56

CE

T 2

014

Row

: 1 P

age:

1

Rysunek4.7:

Symulacja

układu

obsłu

gującego

port

konsolip

rzez

rejestry

równ

oległe

30

Page 35: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

zapisane 1800(16), mimo że wpisywane bezpośrednio do portu konsoli jest 1801(16).Dzieje się tak dlatego, że ustawiono tylko wyższy bit enable (be <= 1̈0̈), dziękiczemu do pamięci zostaje wpisany tylko starszy bajt podanego słowa.

Spodziewanym efektem działania programu jest wartość 0123(16) + 1800(16) +0001(16) = 1924(16) z zamienionymi bajtami, czyli 2419(16) na wyjściu, co zgadzasię z wartością sygnału CP_DOUT pod koniec symulacji.

Symulacja ta dowodzi poprawności koncepcji sposobu komunikacji i popraw-nego współdziałania procesora i pamięci z układem komunikacyjnym. Oprócz niejprzeprowadzono jeszcze symulacje sprawdzające poprawność działania bitów ena-ble, przy użyciu, zmodyfikowanego jak opisano w sekcji 3.2, elementu pdp11_vmbox.

0000 0102 0000 0104 0000 0504

0102 0304 0506

UU 11 01 11 10 11

00XXXX 000000

XX 25 24 25 24 25 24

0.00000 us 10 us 20 us 30 us 40 us 50 us 60 us 70 us 80 us 90 us

DATA OUT 0000 0102 0000 0104 0000 0504

DATA IN 0102 0304 0506

BYTE ENABLE UU 11 01 11 10 11

CP ADDR 00XXXX 000000

CP FUNC XX 25 24 25 24 25 24

CMD BUSY

CMD REQ

MEM ERR

Entity:testbench_be Architecture:testbnch_arch Date: Sat Jan 25 15:23:46 CET 2014 Row: 1 Page: 1

Rysunek 4.8: Symulacja zapisu pojedynczych bajtów pamięci poprzez port konsoli

Na rysunku 4.8 przedstawiony jest wynik symulacji kilkakrotnej opracji zapisui odczytu słowa spod tego samego adresu pamięci. Zapisywane są kolejno wartości:0102(16), 0304(16), 0506(16), kolejno z ustawieniem bitów enable: 11 (całe słowo), 01(młodszy bajt), 10 (starszy bajt).

Po każdym zapisie następuje odczyt całego słowa z pamięci. W trakcie za-pisu PDP-11 wystawia stan niski na całym sygnale CP_DOUT. Spodziewanym wy-nikiem zatem są kolejno zmiany tegoż sygnału: 0000(16), 0102(16), 0000(16), 0104(16),0000(16), 0504(16). Jak widać z wykresu, wynik symulacji zgadza się z przewidywa-niami.

0000 0102 0304 0506

0102 0304 0506

UU 11 01 10

00XXXX 000000 000001 000002 000000 000001 000002

XX 25 24

0.00000 us 10 us 20 us 30 us 40 us 50 us 60 us 70 us 80 us 90 us

DATA OUT 0000 0102 0304 0506

DATA IN 0102 0304 0506

BYTE ENABLE UU 11 01 10

CP ADDR 00XXXX 000000 000001 000002 000000 000001 000002

CP FUNC XX 25 24

CMD BUSY

CMD REQ

MEM ERR

Entity:testbench_be Architecture:testbnch_arch Date: Sat Jan 25 15:22:25 CET 2014 Row: 1 Page: 1

Rysunek 4.9: Symulacja odczytu pojedynczych bajtów pamięci poprzez port konsoli

Odczyt pojedynczego bajtu poprzez port konsoli raczej nigdy nie znajdzie za-stosowania, przez co nie został zaimplementowany, ani w oryginalnym projekcie

31

Page 36: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

„w11”, ani w przedstawianej tutaj jego modyfikacji. Wykres symulacji na rysunku4.9 pokazuje najpierw kolejno zapis pełnych słów do pamięci: 0102(16), 0304(16),0506(16), a następnie ich odczyt z różną konfiguracją bitów enable.

Gdyby odczytywany był tylko i wyłącznie bajt z podanym zezwoleniem, uzy-skany byłby następujący wynik ostatnich trzech wartości sygnału wyjściowego:0102(16), 0104(16), 0504(16). Jak jednak widać, odczytywane są pełne słowa z pa-mięci, a nie pojedyncze bajty. Nie stanowi to żadnego problemu, ponieważ war-tości te dalej nie są i tak wykorzystywane do obliczeń, a jedynie (przynajmniejwg oryginalnego zamysłu portu konsoli twórców komputera PDP-11) do diagno-styki.

Kolejną rzeczą do przetestowania po zmianie zachowania bitów enable byłosprawdzenie, czy rozkazy bajtowe procesora wykonują się poprawnie. Użyto w tymcelu rozkazu MOVB S,D, przesuwającego jeden bajt między podanym źródłem (S)a celem (D).

0000 0006 0102 0304 0506 0000 0003 0004 0000 0102 0400 FF06

FFFF 0006 0102 0304 0506 0000 0003 0004 100B 904C 908D 0000

... 11 01 10

... 000 111 000 001 010 011 100 101 000

0... 000... 000... 000... 000000 000... 000... 000... 000... 000... 000... 000... 000002

XX 25 21 25 01 24

0.00000 us 50 us 100 us 150 us 200 us 250 us

DATA OUT 0000 0006 0102 0304 0506 0000 0003 0004 0000 0102 0400 FF06

DATA IN FFFF 0006 0102 0304 0506 0000 0003 0004 100B 904C 908D 0000

BYTE ENABLE ... 11 01 10

REGN ... 000 111 000 001 010 011 100 101 000

CP ADDR 0... 000... 000... 000... 000000 000... 000... 000... 000... 000... 000... 000... 000002

CP FUNC XX 25 21 25 01 24

CMD BUSY

CMD REQ

MEM ERR

Entity:testbench_be Architecture:testbnch_arch Date: Sun Jan 26 00:27:18 CET 2014 Row: 1 Page: 1

Rysunek 4.10: Symulacja zapisu pojedynczych bajtów pamięci przez rozkazy procesora

Na początku przetestowano zapis jednego bajtu do pamięci poprzez rozkazybajtowe procesora. Na rysunku 4.10 widać przebieg symulacji. Na początku pa-mięć jest inicjowana do stanu przedstawionego w tabeli 4.1, następnie kolejnozapisywane są wartości: słowo 0102(16) pod adres logiczny 0, bajt 04(16) pod adreslogiczny 3, bajt 06(16) pod adres logiczny 4.

Tabela 4.1: Początkowa zawartość pamięci do symulacji (dane wpisane szesnastkowo)

adres MSB LSB adresMSB słowa5 FF FF 43 FF FF 21 FF FF 0

W efekcie powinniśmy uzyskać zawartość pamięci taką, jak przedstawiona w ta-beli z lewej strony porównania 4.2. By sprawdzić, co zostało zapisane do pamięci,w symulacji zostają odczytywane z niej kolejne słowa. Jak widać na wykresiei w tabeli z prawej strony porównania, przedstawiającej stan pamięci po wykona-niu symulacji, słowo o adresie 2 to 0400(16) zamiast przewidywanego 04FF(16).

Po kolejnych próbach okazało się, że nie ma znaczenia, która wersja elementupdp11_vmbox jest używana – oryginalna, czy zmodyfikowana, rozkaz bajtowy za-

32

Page 37: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

pisujący do adresu nieparzystego zeruje młodszy bajt słowa, do którego należyadresowany bajt. Oznacza to, że nie ma możliwości zapisania w pamięci jednąinstrukcją starszego bajtu bez niszczenia zawartości młodszego. Jest to błąd ory-ginalnego projektu Waltera Müllera i nie został poprawiony w ramach tej pracy.

Problem ten nie został wykryty ani naprawiony wcześniej najprawdopodobniejdlatego, że instrukcje bajtowe są rzadko wykorzystywane w programach dla PDP-11.Tabela 4.2: Spodziewana (po lewej) i uzyskana (po prawej) zawartość pamięci po symulacji (danewpisane szesnastkowo)

adres MSB LSB adresMSB słowa5 FF 06 43 04 FF 21 01 02 0

adres MSB LSB adresMSB słowa5 FF 06 43 04 00 21 01 02 0

0000 0006 0000 0002 0005 0000 0102 0004 0005

0102 0304 0506 0006 0000 0002 0005 12C0 9301 9342 0000

UU 11

X 0 7 3 4 5 0 1 2

0... 000000 000001 000002 000000 000003 000004 000005 000006 000001 000000

XX 25 21 25 01 20

0.00000 us 20 us 40 us 60 us 80 us 100 us 120 us 140 us 160 us 180 us 200 us

DATA OUT 0000 0006 0000 0002 0005 0000 0102 0004 0005

DATA IN 0102 0304 0506 0006 0000 0002 0005 12C0 9301 9342 0000

BYTE ENABLE UU 11

REGN X 0 7 3 4 5 0 1 2

CP ADDR 0... 000000 000001 000002 000000 000003 000004 000005 000006 000001 000000

CP FUNC XX 25 21 25 01 20

CMD BUSY

CMD REQ

MEM ERR

Entity:testbench_be Architecture:testbnch_arch Date: Sat Jan 25 23:54:44 CET 2014 Row: 1 Page: 1

Rysunek 4.11: Symulacja odczytu pojedynczych bajtów pamięci przez rozkazy procesora

Wykonano jeszcze symulację sprawdzającą, czy bajtowe rozkazy procesora radząsobie poprawnie z odczytem pojedynczego bajtu z pamięci. Jak widać na wykresie4.11, początkowo zainicjalizowano pamięć do wartości jak w tabeli 4.3, następniewgrano do pamięci program wykorzystujący instrukcje MOV i MOVB do zapisaniaw kolejnych rejestrach kolejno z pamięci: słowa o adresie 0, bajtu o adresie 2,bajtu o adresie 5. Następnie program został wykonany.

Tabela 4.3: Początkowa zawartość pamięci do symulacji (dane wpisane szesnastkowo)

adres MSB LSB adresMSB słowa5 05 06 43 03 04 21 01 02 0

Po odczytaniu wartości z rejestrów R0, R1 i R2 na wyjściu powinny pojawić siękolejno: 0102(16), 0004(16) i 0005(16). Wyniki zgadzają się z przewidywaniami, jakwidać na wykresie symulacji.

33

Page 38: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

4.2. Budowa urządzeń wejścia/wyjścia

Oznacza to, że odczyt pojedynczych bajtów z pamięci przez bajtowe rozkazyprocesora działa.

Ostatnia symulacja sprawdza, czy zmodyfikowany warunek błędu dostępu do pa-mięci dalej zostaje zgłoszony we właściwym momencie, tj. gdy rozkaz wymagającydostępu do całego słowa odwołuje się do nieparzystego adresu (adresu pojedyn-czego, starszego, bajtu słowa). Na wykresie 4.12 przedstawiono przybliżenie wykre-sów symulacji, podczas której próbowano odczytać i zapisać całe słowo procesora(instrukcja MOV) z nieparzystego bajtu pamięci. Jak widać, element pdp11_vmboxpoprawnie zgłosił błąd przy takim żądaniu.

Przy pozostałych symulacjach żadne błędy nie zostały zgłoszone.

0000

0000

11

000

000001

01

102.5 us 103 us 103.5 us 104 us 104.5 us 105 us 105.5 us 106 us

DATA OUT 0000

DATA IN 0000

BYTE ENABLE 11

REGN 000

CP ADDR 000001

CP FUNC 01

CMD REQ

MEM ERR

CPU GO

Entity:testbench_be Architecture:testbnch_arch Date: Sun Jan 26 01:05:18 CET 2014 Row: 1 Page: 1

Rysunek 4.12: Symulacja przy próbie dostępu do słowa pod adresem nieparzystym przez rozkazyprocesora

Wynika z tego, że procesor i pamięć po zmodyfikowaniu elementu pdp11_vmboxtak, aby dodać obsługę zapisu bajtowego do portu konsoli, zachowują się popraw-nie (przynajmniej na tyle, na ile poprawnie zachowywały się przed tą zmianą).

34

Page 39: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Rozdział 5

Wgrywanie programów za pomocąArduino

Jak zostało wcześniej wspomniane, do komunikacji z portem konsoli PDP-11został wykorzystany zestaw uruchomieniowy Arduino Mega 2560. Jest to zestawz mikrokontrolerem AVR ATMega2560, z łatwym w obsłudze środowiskiem pro-gramistycznym udostępnionym na zasadach wolnego oprogramowania na więk-szość systemów operacyjnych. Środowisko to umożliwia programowanie w językuC++ z użyciem biblioteki dostarczającej wielu ułatwiających programowanie mi-krokontrolera funkcji. Jako kompilatora używa avr-g++ projektu GNU. Więcej natemat programowania Arduino można przeczytać w [4], a na temat wykorzysta-nego w nim mikrokontrolera w [5].

Arduino zostało połączone z zestawem DE1 za pomocą męsko-żeńskich prze-wodów połączeniowych. Cyfrowe piny 17–0 Arduino są skonfigurowane jako wyj-ście i odpowiadają pinom GPIO_0[17]–GPIO_0[0] zestawu DE1. Piny 19–18 połą-czone są do GPIO_1[1] i GPIO_1[0], i mogą służyć do odczytu wartości sygnałówCP_STAT.cpugo i CP_STAT.cmdbusy.

Poniżej omówiony został program dla Arduino służący do wydawania poleceńkonsoli komputerowi PDP-11 w zestawie DE1.

5.1 Funkcje do komunikacji z PDP-11 na Cyclone’ie II

Wszystkie funkcje służące do komunikacji wykorzystują zdefiniowane począt-kowo stałe, określające numery pinów odpowiadających odpowiednim sygnałom.Definicje te wyglądają na przykład tak: const int cmdbusyPin = 18;, podobnedefinicje istnieją również dla symboli rejestrów specjalnych (const word R_PC =07; – licznik programu, ang. program counter) czy dla poleceń konsoli (const wordWMEM = 025; – zapisz do pamięci, ang. write memory, o kodzie 25 ósemkowo).

5.1.1 Zapis binarnych danych do pamięci – writeMem

Do zapisania dużej liczby danych pod konkretne adresy pamięci została napi-sana funkcja przedstawiona na listingu 5.1.

Funkcja writeMem(word memData[], uint addr[], uint memsize) pobierajako argumenty tablicę słów PDP-11 memData[], tablicę adresów addr[], pod jakiekolejne słowa mają być zapisane, i liczbę słów do zapisania (wielkość tablicy)memsize.

W tablicy adresów umieszcza się adresy słów takie, jak obsługiwane przez portkonsoli projektu „w11”, zatem są one adresami logicznymi pamięci podzielonymi

35

Page 40: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

5.1. Funkcje do komunikacji z PDP-11 na Cyclone’ie II

1 void writeMem(word memData[], uint addr[], uint memsize) {2 for(uint i = 0; i < memsize; i++) // dla każdego elementu tablicy3 sendCmd(WMEM, 0, 3, addr[i], memData[i]); // zapisz dane pod wskazany adres4 }

Listing 5.1: Funkcja zapisująca tablicę słów procesora do pamięci RAM

przez dwa (bez najmłodszego bitu adresu logicznego), jak wyjaśniono w sekcjach3.2 i 3.3.

Efektem wykonania funkcji jest zapisanie w pamięci RAM wszystkich podanychw tablicy memData[] słów pod kolejne wskazane adresy. Funkcja ta wykorzystujefunkcję sendCmd(byte func, byte rnum, byte be, word memAddr, word data)opisaną poniżej.

5.1.2 Wysyłanie pojedynczego polecenia konsolisendCmd()

Dowolne pojedyncze polecenie konsoli można wysłać za pomocą funkcji przed-stawionej na listingu 5.2.

1 void sendCmd(byte func, byte rnum, byte be, word memAddr, word data) {2 word packet = 0x00 | lowByte(data); // młodszy bajt3 sendData(packet, 0); // wyślij do rejestru 04 packet = 0x00 | highByte(data); // starszy bajt5 sendData(packet, 1); // wyślij do rejestru 16 packet = rnum | (func << 3) | (be << 8); // nr rejestru, kod polecenie7 sendData(packet, 2); // i byte-enable wyślij do rej. 28 packet = memAddr; // adres pamięci9 sendData(packet, 3); // wyślij do rejestru 310 doRequest();11 }

Listing 5.2: Funkcja wysyłające pojedyncze polecenie konsoli

Funkcja sendCmd(byte func, byte rnum, byte be, word memAddr, worddata) pobiera jako argumenty kod polecenia do wysłania func, numer rejestrurnum, którego to polecenie dotyczy, bajt z bitami enable be dla operacji na pa-mięci, adres pamięci memAddr, którego to polecenie dotyczy i pakiet danych datado zapisania w pamięci bądź rejestrze.

Efektem wykonania tej funkcji jest wykonanie przez symulowany sprzętowow zestawie DE1 PDP-11 wysłanego polecenia konsoli.

Funkcja ta korzysta ze zdefiniowanych w bibliotece Arduino funkcji lowByte()i highByte(), oraz poniżej opisanych funkcji sendData(word data, byte dmuxAddr)i doRequest().

36

Page 41: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

5.1. Funkcje do komunikacji z PDP-11 na Cyclone’ie II

sendData()

1 void sendData(word data, byte dmuxAddr) {2 setDmuxAddr(dmuxAddr); // ustaw adres rej. równoległego3 setData(data); // ustaw dane na szynie4 delayMicroseconds(1); // poczekaj 1 µs5 doLatch(); // zapamiętaj dane w rejestrze równ.6 }

Listing 5.3: Funkcja wysyłająca dane do rejestru równoległego

Funkcja sendData(word data, byte dmuxAddr) jako argumentu pobiera słowodata z danymi do ustawienia na rejestrze układu do komunikacji równoległej,opisanego w sekcji 4.2.4, oraz adres tego rejestru podawany na demultiplekser.

Funkcja ta zapisuje dane w jednym zaadresowanym rejestrze układu służącegodo komunikacji.

Wykorzystuje ona funkcje setDmuxAddr(byte addr), setData(word package)i doLatch(), opisane niżej.

setData()

1 void setData(word package) {2 int state = LOW;34 for(int i = 13; i >= 0; i--) {5 state = (package & (0x1 << i)) ? HIGH : LOW;6 digitalWrite(data[i], state); // ustaw bit na pinie data[i]7 }8 }

Listing 5.4: Funkcja ustawiająca dane na szynie komunikacyjnej

Funkcja setData(word package) pobiera jako argument dane do ustawieniana szynie komunikacyjnej package. Jej zadaniem jest ustawienie odpowiednichstanów na pinach 13–0.

setDmuxAddr()

1 void setDmuxAddr(byte addr) {2 digitalWrite(dmuxAddr[0], (int)(addr & 0x1));3 digitalWrite(dmuxAddr[1], (int)(addr & 0x2));4 }

Listing 5.5: Funkcja wybierająca odpowiedni adres rejestru równoległego

Funkcja setDmuxAddr(byte addr) pobiera jako argument numer rejestru rów-noległego, do którego zostanę zapisane dane ustawione funkcją setData(wordaddr).

37

Page 42: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

5.2. Test i uzyskane wyniki

doLatch()

1 void doLatch() {2 digitalWrite(latch, LOW); // upewnij się, że stan niski3 delayMicroseconds(1);4 digitalWrite(latch, HIGH); // zacznij puls5 delayMicroseconds(1);6 digitalWrite(latch, LOW); // zakończ puls7 }

Listing 5.6: Funkcja zatrzaskująca dane z szyny komunikacyjnej w rejestrze równoległym

Funkcja doLatch() nie pobiera żadnych argumentów i jej jedynym zadaniemjest wystawienie pulsu na wejście zegarowe wybranego wcześniej rejestru równole-głego układu służącego do komunikacji.

doRequest()

1 void doRequest() {2 digitalWrite(request, LOW); // ustawienie req = 0 dla pewności3 do {4 cmdbusy = digitalRead(cmdbusyPin);5 } while(cmdbusy == HIGH); // czekaj aż konsola będzie wolna67 digitalWrite(request, HIGH); // zacznij puls żądania89 delayMicroseconds(1);1011 digitalWrite(request, LOW); // zakończ puls1213 do {14 cmdbusy = digitalRead(cmdbusyPin);15 } while(cmdbusy == HIGH); // czekaj do wykonania polecenia16 }

Listing 5.7: Funkcja wysyłająca żądanie wykonania polecenia konsoli

Funkcja doRequest() nie pobiera żadnych argumentów.Jej zadaniem jest upewnienie się, że konsola nie jest zajęta, i podanie pulsu

na wejście żądania wykonania polecenia konsoli. W efekcie ustawione wcześniejpolecenie zostaje wykonane. Funkcja oczekuje do momentu wykonania polecenia.

5.2 Test i uzyskane wyniki

Wykorzystując przedstawione funkcje udało się z sukcesem wgrywać krótkieprogramy do pamięci PDP-11 i je wykonać.

Czasami jednak pojawiają się problemy, wynikające albo z niedoskonałości ko-munikacji między dwoma urządzeniami (zakłócenia na przewodach połączenio-wych), albo z wewnętrznych problemów procesora PDP-11 zaimplementowanegow języku VHDL, co jednak wydaje się mniej prawdopodobne, ze względu na po-prawne wyniki symulacji, jak i braku takich problemów przy programowaniu za po-mocą prostego automatu stanów (sekcja 4.2.2).

Problemy objawiają się tym, że układ sygnalizuje nieprzerwanie zajętość proce-sora (sygnał CP_STAT.cpugo w stanie wysokim), i wyświetlana jest ciągle wartość

38

Page 43: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

5.2. Test i uzyskane wyniki

0000(16). Występują one co jakiś czas przy próbie komunikacji wgrania i urucho-mienia problemu poprzez komunikację między Arduino i DE1.

Rysunek 5.1 przedstawia zdjęcie całego układu po wykonaniu programu z li-stingu 5.8. Na zdjęciu widać, że został odczytany z pamięci poprawny wynik dzia-łania programu, 2518(16) = 0010010100011000(2) = 9496(10).

00: 011301; MOV (R3),R102: 011402; MOV (R4),R204: 060102; ADD R1,R206: 005202; INC R208: 000302; SWAB R210: 010214; MOV R2,(R4)12: 000000; HALT14: 000043; 0x002316: 014001; 0x1801

Listing 5.8: Przykładowy program dla komputera PDP-11: logiczne adresy pamięci, pod którymisię znajduje (po lewej), kod maszynowy ósemkowo (po środku), rozkazy asemblera i wartości danych(po prawej); w rejestrze R3 znajduje się adres 14, w rejestrze R4 adres 16

Rysunek 5.1: Zdjęcie całego układu po poprawnym wykonaniu programu

39

Page 44: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Rozdział 6

Możliwości dalszego rozwoju

Aktualny stan projektu jest daleki od doskonałości. Wiele elementów, któreteoretycznie już działają, można udoskonalić.

Wśród takich elementów jest na przykład pamięć, która nie pozwala na pełnąobsługę błędów, z powodu niepopranwej logiki zachowania podczas równoczesnegozapisu i odczytu.

Dodatkowo, oprócz samego poprawienia zachowania pamięci blokowej, możnaw przyszłości napisać bardziej uniwersalny kontroler pamięci, umożliwiający wy-korzystanie zewnętrznych fizycznych układów pamięci SRAM czy FLASH podłą-czonych do układu FPGA w zestawie DE1.

Rozwijając projekt należałoby też znaleźć źródło problemów w komunikacjimiędzy zestawem Arduino a symulowanym PDP-11. Kolejną możliwością jest roz-winięcie programu na Arduino tak, by umożliwiało łatwą komunikację międzykomputerem klasy PC a PDP-11 na FPGA. Dodatkowo można by zastąpić ko-munikację równoległą komunikacją szeregową i ostatecznie całkowicie się pozbyćzależności od Arduino – umożliwiając łączenie odtworzonego PDP-11 z „pecetem”za pomocą portu RS-232 (lub przejściówki z RS-232 na USB).

Ponieważ popularne zestawy uruchomieniowe z układami Cyclone, takie jakDE1 firmy Terasic, często mają wbudowane porty PS/2 i VGA – możliwe jestzbudowanie układu zastępującego terminal VT-100 z wykorzystaniem standardo-wej klawiatury PS/2 i monitora VGA jako urządzenie wejścia/wyjścia.

Wmomencie posiadania jakiegoś urządzenia zdolnego komunikować się z odtwo-rzonym PDP-11 poprzez rejestry drukarki znakowej i klawiatury (tj. odtwarzają-cego terminal albo dalekopis), kolejnym sensownym krokiem byłoby zainstalowaniena owym PDP-11 któregoś z oryginalnych systemów operacyjnych: na przykład5th Edition UNIX lub 2BSD.

Przy wykorzystaniu szybszego zegara (projekt „w11” na układzie Altery powi-nien teoretycznie bez problemu działać taktowany zegarem 50MHz) do taktowaniaprocesora i mając dostęp do większej pamięci, można by nawet spróbować dopi-sać dla niego bardziej zaawansowany kontroler VGA i spróbować stworzyć jakieśminimalne środowisko graficzne umożliwiające wyświetlanie ikon/zdjęć, czy naweturuchamianie prostych gier z grafiką opartą o tzw. duszki (ang. sprites).

Można by stworzyć fizyczną konsolę, identyczną do tej dostarczanej z oryginal-nym PDP-11/70, i zintegrować z ową procesor odtworzony w strukturze FPGA,umożliwiając jego obsługę tak, jak w oryginalnym komputerze firmy DEC. Możnaby również spróbować w ramach „informatycznej archeologii” dostać współpracu-jący z PDP-11 dalekopis i połączyć go z symulowanym procesorem. Dalej można by

40

Page 45: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Możliwości dalszego rozwoju

podłączyć do niego czytnik taśm perforowanych i inne używane w latach siedem-dziesiątych XX wieku peryferia. W ten sposób powstałoby stanowisko pokazującewspółczesnym i przyszłym pokoleniom w jaki sposób komputery były obsługiwaneponad cztery dekady temu.

41

Page 46: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Rozdział 7

Podsumowanie

W ramach projektu udało się osiągnąć działający na układzie Cyclone II proce-sor zdolny do wykonywania programów w kodzie maszynowym komputera PDP-11.Ma on swoje, wciąż nierozwiązane, problemy i drobne rozbieżności z oryginalnąarchitekturą, jednak jak wskazują testy, jego podstawowa funkcjonalność jest po-prawnie zaimplementowana – potrafi on odczytywać słowa z pamięci i je do niejzapisywać, potrafi wykonywać podstawowe rozkazy procesora i komunikować siępoprzez port konsoli.

Istnieje możliwość wgrywania do niego programów za pomocą zewnętrznegoukładu, jakim jest zestaw Arduino Mega 2560, choć z pewnych powodów czasamiwystępują problemy w komunikacji i rozwiązanie to jest wysoce niedoskonałe.

Udało się poprawić drobny błąd w działaniu oryginalnego projektu, związanyz obsługą poleceń konsoli, działających na pojedynczych bajtach i zwrócić uwagęna inny błąd związany z obsługą bajtowych rozkazów procesora.

I mimo niezrealizowania w terminie planowanych początkowo bardziej zaawan-sowanych urządzeń wejścia/wyjścia (jak układ zastępujący terminal VT100 za po-mocą klawiatury na porcie PS/2 i monitora VGA), autor pracy znacznie poprawiłswoją znajomość oprogramowania firmy Altera, języka VHDL oraz budowy i dzia-łania klasycznego komputera PDP-11.

Jak zasugerowano w rozdziale 6, projekt ten może być rozwinięty na wieleciekawych sposobów, dodających mu wartości edukacyjnej lub rozwijających starąarchitekturę PDP-11.

42

Page 47: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Dodatek A

Załączniki

Do pracy dołączona jest płyta CD, na której znajduje się praca w wersji elek-tronicznej i pliki źródłowe stworzonego projektu.

43

Page 48: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Spis tabel

2.1 Zachowanie bitów V i C dla przykładowych operacji . . . . . . . . . . . 62.2 Adresy logiczne rejestrów procesora . . . . . . . . . . . . . . . . . . . . 62.3 Sposoby adresowania argumentów rozkazów . . . . . . . . . . . . . . . 8

4.1 Początkowa zawartość pamięci do symulacji . . . . . . . . . . . . . . . 324.2 Spodziewana i uzyskana zawartość pamięci po symulacji . . . . . . . . 334.3 Początkowa zawartość pamięci do symulacji . . . . . . . . . . . . . . . 33

44

Page 49: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Spis rysunków

2.1 Organizacja PSW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Uproszczony schemat komórki logicznej FPGA . . . . . . . . . . . . . . 112.3 Organizacja układu Cyclone II . . . . . . . . . . . . . . . . . . . . . . . 132.4 Zestaw ewaluacyjny DE1 . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.1 Schemat połączeń między wewnętrznymi elementami procesora . . . . . 17

4.1 Schemat połączeń układu obsługi portu konsoli, procesora i pamięci . . 224.2 Pierwsza udana symulacja z działającą pamięcią . . . . . . . . . . . . . 254.3 Sposób przedstawienia kolejnych cyfr szesnastkowych . . . . . . . . . . 264.4 Przykładowy automat stanu wgrywający program do PDP-11 przez port

konsoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.5 Symulacja programowania za pomocą automatu stanów . . . . . . . . . 284.6 Schemat budowy układu służącego do wydawania poleceń konsoli po-

przez komunikację równoległą . . . . . . . . . . . . . . . . . . . . . . . 294.7 Symulacja układu obsługującego port konsoli przez rejestry równoległe 304.8 Symulacja zapisu pojedynczych bajtów pamięci poprzez port konsoli . 314.9 Symulacja odczytu pojedynczych bajtów pamięci poprzez port konsoli . 314.10Symulacja zapisu pojedynczych bajtów pamięci przez rozkazy procesora 324.11Symulacja odczytu pojedynczych bajtów pamięci przez rozkazy procesora 334.12Symulacja przy próbie dostępu do słowa pod adresem nieparzystym

przez rozkazy procesora . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.1 Zdjęcie całego układu po poprawnym wykonaniu programu . . . . . . . 39

45

Page 50: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Spis listingów

4.1 Przykład konwertera rekordu do wektora . . . . . . . . . . . . . . . 234.2 Kod jednostki służącej do wygenerowania symbolu pamięci blokowej 234.3 Porównanie oryginalnej logiki pamięci ze zmodyfikowaną dla Cyc-

lone’a II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.1 Funkcja zapisująca tablicę słów procesora do pamięci RAM . . . . 365.2 Funkcja wysyłające pojedyncze polecenie konsoli . . . . . . . . . . 365.3 Funkcja wysyłająca dane do rejestru równoległego . . . . . . . . . 375.4 Funkcja ustawiająca dane na szynie komunikacyjnej . . . . . . . . 375.5 Funkcja wybierająca odpowiedni adres rejestru równoległego . . . . 375.6 Funkcja zatrzaskująca dane z szyny komunikacyjnej w rejestrze rów-

noległym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385.7 Funkcja wysyłająca żądanie wykonania polecenia konsoli . . . . . . 385.8 Przykładowy program PDP-11 . . . . . . . . . . . . . . . . . . . . 39

46

Page 51: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

Literatura

[1] Altera. Cyclone II Device Handbook. 2008. : http://www.altera.com/literature/hb/cyc2/cyc2_cii5v1.pdf (data dostępu: 19. 01. 2014).

[2] Altera. DE1 Development Board User Manual. 2006. : ftp://ftp.altera.com/up/pub/Altera_Material/12.1/Boards/DE1/DE1_User_Manual.pdf (data dostępu: 19. 01. 2014).

[3] Altera. Quartus II Help v13.1. 2013. : http://quartushelp.altera.com/13.1/ (datadostępu: 19. 01. 2014).

[4] Arduino HomePage. : http://arduino.cc (data dostępu: 19. 01. 2014).[5] Atmel. ATmega640/1280/1281/2560/2561 datasheet. 2012. : http://www.atmel.com/

Images/doc2549.pdf (data dostępu: 19. 01. 2014).[6] Richard Chirgwin. Nuke plants to rely on PDP-11 code UNTIL 2050! 19 czer. 2013. :

http://www.theregister.co.uk/2013/06/19/nuke_plants_to_keep_pdp11_until_2050/ (data dostępu: 27. 01. 2014).

[7] Paweł Czubaszek. Model minikomputera rodziny PDP-11 w strukturze FPGA. Prac. inż.Poznań: Politechnika Poznańska, 2013.

[8] DEC. PDP-11 Processor Handbook. Digital Equipment Corporation, 1979.[9] Arthur Gill. Machine and assembly language programming of the PDP-11. Second Edition.

Englewood Cliffs, N. J.: Prentice-Hall, Inc., 1983. : 0-13-541888-7.[10] Witold Komorowski. Instrumenta computatoria. Wybrane architektury komputerów. Gliwice:

Helion, 2000. Rozd. 2, s. 33–46. : 83-7197-333-0.[11] Walter F. J. Müller. W11 na Opencores. : http://opencores.org/project,w11 (data

dostępu: 19. 01. 2014).[12] Brad Parker. Verilog PDP-11. : http://www.heeltoe.com/download/pdp11/ (data

dostępu: 19. 01. 2014).[13] PDP2011. : http://pdp2011.sytse.net (data dostępu: 19. 01. 2014).[14] Naohiko Shimizu. POP11. : http://labo.nshimizu.com/pop11.html (data dostępu:

19. 01. 2014).[15] ang. Wikipedia. Minicomputer. : https://en.wikipedia.org/wiki/Minicomputer

(data dostępu: 19. 01. 2014).[16] Sam Williams. Free as in Freedom: Richard Stallman’s Crusade for Free Software. O’Reilly,

2002. : 0-596-00287-4.

47

Page 52: MODELKOMPUTERAPDP-11WSTRUKTURZEFPGAkofeina.net/~benek/inzynierka/praca_inzynierska_benedykt...2.2. PDP-11–architekturakomputera bity: 15–8 7–5 4 3 2 1 0 specjalnebityzarezerwowane

© 2014 Benedykt Jakub Jaworski

Instytut Automatyki i Inżynierii Informatycznej, Wydział ElektrycznyPolitechnika Poznańska

Skład przy użyciu systemu XƎLATEX.BibTEX:@mastersthesis{ key,

type = "Engineering Thesis",author = "Benedykt Jakub Jaworski",title = "Model komputera PDP-11 w strukturze FPGA",school = "Poznań University of Technology",address = "Poznań, Poland",year = "2014",

}