Sommario:
- Passaggio 1: materiali
- Passaggio 2: diagramma a blocchi dei moduli del circuito
- Passaggio 3: codice
- Passaggio 4: demo e codice di esempio
Video: Computer a dieci bit - VHDL: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
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
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
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:
Come inviare file di grandi dimensioni da computer a computer: 6 passaggi
Come inviare file di grandi dimensioni da computer a computer: le dimensioni dei file continuano ad aumentare con l'avanzare della tecnologia. Se sei in un mestiere creativo, come il design o la modellazione, o solo un hobbista, il trasferimento di file di grandi dimensioni può essere una seccatura. La maggior parte dei servizi di posta elettronica limita le dimensioni massime degli allegati a circa 25
Configurazione di IoT Bit sui tuoi mini computer con Ubuntu Mate: 8 passaggi
Configurazione di IoT Bit sui tuoi mini computer con Ubuntu Mate: IoT Bit è orgoglioso di presentare la nostra scheda di sviluppo dati mobile per una gamma di mini computer che fornisce loro dati mobili 4G, 3G e GSM. Il nostro modulo HAT intelligente fornisce al tuo mini computer dati mobili, informazioni sul posizionamento GPS e
Utilizzo della PSP come joystick del computer e quindi controllo del computer con la PSP: 5 passaggi (con immagini)
Utilizzo della PSP come joystick del computer e quindi controllo del computer con la PSP: puoi fare molte cose interessanti con l'homebrew della PSP, e in questo tutorial ti insegnerò come usare la tua PSP come joystick per giocare, ma c'è anche un programma che ti permette di usare il tuo joystick come mouse. Ecco i mater
I miei dieci consigli e trucchi per la breadboard più utili: 9 passaggi (con immagini)
I miei dieci consigli e trucchi più utili per la breadboard: ci sono 6 pollici di neve per terra e tu sei rinchiuso in casa. Hai momentaneamente perso la motivazione per lavorare sul tuo laser per il taglio dei metalli guidato da GPS. Non ci sono stati nuovi progetti sul tuo sito preferito che hanno stuzzicato il tuo int
Usa SSH e XMing per visualizzare i programmi X da un computer Linux su un computer Windows: 6 passaggi
Usa SSH e XMing per visualizzare i programmi X da un computer Linux su un computer Windows: Se usi Linux al lavoro e Windows a casa, o viceversa, a volte potresti dover accedere al computer dall'altra posizione ed eseguire programmi. Bene, puoi installare un server X e abilitare il tunneling SSH con il tuo client SSH e uno