Sommario:

Computer a dieci bit - VHDL: 4 passaggi
Computer a dieci bit - VHDL: 4 passaggi

Video: Computer a dieci bit - VHDL: 4 passaggi

Video: Computer a dieci bit - VHDL: 4 passaggi
Video: 10.FPGA FOR BEGINNERS- TESTBENCH in VHDL 2024, Dicembre
Anonim
Computer a dieci bit - VHDL
Computer a dieci bit - VHDL

Prodotto da: Tyler Starr e Ezzeedden Gazali

introduzione

Questo progetto è stato completato come parte del progetto finale per CPE 133 a Cal Poly SLO. È un ottimo progetto per chi cerca di capire come funzionano i computer al loro livello più basso e come svolgono i loro compiti. Il progetto è modellato sul computer SAP a 8 bit descritto nel libro di Albert Malvino Digital Computer Electronics. Tuttavia, abbiamo aumentato il computer a 10 bit per consentire l'implementazione di più codici operativi (codici operativi). L'utente può programmare il computer per eseguire una serie di operazioni inserendo determinate istruzioni.

Architettura del sistema e del circuito:

Il computer è scritto in VHDL e sarà contenuto sulla scheda Basys 3 di Digilent. Gli ingressi saranno mappati agli interruttori nella parte inferiore della scheda. Due interruttori tattili verranno utilizzati per le funzioni Reset e Write. L'output verrà visualizzato sul display a 7 segmenti della scheda.

Il computer sarà suddiviso in circuiti più piccoli (moduli) che gestiscono diverse operazioni. Ogni modulo verrà spiegato in dettaglio nei passaggi seguenti.

Passaggio 1: materiali

Materiali
Materiali

Tutto ciò che serve per questo progetto è la scheda FPGA Basys3 di Digilent e un cavo micro USB per collegare la scheda al computer.

Passaggio 2: diagramma a blocchi dei moduli del circuito

Schema a blocchi dei moduli del circuito
Schema a blocchi dei moduli del circuito
Schema a blocchi dei moduli del circuito
Schema a blocchi dei moduli del circuito
Schema a blocchi dei moduli del circuito
Schema a blocchi dei moduli del circuito

Gli schemi a blocchi sopra mostrano i diversi moduli di circuiti che compongono il computer a 10 bit. Di seguito sono riportate le descrizioni per ciascuna delle singole parti/moduli mostrati negli schemi sopra.

Contatore di programma

Descrizione degli ingressi: l'ingresso è un ingresso a 5 bit per caricare un numero nel contatore del programma. Cp quando è alto il contatore conta sui fronti di clock decrescenti. Clr riporta il contatore a 0. Ep quando alto il contatore emette il conteggio corrente. Sp quando è alto il contatore imposta il conteggio sul numero in ingresso

  • Descrizione delle uscite:

    l'output è una copia del conteggio da utilizzare sui LED 0-15. Count emette il conteggio corrente.

  • Posizione complessiva nel sistema: questo contatore tiene traccia della posizione di memoria in cui si trova il programma. Tutti i programmi iniziano all'indirizzo di memoria 00000 (0) e arrivano fino a 11111 (31), a meno che non venga utilizzato un arresto. Nelle istruzioni di salto, il contatore del programma continua a contare dall'indirizzo a cui il programma sta saltando.

Ingresso MUX

  • Descrizione degli ingressi: L'indirizzo prende l'ingresso dagli interruttori da 11 a 15. MAR prende l'ingresso dal registro a 10 bit utilizzato come MAR. Il programma controlla quale input indirizzare all'output.
  • Descrizione delle uscite: l'uscita indirizza l'ingresso selezionato alla RAM.
  • Posizione complessiva nel sistema: questo MUX determina se indirizzare l'indirizzo dagli switch o dal bus alla RAM. In modalità di programmazione viene instradato l'indirizzo dagli switch e in modalità di esecuzione viene instradato l'indirizzo dal bus.

ramMUX

  • Descrizione degli ingressi: userInput è l'ingresso che l'utente inserisce durante la modalità di programmazione. aRegInput sono i dati contenuti nel registro A, questo viene utilizzato durante un'operazione di spostamento. control è la selezione per questo MUX.
  • Descrizione delle uscite: l'uscita è l'ingresso di dati a 10 bit nella RAM.
  • Posizione complessiva nel sistema: questo MUX emette i dati di input a 10 bit utilizzati nel modulo RAM. Quando il bit di controllo è alto, il MUX emette i dati che l'utente ha inserito in modalità di programmazione. Quando il bit di controllo è basso, il MUX emette i dati sul bus di controllo.

ramModule

  • Descrizione degli Input: inputData sono i dati che vengono memorizzati nella RAM. inputAddress è la posizione in cui vengono archiviati i dati. program indica se il computer è in modalità programma o esecuzione. readWrite indica se è in corso un'operazione di lettura o scrittura. notCE è il bit di controllo per il modulo RAM. move indica che è in corso un'operazione di spostamento.
  • Descrizione delle uscite: outputDataToBus è il dato che va dalla RAM al bus. outputData e output Address sono i dati e l'indirizzo che vanno al registro delle istruzioni.
  • Posto complessivo nel sistema: la RAM consente l'archiviazione di programmi e dati in memoria prima dell'esecuzione di un programma. Una volta che il programma è in esecuzione, la RAM riceve un indirizzo dal MAR e invia i dati a quell'indirizzo al bus.

