Perché un datapath nei microcontrollori ha sempre una potenza di 2?


8

I percorsi dei dati dei microcontrollori hanno sempre una potenza di 2 larghi: 4 bit, 8, 16, 32 bit, ecc. Anche i PIC che utilizzano istruzioni larghe a 12 bit sono controller a 8 bit. Perché? C'è qualche vantaggio progettuale in questo? Cosa c'è di sbagliato in un databus a 12 bit o in un controller a 7 bit ?

modifica
Il 7 bit non ha molto senso, ma è ciò che mi ha fatto pensare alla domanda. Le risposte si riferiscono alla tradizione di 8 bit. Ma 16 bit non è 8 bit e 24 bit è in grado di gestire dati a 8 bit e 16 bit, giusto? Perché hanno saltato a 24 bit per passare a 32 bit?


7
il sacrilegio lo brucia sul rogo!
Kenny,

@kenny Sì, sono anche indignato! :-)
m.,

@ m.Alin l'orrore! Prima che tu lo sappia, la gente tornerà a progettare sezioni di bit e scrivere i propri assemblatori.
Kenny,

Dovrebbe essere condannato a 3 anni di utilizzo solo di vecchi teletipi di codice a 5 bit (questi avevano codici separati per "shift" per accedere a più lettere, tra le altre gioie).
Olin Lathrop,

2
... perché un po 'in sé è una potenza di 2? :-P
shimofuri,

Risposte:


8

La tradizione ha una forte spinta. Ma anche l'interoperabilità. Praticamente tutti i formati di file e protocolli di comunicazione esistenti funzionano su byte. Come gestirli nel microcontrollore a 7 bit?

Il PIC se la cava con lo spazio istruzioni completamente separato e programmato in anticipo dall'esterno. C'è un po 'di valore nel bit-rasatura del set di istruzioni, in quanto è l'unica cosa che puoi controllare come progettista di microprocessori.

Se vuoi un'architettura estrema, potresti Huffman codificare il set di istruzioni, dandoti un testimone di lunghezza variabile .


7

Minimo sensibile a 4 bit:
0-9 I dati numerici richiedono 4 bit
0-9 = 10 parole.
Dimensione della parola binaria più alta successiva = 4 bit = 16 parole possibili.
Quindi i dati BCD (decimale con codice binario) = 4 bit

8 bit logico prossimo salto
0-9, az, AZ = 10 + 26 + 26 = 62 parole.
Potrebbe gestire con 7 bit = 128 parole.
8 è semplice quanto 7 e consente 2 x 4 bit in modo che i dati numerici possano essere impacchettati 2 per byte a 8 bit.

Quindi 12 bit (non 16)?: La
successiva dimensione logica aumenta = 12 bit e il PDP-8 iniziale e di grande successo ha usato 12 bit. 12 bit utilizzati per i dati e il programma consentono 2 ^ 12 = 4096 posizioni dell'indirizzo. Come potrebbe aver detto una volta Bill Gates "4K di memoria dovrebbe essere sufficiente per chiunque".

La seguente famiglia di PDP-11 utilizzava 16 bit.

Raddoppio per la compatibilità.
Se si desidera interagire con sistemi di livello inferiore e superiore e se si desidera disporre di dispositivi più capaci nella stessa famiglia, è molto utile poter gestire 2 parole del sistema più piccolo all'interno della parola di sistema più grande.


MA

Le eccezioni che dimostrano la regola:

"Sempre" è una parola così forte :-)
Esempi di 1-bit, 12-bit, 18-bit, 36-bit di seguito.
Le macchine a 18 e 36 bit non erano mai microcontrollori.
1 e 12 bit erano.


Il sistema a un bit menzionato di seguito è in realtà un sistema "bit casuali come meglio credi". La parola dati a un bit è essenzialmente un flag go / no-go prodotto dal calcolo e viene utilizzato per abilitare o disabilitare l'attività del programma. Il contatore del programma è un contatore attivo che avanza ciclicamente nella memoria con il codice abilitato o disabilitato come richiesto. Davvero molto molto molto cattivo. Quando arrivarono sul mercato i processori a 8 bit del giorno erano abbastanza maturi e il processore a 1 bit non aveva mai molto senso. Non so quanto sia mai stato utile.


1 bit !!!:

Motorola MC14500B Ho ricevuto una menzione d'onore da Jack Gansell per la migliore descrizione di questo dispositivo :-)

Scheda tecnica : fare clic sulla pagina per scaricare il PDF.

