Sono attualmente un liceo e mi sono interessato all'ingegneria informatica / elettrica, in particolare alla progettazione di microprocessori. Ho letto il Codice di Charles Petzold e ho iniziato a leggere il Wikibook del Microprocessore (che sembra essere incompleto). Leggendo il Codice , capisco la logica di base dietro una CPU e ho iniziato a costruirne una in LogiSim. Il capitolo 17 in Codice descrive in dettaglio la CPU che voglio costruire, ma i circuiti mancano di componenti chiave: segnali di clock e decodifica delle istruzioni. Alcuni dei segnali di clock sembrano essere abbastanza ovvi (il PC sembra aver bisogno di un segnale di clock costante) ma altri (come come bloccare i valori di RAM) che ho dovuto riflettere e provare a far funzionare.
Posso costruire un accumulatore funzionante (non può essere definito con precisione un ALU, penso, perché manca la parte L) che passa tra addizione e sottrazione con un singolo input, e capisco che questo è tutto ciò di cui ho bisogno per la parte aritmetica - una volta che avrò funzionato i codici operativi di salto, posso implementare la moltiplicazione e la divisione nel codice. La parte con cui sto lottando è la decodifica delle istruzioni. Attraverso alcune ricerche su Google, vedo che ogni codice operativo deve essere interpretato come micro-istruzioni multiple, ma mi sono perso su come ho bisogno di questo per funzionare. Attualmente, il mio decodificatore di istruzioni è solo un circuito di analisi combinatoria con una singola uscita binaria per ogni codice operativo - 13 in tutto.
Il modo in cui funziona il codice è che ha un valore di codice a 8 bit (io uso solo il byte di fascia bassa), quindi due valori di indirizzo a 8 bit separati che poi combino per essere l'ingresso di indirizzo a 16 bit nella RAM. Per bloccare i valori, ho un contatore separato che conta fino a 10b e quindi reimposta su 00b. È l'ingresso di clock per ciascun latch a sua volta (per i tre latch, c'è a, b e c. I secondi orologi hanno un 1 mentre b & c sono 0, quindi b è 1 e 1 & c sono 0, quindi c è uno e 1 & b sono 0, quindi si ripristina). Ma su istruzioni come ADD 000Ah, il PC passa a 000AH ... che dovrebbe essere aggiunto nell'accumulatore, ma in realtà viene bloccato nel latch del codice e viene quindi interpretato come il successivo codice operativo, che fa andare il tutto pazza.
Mi sento come se mi mancassero alcune informazioni importanti sulla decodifica delle istruzioni e su come devo fare i segnali di clock ...
Ecco i file .circ di LogiSim: https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitAdder.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitAdderSubtractor.circ https: // dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitInverter.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitLatch.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5 ID.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/PetzoldMk5.circ
PetzoldMk5 è la CPU principale, basandosi sugli altri file da importare come librerie.
Ecco un elenco di codici operativi (tutti binari):
Load 0001
Add 0010
Add w/ Carry 0011
Sub 0100
Sub w/ Borrow 0101
Jump 0110
Jump w/ Carry 0111
Jump W/ 0 1000
Jump w/o C 1001
Jump W/o 0 1010
Store 1011
Halt 1100
Reset 1101