indirizzoROM

  • Descrizione degli input: opCode è l'input contenente l'indirizzo dell'opcode che viene eseguito dal computer
  • Descrizione degli Output: opCodeStart è l'indirizzo di memoria che indica la prima locazione della micro-istruzione del corrispondente opCode.
  • Posto complessivo nel sistema: questo modulo prende la microistruzione bloccata ed emette la posizione di memoria che corrisponde all'inizio di quella sequenza di microistruzione.

anelloContatore

  • Descrizione degli Ingressi: il reset riporta il contatore a 100000 (il primo "stato T"). Clk incrementa il contatore di uno su un fronte di clock discendente. NOP indica che lo stato/ciclo corrente è un ciclo "nessuna operazione".
  • Descrizione delle uscite: conteggio è l'uscita del contatore.
  • Posizione complessiva nel sistema: il contatore ad anello controlla il contatore preimpostabile e delinea i sei micro-passi in ciascun ciclo di istruzione (T1-T6).

precontatore

  • Descrizione degli Input: opCodeStart è la locazione di memoria delle micro-istruzioni per l'opCode in esecuzione. T1 riporta il contatore a 0 quando è alto. Quando T3 è alto, viene caricato opCodeStart e il conteggio continua da quella posizione per i restanti 3 cicli (T4-T6). Clr imposta il contatore a 0. Clk incrementa il contatore di uno su un fronte di discesa.
  • Descrizione delle uscite: controlWordLocation emette la posizione di memoria della parola di controllo da eseguire.
  • Posto complessivo nel sistema: ogni codice operativo ha 3 micro-istruzioni. Il contatore aumenta di 1 partendo da 0 per i primi 3 cicli (ciclo di recupero). Il contatore viene quindi attivato dal contatore ad anello per caricare l'indirizzo su opCodeStart e incrementa di 1 per i restanti 3 cicli. In questo modo il preCounter controlla la sequenza delle microistruzioni da eseguire.

controlROM

  • Descrizione degli ingressi: controlWordLocation è l'indirizzo della controlWord che la controlROM emetterà. NOP indica che la posizione è una posizione "nessuna operazione".
  • Descrizione delle Uscite: controlWord è la parola di controllo che abilita/disabilita i diversi moduli del computer per eseguire un'operazione desiderata.
  • Posizione complessiva nel sistema: questo modulo decodifica la posizione di memoria dal preCounter ed emette la controlWord per l'operazione desiderata.

ALU

  • Descrizione degli ingressi: A e B sono gli ingressi del Registro A e del Registro B su cui l'ALU esegue le operazioni aritmetiche e logiche. Quando sottrai è attivo, indica che B viene sottratto da A.
  • Descrizione delle uscite: il risultato è il risultato della somma di A e B o della sottrazione di B da A. Le uscite maggiore di, minore di e uguale a indicano se (AB o A=B) e vengono utilizzate nel modulo di salto condizionale. errore indica un overflow o un underflow quando è attivo.
  • Posto complessivo nel sistema: L'ALU contiene la logica per le operazioni aritmetiche e logiche eseguite dal computer. Questo modulo può aggiungere e sottrarre due numeri binari a 10 bit. L'ALU può anche determinare se A>B, A

condizionaleJmp

  • Descrizione degli input: inputCount viene utilizzato per bloccare il conteggio corrente. inputAddress viene utilizzato per bloccare l'indirizzo a cui verrebbe saltato. loadFromRegister quando low latch inputAddress. loadCount quando low latch inputCount. quando outputEnable è basso, l'uscita è impostata sull'indirizzo a cui saltare.gT, iT ed eQ determinano quale condizione viene verificata. majorThan, lessThan e equalTo sono gli ingressi dall'ALU che indicano il risultato del confronto tra A e B. Sul fronte di salita del clock di Clk, inputCount e inputAddress vengono letti nei registri.
  • Descrizione delle uscite: outputJmp è l'indirizzo che il program counter leggerà.
  • Posizione complessiva nel sistema: questo modulo gestisce i salti condizionali e non condizionali per il computer. Sulla base degli ingressi gT, iT ed eQ, il modulo determina quale condizione verificare e se tale condizione è vera o falsa. Se la condizione è vera, emetterà l'indirizzo dell'istruzione a cui saltare, altrimenti emetterà il conteggio dell'istruzione successiva.

binToBCD

  • Descrizione degli ingressi: numerare il numero a 10 bit da convertire in decimale codificato binario.
  • Descrizione delle uscite: centinaia la cifra al posto delle centinaia del numero binario. decine la cifra al posto delle decine del numero binario. unità la cifra al posto delle unità del numero binario.
  • Posizione complessiva nel sistema: questo modulo converte il numero a 10 bit dal registro di uscita in BCD in modo che il nostro driver del display a quattro cifre visualizzi il numero in decimale sul display a 7 segmenti.

