Università di Modena e Reggio Emilia
Corso di laurea in ingegneria elettronica
Appunti di Calcolatori Elettronici
Approfondimento di ADE8
Mattia Valiante
Ripasso (Componenti sequenziali)
Flip flop tipo D (con uscita Q e #Q) permette di memorizzare un singolo bit al fronte di salita del clock.
Automa stati finiti
Registri
- Dm.bit ➔ Registri ➔ Qm.bit
- MB ➔ AM
- IEOE
- MD ➔ MEM
- QM.sub>A ➔ (2M.sub>A)
C'è il clock rispetto alle RLCRLCHAABCINCOUTSII1OS1S0CON2
Progettazione del datapath di ADE8
Memprocessore, ACC, MAR, bus interno, HDR, ALU, AREGOE = 1
ALU OUT, REGOEIEIE(CONZ), FLAGS1S0
Data path control unit
ISA = Istruction Set Architecture
Microoperazioni: avvengono a ogni ciclo di clk. Programma: PC ➔ CAFFE ➔ IR
- Latte
- Caffe
- Caffe Deca
Tabella di codifica delle istruzioni
- 00 Latte
- 01 Caffe
- 02 Caffe Deca
Registri da aggiungere a ADE8
PC = Program Counter = Contatore delle istruzioni, indica l'indirizzo della prossima istruz. da eseguire
IR = Istruction Register = Contiene le istruzioni da eseguire. Istruzione corrente: 8 bit non bastano per questo registro quindi si sdoppia in 2 registri da 8 bit
- IRO = Op Code(Codice Operativo)
- IRP = Parametro
COME FACCIO AD AUMENTARE PC? PC → ALU + (CIN =1) = PC + 1 PERÒ A = 0
COSA? METTO MUX TRA ALUA E ALUZA (FILO DI CONTROLLO) ZA=0 → A =0 ZA=1 → A = ALUA PC → MAR →TRIEN → MDR → IR + PC → ALU → PC+1 = PCCON IL REGISTRO SPIL DATAPATH IN ABC 8 E COMPLETO
Stack pointer
LA NOSTRA ISA È DI TIPO JET DI ISTRUZIONI RIDOTTO
DATA PATH: 7 registri a 8bit
Entrata e uscita di dati sono controllati con ENABLE :
- ACCIE
- ACCOE
- MARIE
- MAROE
- (24 segnali di controllo)
Unità di controllo
Unico che si interessa dell'IR0FLAG C.O.N.Z.
"MAR ← PC" = Micro operazione fatta tramite segnali di controllo
PCoe = 1
MARie = 1
"MDR ← M[MAR]" ⇒ MDRbus ie = 1
"M[MAR] ← MDR" ⇒ MDRbus oe = 1
Istruzione
label: COD OPRIS, OP1, OP2 AL MAX 1 ESPRESSO
Quando QUALCOSA non è ESPRESSO va a FINIRE NELL'ACCUMULATORE
Ogni istruz. è formata da 2 parti: cod operaz. e argomenti
Architettura load store
2 operaz. principali fa riferimento solo all'accumulatore
"ACC ← M[O6]"
O6 è l'indirizzo LOAD O6
IRo IRp
Microoperazioni
MAR ← IRp MDR ← M[MAR] ACC ← MDR LOAD
Tutte le istruzioni sono lunghe 16 bit (IR) e a campi fissi:
- 8 bit COD. OP. (IRo)
- 8 bit parametro (IRp)
Uno o più param. da esp. durante operaz. ST param "M[param] ⇐ Acc" Acc
MAR ⇐ IRp MDR ⇐ Acc M[MAR] ⇐ MDR STORE
Unità di controllo dovrà sempre fare fetch ⇔ execute
MAR ⇐ PC MDR ⇐ M[MAR] IRp ⇐ MDR ALUout ⇐ 0 + PC + 1 PC ⇐ ALUout
Tutti i registri quando accendo sono a 00 Non posso posizionare dati lì dentro
10 micro operazioni sempre uguali che vanno a recuperare dalla memoria l'istruzione corrente
ADD (40) PARAM
MAR ⇐ IRP MDR ⇐ [MAR] ALUA ⇐ ACC "ACC ⇐ ACC + M[PARAM]" ALUOUT ⇐ ALUA + MDR + 0: SA SB 10(+), GN=0
MEM
- 00 ∞ (LD)
- 01 06
- 02 40 (ADD)
- 03 07
- 04 10 (ST)
- 05 08
- 06 22
- 07 04
- 08 00
- 09 00
- 0A 00
PC → MAR → [MAR] → MDR → IRo PC + 1 → PC → MAR → [MAR] → MDR → IRP PC + 1 → PC
IRo scopre a cosa equivale ∞
IRP → MAR; M[MAR] → MDR → ACC
Rifaccio fetch → IRo = 40: ADD PARAM: JMP PARAM
"PC ⇐ PARAM" PC ⇐ IRP
Permette di modificare l'ordine delle istruzioni
1 microperazione
QUANDO IL PROCESSORE FINISCE LE ISTRUZIONI CONTINUA A FARE FETCH - EXECUTE
JMP = Salto incondizionato
Permette di modificare la sequenza di esec. delle istruzioni; va a cambiare PC SI PUÒ TERMINARE CONFINE: JMP FINE
ADD
MAR ← IRp MDR ← M[MAR] ALUa ← ACC ALUout ← ALUa + MDR + 0 ACC ← ALUout
Microoperazioni
Tipi di microoperazioni
- Chi coinvolge solo i registri, [TAR ← PC]
- Registri - Memoria [MDR ← M[MAR]] M[MAR] ← MDR
- Registri - ALU ALUOUT ← ALUA ZEROS1, S0 KDRCIN5 componenti da specificare sempre
Possibili microoperazioni di ALU (Orale)
Unità di controllo
Operazione SISOZOCIN
Operazione 00000 AND B = 0 (PER AZZERARE ACC)
011-ALUA AND B (AND LOGICO)
010-0 OR B = B (^x CALCOLARE I FLAG N, E, Z)
0110 ALUA OR B (OR LOGICO)
00010 + B = B
00110 + B + 1 (INCREMENTO DI UNO) INC0000 ALUA + B (ADD)
0011 ALUA + B + 1 ?111-0 + B' + 0 (NOT LOGICO)
11010 + B' + 1 (COMPLEMENTO A 2 = CAMBIO DI SEGNO: NEG)
1000 ALUA + B' = ALUA - (B + 1) ?1111 ALUA - B = SOTTRAZIONE SUB
ISA
ADD MAR ← IRp MDR ← M[MAR] ALUA ← ACC ALUout ← MDR + ALUA + 0 ACC ← ALUout 5 microoperazioni
AND MAR ← IRp MDR ← M[MAR] ALUA ← ACC ALUout ← ALUA and MDR ACC ← ALUout
(0 0 1 0) FLAGC1=1 5 micro.OR ALUout ← ALUA or MDR (0 1 0) FLAGC1=1
SUB ALUout ← ALUA + (MDR+1) (1 1 1) FLAGC1=1 ALUA ← ACC NOT ACC ← "ACC ALUout ← 0 + ACC (1 1 0) FLAGC1=1 NEG ALUA ← -ACC ALUout ← 0 + ACC + 1 (1 1 0) FLAGC1=1
Avvengono entrambe con un unico parametro che è presente nell'ACC
DOTT. ISA DI ADE 8 PROCESS. A 8 BIT LE SUE ISTRUZ.: LOAD, STORE, ADD, OR, .....
C'È UN ACC FLAG ASSEMBLATORE FA 2 PASSATE PROGRAMMA IN ASSEMBLY È REVERSIBILE SOLO SE SI HA UNA TABELLA DEI SIMBOLI, SENNÒ SI PERDONO LE ETICHETTE
Modalità di indirizzamento
LOAD MAR <= IRP MDR <= M[MAR] ACC <= MDR MOD. INDIRIZZAMENTO DIRETTA
NEL PARAMETRO HO L'INDIRIZZO IN LETTURA DOVE ACCEDERE DIRETTAMENTE MOD. INDIRIZ. IMMEDIATO NEL PARAMETRO C'È GIÀ IL DATO → NON C'È ACCESSO IN MEMORIA
LDv PARAM.
ACC <= IRP DIRETTA LD ST AND OR ADD SUB IMMEDIATA LDv ANDv ORv ADDv SUBv LDi STi ANDi ORi ADDi SUBi
Prog: Somma più elementi di un vettore
Assembiatore a 2 passate Somma V1: 3 V2: 7 V3: 10 V4: 2 V5: 0 Somma: 0
LDv0 V1 ADD V2 ADD V3 ADD V4 ADD V5 ST Somma JMP VETT: 371020 Somma: 0 LD VETT. INIZIO: CICLO ADDP: VETT ST Somma LD PADDv 1 ST PLD Somma JUMP CICLO NEGA DA ORALE Soluz. con Puntatore JMP VETT: 371020 N: 5 Somma: 0 PTR: 0 INIZIO: LDv VETT. ST PTR LD Somma ADDα PTR ST Somma JMP INIZIO 07 0308 0709 44 ACC LDv 08 LD 08 LDi 08080703 VALORE NELL'INDIRIZZO 07, CONTENUTO IN 08 LDi PARAM ACC ← M[M[MAR]] MAR ← IRP MDR ← M[MAR] MAR ← MDR MDR ← M[MAR] ACC ← MDR STORE STPARAM MDR ← ACC MAR ← IRP M[MAR] ← MDR STv PARAM STi PARAM MAR ← IRP MDR ← M[MAR] MAR ← MDR MDR ← M[MAR] M[MAR] ← MDR
Istruzioni
LD ST AND OR ADD SUB JMP LABEL
PC ← IRP SALTO INCONDIZIONATO FLAG JC JO JN JZ SALTA SE C,O,N,Z=1 SEMANTICI JLU JLS JE LA MICROOPERAZIONE È LA STESSA PER TUTTE E 7, CIOÈ PC ← IRP
FINE: JMP FINE CMP Fa la stessa cosa nella SUB, i FLAG si modificano però il risultato non viene salvato nell' ACC CMP CMPV CMPLD VAR SUB 7 ← FLAG Z=1 → VAR = 7 N=1 → VAR < 7 ACC = VAR - 7 ACC = VAR ACC: 11111111 ? < 7 Sì JE BIT con segno No JE BIT senza segno Dipende dalla convenzione che si usa Per questo si usano istr. cond. setantici JLU = Confronto UNSIGNED (salta se è MINORE senza segno di CMP) JLS = Confronto SIGNED (MINORE di CMP con segno) JE = Salta se sono UGUALI = JZ (UGUALE a CMP) CMP e SALTO CONDIZIONATO sono sempre ACCOPPIATI
Come collegare un dispositivo input/output?
Es. Tastiera: arriva per ogni tasto il valore 0 o 1 se è premuto o meno. Non riconosco le doppie Non posso creare un registro interno per ogni dispositivo Per farlo c’è bisogno di un meccanismo chiamato polling. - Leggo registro di dato, porto nell’accumulatore, mi accorgo che c’è un tasto premuto e cambio registro di stato, se c’è 0 (non c’è tasto premuto) continuo ad interrogare il registro di stato finché non c’è 1 Polling funziona per qualsiasi dispositivo di input/output. Ora dobbiamo spostare registro di dato/stato fuori dal processore, ci sono 2 casi Isolato Mappato in memoria ISOLATO MET PORTA REGISTER DATA REGISTER IN PARAM ACC ← I/O [PARAM] OUT PARAM I/O [PARAM] ← ACC MAPPATO IN MEMORIA NEI INDIRIZZI DI MEMORIA SONO DEFINITI A PRIORI QUELLI PER I/O. AL PROCESSORE NON CAMBIA NULLA, NON SI ACCORGE SE L’INDIRIZZO È DI MEMORIA O I/O QUESTO VIENE USATO IN ADE 8 MEMORIA CHIP SELECT SCHEDA MADRE DATA BUS ADDRESS BUS CONTROL BUS In ADC8 la parte di memoria dedicata a I/O è da 00 a DF, si possono avere al max 16 registri I/O
Stack
Serve per ricordare qualcosa, può ricordare anche più cose contemporaneamente Stack si riempie dal basso verso l’alto
PUSH Prima decremento e poi metto il valore nell’acc nella cella decrementata POP Prelevo il dato puntato dal registro e incremento di uno così da avere uno spazio libero SP contiene l’indirizzo dell’ultima cella riempita
Memory map
- 00 - Codice + Dati
- 80 - I/O
- DF - Stack
- FF CALL SP ← SP - 1 M[SP] ← PC PC ← IR[Para]...
- SP ← Allout MAR ← SP MDR ← PC M[MAR] = MDR
- RET PC ← M[SP] SP ← SP + 1...
- MAR ← SP MDR ← M[MAR] PC ← MDR Allout ← O1 + P1 SP ← Allout
Block diagram
DataPath Control Unit IREAC, ACoe, PC, PCoe Z, Zcoe, SI, So Control CRete Logica Seq. CLK MEM Δ ← AA ← Δ Microprocessore - ADE8 CONTROL UNIT ASF → CABLATA SE VUOI CAMBIARE/AGGIUNGERE UN ISTRUZ. DEVI RIFARE TUTTO IL PROCESSORE INDIRIZZI DA 00 A FF, 256 MICRO OPERAZIONI POSSIBILI OGNI ISTRUZIONE HA LE PROPRIE RIGHE (MICRO OPERAZ.) POSSO AGGIORNARE IL FIRMWARE SENZA DIFFICOLTÀ (PER ELIMINARE BUG) OLTRE LE 24 COLONNE SE NE AGGIUNGONO 2: UNA DI S0 e UNA DI S1. PER IL MULTIPLEXER MC0 MC1 : 00 → SALTO AL FETCH 01 → USA L’IR 010 → USA PROSS. ISTRUZ. VERSIONE SENZA FLAG E QUINDI SENZA SALTI CONDIZIONATI
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Multicast - approfondimento
-
Don Quijote - approfondimento
-
Approfondimento analisi strategica
-
Approfondimento su Ettore Sottsass