Spisu treści:

Komputer 10-bitowy - VHDL: 4 kroki
Komputer 10-bitowy - VHDL: 4 kroki

Wideo: Komputer 10-bitowy - VHDL: 4 kroki

Wideo: Komputer 10-bitowy - VHDL: 4 kroki
Wideo: VHDL#2. Создание первого TestBench в ModelSim 2024, Listopad
Anonim
Komputer 10-bitowy - VHDL
Komputer 10-bitowy - VHDL

Wykonanie: Tyler Starr i Ezzeedden Gazali

Wstęp

Projekt ten został zrealizowany jako część ostatecznego projektu dla CPE 133 w Cal Poly SLO. To świetny projekt dla kogoś, kto chce zrozumieć, jak działają komputery na najniższym poziomie i jak wykonują swoje zadania. Projekt jest wzorowany na 8-bitowym komputerze SAP opisanym w książce Alberta Malvino Digital Computer Electronics. Jednak zwiększyliśmy komputer do 10 bitów, aby umożliwić implementację większej liczby kodów operacyjnych (kodów operacji). Użytkownik może zaprogramować komputer do wykonywania zestawu operacji, wprowadzając określone instrukcje.

Architektura systemu i obwodów:

Komputer jest napisany w VHDL i będzie umieszczony na płycie Basys 3 firmy Digilent. Wejścia zostaną zmapowane do przełączników na spodzie płyty. Do funkcji resetowania i zapisu zostaną użyte dwa przełączniki dotykowe. Dane wyjściowe będą wyświetlane na 7-segmentowym wyświetlaczu płyty.

Komputer zostanie podzielony na mniejsze obwody (moduły), które obsługują różne operacje. Każdy moduł zostanie szczegółowo wyjaśniony w kolejnych krokach.

Krok 1: Materiały

Materiały
Materiały

Wszystko, co jest potrzebne do tego projektu, to płytka Basys3 FPGA firmy Digilent i przewód micro USB do podłączenia płytki do komputera.

Krok 2: Schemat blokowy modułów obwodów

Schemat blokowy modułów obwodów
Schemat blokowy modułów obwodów
Schemat blokowy modułów obwodów
Schemat blokowy modułów obwodów
Schemat blokowy modułów obwodów
Schemat blokowy modułów obwodów

Powyższe schematy blokowe pokazują różne moduły obwodów, które składają się na komputer 10-bitowy. Poniżej znajdują się opisy dla każdej z poszczególnych części/modułów pokazanych na powyższych schematach.

Licznik programu

Opis wejść: wejście to 5-bitowe wejście do załadowania liczby do licznika programu. Cp, gdy jest wysoki, licznik zlicza opadające krawędzie zegara. Clr resetuje licznik do 0. Ep, gdy jest wysoki, licznik wyprowadza aktualny stan licznika. Sp, gdy jest wysoki, licznik ustawia licznik na liczbę na wejściu

  • Opis wyjść:

    wyjście jest kopią licznika do wykorzystania na diodach LED 0-15. Count wyświetla aktualną liczbę.

  • Całkowite miejsce w systemie: Ten licznik śledzi lokalizację pamięci, w której znajduje się program. Wszystkie programy zaczynają się od adresu pamięci 00000 (0) i sięgają do 11111 (31), chyba że zastosowano zatrzymanie. W instrukcjach skoku licznik programu kontynuuje zliczanie od adresu, do którego program przeskakuje.

Wejście MUX

  • Opis wejść: Adres pobiera dane wejściowe z przełączników od 11 do 15. MAR pobiera dane wejściowe z rejestru 10-bitowego używanego jako MAR. Program kontroluje, które wejście ma kierować do wyjścia.
  • Opis wyjść: wyjście kieruje wybrane wejście do pamięci RAM.
  • Ogólne miejsce w systemie: Ten MUX określa, czy przekierować adres z przełączników lub magistrali do pamięci RAM. W trybie programowym adres z przełączników jest routowany, aw trybie roboczym adres z magistrali jest routowany.

