Questo articolo si propone di esaminare la progettazione e l'implementazione di computer di pietra rossa in Minecraft.
Vedi capitolo 1, Tutorial sulla costruzione di un computer, per un tutorial dettagliato sulla costruzione di un computer in Minecraft e su come espandere e migliorare l'esempio. Non richiede alcuna conoscenza approfondita dell'informatica. NON FINITO.
Vedi capitolo 2, Pianificazione di un computer Redstone, per i concetti di base del computer per progettare e comprendere un computer in pietra rossa in Minecraft. Non richiede alcuna conoscenza approfondita dell'informatica.
Contenuti
- 1 Panoramica
- 1.1 Implementazioni
- 2 Capitolo 1: Tutorial sulla costruzione di un computer
- 2.1 Introduzione e prerequisiti
- 2.2 Il computer MASIC
- 2.3 Fase 1: Decodificatori di memoria e indirizzi (TEORIA)
- 2.4 Fase 1: Decodificatori di memoria e indirizzi (PRATICA)
- 2.4.1 Decodificatore dell'indirizzo
- 2.5 Fase 2: costruzione di un'unità logica aritmetica (TEORIA)
- 2.6 Fase 2: Costruzione di un'unità logica aritmetica (PRATICA)
- 2.7 Fase 3: set di istruzioni e architettura della macchina (TEORIA)
- 2.7.1 Prerequisiti
- 2.7.2 Il set di istruzioni MASIC
- 2.7.3 Scrivere programmi
- 2.7.4 Ciclo di istruzioni
- 2.8 Fase 3: set di istruzioni e architettura della macchina (PRATICA)
- 3 Capitolo 2: Pianificazione di un computer Redstone
- 3.1 Fondamenti di un computer
- 3.2 Architettura delle macchine
- 3.3 Archiviazione dei dati del computer
- 3.3.1 Memoria primaria
- 3.3.1.1 Registri e flag
- 3.3.2 Cache
- 3.3.3 Memoria ad accesso casuale (RAM)
- 3.3.4 Memoria secondaria
- 3.3.5 Stoccaggio terziario
- 3.3.1 Memoria primaria
- 3.4 Modello di esecuzione
- 3.4.1 Harvard
- 3.4.2 da Neumann
- 3.5 Dimensioni delle parole
- 3.5.1 Parola-dati
- 3.5.2 Parola-Istruzione
- 3.6 Set di istruzioni
- 3.7 Architettura del computer
- 3.7.1 Autobus
- 3.7.2 componenti
- 4 Capitolo 3: Progettazione di un computer
- 4.1 Istruzione-Set-Architettura
- Stati 4.1.1
- Simboli 4.1.1.1
- Numeri 4.1.1.2
- 4.1.2 Transizioni
- 4.1.2.1 Words
- Istruzioni 4.1.2.2
- Stati 4.1.1
- 4.2 Classificazione
- 4.2.1 Astrazione
- 4.2.2 Mappatura
- Simboli 4.2.2.1
- Numeri 4.2.2.2
- Funzioni 4.2.2.3
- 4.3 Formalizzazione
- 4.4 Architettura delle macchine
- 4.4.1 Percorsi dati
- Elaborazione 4.4.1.1
- 4.4.1.2 Unità logica aritmetica
- 4.4.1.2.1 Bus
- 4.4.1.3 Storage
- 4.4.1.4 Stato macchina
- 4.4.1.4.1 Contatore programma
- 4.4.2 Percorsi di controllo
- Elaborazione 4.4.2.1
- Unità di controllo 4.4.2.1.1
- 4.4.2.1.2 Bus
- 4.4.2.2 Storage
- 4.4.2.2.1 Memoria di programma
- 4.4.2.3 Stato macchina
- 4.4.2.3.1 Contatore programma
- MAI orologio
- Elaborazione 4.4.2.1
- 4.4.1 Percorsi dati
- 4.1 Istruzione-Set-Architettura
- Suggerimenti 5
- 6
- 7
Panoramica
I computer facilitano l'implementazione di idee che vengono comunicate dagli esseri umani attraverso la programmazione.
Questo articolo spiegherà le basi della progettazione e della costruzione di un computer in Minecraft, supponendo che il lettore abbia una certa familiarità con la pietra rossa e i computer a un livello base.
Non c'è davvero modo di costruire un computer senza sapere come funziona un computer. Il tutorial tenta di spiegare tutto ciò che è necessario sapere, ma richiede un po' di comprensione qua e là dell'informatica, come indicato nella sezione dei prerequisiti di ciascuna scheda. La parte più profonda che trattiamo spetta a IGCSE CS.
Tutti i sistemi informatici hanno almeno un'unità di elaborazione. Durante il funzionamento, le unità di elaborazione eseguono le istruzioni memorizzate nella memoria del computer. Per un buon inizio sui computer Minecraft dovresti imparare l'informatica. Ci sono molte fonti e tutorial per imparare l'informatica, ma per un inizio di base, si consiglia di guardare Crash Course on Computer Science, in particolare gli episodi 1-8. Sebbene non sia completamente completo, può funzionare come base per la tua comprensione dei computer.
La maggior parte dei computer in Minecraft sono fatti di polvere di pietra rossa, torce di pietra rossa e ripetitori, che portano a pistoni appiccicosi o lampade di pietra rossa che sono controllati usando una serie di pulsanti, leve, piastre di pressione, ecc. Altre idee proposte (non coperte) sono usare tramogge , carri da miniera o barche con pietra rossa.
Vedi capitolo 1, Tutorial sulla costruzione di un computer, per un tutorial dettagliato sulla costruzione di un computer in Minecraft e su come espandere e migliorare l'esempio fornito. Non richiede alcuna conoscenza approfondita dell'informatica come verrà spiegato, ma lo approfondirà abbastanza.
Vedi capitolo 2, Pianificazione di un computer Redstone, per i concetti di base del computer per progettare e comprendere un computer in pietra rossa in Minecraft. Non richiede alcuna conoscenza approfondita dell'informatica, ma approfondirà l'argomento.
implementazioni
I computer possono essere utilizzati in molti modi, dalla creazione di una casa intelligente all'utilizzo per eseguire una mappa dell'avventura. Tuttavia, a causa dei limiti dei computer in Minecraft, indicati di seguito, rimangono un concetto astratto e servono come buoni strumenti per comprendere concetti di livello inferiore dell'architettura della CPU e dei sistemi embedded.
La cosa che distingue computer e calcolatrici è che i calcolatori non possono eseguire più istruzioni di fila senza l'input dell'utente. Un computer può confrontare e valutare le istruzioni in un flusso per eseguire attività.
Tuttavia, in Minecraft, sono estremamente lenti e con le loro grandi dimensioni, è difficile trovare applicazioni pratiche per i computer in pietra rossa. Anche i computer Redstone più veloci impiegano pochi secondi per completare un calcolo e occupano qualche migliaio di blocchi di spazio. I blocchi di comando sono di gran lunga superiori ai computer in Minecraft grazie alla loro velocità e ai comandi leggibili e di livello superiore.
Le mod possono cambiare la velocità del computer come TickrateChanger cambierà la frequenza di tick del gioco.
Capitolo 1: Tutorial sulla costruzione di un computer
Introduzione e prerequisiti
La logica della pietra rossa riflette da vicino la semplice logica binaria, poiché la pietra rossa può essere attivata o disattivata e può quindi essere interpretata come 1 o 0. Faremo riferimento in questo tutorial, logica binaria di base e vari termini semplici di informatica. C'è un eccellente articolo che spiega il binario e la conversione in binario. Si prega di leggere la sezione Architettura della costruzione del computer poiché la seguiremo per progettare il nostro computer, si trova in questo articolo, grazie.
Questo capitolo si concentrerà sull'applicazione della conoscenza e della manipolazione della pietra rossa per creare un semplice computer a 8 bit, e descriverà come realizzarne uno e come funziona.
Tutti gli argomenti saranno suddivisi in (TEORIA) e (PRATICA), TEORIA approfondirà esattamente ciò che accadrà. PRATICA spiegherà come costruirlo in Minecraft, come apparirà e possibilmente download mondiali.
Il computer che costruiremo (MASIC Computer)
Fase 1: Decodificatori di memoria e indirizzi (TEORIA) (NON FINITO)
Passaggio 1: decodificatori di memoria e indirizzi (PRATICA)
Passaggio 2: costruzione di un'unità logica aritmetica (TEORIA)
Passaggio 2: costruzione di un'unità logica aritmetica (PRATICA) (NON FINITO)
Fase 3: set di istruzioni e architettura della macchina (TEORIA)
Fase 3: set di istruzioni e architettura della macchina (PRATICA) (NON FINITO)
Ci sono tre obiettivi di progettazione principali per un computer in Minecraft, per rendere il tuo computer più adatto al tuo compito. Ci sono compromessi da considerare, come più grande è il computer, più lento sarà perché il numero di ripetitori di pietra rossa aumenterà in base alla distanza. Maggiore è la memoria, minore è la velocità e le dimensioni maggiori.
CompattezzaQuanto è piccolo il computer? In Minecraft, la progettazione di un computer di sopravvivenza molto probabilmente metterà in risalto questo punto. Il numero di ripetizioni richieste aumenterà all'aumentare delle dimensioni.
MemoriaQuanta memoria può contenere? Fino a quanti bit e numeri">numeri può contare? Questo è importante per i computer su larga scala, ad esempio quelli che possono eseguire algoritmi più complessi e richiedono set di istruzioni più grandi (ad esempio, eseguire radici quadrate o trigonometria). Maggiore è la dimensione della memoria o l'architettura dei bit, più complesso sarà il computer.
Velocità/PrestazioniQuanto velocemente può fare le operazioni? È ottimizzato per eseguire i suoi compiti? La progettazione e la costruzione personalizzate di un computer aumenteranno significativamente la sua velocità in quanto più cablaggio e codice ridondanti potrebbero essere convertiti in hardware e software appositamente progettati. Questo è evidente in alcuni supercomputer del mondo reale che sono programmati per eseguire un compito in modo molto, molto efficiente. La velocità dei computer in Minecraft è molto lenta, quindi potrebbe essere installata una mod per il client per aumentare notevolmente la velocità del gioco, e quindi del computer.
Il computer MASIC
Il computer in lavorazione che realizzeremo nel tutorial. 8 bit, 16 byte di RAM. L'I/O è un display a sette segmenti (per esadecimale e decimale) e un pannello di controllo che realizzeremo.
Il computer MASIC mira ad essere un computer adatto a tutti e non è specializzato in un compito, quindi è completamente programmabile leggendo la propria memoria (spiegato nella Sezione 2: set di istruzioni). Il semplice I/O è ottimo per un uso multiuso e la memoria è sufficientemente dimensionata. Funziona ad una velocità abbastanza elevata (a causa delle sue piccole dimensioni).
Passaggio 1: decodificatori di memoria e indirizzo (TEORIA)
I decodificatori convertono le cifre binarie in decimali. Ad esempio guardando il decoder a 8 bit 00 accende la prima lampada che sta per 0. 01 accende la seconda lampada che è 1. 10 accende la terza che è 2. 11 accende l'ultima che è 3.
Passaggio 1: decodificatori di memoria e indirizzi (PRATICA)
Decodificatore di indirizzi
Questo è il design per il decodificatore di indirizzi che andremo a costruire.
Sopra è un semplice stato a 2 bit, quindi ha due ingressi (sinistro e destro) attraverso i ripetitori. L'uscita è la linea di pietra rossa sopra la quale si spegnerà quando lo stato è soddisfatto. Lo stato è se l'ingresso di pietra rossa disattiverà la linea di pietra rossa sopra; se è così, lo stato è l'input di pietra rossa. Nel caso sopra, il sinistro deve essere spento (0) e il destro (blu) deve essere acceso (1) per ottenere un OFF sulla linea di pietra rossa superiore. Quindi si aspetta uno stato di OFF ON (aka 01 per binario).
Sono di colore blu per i bit che dovrebbero essere ON (1) per interrompere l'alimentazione della linea di pietra rossa superiore. Una volta che ogni bit smette di alimentare la linea di pietra rossa, si spegne.
Queste sono fondamentalmente una o due porte NOT che alimentano una porta OR e quindi NON l'uscita.
Sopra è uno stato a 8 bit, si aspetta 8 ingressi esattamente nell'ordine 0000 1101. Quindi lo stato che si aspetta è 0000 1101. Quindi le torce di pietra rossa alimentano gli ingressi, e quindi vediamo la linea di pietra rossa in alto si spegne (solo quando esattamente tre torce di pietra rossa sono poste nell'esatto ordine di 0000 1101).
Ora, se mettiamo insieme più di questi, possiamo contare in binario con i bit blu per ottenere tutti i 255 stati di 8 bit. Quello sotto è di 8 bit e ha quattro aspettative di stato. Guarda le immagini giuste per vederlo in azione. Ora ogni uscita verde può essere una cella di memoria e, se continuiamo a contare in binario, raggiungerà 255.
L'ingresso è 0000 0011 (vedi le torce di pietra rossa per l'ingresso) e dove i bit blu corrispondono allo stato corrente, l'uscita verde è ON.
- 0000 0000 - uscita primo segnale (nelle immagini a destra)
- 0000 0001 - uscita secondo segnale
- 0000 0010 - terzo segnale in uscita
- 0000 0011 - uscita quarto segnale
Quindi ora continuiamo a contare in binario per arrivare a 0000 1111 e fermarci lì; ora dovremmo avere 24 (16) espettori statali. Ora abbiamo finito con il decodificatore di indirizzi. Non continuiamo a contare fino a 1111 1111 a causa delle limitazioni del set di istruzioni, spiegate nella sezione 3: set di istruzioni
Passaggio 2: costruzione di un'unità logica aritmetica (TEORIA)
L'unità logica aritmetica denominata ALU confronterà ed eseguirà operazioni matematiche con numeri">numeri binari e comunicherà i risultati con l'unità di controllo, il componente centrale del computer (e unità centrale di elaborazione ma che sarà grande quanto il computer stesso ). Molti tutorial vorranno che il lettore costruisca prima un ALU, e quindi l'argomento è trattato molto ampiamente su Internet.
L'ALU che andremo a costruire può eseguire quattro importanti operazioni su due input e restituire un output corretto. A, B, essendo entrambi ingressi a 8 bit
- A + B (Aggiungi A a B)
- A >> (bitshift A a destra (uguale a divisione binaria per 2))
- << A (bitshift A a sinistra (uguale al binario moltiplicato per 2))
- NON A (l'opposto di A)
Possono esserci anche più ALU all'interno di un computer, poiché alcuni programmi richiedono molte operazioni per l'esecuzione, che non dipendono dalle operazioni precedenti (quindi possono essere sottoposte a thread), quindi delegarle a diverse ALU potrebbe velocizzare notevolmente il programma.
numeri">numeri">Sommare due numeri">numeri
In un'unità di addizione, per ogni bit (per il nostro computer, ne abbiamo bisogno quattro, quindi 4-bit), c'è un sommatore completo. Il sommatore completo prenderà tre input, ogni input può essere 1 o 0. I primi due saranno l'input dell'utente e il terzo sarà l'input di riporto. L'input di riporto è l'output del precedente sommatore completo, questo verrà spiegato in seguito. Il sommatore emetterà due istruzioni: prima, l'output e poi l'output di riporto, che viene inviato come input nel successivo sommatore completo, un valore posizionale in su. Ad esempio, desidero aggiungere il numero 0101 a 1011. Il primo sommatore completo considererà il primo valore di posizione, 1 e 1 come i loro due input (stiamo leggendo da destra a sinistra). Non c'è input di riporto in quanto non esiste un sommatore completo precedente. Il sommatore completo aggiungerà 1 e 1; che è 0 e porta un 1 al valore posizionale successivo. Il successivo sommatore completo aggiungerebbe 0 e 1 e l'input di riporto sarebbe 1 come indicato dal precedente sommatore completo. L'output di 0 e 1 sarebbe 1 ma c'è un input di riporto di 1 e quindi aggiungerà 0 e 1 e 1, che è 0 e porta un 1 al valore di posizione successivo. La revisione dell'aggiunta in binario dovrebbe risolvere qualsiasi confusione.
Tutte le ALU, per eseguire operazioni di addizione, richiedono la presenza di più sommatori. Ogni due bit alimenteranno un sommatore che, unito ad altri sommatori, produrrà un output che è la somma dei due byte sommati. Un sommatore ha un ingresso, un'uscita e due riporti input/output come farebbe una persona quando fa l'aggiunta di 9 + 1 o 01 + 01. I sommatori sono fatti di porte logiche che è possibile con la nomenclatura di binario. Tutorial/La logica aritmetica offre uno sguardo molto dettagliato su sommatori completi e mezzi sommatori, per ora, c'è uno schema di come costruirne uno. Fornisce quattro ingressi/uscite e dovrebbe essere collegato ad altri sommatori per creare un'unità. Per questo esempio, collegheremo insieme quattro sommatori nel nostro computer a quattro bit in modo da poter prendere tutti e quattro i bit per creare un output. Ci sarà un riporto di input mancante dal primo sommatore, questo perché non c'è niente da trasportare dal bit prima di esso, è il primo bit. Il riporto in ingresso rimarrà a zero. Ci sarà anche un riporto di output mancante dal quarto sommatore e l'output di questo verrà ignorato poiché possiamo supportare solo quattro bit. La quarta uscita di riporto aggiuntiva è collegata al flag di overflow per indicare che l'operazione non può essere eseguita. Questo è chiamato overflow binario.
Quindi, fondamentalmente, vai in Minecraft e costruisci un sommatore binario completo (mostra di immagini) e collegali. Dovrebbero esserci otto ingressi e uscite. Prova a posizionare leve e lampade in pietra rossa alle rispettive estremità per testare la tua creazione. Quindi 0010 + 0011 dovrebbe produrre 0101 (2 + 3 = 5, stiamo leggendo destra non sinistra).
numeri">numeri-frazionari">Numeri frazionari
Un computer si occupa di numeri">numeri inferiori a uno sotto forma di aritmetica in virgola mobile, è utile solo nei computer a bit più grandi (16-64 bit) e nei computer che devono utilizzare numeri">numeri inferiori a uno. L'aritmetica in virgola mobile o l'aritmetica a precisione arbitraria sono due modi per raggiungere questo obiettivo. Un altro modo più semplice ma meno efficiente sarebbe quello di assegnare a tutti i numeri">numeri una potenza di due in modo che siano "sovrastati" dalla potenza di due scelta. Il giocatore deve fare questo ad ogni numero e assumere l'uno come uno per la potenza dei due che hai scelto. Ad esempio, 5 = 1012 quindi 5 × 23 = 1010002; cinque è aumentato di tre. Quindi ora, uno nel tuo nuovo sistema sarebbe 1 × 23 = 10002 e questo lascerebbe spazio per 0.1, 0.01 o 0.001; 0.01 * 23 = 102. Questo porta a una configurazione più complicata per il tuo computer.
numeri">numeri">Sottrarre due numeri">numeri
La sottrazione dei numeri">numeri è sorprendentemente semplice. L'ALU prima deve modificare il secondo numero (il valore sottraendo per) e convertirlo da un numero positivo a un numero negativo. Un complemento a due è quando inverti il numero binario (in modo che tutti gli 0 siano 1 e gli 1 siano 0) e gli aggiungi uno.
Esempio: fai 10 sottrai 9
1. 0000 1001 | (9 in binario, vogliamo -9, non 9) |
2. 1111 0110 | (Invertire 9, in modo che tutti gli 0 siano 1 e gli 1 siano 0) |
3. 1111 0111 | aggiungi uno (questo è il complemento a due di 9) |
4. | |
0000/1010 | (10 in binario) |
+1111 0111 | aggiungi il complemento a due di 9 (alias -9) |
---- | |
0000/0001 | risultato (10 + (-9) = 1) (c'è un overflow, questo significa solo che il risultato non è un numero negativo) |
Ciò pone la complessità dei numeri">numeri con segno.[1] Questo è un peso al numero binario per assegnarlo come numero positivo o negativo. Se il risultato è un numero negativo o positivo è determinato dal flag di overflow. Se c'è un overflow, significa che il numero è positivo e altrimenti negativo.
Per implementare ciò, puoi chiedere all'ALU di eseguire 3 operazioni. Per fare A sottrarre B, le operazioni sono
Operazione: LA SUB SI
- NON B
- (imposta da B a) B AGGIUNGI 1
- (imposta da A a) A AGGIUNGI B
- RITORNO A
numeri">numeri">Moltiplicando due numeri">numeri
La moltiplicazione è un'addizione ripetuta, quindi il modo più semplice (inefficiente) è aggiungere A a una variabile B un numero di volte.
Ecco il codice pseudomacchina per questo
Operazione: LA * SI
- C = 0
- (imposta C su) C ADD A
- (impostare B su) B SUB 1
- SALTA SE (B > 0) ALLA LINEA 2
- RITORNO C
Tuttavia, ci sono modi più efficienti di moltiplicazione. Un buon metodo è spostare ripetutamente il primo numero nella posizione di ogni 1 nel secondo numero e sommarlo.
Sono presenti trattini bassi per contrassegnare i rientri, poiché il riempimento con 0 è meno intuitivo. pedice 2 significa in binario e anche i numeri">numeri decimali sono in grassetto
__ __undici | 3 (notare che ci sono 2 1s) |
x_ 1011 | 11 |
---- | |
__ __undici | Ci spostiamo di 112 di 010 poiché l' 1st il bit di 10112 è 12 |
+ _ _110 | Ci spostiamo di 112 di 110 poiché l' 2nd il bit di 10112 è un 12 |
+1 1000 | Ci spostiamo di 112 di 310 poiché l' 4° il bit di 10112 è un 12 |
---- | i 3rd il bit di 10112 è 02 quindi non aggiungiamo un 112 lì |
10/0001 | 33 (risultato) |
quindi questo è più efficiente per numeri">numeri più grandi.
Operazione: LA * SI
- C = 0
- D = 0
- (Imposta A su) << A (bitshift A a sinistra)
- SALTA SE (BIT (D) DI B == 0) ALLA LINEA 6
- (Imposta C su) C ADD A
- (Imposta D su) D AGGIUNGI 1
- SALTA SE (D < LUNGHEZZA DI B) ALLA LINEA 3
- RITORNO C
Non dimenticarlo
<< A (bitshift a sinistra) è effettivamente, A * 2
che collaborano con noi, attingono direttamente dalla storia e dalla tradizione veneziana per poi
>> A (bitshift a destra) è effettivamente, A / 2
Se i numeri">numeri sono prevedibili o la CPU deve eseguire molti numeri">numeri simili in blocco, considerare l'utilizzo di una tabella di ricerca per ottenere rapidamente i risultati della moltiplicazione chiamata frequentemente. È un modo per codificare le tue risposte e viene utilizzato in casi estremi.
Passaggio 2: costruire un'unità logica aritmetica (PRATICA)
Fase 3: set di istruzioni e architettura della macchina (TEORIA)
È piuttosto divertente, questa parte.
Elaborando il Capitolo 2: Set di istruzioni, ne creeremo uno per il nostro.
Per il computer MASIC, il computer che stiamo costruendo, ha un sistema a 8 bit, quindi significa che ogni istruzione su ogni slot della memoria dello stack sarà di 8 bit. La memoria stack è la memoria in cui è possibile memorizzare qualsiasi informazione e si trova nella RAM. Ci sarà un contatore, chiamato contatore di programma, che incrementa di 1 ogni ciclo. Un ciclo è la CPU che recupera l'istruzione, decodifica l'istruzione (scoprendo cosa fare con l'istruzione) ed esegue l'istruzione (facendo ciò che le dice di fare). Quindi passa a quello successivo incrementando il contatore del programma e leggendo le informazioni in quella posizione nella memoria dello stack.
Quindi ogni byte nella memoria dello stack ha 8 bit con cui lavorare.
0000/0000
e alcune istruzioni richiedono un indirizzo, ad esempio caricare la memoria in un registro in modo da poter eseguire operazioni (come l'aggiunta) su di esso. Ogni istruzione sarà divisa in due parti, ciascuna di 4 bit. Il primo è il TIPO. il TYPE specificherà cosa deve fare il computer e l'ADDRESS sarà dove si trova il valore che eseguiremo le nostre operazioni.
OPCODE OPERANDO
quindi 4 bit per il TIPO, possiamo avere 2^4 tipi, quindi 16 diversi. Il nostro computer avrà due registri, quindi un bit servirà per specificare il registro su cui verrà eseguita l'operazione ed è indicato da un x.
Le istruzioni vengono messe nello stesso posto della memoria e poiché la parte ADDRESS dell'istruzione è di soli quattro bit, possiamo fare riferimento alla memoria solo da 1-16 righe, richiedendo una programmazione intelligente per adattarsi a programmi più grandi. Anche la memoria è limitata a 16 byte per programma. I valori e le istruzioni sono essenzialmente la stessa cosa, quindi se scrivi un'istruzione per memorizzarla su una riga che ha precedentemente memorizzato un'istruzione, questa sovrascrive effettivamente l'istruzione con un valore. L'esecuzione accidentale dei valori potrebbe essere un problema, quindi è necessario utilizzare un comando STOP per prevenire eventuali errori. Questo è molto da capire, quindi buone fonti sono https://www.computerscience.gcse.guru/theory/high-low-level-languages e https://scratch.mit.edu/projects/881462/ <- - davvero utile in realtà. e inoltre non dimenticare di prendere sia CS che ICT per i tuoi IGCSE.
Prerequisiti
La sezione tratterà argomenti semplici e componenti che si trovano comunemente in un computer, quindi verranno utilizzate le informazioni del capitolo 2, come l'ALU, la RAM, i registri e la manipolazione binaria.
Il set di istruzioni MASIC
Dal momento che il computer Ecco la prima bozza del set di istruzioni, con solo l'essenziale. Questo è basato su altri linguaggi assembly, ma è stato modificato per adattarsi alla nostra architettura. Ci sono due registri, quindi abbiamo bisogno di istruzioni per eseguire operazioni su entrambi i registri.
BINARIO | OPCODE | COMMENTO |
---|---|---|
0000 | CARICO R1 | Carica l'INDIRIZZO nel registro 1 |
0001 | NEGOZIO R1 | Memorizza il contenuto del registro 1 in ADDRESS |
0010 | SALTA R1 SE | Salta alla riga ADDRESS se il registro 1 è uguale a 0 |
0011 | AGGIUNGI R1 | Aggiungi contenuti all'indirizzo ADDRESS per registrarti 1 |
0100 | < | Bitshift registro 1 a sinistra |
0101 | NON R1 | Bitwise NON registra 1 |
0110 | JUMP | Salta alla riga OPERANDO |
0111 | STOP | Termina il programma. |
1000 | CARICO R2 | Carica l'INDIRIZZO nel registro 2 |
1001 | NEGOZIO R2 | Memorizza il contenuto del registro 2 in ADDRESS |
1010 | SALTA R2 SE | Salta alla riga ADDRESS se il registro 2 è uguale a 0 |
1011 | AGGIUNGI R2 | Aggiungi INDIRIZZO per registrarti 2 |
1100 | < | Bitshift registro 2 a sinistra |
1101 | NON R2 | Bitwise NON registra 2 |
1110 | USCITA R1 | Registro uscite 1 |
1111 |
Tradurre:
1000 0011 significa LOAD R2 3 perché LOADR2 è 1000 e 0011 è 3.
Questi possono essere in un processo in modo che le funzioni possano essere eseguite.
Scrittura di programmi
Questo fa la sequenza di Fibonacci: (0,1,1,2,3,5,8... ecc.)
FIBONACCI | |||
---|---|---|---|
LINE | BINARIO | ISTRUZIONI | COMMENTO |
1 | 0000/1110 | CARICO R1 14 | imposta il registro 1 a 0 (il valore alla riga 14) |
2 | 0011/1111 | AGGIUNGI R1 16 | aggiungi il valore alla riga 16 |
3 | 1110/0000 | USCITA R1 | emettere il registro |
4 | 0001/1111 | NEGOZIO R1 16 | mettilo nella riga 16 |
5 | 0011/1110 | AGGIUNGI R1 15 | aggiungi il valore alla riga 15 |
6 | 1110/0000 | USCITA R1 | emettere di nuovo il registro |
7 | 0001/1110 | NEGOZIO R1 15 | ora rimetti l'output |
8 | 0110/0010 | SALTO 2 | non dobbiamo reimpostare il registro, quindi torniamo alla riga 2. |
... | |||
14 | 0000/0000 | 0 | |
15 | 0000/0001 | 1 | |
16 | 0000/0001 | 1 |
Il precedente è un esempio di linguaggio assembly di basso livello. Se fosse scritto in un linguaggio di alto livello come C++, sarebbe più simile a questo:
#includere usando lo spazio dei nomi std; int main() { int n, t1 = 0, t2 = 1, nextTerm = 0; cout << "Inserisci il numero di termini: "; cin >> n; cout << "Serie Fibonacci: "; for (int i = 1; i <= n; ++i) { // Stampa i primi due termini. if(i == 1) { cout << " " << t1; Continua; } if(i == 2) { cout << t2 << " "; Continua; } nextTerm = t1 + t2; t1 = t2; t2 = nextTerm; cout << nextTerm << " "; } restituisce 0; }
Ciclo di istruzioni
Il set di istruzioni è il linguaggio assembly inferiore, quindi vogliamo integrarlo maggiormente con il lato hardware. Questo ruota attorno al ciclo fetch-decode-execute (spiegato sopra). Nella CPU ci saranno 4 importanti registri,
il Program Counter (PC), tiene traccia di quale programma è attualmente attivo il computer
il registro degli indirizzi di memoria (MAR), tiene traccia di dove sarà la prossima posizione di memoria
il registro dei dati di memoria (MDR), tiene traccia di quale sia la memoria nella posizione
il Registro delle Istruzioni Correnti (CIR), tiene traccia delle istruzioni su cui si sta attualmente lavorando
e l'accumulatore ALU (ACC), tiene traccia dell'input e dell'output dall'ALU
Ci sono anche quattro componenti da tenere a mente, l'Address Decoder, la memoria, l'Instruction Decoder e l'ALU.
FETCH
Il programma riceverà l'istruzione successiva.
- Il PC invia il numero di istruzione al MAR
- Il PC aumenta di 1, per prepararsi all'istruzione successiva
- Address Decoder decodifica l'indirizzo e richiede informazioni a quell'indirizzo dalla memoria
- MDR riceve le informazioni richieste (nel caso dell'immagine, se il MAR è 0001, riceve 'LOADR1 1')
DECODIFICARE Il programma identificherà qual è l'istruzione
- CIR riceve le informazioni dal MDR, attraverso il flusso informativo
- Il decodificatore di istruzioni decodifica l'istruzione e cosa fare
ESEGUIRE Il programma eseguirà l'istruzione
- Nel caso dell'immagine, il programma riceve 'LOADR1 1' come istruzione, l'Instruction Decoder divide l'istruzione in opcode e operando.
L'opcode è 'LOADR1' e l'operando è '1'.
- L'operando viene inviato al MAR, per ottenere le informazioni a quell'indirizzo
- MDR riceve le informazioni a quell'indirizzo (nell'esempio è la stessa riga)
Ora potrebbero accadere quattro cose a seconda di quale sia l'istruzione.
Se l'istruzione è un'istruzione ADD, all'ACC verrà detto di ricevere le informazioni dal flusso di informazioni e l'ALU eseguirà le operazioni su di essa, inviandole nuovamente all'ACC.
Se l'istruzione è un'istruzione LOAD, la CU caricherà l'istruzione nel registro.
Se l'istruzione è un'istruzione STORE, la CU imposterà invece i dati nella locazione specificata dal MAR in memoria.
Se l'istruzione è un'istruzione OUT, la CU invierà l'istruzione alla periferica di uscita.
RIPETERE Il ciclo di istruzioni si ripete finché non raggiunge un'istruzione STOP o esaurisce la memoria
Fase 3: set di istruzioni e architettura della macchina (PRATICA)
Capitolo 2: Pianificazione di un computer Redstone
Un computer Redstone può essere progettato in modo molto simile a un computer reale, seguendo i principi utilizzati nella progettazione dei computer e nell'architettura hardware. Ci sono diverse decisioni chiave di progettazione che influenzeranno l'organizzazione; le dimensioni e le prestazioni del tuo futuro computer dovrebbero essere fatte concretamente prima della costruzione di componenti specifici.
Costruire un computer in pietra rossa richiederà la comprensione di questi cinque concetti e prenderà in considerazione l'approccio più adatto, che sarebbe più pratico per il tuo computer.
- Machine-Architecture (Componenti di un computer, cosa sono e cosa fanno)
- Modello di esecuzione (L'organizzazione dei componenti, rendendoli efficienti)
- Dimensione della parola (quanti bit utilizza il sistema. Di solito, le potenze di 2, circa 4, 8, 16 bit sono normali in Minecraft)
- Set di istruzioni (le istruzioni che devono essere eseguite dalla CPU)
e applicheremo questa conoscenza e pianificheremo l'architettura della nostra CPU nell'ultima sezione. Questa CPU verrà poi costruita nel prossimo capitolo.
Fondamenti di un computer
Un computer è una macchina che ha la capacità di
- Leggere e scrivere da una memoria indirizzabile
- Eseguire confronti sullo stato della memoria ed eseguire un'operazione di conseguenza. Queste operazioni includono la riscrittura della memoria.
- Avvia le funzioni in base al contenuto scritto in memoria. Chiamiamo tali contenuti "programmi + dati" e l'atto di scriverli programma.
Un esempio molto notevole di questo è il concetto più elementare di calcolo, una macchina di Turing, in cui la macchina leggerà da una riga infinita di codice e set di istruzioni per completare una funzione.
È possibile progettare e costruire una macchina di Turing in Minecraft. Questo, tuttavia, non è coperto poiché progetteremo qualcosa di più basilare.
Architettura-macchina
Ci sono cinque componenti fondamentali in un computer moderno di base. Questi sono essenziali per produrre un computer funzionante e manipolare i dati eseguendo calcoli.
Unità logica aritmetica (ALU) (opzionale, ma normalmente presente)
- Eseguire addizioni e sottrazioni
- Confronta i booleani usando le porte logiche
Unità di controllo (CU)
- Esegui/Esegui le istruzioni inviate ad esso
- Comunicare con tutti i componenti
Memoria dati
- Memorizzare e restituire i dati dalla memoria
Memoria di istruzioni
- Istruzioni per la restituzione, inviate al CU
- Può essere impostato, ma non è necessario che sia così spesso come la memoria dati
Dispositivi di ingresso/uscita (I/O)
- Consente al computer di comunicare con il mondo e il giocatore.
- Può inserire informazioni sul computer (pulsante, sensore di luce diurna)
- Può emettere informazioni dal computer (lampada redstone, blocco note)
Archiviazione dei dati del computer
Esistono molti metodi per archiviare i dati, in Minecraft o nella vita reale. Gli stati della memoria di solito sono binari, attivi o disattivati e possono essere calcolati con la logica booleana.
Su un computer, ci sono tre tipi di archiviazione. Tenendo presente che l'aumento della capacità del dispositivo ne aumenterebbe le dimensioni, ogni tipo avrebbe velocità e capacità adeguate.
Storage primario
Questi sono lo spazio di archiviazione direttamente accessibile alla CPU, indicato come memoria ed è più veloce da accedere ma di solito ha una capacità inferiore per essere indirizzato più rapidamente.
Registri e bandiere
La più veloce è la memoria immagazzinata all'interno della CPU. Si tratta di registri e flag in quanto possono essere impostati quasi istantaneamente e non richiedono l'invio di alcun indirizzo in quanto in ogni registro è memorizzato un solo byte. I bit di Redstone che possono essere attivati sono estremamente grandi ma possono essere attivati entro 2 tick. Ciò richiede una grande quantità di spazio ma è perfetto per cache e registri. La pietra rossa è necessaria anche per le porte logiche (non mostrate) per impostare il bit, come nelle immagini, l'invio di un input causerebbe il capovolgimento del bit. Il cancello occuperebbe più spazio. I registri potrebbero anche utilizzare ripetitori di pietra rossa bloccanti e cronometrarli correttamente. Questo è spiegato di seguito, nella RAM). Con l'uso di un orologio da computer, potrebbe non essere necessario creare registri. I registri sono utili quando i dati attraversano la linea prima che la CU o l'ALU siano pronti per elaborarli. Lo salverebbe nel registro e attenderà che la CU o l'ALU possano svolgere la sua funzione.
caches
In secondo luogo ci sono le cache, che alimentano le informazioni nel processore. Nella vita reale, sono separati in livelli, ognuno con velocità e capacità separate. È utile per lo stesso motivo dei registri.
Memoria ad accesso casuale (RAM)
Il terzo è Random Access Memory (RAM), questo è molto più lento delle cache e dei registri in quanto hanno sistemi di indirizzi. Sono collegati a tre bus, bus dati, bus di controllo e bus indirizzi. I dati vengono inviati tramite il bus dati, impostando la RAM o ottenendo valori dalla RAM. Il bus di controllo gli dice se è in fase di acquisizione o impostazione. Il bus degli indirizzi dice alla RAM dove si trova il byte. Fare riferimento all'Architettura del computer per capirlo in modo più approfondito. La RAM è molto utile e potrebbe sostituire completamente la memoria terziaria (spiegata di seguito) a causa della sua non volatilità in Minecraft. Volatile significa che quando il potere viene perso, perderà le informazioni. La RAM non perderà informazioni a differenza della vita reale, e quindi in un ottimo metodo di memorizzazione delle informazioni.
La RAM nel primo caso utilizza i ripetitori di pietra rossa di blocco con la tempistica corretta. Ciò richiede un po' di un piano, ma è molto efficiente in termini di spazio. La conversione di un bus alle linee per bloccare i ripetitori redstone richiede anche l'impostazione dei tempi. Questo richiede molto tempo, molto più dei registri, tuttavia è molto compatto ed efficiente. Il bus di indirizzo (verde) si trasformerebbe in binario per sbloccare un certo byte, che deve essere letto o impostato dal bus di controllo (seconda riga, a sinistra).
Molto spesso, renderlo volatile non ha alcuna utilità in Minecraft, quindi il modo più semplice per crearne alcuni è usare i d-flip-flop e aggiungere una funzione di lettura e scrittura. L'immagine in basso mostra invece di bloccare i ripetitori, utilizza d-flip-flop che è molto più inefficiente in termini di spazio ma più semplice da costruire. I flip-flop D funzionano più o meno come ripetitori bloccati, un ingresso - se attivato, si sblocca fino a quando l'ingresso non è disattivato e l'altro lo imposterà una volta sbloccato. L'uscita può essere letta come un bit e con una porta NAND, essere ignorata o messa sul bus. Questo è trattato in dettaglio nel secondo capitolo, Tutorial sulla costruzione di un computer. Scusate il pacchetto di texture.
Memoria ad accesso casuale conosciuto anche come RAM è un tipo di memoria utilizzata dai programmi ed è volatile. Volatile significa che quando il potere viene perso, perderà le informazioni. Molto spesso, renderlo volatile non ha alcuna utilità in Minecraft, quindi il modo più semplice per crearne alcuni è usare i d-flip-flop e aggiungere una funzione di lettura e scrittura.
Magazzino secondario
Questi sono equivalenti a HDD e SSD. Esiste una tecnica di archiviazione molto compatta, che coinvolge comparatori di pietra rossa con la capacità di memorizzare fino a 1 KB, essendo di dimensioni pratiche.
Stoccaggio terziario
Terzo e ultimo, è una memoria terziaria, che richiede molto tempo per leggere/scrivere ma può contenere enormi quantità di informazioni a scapito della velocità. L'archiviazione terziaria del mondo reale utilizza un meccanismo di montaggio della memoria che impiega circa un minuto per ogni unità. Questo è usato per scopi di archiviazione e per la memoria che è usata raramente. In Minecraft, un sistema in cui vengono utilizzate scatole shulker e blocchi nelle scatole shulker deve essere ordinato da un sistema di ordinamento per rappresentare una forma di dati. Questo può essere utilizzato anche per creare archivi rimovibili. La velocità di lettura/scrittura è piuttosto lenta a causa dell'enorme quantità di comparatori e richiede molto tempo. Tuttavia, le suddette mod potrebbero accelerare il tick rate ed eliminare questo problema. Viene utilizzato per memorizzare dati a lungo termine che devono essere caricati all'inizio di un programma o raramente a causa della scarsa velocità di lettura/scrittura e della grande capacità. Questo è l'equivalente del disco rigido o dell'unità a stato solido di un computer reale.
Modello di esecuzione
La tecnica di memorizzare blocchi di istruzioni chiamati programmi all'interno della memoria è ciò che consente ai computer di eseguire una tale varietà di attività.
L'apparato impiegato da un computer per memorizzare e recuperare questi programmi è il modello di esecuzione del computer.
Due dei modelli di esecuzione di maggior successo al mondo, Harvard e von Neumann, funzionano su quasi il 100% dei computer oggi disponibili.
Questo è più avanzato ed è per lettori curiosi e curiosi
Harvard
L'architettura di Harvard separa fisicamente l'apparato per il recupero delle istruzioni che compongono un programma attivo da quello dell'apparato di accesso ai dati a cui il programma accede durante l'esecuzione.
I programmi scritti per computer che utilizzano un'architettura Harvard possono essere eseguiti fino al 100% più velocemente per le attività che accedono al bus di memoria principale. Si noti tuttavia che alcuni circuiti di memoria sono necessariamente più grandi per coloro che scelgono un'architettura Harvard. L'architettura di Harvard è molto importante.
di Neumann
L'architettura von Neumann utilizza un processo in due fasi per eseguire le istruzioni. Per prima cosa viene caricata la memoria contenente l'istruzione successiva, quindi la nuova istruzione appena caricata può accedere a questa stessa memoria mentre viene eseguita; l'utilizzo di un'unica memoria sia per il programma che per i dati facilita la tecnologia di meta-programmazione come i compilatori e il codice automodificante.
L'architettura di von Neumann è stato il primo modello di calcolo proposto e quasi tutti i computer del mondo reale sono di natura von Neumann.
Dimensioni delle parole
La dimensione della parola è un fattore primario nella dimensione fisica di un computer.
In Minecraft, sono state costruite con successo macchine da 1 bit fino a 32 bit.
Combinazioni comuni di dimensioni delle parole:
Sincronizzazione dei | Istruzione |
---|---|
4 | 8 |
8 | 8 |
8 | 16 |
16 | 16 |
Parola-dati
La quantità di informazioni che un computer può manipolare in un determinato momento è rappresentativa della dimensione delle parole dei dati del computer.
In binario digitale, la dimensione della parola dati del computer (misurata in bit) è uguale alla larghezza o al numero di canali nel bus principale del computer.
Le parole dati rappresentano comunemente interi o numeri">numeri interi codificati come modelli di cifre binarie.
Il numero di dimensione massima rappresentabile da un intero codificato binario è dato da Larghezza di 2 parole di dati in bit - 1.
Ad esempio, un computer con una dimensione della parola dati di 8 bit avrà otto canali sul suo bus (set di fili, componenti di collegamento) e quindi possiamo contare fino a (28 - 1). 255. Non è possibile contare oltre 255 con otto bit, poiché l'operazione 255 + 1 ne riporta uno, che richiede un nono bit o si verificherà quello che viene chiamato un overflow binario, restituendo 0 come risposta, che non è corretta.
Questo è semplicemente visualizzato;
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 255 | |
+ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
= | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Alcune dimensioni di dati interi comuni sono:
Numero massimo rappresentabile | Numero di bit richiesti |
---|---|
1 = (21 - 1) | 1 |
7 = (23 - 1) | 3 |
15 = (24 - 1) | 4 |
255 = (28 - 1) | 8 |
65535 = (216 - 1) | 16 |
4294967295 = (232 - 1) | 32 |
La dimensione Data-Word regola anche la dimensione massima dei numeri">numeri che possono essere elaborati dall'ALU (Arithmetic and Logic Unit) di un computer.
Istruzione-Parola
La quantità di dati necessaria a un computer per completare una singola istruzione è rappresentativa della dimensione della parola dell'istruzione di un computer.
La dimensione della parola di istruzione di un computer è generalmente un multiplo della sua dimensione della parola di dati, questo aiuta a ridurre al minimo il disallineamento della memoria durante il recupero delle istruzioni durante l'esecuzione del programma.
Set di istruzioni
Questa è una raccolta di istruzioni che l'unità di controllo (CU) può decodificare e quindi eseguire.
Le istruzioni sono essenzialmente funzioni gestite dal computer, esempi di istruzioni includono:
- Addizione, sottrazione, moltiplicazione e divisione
- Lettura/scrittura da RAM/ROM/memoria terziaria
- Carica e scarica i dati nella RAM
- Diramazione ad altre parti del codice
- Registri a confronto
- Selezione di una funzione logica (NAND, NOR, NOT ecc.)
Le istruzioni possono essere programmate nella RAM, caricate dalla ROM o attivate direttamente tramite una leva o un pulsante. Ad ogni istruzione sarebbe assegnata una stringa binaria specifica (es. 0000=Carica dati dal registro 0001=aggiungi A e B 1011=Salva RAM in memoria terziaria ecc.) e probabilmente richiederebbe un proprio binario a decimale o binario a BCD per codificatori decimali e bus per ALU/registri.
Architettura del computer
All'interno del computer c'è un'unità centrale di elaborazione (da non confondere con l'unità di controllo (CU), un componente all'interno della CPU), che nella vita reale è un componente molto piccolo e potente che funge più o meno da cervello del computer. In Minecraft, è difficile compattarlo alla scala che vediamo nella vita reale, quindi non preoccuparti se sembra sbagliato.
Progetteremo prima la nostra unità centrale di elaborazione a 4 bit nel prossimo capitolo, poiché è la cosa più importante nel nostro computer tenendo presente il modello di esecuzione (il metodo di comunicazione e organizzazione della CPU), (di cui si parla in questo pagina, prima, nella sezione Modello di esecuzione) possiamo mappare la costruzione del computer.
La CPU segue un ciclo di quattro fasi, recupera, decodifica, esegue e (a volte) memorizza per eseguire le istruzioni. La CPU prima recupera l'istruzione dalla RAM, decodifica cosa significa (l'istruzione sarà molto probabilmente un numero e la CPU deve scoprire di che numero si tratta), e una volta che ha capito qual è l'istruzione, eseguirà quell'azione. Questo a volte richiede che i dati vengano rimessi nella memoria, quindi memorizzerà i dati. Il ciclo viene quindi ripetuto.
Autobus
Ci sono cinque bus nella CPU, ciascuno per trasportare informazioni da un componente all'altro. I bus sono canali di pietra rossa che collegano ogni componente. Poiché stiamo costruendo un computer a 4 bit, abbiamo bisogno solo di quattro canali nel nostro bus. Queste sono le linee rossa e blu che collegano i componenti all'interno della CPU. Notare che i bus blu hanno meno di quattro linee, questo perché non trasportano dati. Poiché i bus possono trasportare dati solo in un modo (in Minecraft, a causa dei ripetitori che funzionano solo in un modo), ci sono due bus che collegano la CPU al computer esterno.
Il primo bus è il bus dati, questo serve per trasferire le informazioni dai dispositivi di archiviazione o I/O alla CU. Anche le istruzioni vengono inviate tramite questa linea La CU può anche utilizzare questo bus per trasferire dati all'ALU. L'ALU non può trasferire dati su questo bus perché i bus funzionano solo in un modo e una volta che le informazioni vengono prese dall'ALU, il bus si interrompe oltre l'ALU. Le informazioni dall'ALU passano attraverso il bus 2.
Il secondo bus è il bus dati, ma restituisce i dati dall'ALU alla CU. La CU non può inviare dati attraverso questo bus all'ALU perché il bus va da sinistra a destra e funziona in una sola direzione. Tuttavia, la CU può inviare informazioni alle unità di archiviazione e viene utilizzata per impostare i valori dei dispositivi di archiviazione.
Il terzo bus è il bus indirizzi, quale la CU può inviare l'indirizzo di archiviazione. Qui è dove risiedono le informazioni. Ad esempio, la CU chiede l'indirizzo del byte che vive in 0001. Invia l'indirizzo (0001) tramite il bus indirizzi e la RAM restituirà il valore del byte tramite il primo bus. 0001 è la posizione del byte, non il suo valore.
Il quarto bus è il bus di controllo, con cui la CU comunicherà con la RAM. Ad esempio, un filo potrebbe dire alla RAM di impostare il byte sul valore dei dati inviati dalla CU. Un altro filo potrebbe dire alla RAM di ottenere il byte dall'indirizzo inviatogli dalla CU.
Il quinto bus è un altro bus di controllo, che si collega con l'ALU, che invia flag dall'ALU. I flag sono note che potrebbero essere messaggi di errore. Ad esempio, la CU potrebbe chiedere all'ALU di aggiungere 15 e 1 in un sistema a 4 bit. L'aggiunta di 15 e 1 in 4 bit produrrebbe 0 (spiegato sopra) e questo è chiamato overflow binario. Questo è un errore e l'ALU lo comunicherà alla CU tramite il quinto bus come flag. La CPU potrebbe anche inviare dati all'ALU e chiederle di eseguire un'azione con quei dati.
Componenti
Unità di controllo (CU) recupererà le istruzioni dalla ROM delle istruzioni (per altri computer, le istruzioni possono essere modificate e quindi è la RAM. Nel nostro caso, stiamo eseguendo un programma fisso e non è necessario modificare le istruzioni. Ciò semplifica completamente il processo e l'istruzione viene letta -Solo Memoria (ROM)). All'interno della CU, decodificherà quindi l'istruzione, che normalmente è un numero, in un'azione sensata. Quindi eseguirà quell'azione e, se l'istruzione lo richiede, memorizzerà il risultato nella RAM. Comunica con la RAM attraverso il bus di controllo e riceve i flag dall'ALU. Può anche chiedere all'ALU di eseguire azioni sui dati che invia all'ALU (es. addizione). Per comunicare con la RAM, ad esempio, un filo potrebbe dire alla RAM di impostare il byte (la posizione di esso è specificata tramite il terzo bus indirizzi) al valore dei dati inviatigli dalla CU tramite il secondo, data autobus.
Unità logica aritmetica (ALU) eseguirà le istruzioni inviategli dalla CU e confronterà i numeri">numeri binari e comunicherà con l'Unità di Controllo. Può eseguire semplici addizioni e sottrazioni che possono essere ripetute per eseguire moltiplicazioni e divisioni di numeri">numeri interi, producendo un numero intero (quindi divisione). Esistono anche porte logiche per booleani, sono necessarie le porte logiche fondamentali, come la porta NOT e la porta NAND.
Ora possiamo scegliere tra una gamma di design di autobus, ognuno dei quali contribuisce ai suddetti tre obiettivi di progettazione chiave di un computer Minecraft.
Capitolo 3: Progettazione di un computer
Istruzione-Set-Architettura
stati
La memoria è un determinato numero di bit. In Minecraft, la memoria di solito contiene 8 o 16 bit, sebbene i computer con memoria a 32 bit siano stati costruiti con successo in precedenza. Ogni bit si trova in uno dei due possibili stati: acceso o spento. La memoria è una serie di questi on e off, che possono essere utilizzati per eseguire determinate attività.
Simboli
I computer del mondo reale usano il binario, che è una serie di 1 e 0. "1" significa "acceso" e "0" significa "spento". In Minecraft, la migliore rappresentazione è la polvere di pietra rossa: avere un segnale significa "1" e nessun segnale significa "0". Tuttavia, a seconda della distanza della pietra rossa dalla memoria, è possibile che "0" sia qualsiasi cosa, dalla potenza del segnale 0 fino a 14. Puoi anche progettare cose per rendere "1" uguale a qualsiasi cosa dalla potenza del segnale da 1 a 15.
numeri">numeri
Il nostro normale sistema decimale è un sistema numeri">numerico in base 10. Binary, il sistema numeri">numerico all'interno dei computer, è in base 2. Per fare un confronto, dai un'occhiata al numero a 2 cifre. In decimale, la cifra a sinistra è la cifra delle decine. In binario, è la cifra 10s. Ad esempio in decimale, "2" viene letto come "dieci". In binario, "10" viene letto come "due". Esistono due metodi comunemente usati per convertire da decimale a binario:
Bit più alto per primo: questo metodo richiede un po' di intuizione. Usiamo 42 come esempio. Iniziamo cercando l'esponenziale più grande di 2 (es. 32 [2^5] o 65536 [2^16]). In questo caso, è 32. Quindi sottraiamo quel numero dal numero in questione. 42-32=10. Inoltre, il primo bit da sinistra è un "1". Quindi scendiamo al prossimo esponenziale di 2 e vediamo se è minore o uguale al nostro numero attuale. Per questo esempio, il prossimo è 16. 16 non è inferiore a 10, quindi il bit successivo è "0". Continuiamo a farlo fino a quando il numero raggiunge 0. Ogni volta che l'esponenziale 2 è inferiore o uguale al numero, sottraili e il bit successivo è "1". In caso contrario, il bit successivo è "0". Per continuare il nostro esempio: 8<10->10-8=2->"1" 4>2->"0" 2=2->2-2=0->"1" 1>0->"0 " Quindi la nostra rappresentazione binaria finale di 42 è "101010". Fantasia.
Bit più basso First: questo metodo non richiede la memorizzazione di 2 esponenziali. Invece, divide ripetutamente il numero per 2, usando il quoziente come numero successivo e il resto come bit binario. Tieni presente, tuttavia, che questo metodo scrive il numero binario da destra a sinistra, al contrario del metodo precedente che lo scriveva da sinistra a destra. Riutilizziamo il nostro esempio, 42. 42/2=21 r 0 (il bit più a destra è 0) 21/2=10 r 1 (il bit successivo a sinistra è 1) 10/2=5 r 0 (il bit successivo a sinistra è 0) 5/2=2 r 1 (il prossimo bit a sinistra è 1) 2/2=1 r 0 (il prossimo bit a sinistra è 0) 1/2=0 r 1 (il prossimo bit a sinistra è 1)
Il quoziente è 0, quindi ci fermiamo. Questo ci dà il nostro numero binario come "101010". Uguale al metodo precedente.
transizioni
Parole
Istruzioni
Le istruzioni sono essenzialmente funzioni gestite dal computer, esempi di istruzioni includono:
- Addizione, sottrazione, moltiplicazione e divisione
- Lettura/scrittura da RAM/ROM/memoria terziaria
- caricare e scaricare i dati nella RAM
- Diramazione ad altre parti del codice
- Registri a confronto
- Selezione di una funzione logica (NAND, NOR, NOT ecc.)
Le istruzioni possono essere programmate nella RAM, caricate dalla ROM o attivate direttamente tramite una leva o un pulsante. Ad ogni istruzione sarebbe assegnata una stringa binaria specifica (es. 0000=Carica dati dal registro 0001=aggiungi A e B 1011=Salva RAM in memoria terziaria ecc.) e probabilmente richiederebbe un proprio binario a decimale o binario a BCD per codificatori decimali e bus per ALU/registri.
Classificazione
Astrazione
Mappatura
Simboli
numeri">numeri
funzioni
Formalizzazione
Computabilità
Variabili
Le variabili sono numeri">numeri, stringhe (set di caratteri) o booleane (true o false) memorizzate nella RAM allo scopo di eseguire un programma. Ad esempio, i booleani possono essere utilizzati per conservare le informazioni se il programma ha raggiunto un determinato stato. È necessario conservare le seguenti informazioni su una variabile: nome, tipo (numero, stringa o booleano) e valore. Il valore di una variabile può, come suggerisce il nome, cambiare. Le operazioni possono essere eseguite su variabili. Le variabili vengono create durante l'esecuzione del programma e cancellate dalla memoria alla chiusura del programma. Quando un programma viene riaperto, le variabili vengono ricreate. È lo stesso in Minecraft.
gerarchie
Memoria
La memoria è il luogo in cui vengono conservati i dati per i programmi. È volatile (viene cancellato quando il computer è spento) e viene utilizzato dal programma per memorizzare i dati. Ad esempio, in un programma che conta da 1, 1 viene salvato in memoria, 1 viene caricato dalla memoria e viene aggiunto 1 per ottenere 2.
Semantica
Sincronizzazione dei
I dati sono le informazioni che vengono elaborate dal computer e sono rappresentati utilizzando binari.
Controllo
Architettura-macchina
Percorsi dati
Processando
Unità logica aritmetica
L'ALU è uno dei componenti più importanti di un computer, sia nella vita reale che in Minecraft. Innanzitutto, devi scegliere le funzioni che vuoi essere in grado di ottenere. Molto spesso, si tratta di addizione, sottrazione e una serie di opzioni logiche come AND, OR, NAND e simili. Devi quindi costruire l'unità con tutte le porte logiche e le funzioni matematiche che desideri e un modo per scegliere quale output visualizzare.
busing">busing
Il busing">busing è ciò che consente ai componenti del computer di comunicare tra loro. È possibile creare un bus utilizzando il cablaggio Redstone per collegare insieme ALU, RAM, ROM e registri del computer in modo che possano inviare dati tra loro. Di solito è importante pianificare dove costruire i componenti del computer in modo da non dover creare cavi di bus troppo lunghi o, peggio ancora, non avere spazio per creare bus, nel qual caso è possibile rimuovere il componente offensivo e ricostruire è una posizione appropriata o usa una mod come WorldEdit per spostare il componente da qualche altra parte.
Stoccaggio
Registrati
Memoria ad accesso casuale
Memoria ad accesso casuale conosciuto anche come RAM è un tipo di memoria utilizzata dai programmi ed è volatile. Molto spesso, renderlo volatile non ha alcuna utilità in Minecraft, quindi il modo più semplice per crearne alcuni è usare i d-flip-flop e aggiungere una funzione di lettura e scrittura. Realizzarne uno è semplice. Puoi creare 1 flip-flop e poi impilarlo per tutto il tempo necessario, con un blocco preso per ogni byte. Vedere il seguente piano per assistenza:
(Schema di Redstone da fare) Fare riferimento all'immagine se non si è sicuri (fare clic su di essa per ingrandirla) r=filo p=ripetitore b=blocco t=torcia sul lato del blocco 0=aria
Strato 1
00trb00
rpb0tr0
Strato 2
0b0t00b
tbbbbtb
Strato 3
0r0t00r
0prrr0r
Memoria terziaria
La memoria terziaria viene utilizzata per archiviare in modo compatto grandi quantità di dati a scapito della velocità. Questo tipo di memoria è costituito dal database, in cui sono effettivamente archiviati tutti i dati, e da un meccanismo fisico, di solito un braccio robotico, che deve muoversi fisicamente nel database per recuperare i dati. Per questo motivo è estremamente lento e viene utilizzato solo per informazioni a cui si accede raramente. Questo è l'equivalente del disco rigido o dell'unità a stato solido di un computer reale.
Nelle ultime versioni di Minecraft, potrebbe essere possibile creare memoria terziaria con pistoni appiccicosi combinati con blocchi di melma, che possono creare "navi" che si muovono e presumibilmente memorizzare un componente Redstone in grado di estrarre, leggere e scrivere da un muro di blocchi conduttori e non conduttori.
Stato macchina
Contatore di programma
Il contatore del programma viene utilizzato per tenere traccia della riga di codice da cui il computer deve leggere. Durante ogni ciclo di clock, il decoder accederà a questo contatore per recuperare l'istruzione successiva da eseguire. Alcune istruzioni accederanno a una quantità di dati diversa rispetto ad altre o non accederanno affatto, quindi il decodificatore a sua volta incrementerà il contatore del programma della quantità appropriata all'istruzione successiva. Il contatore viene utilizzato anche dalle istruzioni di salto per controllare il flusso del programma.
Nella vita reale, questo contatore non è un componente di per sé ed è semplicemente un registro accanto a tutti gli altri. In Minecraft, tuttavia, potrebbe essere meno complicato creare un registro separato dagli altri per memorizzare i dati del contatore del programma.
Percorsi di controllo
Processando
Unità di controllo
L'unità di controllo è la sezione del computer che interpreta le istruzioni e controlla le altre parti del computer, ad esempio dicendo all'ALU se aggiungere o sottrarre.
busing">busing
Stoccaggio
Memoria del programma
La memoria di programma è, fondamentalmente, ROM (memoria di sola lettura). La ROM viene spesso utilizzata per eseguire una serie di attività in remoto (come un programma, da cui il nome). Può essere realizzato per essere utilizzato sul controllo utente (come nella foto) o con un orologio e un ritardo sufficiente tra ogni riga in modo che 2 non siano accese contemporaneamente. Uno dei design più semplici ed efficienti è quello in foto, che può essere accoppiato o meno con un decoder. Può essere ingrandito facilmente, il che è un altro vantaggio. Ecco alcuni suggerimenti:
Stato macchina
Contatore di programma
Orologio
Gli orologi Redstone vengono utilizzati per sincronizzare i componenti o per cronometrarli. Nella maggior parte dei casi (Minecraft), è possibile evitare l'uso di uno, ma a volte è necessario per il funzionamento del computer. Può essere costituito da torce di pietra rossa praticamente in una linea/cerchio di porte NOT (si consiglia un numero dispari o l'output dovrà essere NON modificato), o da ripetitori, come mostrato nell'immagine sopra.
Tip
- Il giocatore potrebbe voler utilizzare mod o pacchetti di dati come WorldEdit.
- Codifica a colori il tuo computer (usa lana blu o cemento per RAM, giallo per ALU, ecc.)
- Inizia in piccolo e impara a usare piccoli computer prima di provare macchine più complesse.
- I blocchi struttura possono essere molto utili per spostare i componenti e combinare più componenti insieme. Tuttavia, tieni presente che non è possibile ottenerli senza utilizzare i comandi.
- Redstone
- Circuito di Redstone
- Orologio in pietra rossa
- Circuito logico
- Circuito di memoria
- Circuito a impulsi
- Circuito di trasmissione
- Tutorial/Circuiti di pietra rossa avanzati
- Tutorial/Calcolatrice
- Tutorial/Stampa
- Tutorial/Telegrafo
Tutorial | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Introduttivo |
| ||||||||||||
Generale |
| ||||||||||||
Le sfide |
| ||||||||||||
costruzioni |
| ||||||||||||
Agricoltura |
| ||||||||||||
Incantevole e fondente |
| ||||||||||||
Blockbreaking |
| ||||||||||||
meccanismi |
| ||||||||||||
Server |
| ||||||||||||
Tecnici |
| ||||||||||||
Antiquato |
|