inserisci qui la descrizione dell'immagine


12-bit:

Harris HM-6100 aka Intersil IM6100 - aspirante minicomputer a 12 bit] ( http://www.classiccmp.org/dunfield/other/i6100cfs.pdf )

Basato sul minicomputer DEC PDP-8 a 12 bit di grande successo.

Panoramica

  • La memoria di programma e la memoria di dati occupano lo stesso spazio di memoria. La dimensione totale della memoria direttamente indirizzabile è di 4 K parole. La dimensione della parola è di 12 bit. Il 6100 non ha memoria stack.

    La dimensione della memoria del programma è di 4 K parole. Tutte le istruzioni condizionali consentono al processore di saltare solo le istruzioni successive. Per passare condizionalmente a un indirizzo arbitrario in memoria quando viene soddisfatta una determinata condizione, il codice deve eseguire prima l'istruzione "skip se la condizione non viene soddisfatta" e inserire l'istruzione jump diretta o indiretta incondizionata dopo l'istruzione skip. Le istruzioni incondizionate possono essere utilizzate per saltare direttamente all'interno della pagina corrente (127 parole) o saltare indirettamente all'interno dell'intero spazio di memoria (4 K parole). Il 6100 supporta le chiamate di subroutine ma, a causa della mancanza di memoria dello stack, l'indirizzo di ritorno per le subroutine è memorizzato . Non esiste alcuna istruzione "ritorno dalla subroutine": la subroutine deve utilizzare il salto indiretto per tornare al chiamante.

    La dimensione della memoria dati è di 4 K parole. È possibile accedere ai dati direttamente nella pagina zero (0000h - 007Fh) o nella pagina corrente di 127 parole. È possibile accedere ai dati indirettamente ovunque in 4 K parole di memoria.

Wikipedia - Intersil 6100

Il PDP-8 e l'Intersil 6100 avevano 16 istruzioni molto ricche. Non ci sono istruzioni di sottrazione.
L'istruzione ADD si chiama TADD per ricordarti che è l'aggiunta del complemento a 2, quindi non abbiamo bisogno di ... istruzioni di sottrazione.


18 bit, 36 bit altro - la famiglia PDP:

Responsabile del trattamento programmato di Wikipedia

PDP1 - 18 bit

PDP2 - 24 bit è morto al mattino

PDP3, PDP6 - 36 bit


Manuale per l'utente PDP-12 (preliminare - Wow.
Nonostante la numerazione, questo è pre pre PDP16 - un PDP-8 su steroidi con funzionalità I / O analogica - e macchina per laboratorio di ingegneria. Avrei potuto averne uno gratuitamente se avessi voluto, ma non avrebbe funzionato in nessun luogo sensato - o insensibile. Il
primo gioco per computer a cui abbia mai giocato è stato su uno di questi.
Space War. La
macchina era in due armadietti di dimensioni ridotte.
Avresti aperto una porta ed avresti camminato dentro per fare cose interni.


Se si desidera una parte di produzione a 24 bit, le GPU R300 / 420 ATI (schede 9500-X600 e X700-850) sono perfette.
Dan Fiddling By Firelight,

L'idea di un micro a un bit sembra interessante, ma quanto è stato utile in pratica un chip come l'MC14500B? Penserei che avere i dati di input controllasse un bit di indirizzo del programma (usando un latch e un multiplexer 2: 1) sarebbe più efficace che provare a usare le istruzioni per gestire lo stato. Ho trovato una scheda tecnica dell'era degli anni '90 per la parte, che suggerisce che rimase in circolazione per un po ', ma sono curioso di sapere come sarebbe effettivamente usato un chip del genere.
supercat,

@supercat - Ho trovato un riferimento in cui un designer ha detto che avevano un vecchio design discreto di wirewrap che hai sostituito con uno basato su un MC14500B e nel corso di alcuni anni il cliente ha acquistato un certo numero di essi. Detto questo, un dispositivo più paralizzato e incapace sarebbe difficile da immaginare.
Russell McMahon,

Non riesco davvero a immaginare la psicologia del design degli anni '70, ma il controller per floppy drive di Steve Wozniak (presente in Apple] [) dimostra che non ci vuole molta logica discreta per costruire un "computer". Dopo aver esaminato il manuale di quell'MC14500B, ho pensato a come progettare un sistema per eseguire il codice da una PROM usando solo una logica discreta (al di fuori della stessa PROM). Penso che le viscere della mia macchina siano un fermo trasparente a 8 bit, un flip flop a 8 bit e una NAND quad, e possibilmente un ritardo RC (a seconda dei requisiti di configurazione / attesa per l'I / O). Un'istruzione a 16 bit per ciclo.
supercat

Sette bit dal flip flop guiderebbero i bit di indirizzo superiore della PROM e il bit inferiore verrebbe guidato dall'orologio. Durante la prima metà di ogni ciclo, il dispositivo di chiusura trasparente campionerebbe i primi sei bit di uscita (indirizzo I / O) e il dispositivo eseguiva una lettura I / O. L'ingresso I / O guida il settimo bit di latch trasparente e 3 NAND fungono da multiplexer usando l'ingresso latch per selezionare Q0 o Q1 dalla PROM per alimentare il bit di latch trasparente rimanente. Durante la seconda metà di ogni ciclo, eseguire una scrittura I / O con l'indirizzo e i dati bloccati.
supercat

7

Perché la maggior parte del mondo è convergente per l'archiviazione, la comunicazione e la gestione dei dati del computer in blocchi di 8 bit. Non è uno standard ufficiale, ma è molto forte ad-hoc.

In passato ci sono state macchine che gestivano multipli diversi da 8 bit nei loro percorsi di dati. Gli esempi includono le serie CDC Cyber ​​6000 e 7000 e il PDP-8. Le macchine CDC utilizzavano byte a 6 bit e il PDP-8 aveva una parola larga 12 bit senza un modo speciale di gestire solo quantità a 8 bit. Certamente c'erano altre macchine in questa categoria. La ragione per cui non ne sentite parlare oggi è perché le persone hanno deciso di voler macchine in grado di gestire bene i loro byte a 8 bit, ed è quello che fanno i produttori. Quanto pensi che potrebbe vendere un microcontrollore a 7 bit? Chiunque ne avesse creato uno, sarebbe stato ridicolizzato e avrebbe trovato pochi clienti. Sarebbe una stupida proposta commerciale.

È possibile visualizzare alcune prove aggiuntive di "byte" non a 8 bit se si osservano gli standard Internet. Usano deliberatamente il termine "ottetto" perché all'epoca non esisteva un accordo universale sul fatto che un byte fosse sempre 8 bit. Al giorno d'oggi il significato di byte è converto in 8 bit binari e verrai deriso fuori città se provassi a usarlo in modo diverso.


2

C'è un po 'di efficienza unita a molta compatibilità con le versioni precedenti come motivo di questa scelta progettuale comune.

Se il mio datapath è largo 7 bit, ho bisogno di 3 bit per rappresentare una determinata linea di quel percorso. Dato che ho intenzione di sprecare tre bit, allora potrei anche usarli completamente, sia per efficienza che per eliminare un percorso morto che potrebbe provocare un errore di arresto anomalo.

I tipi di dati più comuni si basano su un nibble a 4 bit e la maggior parte di questi si basa su un byte a 8 bit. Scegliendo di utilizzare una base alternativa, potrebbe essere necessario ricorrere a codici dispari e inefficienti per gestire tipi di dati comuni. Ad esempio, il mio computer a 7 bit richiederebbe 5 spazi di memoria per gestire uno qualsiasi dei numeri a 32 bit, incluso il virgola mobile, che sono molto comuni nel settore di oggi.

Se la mia macchina non dipendesse da dati esterni, probabilmente potrei cavarmela, ma controller del motore, encoder, sensori di temperatura e la maggior parte dei dispositivi di interfaccia e sensori del mondo reale supportano tali unità standard.

Non è impossibile interfacciare un computer a 7 bit con una porta USB, ma farai molti test extra ed eseguirai molte più istruzioni per elaborare tutte quelle transazioni a 5 unità per tipi di dati a 32 bit di quanto faresti se aggiunto un po 'di più al tuo percorso dati e si è allineato con il resto del settore.

In gran parte è iniziato e si è unito alla forma attuale a causa dell'efficienza dell'indirizzamento dei bit, tuttavia, questa è la causa principale. Se, ad esempio, dovessi creare un computer trinario (3 stati anziché 2 stati per bit), vedresti le dimensioni dei bit più efficienti a 3, 9, 27, 81, ecc. Vedresti anche tentativi meno efficienti di 18, 24, 33 e 66 nel tentativo di fornire una maggiore compatibilità con i sistemi binari.


1
"I tipi di dati più comuni si basano su un bocconcino a 4 bit". Non penso sia vero. I dati di testo (ce ne sono molti ) sono basati su byte e i dati numerici (inclusi quelli compressi / codificati) sono spesso basati su 16 bit o 32 bit. L'unico uso di dati a 4 bit che mi viene in mente è BCD, ma IMO è molto limitato.
Stevenvh,

@stevenvh Penso che si riferisca al grande uso di HEX per raggruppare i dati ... Direi che è vero, nelle architetture spesso vedi questa decomposizione
clabacchio

1

È più facile perché ti consente di specificare un numero di bit in un numero di bit. Questo può sembrare un trucco da salotto, ma i set di istruzioni lo fanno sempre. Pensa ad esempio a un'istruzione "sposta a sinistra":

SHL R1,4

Se hai un numero di bit che è una potenza di due, puoi codificare l'operando in un numero fisso di bit senza alcuno spreco.


1
Ci ho pensato anche io, ma non sono sicuro che ci sia abbastanza motivo per basarci su un'architettura completa.
Stevenvh,

1
Un fattore più grande, penso, è la capacità di archiviare e accedere ai dati in matrici di bit. L'uso di tali array non rappresenta una parte enorme di ciò che fanno i computer, ma non è raro. Su una macchina con ad es. Byte a 8 bit, l'elemento i di un array può essere letto tramite arr[i >> 3] >> (i & 7)o verificando se arr[i >> 3] & mask[i & 7]è diverso da zero (alcune CPU preferiscono un approccio rispetto all'altro). Fare una cosa del genere con una dimensione di non due parole sarebbe molto più difficile.
supercat

@supercat Non molto più difficile, solo molto più lento. Uno sostituisce semplicemente un turno con una divisione. Sono sicuro che lo sai già, ma ho pensato che valesse la pena sottolineare.
Roman Starkov,

0

Per quanto riguarda le mie conoscenze in elettronica digitale, la ragione sembra essere abbastanza ovvia. Il fatto è che per tutti i sistemi digitali utilizziamo il concetto di sistema di numeri binari. Ciò significa che abbiamo solo due livelli di funzionamento, ovvero 0 o 1. Quindi qualsiasi combinazione possibile a livello hardware deve essere una combinazione di 0 e 1. Quindi, se abbiamo bisogno di eseguire 4 diverse attività, allora abbiamo bisogno di 2 variabili, per 32 attività abbiamo bisogno di 5 variabili e così via (la logica è 2 ^ n dove n è il numero di variabili). Quindi, poiché abbiamo a che fare solo in due livelli, quindi siamo tenuti ad avere una combinazione solo come potenza di 2, che di conseguenza rappresenta 2,4,8,16,32,64,128,256 e così via ...... ..


1
Questo non spiega i poteri di 2 per la lunghezza della parola. Ne dici una lunghezza di 5 te stesso sufficiente per 32 combinazioni. OP chiede perché non ci sono controller a 5 bit.
Stevenvh

@stevenvh: Va benissimo signore. Capito. Forse non mi sono concentrato sulla domanda correttamente. Grazie.
salpò il

Ho spostato la tua risposta in un commento, che puoi usare dalla casella qui sotto. Le risposte hanno lo scopo di fornire contenuti sulla domanda, il resto è per i commenti.
clabacchio

0

Devo ammettere che ho scremato solo le altre risposte, ma un dettaglio chiave sembra indirizzato solo indirettamente: velocità logica e compattezza.

Se dovessi impacchettare i valori a 24 bit in modo contiguo e potessi anche accedervi in ​​modo indirizzato a byte, la logica di elaborazione dovrebbe dividere per 3 per l'accesso alle parole. La divisione è piuttosto costosa da fare in logica (basta controllare il riferimento del processore preferito - l'istruzione di divisione è lenta), a meno che non sia specificamente con una potenza di 2; in quel caso, semplicemente ignori i bit più bassi (che il software fa spostando i bit). Questa è la stessa ragione fondamentale che preferiamo accessi allineati.

È ovviamente possibile progettare un processore attorno a questi limiti, forse anche codificando la parola accessi come il quarto valore dell'indirizzo (poiché sono necessari due bit per selezionare tra tre byte), e non sarei terribilmente sorpreso di vederlo in un DSP (come una GPU); ma non è la norma per le CPU. Si finirebbe anche con uno strano passo 4/3 per gli accessi a array di byte, che avrebbe bisogno di una gestione simile ai numeri BCD. Diventa quindi molto più efficiente gestire un array di vettori 3x8bit anziché 8 byte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.