ramMUX

  • Opis wejść: userInput to wejście, które użytkownik wprowadza w trybie programowania. aRegInput to dane zawarte w rejestrze A, używane podczas operacji przenoszenia. Control jest wyborem dla tego MUX.
  • Opis wyjść: wyjście to 10-bitowe wejście danych do pamięci RAM.
  • Ogólne miejsce w systemie: Ten MUX wyprowadza 10-bitowe dane wejściowe, które są używane w module pamięci RAM. Gdy bit kontrolny jest wysoki, MUX wysyła dane wprowadzone przez użytkownika w trybie programowania. Gdy bit sterujący jest niski, MUX wysyła dane do magistrali sterującej.

RAMModuł

  • Opis wejść: inputData to dane przechowywane w pamięci RAM. inputAddress to lokalizacja, w której przechowywane są dane. program wskazuje, czy komputer jest w trybie programowania lub uruchamiania. readWrite wskazuje, czy ma miejsce operacja odczytu lub zapisu. notCE to bit kontrolny modułu RAM. move wskazuje, że wykonywana jest operacja przenoszenia.
  • Opis wyjść: outputDataToBus to dane, które trafiają z pamięci RAM do magistrali. outputData i output Address to dane i adres, które trafiają do rejestru instrukcji.
  • Ogólne miejsce w systemie: Pamięć RAM pozwala na przechowywanie programu i danych w pamięci przed uruchomieniem programu. Po uruchomieniu programu pamięć RAM otrzymuje adres z MAR i wysyła dane pod tym adresem do magistrali.

adresROM

  • Opis wejść: opCode to wejście zawierające adres kodu operacji, który jest wykonywany przez komputer
  • Opis wyjść: opCodeStart to adres pamięci, który wskazuje pierwszą lokalizację mikroinstrukcji odpowiedniego opCode.
  • Ogólne miejsce w systemie: Ten moduł pobiera zablokowaną mikroinstrukcję i wysyła lokalizację pamięci, która odpowiada początkowi tej sekwencji mikroinstrukcji.

ringCounter

  • Opis wejść: reset ustawia licznik z powrotem na 100000 (pierwszy "stan T"). Clk zwiększa licznik o jeden na opadającej krawędzi zegara. NOP wskazuje, że bieżący stan/cykl jest cyklem „braku działania”.
  • Opis wyjść: licznik jest wyjściem licznika.
  • Ogólne miejsce w systemie: Licznik pierścieniowy steruje wstępnie ustawionym licznikiem i wyznacza sześć mikrokroków w każdym cyklu instrukcji (T1-T6).

licznik wstępny

  • Opis wejść: opCodeStart to lokalizacja pamięci mikroinstrukcji dla wykonywanego opCode. T1 resetuje licznik do 0, gdy jest wysoki. Gdy T3 jest wysoki, ładowany jest opCodeStart i zliczanie jest kontynuowane od tej lokalizacji przez pozostałe 3 cykle (T4-T6). Clr ustawia licznik na 0. Clk zwiększa licznik o jeden na opadającym zboczu.
  • Opis Wyjść: controlWordLocation wypisuje lokalizację pamięci słowa kontrolnego, które ma zostać wykonane.
  • Ogólne miejsce w systemie: Każdy kod operacyjny ma 3 mikroinstrukcje. Licznik zwiększa się o 1, zaczynając od 0 przez pierwsze 3 cykle (cykl pobierania). Licznik jest następnie wyzwalany przez licznik pierścieniowy w celu załadowania adresu na opCodeStart i zwiększa się o 1 przez pozostałe 3 cykle. W ten sposób preCounter kontroluje kolejność mikroinstrukcji do wykonania.

controlROM

  • Opis danych wejściowych: controlWordLocation jest adresem controlWord, które wyprowadzi controlROM. NOP wskazuje, że lokalizacja jest lokalizacją „bez operacji”.
  • Opis wyjść: controlWord jest słowem sterującym, które włącza/wyłącza różne moduły komputera w celu wykonania żądanej operacji.
  • Ogólne miejsce w systemie: Ten moduł dekoduje lokalizację pamięci z licznika wstępnego i wysyła słowo kontrolne dla żądanej operacji.