fourDigitDriver

  • Descrizione degli ingressi: numero è l'ingresso binario a 16 bit che viene pilotato al decoder. inClk è il clock interno delle schede Basys e viene utilizzato per un divisore di clock. RST ripristina l'orologio utilizzato per guidare le cifre.
  • Descrizione delle uscite: l'anodo determina quale posizione della cifra sarà illuminata. digit è il numero di ingresso al decoder.
  • Posto complessivo nel sistema: questo modulo guida il decoder per l'output del numero BCD sul display.

decodificatore

  • Descrizione degli Inputs:inputNumber è la cifra che proviene dal driver e che verrà decodificata.
  • Descrizione delle uscite: catodi determina quali catodi verranno accesi per visualizzare la cifra desiderata.
  • Posizione complessiva nel sistema: questo modulo decodifica la cifra che deve essere visualizzata sul display a 7 segmenti.

display a quattro cifre

  • Descrizione ingressi: numero è il numero da visualizzare sul display a 7 segmenti. errore indica quando il display dovrebbe leggere "Err". Clk è il segnale dell'orologio su cui sta funzionando il display. Questo segnale deve essere di circa 60 Hz in modo che il display possa visualizzare tutte e 4 le cifre contemporaneamente.
  • Descrizione delle uscite: l'anodo determina quale posizione della cifra è abilitata. catodo determina quali catodi vengono attivati per visualizzare la cifra desiderata.
  • Posizione complessiva nel sistema: questo modulo visualizza un numero sul display a 7 segmenti. Fare riferimento al manuale di istruzioni della scheda Basys 3 per informazioni su quali catodi e anodi si attivano per utilizzare il display. Quando il bit di errore è alto, il display mostra "Err".

outputMUX

  • Descrizione degli ingressi: progModeInput determina quali led vengono accesi durante la modalità di programmazione. runModeInput determina quali led sono accesi durante la modalità di esecuzione. modeSelect è il bit di selezione o controllo per il MUX.
  • Descrizione delle Uscite: ledOutput indica quali led verranno accesi.
  • Posizione complessiva nel sistema: A seconda della modalità in cui si trova il computer (programma o rum), il MUX accenderà LED diversi. In modalità programma (modeSelect è '0'), il MUX accende i led per assomigliare alla posizione di memoria in cui si trova il computer e cosa contiene. In modalità di esecuzione (modeSelect è '1'), il MUX viene utilizzato per il debug ma può essere impostato per visualizzare qualsiasi altra cosa.

orologioDivisore

  • Descrizione degli ingressi: stop legge i cinque bit MSB dal bus per rilevare un comando di halt ('11111') e arresta l'orologio. inputClk è il segnale di clock interno della scheda Basys 3.
  • Descrizione delle uscite: ouputClk è il nuovo clock che è stato rallentato.
  • Posizione complessiva nel sistema: questo orologio viene utilizzato per rallentare il computer per consentire all'utente di determinare cosa sta succedendo. L'orologio può funzionare molto più velocemente, tuttavia, attualmente è impostato su 2 Hz.

triStateBuffer

  • Descrizione degli ingressi: Din è l'ingresso a 5 bit che va nel buffer. Ep è il bit di controllo.
  • Descrizione delle uscite: Dout è l'uscita a 5 bit del buffer
  • Posto complessivo nel sistema: quando il bit di controllo Ep è attivo, il buffer emette l'ingresso. Quando il bit di controllo non è attivo, il buffer non emette nulla.

tenBitDRegister

  • Descrizione degli ingressi: Dbus è l'ingresso a cui è destinato il registro. Clk consente al registro di leggere i dati su un fronte di clock in salita. ARST imposta il registro su 0 in modo asincrono. Quando outputEnable è basso, il contenuto del registro è l'output. Quando readIn è basso, il registro aggancia Dbus al fronte di salita del clock.
  • Descrizione delle uscite: Qbus è l'uscita del registro
  • Posto complessivo nel sistema: il registro viene utilizzato più volte in tutto il computer e viene utilizzato per memorizzare le informazioni durante l'esecuzione delle operazioni.

FiveBitDRegistrati

  • Descrizione degli ingressi: Dbus è l'ingresso a cui è destinato il registro. Clk consente al registro di leggere i dati su un fronte di clock in salita. ARST imposta il registro su 0 in modo asincrono. Quando outputEnable è basso, il contenuto del registro è l'output. Quando readIn è basso, il registro aggancia Dbus sul fronte di salita del clock.
  • Descrizione delle uscite: Qbus è l'uscita del registro.
  • Posto complessivo nel sistema: il registro viene utilizzato più volte in tutto il computer e viene utilizzato per memorizzare le informazioni durante l'esecuzione delle operazioni.

Passaggio 3: codice

Di seguito è riportata una cartella contenente il vincolo e i file di origine per il computer a 10 bit.

Passaggio 4: demo e codice di esempio

Il video sopra mostra come programmare il computer a 10 bit sulla scheda FPGA Basys 3. Di seguito è allegato anche un pdf contenente i codici operativi e un programma di esempio.

Consigliato: