Skip to content

Commit

Permalink
eeprom
Browse files Browse the repository at this point in the history
  • Loading branch information
andreamazzai authored Nov 30, 2024
1 parent ffb3041 commit b041016
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions docs/_docs/90-eeprom.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,12 @@ Il programmatore di EEPROM del BEAM, basato su quello dell'NQSAP di Tom, non è

### Le EEPROM e il loro contenuto

Per governare i 42 segnali di controllo di ALU, RAM, SP, registri ecc. (21 direttamente in uscita dalle EEPROM + 21 demultiplexati dai [74LS138](../control/#i-74ls138-per-la-gestione-dei-segnali)) sono necessarie quattro EEPROM, ognuna delle quali esporta una word da 8 bit per un totale di 32 bit (i segnali fisici realmente necessari sono 29, cioè 21 diretti e 8 per governare i '138, dunque rimangono 3 pin inutilizzati).
Per governare i 42 segnali di controllo di ALU, RAM, SP, registri ecc. (21 direttamente in uscita dalle EEPROM + 21 demultiplexati dai [74LS138](../control/#i-74ls138-per-la-gestione-dei-segnali)) sono necessarie quattro EEPROM, ognuna delle quali esporta una word da 8 bit per un totale di 32 bit (i segnali fisici realmente necessari sono 29, cioè i 21 diretti e 8 per governare i '138, dunque rimangono 3 pin inutilizzati):

- Ogni EEPROM mette a disposizione 8 bit in output, cioè un byte.
- Poiché ogni istruzione del BEAM è composta da 16 step, sono necessarie EEPROM di dimensione 256 * 16 = 4096 byte dedicati a decodifica delle istruzioni e impostazione degli opportuni segnali in uscita.
- Per indirizzare 4096 byte sono necessari 12 pin di indirizzamento ((2^8 = 256 istruzioni) * (2^4 = 16 step) = 2^12 = 4096), cioè da A0 a A11; quattro EEPROM da 4KB, ognuna delle quali programmata con il proprio microcode, possono svolgere il compito richiesto.
- ogni EEPROM mette a disposizione 8 bit in output, cioè un byte;
- poiché ogni istruzione del BEAM è composta da 16 step, sono necessarie EEPROM di dimensione 256 * 16 = 4096 byte dedicati a decodifica delle istruzioni e impostazione degli opportuni segnali in uscita;
- per indirizzare 4096 byte sono necessari 12 pin di indirizzamento ((2^8 = 256 istruzioni) * (2^4 = 16 step) = 2^12 = 4096), cioè da A0 a A11;
- quattro EEPROM da 4KB, ognuna delle quali programmata con il proprio microcode, possono svolgere il compito richiesto.

Vediamo di seguito un dettaglio del microcode di alcune istruzioni di esempio, in particolar modo HLT (blocca l'esecuzione del codice), JMP (salta a un nuovo indirizzo definito nella locazione di memoria indicata dall'operando) e CPX (confronta il registro X con l'operando). L'istruzione più lunga tra quelle rappresentate è CPX, la cui durata è di 7 step (da 0 a 6); alcune istruzioni del BEAM raggiungono una lunghezza di 10 step.

Expand All @@ -78,6 +79,8 @@ Vediamo di seguito un dettaglio del microcode di alcune istruzioni di esempio, i
{ RPC|WM, RR|WIR|PCI, RPC|WM, RR|WB, RX|WH, CS|C0|FNZC|RL, RA|WH|PCI|NI }, // 06 CPX
~~~

*Dettaglio microcode di alcune istruzioni di esempio.*

Ogni step abilita uno o più segnali di controllo: ad esempio il settimo step dell'istruzione CPX attiva contemporaneamente RA, WH, PCI ed NI.

Come si può vedere nello [sketch Arduino](/code/Beam-Microcode.ino), ad ogni segnale corrisponde un pin specifico in una delle quattro EEPROM:
Expand All @@ -102,6 +105,12 @@ Ogni step di ogni istruzione va dunque letto come la concatenazione logica di og
| 0 | 14 | (byte 14 EEPROM 0) OR (byte 14 EEPROM 1) OR (byte 14 EEPROM 2) OR (byte 14 EEPROM 3) |
| 0 | 15 | (byte 15 EEPROM 0) OR (byte 15 EEPROM 1) OR (byte 15 EEPROM 2) OR (byte 15 EEPROM 3) |

Il settimo step dell'istruzione CPX descritto poc'anzi risulta in effetti composto dalla concatenazione del byte 6 di ogni EEPROM:

(byte 6 EEPROM 0) OR (byte 6 EEPROM 1) OR (byte 6 EEPROM 2) 6 (byte 14 EEPROM 3), cioè
(RA) OR (WH) OR () OR (PCI|NI), cioè
RA|WH|PCI|NI, così come indicato nel *Dettaglio microcode di alcune istruzioni di esempio*.

In pratica, si devono tenere in considerazione i segnali di output cablati su ogni EEPROM e indicare quali di questi debbano essere attivi ad ogni combinazione di istruzione / step. Questo spiega la necessità di programmare le quattro EEPROM ognuna con il proprio microcode.

Ora, anziché effettuare quattro programmazioni distinte, risulta molto più comodo (anche se più dispendioso) utilizzare quattro EEPROM di dimensioni maggiori e scrivere su ognuna di esse, in sequenza, i quattro microcode specifici di ogni EEPROM iniziale. In questo modo, si effettuano quattro programmazioni identiche, ognuna contenente le quattro porzioni di microcode originariamente dedicate a ciascuna delle EEPROM iniziali.
Expand Down

0 comments on commit b041016

Please sign in to comment.