ALU

  • Opis wejść: A i B to wejścia z rejestru A i rejestru B, na których jednostka ALU wykonuje operacje arytmetyczne i logiczne. Gdy odejmowanie jest aktywne, oznacza to, że B jest odejmowane od A.
  • Opis wyjść: wynik jest wynikiem dodania A i B lub odjęcia B od A. Wyjścia większe niż, mniejsze niż i równe To wskazują, czy (AB lub A=B) i są używane w module skoku warunkowego. błąd wskazuje przepełnienie lub niedomiar, gdy jest aktywny.
  • Ogólne miejsce w systemie: Jednostka ALU zawiera logikę operacji arytmetycznych i logicznych wykonywanych przez komputer. Ten moduł może dodawać i odejmować dwie 10-bitowe liczby binarne. Jednostka ALU może również określić, czy A>B, A

warunkowyJmp

  • Opis wejść: inputCount służy do zatrzaskiwania bieżącego licznika. inputAddress służy do zatrzaśnięcia adresu, do którego nastąpi skok. loadFromRegister, gdy niski zatrzaski inputAddress. loadCount gdy niskie zatrzaski inputCount. gdy outputEnable jest niski, wyjście jest ustawiane na adres, do którego ma przejść.gT, it i eQ określają, który warunek jest sprawdzany. WiększyThan, LessThan i EqualTo są danymi wejściowymi z jednostki ALU wskazującymi wynik porównania między A i B. Na zboczu narastającym zegara Clk dane inputCount i inputAddress są wczytywane do rejestrów.
  • Opis wyjść: outputJmp to adres, który wczyta licznik programu.
  • Ogólne miejsce w systemie: ten moduł obsługuje warunkowe i bezwarunkowe skoki dla komputera. Na podstawie danych wejściowych gT, iT i eQ moduł określa, który warunek sprawdzić i czy jest on prawdziwy czy fałszywy. Jeśli warunek jest spełniony, wypisze adres instrukcji do skoku, w przeciwnym razie wypisze liczbę następnej instrukcji.

binToBCD

  • Opis wejść: numer 10-bitowej liczby do konwersji na binarnie kodowany dziesiętny.
  • Opis wyjść: setki cyfra w miejscu setek liczby binarnej. dziesiątki cyfry w miejscu dziesiątek liczby binarnej. jedynki cyfra w miejscu jedynek liczby binarnej.
  • Ogólne miejsce w systemie: Ten moduł konwertuje 10-bitową liczbę z rejestru wyjściowego na BCD, aby nasz czterocyfrowy sterownik wyświetlacza wyświetlał liczbę w postaci dziesiętnej na 7-segmentowym wyświetlaczu.

czterocyfrowy sterownik

  • Opis wejść: liczba to 16-bitowe wejście binarne, które jest kierowane do dekodera. inClk to wewnętrzny zegar płyty Basys i jest używany jako dzielnik zegara. RST resetuje zegar używany do wprowadzania cyfr.
  • Opis wyjść: anoda określa, która cyfra będzie podświetlona. cyfra to numer wejściowy do dekodera.
  • Ogólne miejsce w systemie: Ten moduł steruje dekoderem, aby wyświetlić numer BCD na wyświetlaczu.

dekoder

  • Opis Inputs:inputNumber to cyfra pochodząca ze sterownika, która zostanie zdekodowana.
  • Opis wyjść: katody określa, które katody zostaną włączone, aby wyświetlić żądaną cyfrę.
  • Ogólne miejsce w systemie: Ten moduł dekoduje cyfrę, która ma być wyświetlana na 7-segmentowym wyświetlaczu.

czterocyfrowy wyświetlacz

  • Opis wejść: numer to numer, który ma być wyświetlany na 7-segmentowym wyświetlaczu. błąd wskazuje, kiedy na wyświetlaczu powinien pojawić się komunikat „Err”. Clk to sygnał zegara, na którym działa wyświetlacz. Ten sygnał musi mieć około 60 Hz, aby wyświetlacz mógł jednocześnie pokazywać wszystkie 4 miejsca cyfr.
  • Opis wyjść: anoda określa, które miejsce cyfr jest włączone. katoda określa, które katody są aktywowane, aby wyświetlić żądaną cyfrę.
  • Ogólne miejsce w systemie: Ten moduł wyświetla liczbę na 7-segmentowym wyświetlaczu. Informacje o tym, które katody i anody aktywują się w celu użycia wyświetlacza, można znaleźć w instrukcji obsługi płytki Basys 3. Gdy bit błędu jest wysoki, wyświetlacz pokazuje „Err”.

wyjścieMUX

  • Opis wejść: progModeInput określa, które diody LED są włączone w trybie programowania. runModeInput określa, które diody led są włączone w trybie pracy. modeSelect to bit wyboru lub sterowania dla MUX.
  • Opis wyjść: ledOutput wskazuje, które diody będą włączone.
  • Ogólne miejsce w systemie: W zależności od trybu, w którym znajduje się komputer (program lub rum), MUX włączy różne diody led. W trybie programu (modeSelect to '0'), MUX włącza diody LED, aby przypominać lokalizację pamięci, w której znajduje się komputer i co zawiera. W trybie uruchamiania (modeSelect to „1”), MUX jest używany do debugowania, ale można go ustawić tak, aby wyświetlał cokolwiek innego.

zegarPrzegroda

  • Opis wejść: stop odczytuje pięć bitów MSB z magistrali w celu wykrycia polecenia zatrzymania ('11111) i zatrzymuje zegar. inputClk to wewnętrzny sygnał zegara płyty Basys 3.
  • Opis wyjść: ouputClk to nowy zegar, który został spowolniony.
  • Ogólne miejsce w systemie: Ten zegar jest używany do spowolnienia komputera, aby umożliwić użytkownikowi określenie, co się dzieje. Zegar może działać znacznie szybciej, jednak obecnie jest ustawiony na 2 Hz.

Bufor trójstanowy

  • Opis wejść: Din to 5-bitowe wejście trafiające do bufora. Ep jest bitem kontrolnym.
  • Opis wyjść: Dout to 5-bitowe wyjście bufora
  • Ogólne miejsce w systemie: Gdy bit kontrolny Ep jest aktywny, bufor wysyła dane wejściowe. Gdy bit kontrolny nie jest aktywny, bufor nie wyświetla niczego.

tenBitDRejestr

  • Opis wejść: Dbus to wejście, do którego ma się odnosić rejestr. Clk umożliwia rejestrowi odczytanie danych na rosnącej krawędzi zegara. ARST ustawia rejestr na 0 asynchronicznie. Gdy outputEnable jest niski, wyjściem jest zawartość rejestru. Gdy readIn jest niskie, rejestr zatrzaskuje Dbus na rosnącej krawędzi zegara.
  • Opis wyjść: Qbus jest wyjściem rejestru
  • Ogólne miejsce w systemie: Rejestr jest używany wielokrotnie w całym komputerze i służy do przechowywania informacji podczas wykonywania operacji.

FiveBitDRejestr

  • Opis wejść: Dbus to wejście, do którego ma się odnosić rejestr. Clk umożliwia rejestrowi odczytywanie danych na rosnącej krawędzi zegara. ARST ustawia rejestr na 0 asynchronicznie. Gdy outputEnable jest niski, dane wyjściowe stanowią zawartość rejestru. Gdy readIn jest niskie, rejestr zatrzaskuje Dbus na rosnącej krawędzi zegara.
  • Opis wyjść: Qbus jest wyjściem rejestru.
  • Ogólne miejsce w systemie: Rejestr jest używany wielokrotnie w całym komputerze i służy do przechowywania informacji podczas wykonywania operacji.

Krok 3: Kod

Poniżej znajduje się folder zawierający ograniczenia i pliki źródłowe dla komputera 10-bitowego.

Krok 4: Demo i przykładowy kod

Powyższy film pokazuje, jak zaprogramować 10-bitowy komputer na płycie Basys 3 FPGA. Plik PDF zawierający kody operacyjne i przykładowy program jest również załączony poniżej.

Zalecana: