Che cos'è esattamente il microcodice e in cosa differisce dal firmware?


50

Per quanto riguarda la terminologia, che cos'è esattamente il "microcodice" e se può essere aggiornato, in cosa differisce dal firmware?

Questa domanda non è un duplicato di questa domanda (per quanto posso dire) che ho anche chiesto di modificare il microcodice. Qui voglio assolutamente sapere come usare correttamente questi termini.

Aggiornare

Ho selezionato una risposta, ma non ne sono particolarmente soddisfatto. Ho inserito molte risposte e trovo molte di queste risposte altrettanto insoddisfacenti. Quindi lascia che ti presenti i miei due frame,

  1. "Il microcodice del processore è simile al firmware del processore." Mentre leggo sempre di più, è così che lo prendo. "Microcodice" è in questo contesto che sta semplicemente commercializzando "firmware del processore". Sopportami,..
  2. Oppure, mi sbaglio e so che succede! In questo caso, ho bisogno di un'idea molto più approfondita del motivo per cui mi sbaglio. In quelle risposte che ho letto per indicare che mi sbaglio, faccio fatica a capirle,
    • "Esecuzione vs dati" molte risposte usano questo paradigma, ma per la CPU non ha molto senso per me. Alcuni firmware di asserzione vengono eseguiti, ma da cosa? Quando si tratta di CPU, i programmi sono istruzioni o dati?
    • Se il firmware collega software e hardware (leggi: le cose dell'ingegneria elettrica degli dei), allora in che modo il microcodice non soddisfa anche questa distinzione.
    • "L'interpretazione" col passare del tempo, questo ha anche sempre meno senso. Cosa significa "interpretare le istruzioni hardware" con Microcode. Se ciò fosse vero, qualcosa sarebbe altrettanto performante se non fosse interpretato ma precompilato in diverse istruzioni hardware e semplicemente "eseguito"? Inoltre, in che modo il General MIDI non viene interpretato nella stessa luce? È un linguaggio che viene interpretato dal "microcodice MIDI" e gira sull'hardware. Oppure terminali stupidi che interpretano le istruzioni del teleprinter per la visualizzazione visiva?
    • Il "microcodice" si applica al codice eseguito su schede audio e schede video (GPU) ?

Non sono un esperto, ma direi che il microcodice è il firmware del processore. Immagino che tutti i dati su come viene eseguito il microcodice siano di proprietà di Intel / AMD, ma posso immaginare come funzionerebbe. Hai un semplice set di CPU, cose di base come il recupero dalla memoria e operatori di matematica. Quindi hai un set di istruzioni complesso (come x86 / intel). La CPU ottiene le istruzioni dalla memoria e utilizza il microcodice per convertire le istruzioni complesse in istruzioni più semplici. Un esempio potrebbe essere la moltiplicazione. La maggior parte delle CPU ha un'istruzione di moltiplicazione, ma in realtà la moltiplicazione consiste in turni di bit multipli.
Programmdude

Il termine microcodice si riferisce al fatto che utilizza / è alla base di molte istruzioni del "codice" della CPU. Fondamentalmente dice alla CPU come emulare istruzioni e funzionalità. Da qui il suo nome. Dal punto di vista del proprietario di un computer è ancora un altro set di codice spedito dal fornitore dell'hardware, quindi può in alternativa essere riassunto come firmware.
Verifica il

IMO, la migliore risposta semplice è "Ogni volta che un processore esegue un'istruzione, esegue effettivamente un programma di microcodice". Ciò che ti sembra essere un'istruzione a singolo processore è una sequenza particolare di istruzioni di microcodice, un "programma di microcodice". Ogni istruzione ha il suo programma di microcodici. Le singole istruzioni del microcodice abilitano / disabilitano / ecc. I vari bit interni del processore.
Ethan Reesor,

Risposte:


57

L'origine della parola firmware è un punto intermedio tra hardware e software - software incorporato nell'hardware. Si riferisce al software che è archiviato nella memoria non volatile su un dispositivo hardware. Esempi sono la EEPROM e la memoria Flash incorporate nei dispositivi hardware, quando vengono utilizzate per archiviare il codice eseguito dal dispositivo stesso.

Sta diventando sempre più comune in alcuni tipi di hardware che il suo "firmware" sia archiviato nel software del driver e caricato sul dispositivo quando viene avviato / inizializzato, invece di lasciarlo permanentemente sul dispositivo. Oggigiorno non è un grosso problema archiviare alcune centinaia di KB di codice firmware in un driver software caricato sul sistema operativo host e inviarlo al dispositivo quando viene inizializzato dal driver.

Questo viene spesso indicato come "firmware" anche se a seconda della definizione di firmware che si accetta, è possibile che tecnicamente non lo si consideri firmware perché non è residente sull'hardware (se si rimuove l'hardware e lo si inserisce in un altro sistema, esso non manterrà quella versione di "firmware").

Il microcodice è un sottoinsieme di quest'ultimo tipo di "firmware". Microcodice non è un termine generico per tutto il "firmware" che viene caricato su un dispositivo all'avvio. Invece, è specifico per le CPU, in cui il microcodice costituisce fondamentalmente il livello di traduzione tra le istruzioni CPU standard di livello superiore e le operazioni di livello inferiore specifiche per quella CPU. Viene caricato sulla CPU all'avvio, dal BIOS, ma può essere sostituito anche in fase di avvio dal sistema operativo.

Un aggiornamento al microcodice può consentire di modificare il comportamento di basso livello di una CPU per aggirare alcuni bug ancora da scoprire, senza la necessità di sostituire l'hardware della CPU. Il microcodice di solito contiene la mappatura più efficiente possibile dalle istruzioni di livello più alto a quello più basso per la migliore velocità ed efficienza energetica, quindi a volte quando è necessaria una modifica al microcodice per correggere alcuni bug, può causare prestazioni ridotte.

Si noti che Meltdown (la vulnerabilità che riguarda solo i chip Intel) non può essere risolto solo con gli aggiornamenti del microcodice e richiede modifiche alla funzionalità del sistema operativo principale, che può ridurre ulteriormente le prestazioni. Lo spettro (la vulnerabilità che colpisce i chip Intel, AMD e ARM) può essere risolto solo con gli aggiornamenti del microcodice.


Per rispondere ad alcune delle tue domande specifiche dopo la modifica:

  1. Sì, il microcodice è fondamentalmente un firmware che gira sul processore. Il termine speciale "microcodice" si riferisce specificamente al firmware su un processore che contiene il progetto per la traduzione dal linguaggio macchina standard alle istruzioni del processore di basso livello. Quindi è un termine più specifico del firmware.

    Si noti che, come ho discusso in precedenza, non è memorizzato nella CPU mentre è spento ma caricato su di esso ogni volta che si avvia, quindi in un certo senso non funziona come il firmware tradizionale. Tuttavia, un sacco di hardware lo fa ora e viene ancora chiamato "firmware", quindi chiamarlo firmware è accettabile.

  2. Non penso che ti sbagli. Il firmware non deve essere scritto in un determinato linguaggio macchina e la sua esecuzione non deve essere attivata in un certo modo. Ad un certo livello basso tutto il codice macchina è "dati" che viene "letto" da un processore e interpretato in un certo modo.

    Il termine "microcodice" viene in genere utilizzato solo per le CPU principali e non per le schede grafiche o altro hardware, anche se gli altri dispositivi possono avere il codice caricato su di essi allo stesso modo.


1
La tua seconda frase non è corretta; il firmware include software memorizzato nella ROM. Una volta la maggior parte del firmware era nella ROM, prima che le alternative diventassero accessibili.
Harry Johnston,

1
Chiaramente, il "microcodice" è specifico per una CPU. La domanda è diversa dall'essere specifica se fa diversamente. Rimuovendo l'ambito ("la CPU"), si ottiene una citazione quasi diretta di "livello di traduzione tra istruzioni di livello superiore e operazioni di livello inferiore". È praticamente solo la definizione di firmware. Non è quello che fa tutto il firmware? Sono molte le parole, ma penso che la descrizione più descrittiva e concisa sia la precedente, "Il microcodice del processore è simile al firmware del processore".
Evan Carroll,

@Evan, la maggior parte dei dispositivi riceve le istruzioni indirettamente, inviate dal codice in esecuzione sulla CPU. Solo la CPU elabora direttamente il codice fornito dall'utente. Considera anche che la maggior parte dei dispositivi contiene una CPU integrata di qualche tipo che esegue il firmware e che la CPU potrebbe avere un proprio microcodice. La distinzione può interessare solo ai progettisti hardware e ai programmatori del kernel, ma non è arbitraria.
Harry Johnston,

"la maggior parte dei dispositivi contiene una CPU integrata di qualche tipo che esegue il firmware e che la CPU potrebbe avere un proprio microcodice", questo è ciò che intendo. Quindi il codice che elabora un flusso midi su una scheda audio è anche "microcodice"? O il codice che disegna / visualizza i caratteri visualizzati su un terminale stupido?
Evan Carroll,

No. Il codice in esecuzione sulla scheda audio per elaborare un flusso MIDI è solo un normale firmware. Il codice che elabora il codice in esecuzione sulla scheda audio per elaborare un flusso MIDI sarebbe microcodice. (In pratica non sono sicuro che la CPU integrata su qualcosa di così semplice come una scheda audio avrebbe bisogno del microcodice in primo luogo, ma non è questo il punto.) La cosa fondamentale è che un flusso MIDI o i caratteri inviati a un terminale stupido, non sono codice. Sono solo dati.
Harry Johnston,

23

https://wiki.debian.org/Microcode

Microcodice CPU

Il microcodice del processore è simile al firmware del processore. Il kernel è in grado di aggiornare il firmware del processore senza la necessità di aggiornarlo tramite un aggiornamento del BIOS. Un aggiornamento del microcodice viene mantenuto nella memoria volatile, pertanto BIOS / UEFI o kernel aggiorna il microcodice durante ogni avvio.

I processori Intel e AMD potrebbero aver bisogno di aggiornamenti al loro microcodice per funzionare correttamente. Questi aggiornamenti correggono bug / errata che possono causare qualsiasi cosa, dall'elaborazione errata, alla corruzione di codice e dati e blocchi del sistema.

Il BIOS (o UEFI) aggiorna il microcodice della CPU durante l'avvio, tuttavia il più delle volte il fornitore della scheda madre non emette frequenti aggiornamenti BIOS / UEFI o l'utente non installa tali aggiornamenti. Per questi motivi, è probabile che il processore di sistema funzioni con un microcodice obsoleto su un vasto numero di sistemi.

Esempi:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html


9
Non è così semplice: il microcodice è "una tecnica che impone un interprete tra l'hardware e il livello architettonico di un computer". Di conseguenza, il microcodice è un livello di istruzioni a livello hardware che implementano istruzioni di codice macchina di livello superiore o sequenziamento interno della macchina a stati in molti elementi di elaborazione digitale. Fonte: en.wikipedia.org/wiki/Microcode

17
Quindi aspetta ... una "barca" è solo un particolare tipo di "veicolo"? Che parola inutile! :-)
Harry Johnston

4
@HarryJohnston Bene, ritengo piuttosto utile distinguere "una barca" da altri tipi di veicoli in determinati contesti ... e "microcodice" è un tipo molto specifico di "qualcosa" presente in molte CPU moderne ... ( quindi è piuttosto desiderabile avere un termine per questo).
Radovan Garabík,

4
@ RadovanGarabík: Questo è esattamente il punto di Harry, fatto con sarcasmo.
Peter Cordes,

4
Non capisco Se "Il kernel è in grado di aggiornare il firmware del processore senza la necessità di aggiornarlo tramite un aggiornamento del BIOS", allora perché il fatto che "il fornitore della scheda madre non rilascerà frequenti aggiornamenti BIOS / UEFI" significa che "il processore di sistema è probabilmente funzionerà con un microcodice obsoleto su un vasto numero di sistemi "? Perché il kernel non corregge solo il microcodice? Perché fare affidamento sul BIOS se il BIOS non viene mai aggiornato e è disponibile un'alternativa aggiornata più frequentemente?
Ajedi32,

6

Bene, gli "aggiornamenti microcodice" di Intel sono in realtà aggiornamenti "firmware", nel senso che si aggiornano molto più della semplice unità di traduzione del microcodice del processore.

Questi aggiornamenti di pacchetti di processori unificati che chiamiamo "aggiornamenti di microcodici" per Intel aggiornano anche altri microcontrollori on-die (come la PMU e il core di gestione dell'alimentazione) nonché diverse tabelle di parametri per diversi sottosistemi di processori on-die. Sono piuttosto complessi.

Queste informazioni sono disponibili su numerosi brevetti Intel relativi agli aggiornamenti di microcodice e microcodice.


4

Penso che il termine "microcodice" si riferisca principalmente a ciò che fa il codice (esegue istruzioni di basso livello usando istruzioni anche di livello inferiore), mentre il termine "firmware" si riferisce principalmente a come viene archiviato e gestito (meno facilmente aggiornato rispetto al software , più facilmente aggiornato dell'hardware). In questo senso è un po 'come la distinzione tra "applicazione" e "file JAR": lo stesso programma potrebbe essere entrambi, ma lo stai guardando da due diverse prospettive.

Per inciso, l'idea del microcodice risale a Maurice Wilkes nel 1951, decenni prima che i processori per computer fossero incorporati nel silicio.


3

Il firmware di solito si riferisce al codice per i dispositivi che contengono una CPU e non la CPU stessa, ad esempio il firmware per un telefono Android.

Il microcodice è uno strato di traduzione tra complessi set di istruzioni (ad es. 486, 686, AMD-64 ect.) E le istruzioni di livello inferiore per le quali i produttori di chip progettano il silicio. Quindi un certo numero di istruzioni nel set di istruzioni della CPU non sono implementate in silicio ma tradotte tramite microcodice in più istruzioni che sono implementate in silicio.


Ma non è vero per tutto il firmware. Istruzioni ABI che potrebbero essere implementate in Silicon ma non sono e sono altrimenti aggiornabili tramite software?
Evan Carroll,

1
Gli "aggiornamenti di microcodici" di Intel possono fare molto di più che modificare la decodifica delle istruzioni microcodificate . ad esempio, possono disabilitare il buffer di loop (in Skylake per correggere l'erratum SKL150) perché quando possibile la CPU è progettata per renderlo possibile nel caso vengano rilevati bug hardware.
Peter Cordes,

3

"Microcodice" era il termine originale e faceva riferimento alle istruzioni utilizzate per implementare un interprete per il set di istruzioni "pubblico" di un processore.

Ma nel tempo, con molte variazioni negli schemi di implementazione, la distinzione, com'era, divenne più vaga. Prima c'era il microcodice orizzontale vs verticale, poi vari schemi per scrivere "microcodice" (per implementare, diciamo, le istruzioni I / O) nel set di istruzioni del processore "principale". Quindi c'era la necessità di distinguere tra il codice che veniva facilmente caricato tramite le normali operazioni di "esecuzione" del programma, rispetto al codice (per BIOS, ad esempio) che veniva salvato nella ROM o in qualche altra memoria protetta e relativamente immutabile. Pertanto, il termine "firmware" è stato inventato per fare riferimento a queste istruzioni che sono state in qualche modo rese più persistenti (e meno accessibili per le modifiche dell'utente) nella memoria.

Ma le cose si sono trasformate e distorte molte volte da quando sono state fatte queste prime distinzioni, e più i termini sono definibili solo con precisione all'interno di un determinato processore e ambiente del sistema operativo.


+1, la chiave qui è che ci sono molti significati del termine "microcodice", e penso che l'OP voglia davvero conoscere "aggiornamenti di microcodici", non gli altri significati.
Peter Cordes,

3

[NB: questa risposta ha lo scopo specifico di affrontare la modifica recente e non si aggiunge alle diverse risposte sonore che sono già state pubblicate.]

Quindi, per ribadire: il microcodice (almeno per una prima approssimazione) è un tipo specifico di firmware.

"Microcodice" è in questo contesto che sta semplicemente commercializzando "firmware del processore".

Bene, non è marketing. Il marketing lo avrebbe chiamato XBoost Pro (TM) o qualcosa del genere. Piuttosto, è un termine ingegneristico; se si progettano CPU, la distinzione tra microcodice e altro firmware della CPU (e il tipo di firmware tipico di altri dispositivi) è importante per te. In caso contrario, probabilmente non lo è.

Se si progettano schede madri o si scrivono sistemi operativi, probabilmente si utilizza "aggiornamento microcodice" come abbreviazione per il più "ingombrante e meno familiare" aggiornamento del firmware della CPU. La maggior parte degli aggiornamenti del firmware della CPU influisce principalmente sul microcodice, quindi è abbastanza vicino alla stessa cosa. Probabilmente conosci la differenza, ma non devi preoccupartene .

L'utente finale non ha bisogno di conoscere o preoccuparsi della differenza, e in un mondo ideale non sentirebbe mai la parola "microcodice".

Immagino che sia arrivata alla tua attenzione nella copertura stampa delle recenti vulnerabilità dell'esecuzione speculativa, anche se potresti averlo sentito prima in un contesto che ha reso più ovvio che non ti occorreva preoccuparti. Queste vulnerabilità sono state rese note prima del previsto, il che potrebbe aver comportato una copertura della stampa meno curata di quanto altrimenti avrebbe potuto essere. Dal punto di vista dell'utente finale, è necessario installare gli aggiornamenti del BIOS, gli aggiornamenti del sistema operativo e in alcuni casi gli aggiornamenti delle applicazioni; non è necessario sapere né preoccuparsi del fatto che se uno di questi include un nuovo microcodice.


Quindi, anche rendendoti conto che probabilmente non hai bisogno di conoscere o preoccuparti, potresti essere comunque interessato per pura curiosità: come potresti fare per distinguere il microcodice da altri firmware?

Bene, la prima cosa da riconoscere è che non esiste necessariamente un'unica definizione difficile e rapida, è più una situazione di Bleggs e Rubes . Tuttavia, ci sono alcune cose che possiamo dire sul microcodice:

  • Il microcodice generalmente funziona all'interno di una CPU piuttosto che su una CPU. Questa è la vista di alto livello.

  • L'architettura del microcodice sembra in genere molto diversa dall'architettura del codice ordinario, incluso il firmware ordinario. È probabile che sia altamente parallelo e sia implementato molto più vicino all'hardware. Molte delle risposte esistenti (compresa la tua risposta) ne discutono, anche se va notato che i dettagli possono variare a seconda del design della CPU.

  • Sebbene l'hardware sia spesso progettato per eseguire solo il firmware fornito dal produttore, non è particolarmente insolito utilizzare firmware di terze parti, anche se probabilmente invaliderà la garanzia! Il microcodice di terze parti è molto più raro, anche se credo che nei tempi antichi (sto parlando di una CPU delle dimensioni di una breadbox) alcuni utenti finali avrebbero modificato il microcodice nelle loro CPU. Per quanto ne so, questo non è possibile nel tipo di CPU utilizzate nei PC.

  • Il microcodice in genere traduce o aiuta a implementare un'architettura di set di istruzioni pubbliche, ovvero esegue il codice macchina utilizzato dal progettista del sistema operativo e dai programmatori dell'applicazione. Maggiori informazioni su questo nella prossima sezione.


"Esecuzione vs dati" molte risposte usano questo paradigma

Temo in modo confuso e diverso, ma mi rivolgerò al mio commento. Questa sezione serve anche per espandere l'ultimo punto elenco sopra. L'obiettivo qui è cercare di distinguere tra il lavoro svolto da una CPU (raggiunto da una combinazione di hardware e microcodice) e il lavoro svolto da un dispositivo tipico (ottenuto da una combinazione di hardware e firmware). Ho intenzione di scegliere un disco rigido SATA.

L'unità SATA segue le istruzioni del computer, che sono sulla falsariga di "leggere i dati dal settore 5.123" e "scrivere questi dati nel settore 1.321". Il firmware dell'unità è responsabile della realizzazione dell'hardware, ed è in genere un codice abbastanza ordinario in esecuzione su una CPU integrata di qualche tipo. Le istruzioni dell'unità arrivano in sequenza, anche se potrebbero non essere elaborate nell'ordine in cui arrivano. Queste istruzioni non sono un programma, vengono inviate da un programma in esecuzione sulla CPU principale. In particolare non vi è alcun flusso di controllo, ovvero nessuna istruzione per dire all'unità SATA quali istruzioni eseguire successivamente.

La CPU è responsabile del computer. Una volta terminata l'inizializzazione, esegue le istruzioni ("codice macchina") fornite dalla scheda madre (BIOS, un altro tipo di firmware) che lo indirizzano a eseguire il codice macchina fornito dal sistema operativo che lo dirige ad eseguire il codice macchina fornito dai fornitori di applicazioni. La CPU stessa recupera il codice macchina dalla EEPROM (nel caso del BIOS) o dalla RAM (nel caso del sistema operativo e delle applicazioni). In particolare, il codice macchina ha un flusso di controllo: il codice macchina indica alla CPU quale codice macchina eseguire successivamente. È possibile ripetere ripetutamente lo stesso codice macchina, è possibile eseguire diversi bit di codice a seconda dei dati su cui sta lavorando il codice: le istruzioni in un linguaggio di interfaccia del dispositivo come il codice SATA possono eseguire un numero limitato di semplici attività, ma il codice macchina può farequalunque cosa . (Vedi anche Completezza di Turing .)

Potremmo riscrivere quel punto finale sopra come: il microcodice di solito implementa un linguaggio Turing Complete; il firmware normale di solito no.


Cosa significa "interpretare le istruzioni hardware" con il microcodice.

Vero ma probabilmente confuso; il punto importante è la distinzione tra il codice macchina, che ha un flusso di controllo ed è Turing Complete, e le istruzioni definite da un'interfaccia del dispositivo come SATA, che non funziona e non lo è.


Il "microcodice" si applica al codice che gira su schede audio

No, le schede audio ricevono istruzioni, non codice, proprio come le unità SATA. Le istruzioni potrebbero essere come "play A sharp" o "interpretare questi dati come una forma d'onda e riprodurli". Ancora molto semplice.

e schede video (GPU)?

Le schede video vecchio stile (quelle senza GPU) sono le stesse delle unità SATA. Le istruzioni sono come "imposta questo pixel su questo colore" o "scrivi una A in questa posizione".

... Le GPU sono complicate e si trovano da qualche parte tra i due mondi che ho tentato di descrivere sopra. Probabilmente è più semplice pensarli come un computer specializzato all'interno del computer principale, dotato di CPU proprie. È vero che anche dispositivi come le unità SATA hanno CPU integrate, ma la differenza è che la CPU integrata in un'unità SATA esegue solo il codice fornito dal produttore dell'unità, mentre le GPU eseguono anche il codice fornito dal sistema operativo e / o dal fornitore dell'applicazione. In realtà questa è una domanda completamente separata.


TL; DR: il microcodice è un tipo specifico di firmware, che aiuta l'hardware a implementare un set di istruzioni Turing Complete.


1

Il microcodice ( "archivio di controllo" ) è costituito da dati che risiedono in una memoria volatile o non volatile, generalmente una memoria piuttosto piccola ma molto ampia, i cui segnali di uscita dei dati sono collegati agli ingressi del segnale di controllo di unità funzionali hardware parallele, logica di controllo casuale, ecc. Gli ingressi di indirizzo della memoria del microcodice sono forniti da una macchina a stati che attraversa una parola di memoria ("istruzione di microprogramma") alla volta, per sequenziare efficacemente i segnali di controllo di uno o più blocchi hardware. Questo hardware si moltiplica nel tempo e consente l'implementazione di operazioni complesse con una logica casuale significativamente inferiore.

Nei moderni microprocessori potrebbe esserci una gerarchia di unità di microcodice / sequenziamento necessarie per astrarre la microarchitettura di silicio fisico in una famiglia di architettura più generale con un'interfaccia comune di "codice macchina". Ad esempio, possono essere presenti diversi livelli di microcodice / sequenziamento per implementare decodificatori di istruzioni e unità a virgola mobile.

Il firmware in senso tradizionale è qualsiasi software / dato che risiede in una memoria non volatile, che dovrebbe essere raramente o mai modificato. Ciò contrasta direttamente con il software archiviato o meglio scritto ed eseguito dalla memoria di sistema che è in continua evoluzione. Il microcodice si riferisce specificamente ai dati che rappresentano un microprogramma per il controllo sequenziale dell'hardware.

Il microcodice può essere implementato nel firmware / firmware può contenere microcodice, ma non sono gli stessi.


1
Le moderne CPU x86 sono molto più cablate di quanto tu descriva; sembra che tu stia descrivendo un 386 senza pipeline, non un Haswell / Skylake. Gli "aggiornamenti di microcodici" di Intel possono fare molto di più che modificare la decodifica delle istruzioni microcodificate . ad esempio, possono disabilitare il buffer di loop (in Skylake per correggere l'erratum SKL150) perché quando possibile la CPU è progettata per renderlo possibile nel caso vengano rilevati bug hardware.
Peter Cordes,

@PeterCordes 1) L'architettura x86 è irrilevante per presentare il concetto di microcodice 2) se avessi capito la mia risposta saremmo d'accordo sul fatto che sequenzia i segnali di controllo, come alludi

1
No, Intel Uops non è realmente un segnale di controllo. Non programmano direttamente le unità logiche come in una pipeline MIPS classica. uops viene letto dallo scheduler fuori servizio per capire quali uops hanno una dipendenza dati da quali altri. Questo è un modello interno molto diverso da qualcosa come un 6502 in cui i passaggi multipli dell'esecuzione di una singola istruzione vengono letti da una ROM di decodifica. Quello che descrivi è un significato storico del termine microcodice, ma non è ciò di cui si riferiscono gli "aggiornamenti di microcodici" per le CPU moderne.
Peter Cordes,

Dove ho (o la domanda del caso) menzionato le micro-operazioni Intel o x86 (che NON è lo stesso di un "microprogramma" in un control-store)? Inoltre, letteralmente qualsiasi cosa fornita da un archivio di controllo è un segnale di controllo, indipendentemente dal fatto che il segnale sia sequenziato o statico, logico o un filo. Quello che descrivo è la definizione letterale di microcodice, anche "aggiornamenti di microcodice". Sei bloccato sull'aspetto del sequenziamento della mia risposta perché molti di questi segnali in un Haswell saranno statici. Per la cronaca, molti sono sequenziati, il sequenziamento non si esclude assolutamente a pipeline o OoOE.

1
Quindi stai rispondendo correttamente alla domanda "cos'è un'istruzione microcodificata" , ma un "aggiornamento microcodice" per una CPU non ha lo stesso significato tecnico della parola "microcodice". Questo è un punto importante che dovrebbe essere chiarito esplicitamente, poiché è alla radice della confusione del PO, credo.
Peter Cordes,

0

Il firmware è un codice eseguibile inserito in una ROM o altra memoria non volatile.

Lo scopo originale e primario del firmware è quello di essere lì all'avvio di una CPU, quindi ha il codice da eseguire per avviare o avviare qualsiasi sistema di cui fa parte la CPU. Nel caso dei PC, il firmware viene utilizzato anche per fornire servizi al sistema operativo in esecuzione e contiene anche il codice per i controller integrati che controllano le ventole, l'alimentazione e alcune altre cose e il codice per ME / PSP che viene eseguito in background .

I dispositivi periferici che accettano firmware, come dischi rigidi, dispositivi USB, ecc. Dispongono di una CPU integrata.


Il microcodice non è un codice eseguibile, ma un codice utilizzato dalle strutture interne di un dispositivo.

È caricato in CPU Intel o AMD con un'istruzione WRMSR. Il caricamento del firmware in un dispositivo comporta la programmazione di una ROM o di un supporto flash o l'utilizzo di un piccolo programma di caricamento per essere presente nel dispositivo per accettare il firmware.

Gli aggiornamenti del firmware e del microcodice rientrano in una categoria simile - cose che devi fare per far funzionare l'hardware e potrebbe essere necessario aggiornarlo di volta in volta - ma sono cose molto diverse.

Le istruzioni complesse in molte CPU non sono direttamente cablate nell'hardware, ma "eseguite" da una struttura più piccola simile alla CPU nella CPU principale. Il microcodice controlla queste operazioni. Questo risale almeno al Motorola 68000 che aveva un "MicroROM" contenente microcodice.

Nessuno oltre ai processori Intel o AMD sa cosa controlla o fa realmente il microcodice, poiché non rilasciano dettagli. Ci sono tentativi di hackerarlo. Riferimento .

In pratica, gli aggiornamenti di microcodici vengono essenzialmente utilizzati per disabilitare le istruzioni che causano problemi su modelli noti / stepping di CPU e le ultime CPU di Intel richiedono spesso almeno un aggiornamento di microcodice prima di funzionare in modo affidabile.


Qualche prospettiva su ciò che un microcodice CPU potrebbe effettivamente fare / effettivamente potrebbe essere acquisita leggendo la ROM di decodifica PLA 6502 : il 6502 è una vecchia CPU a 8 bit e le sue istruzioni sono state sequenziate / controllate da un PLA interno. Il PLA direbbe sostanzialmente quali parti del chip sono state coinvolte in ogni fase di ciascuna istruzione (6502 istruzioni vanno da 2 a 7 cicli). Questo è molto, molto prima di cose come la memorizzazione nella cache, l'architettura superscalare, la previsione dei rami, ecc. Non sono sicuro che il microcodice sulle CPU moderne controllerebbe qualcosa del genere PLA.


1
Gli "aggiornamenti di microcodici" di Intel possono fare molto di più che modificare la decodifica delle istruzioni microcodificate . ad esempio, possono disabilitare il buffer di loop (in Skylake per correggere l'erratum SKL150) perché quando possibile la CPU è progettata per renderlo possibile nel caso vengano rilevati bug hardware.
Peter Cordes,

1
Punto interessante sul PLA 6502, ma le CPU pipeline devono essere più cablate di così. I MIPS classici utilizzavano diversi campi della parola istruzioni per controllare direttamente la logica interna in un modo un po 'simile a quello, ma ovviamente una CPU pipeline ha più istruzioni in volo, potenzialmente una per ogni fase della pipeline se non ci sono stalle. (O per Superscalar, 2 o più in ogni fase della pipeline e per fuori servizio è ancora più complesso.) Molti interni delle moderne CPU sono cablati, ma con manopole che gli aggiornamenti del microcodice possono modificare.
Peter Cordes,

0

Terminologia

Risponderò io stesso usando solo use-context in questo pdf .

  • Firmware : il microcodice viene aggiornato tramite un percorso fornito dal firmware della CPU.

    "In genere, una patch di microcodice viene caricata nella CPU dal firmware della scheda madre (ad esempio BIOS o UEFI) o dal sistema operativo durante il processo di avvio anticipato."

  • Microcodice : è esso stesso i dati utilizzati da "Instruction Decode Unit (IDU)". Un IDU può essere cablato o microcodificato . Microcodificato in questo contesto significa semplicemente programmato. Inoltre significa "la pluralità di microcodici". L'IDU

    L'IDU svolge un ruolo centrale all'interno dell'unità di controllo e genera segnali di controllo in base al contenuto del registro delle istruzioni.

  • Un'istruzione macro inviata a una IDU da decodificare, può restituire qualsiasi quantità di microistruzione .

  • Micro-istruzione di uno precalcolate "parola di controllo", tutto lo stato e le istruzioni da eseguire per un ciclo di clock. Inviato alla CPU per generare i segnali di controllo .

Quindi, in questo contesto, aggiornerai il microcodice con il firmware. Invieresti macroistruzione all'IDU microcodificata per risolvere le macroistruzione in una "microistruzione" per l'esecuzione sulla CPU, che le trasforma in segnali di controllo.

La mia lettura di questo

Il microcodice è un dato , ma l' aggiornamento del microcodice avviene tramite firmware. E confusamente perché stai parlando di ciò che equivale essenzialmente a una tabella di ricerca interna, è certamente anche il firmware stesso in quanto è essenzialmente memorizzato sul chip e utilizzato nel flusso di esecuzione del chip. Penso che potresti argomentare che il General MIDI, l'hardware PostScript e i segnali di controllo per terminali stupidi sono anche interpretati nello stesso senso, nell'hardware, e che qualcosa prende l'istruzione e alla fine genera "segnali di controllo" in una sorta di processo di interpretazione .

Sembra che abbiamo un nome speciale per questi processi e componenti all'interno della CPU: "IDU" su una CPU e un nome per la tabella di input specifica utilizzata dall'IDU che contiene tutte le "microistruzioni": il "microcodice". Le informazioni su tale processo sono proprietarie e chiuse. Suppongo che sia analogo a qualsiasi altra tecnologia dai modem (con ATDT e simili su un modem Hayes), alle schede MIDI ma non chiamiamo la tabella di ricerca specifica "microcodice", e invece utilizziamo il termine ombrello "firmware" per il processo di lampeggiamento e l'intero payload archiviato sul chip.


2
Linux (e Windows) possono aggiornare il microcodice della CPU in modo totalmente indipendente dal firmware della scheda madre di cui stai parlando. Firmware della scheda madre fa contengono l'ultimo microcodice CPU e un meccanismo per la sua applicazione prima di ogni codice viene caricato da disco, ma se non avete aggiornato il firmware mobo per un po ', si può ancora avere l'ultima microcodice CPU semplicemente l'aggiornamento del software. Stai facendo un affare troppo grande dalla connessione tra firmware mobo e microcodice CPU. È utile che il firmware aggiorni il microcodice ad ogni avvio, ma non è necessario (tranne che per la stabilità a volte).
Peter Cordes,

2
Inoltre, non tutte le istruzioni macro x86 vengono decodificate cercandole nella ROM del sequencer di microcodici. Nelle CPU Intel, le istruzioni che decodificano su 4 o meno uops (micro-op) sono codificate nei decodificatori. La maggior parte delle istruzioni non sono "microcodificate" in questo senso della parola. La divisione intera è ( dive idiv), ma anche la divisione FP è single-up (poiché è più critica in termini di prestazioni, la logica iterativa multi-step viene eseguita all'interno dell'unità di divisione anziché con uops microcodificate).
Peter Cordes,

@PeterCordes sei il ragazzo a scrivere questa risposta, senti di modificare qualsiasi mia risposta per renderla tecnicamente più corretta. Hai la carta bianca. Anche se proverò ad apportare queste modifiche stasera, se hai poco tempo.
Evan Carroll,

Se ci provo, finirò di scrivere la risposta che ho iniziato. Per ora, la risposta di Harry Johnston è probabilmente la migliore finora a rispondere a ciò che penso tu voglia davvero sapere (che è quello che un "aggiornamento di microcodice" aggiorna davvero, che non è la stessa cosa di quello che fa "microcodice CPU", perché è un nome troppo semplificato, come è comune con le cose tecniche che hanno bisogno di un nome di una parola di cui il pubblico generale può tenere traccia.)
Peter Cordes,

0

Ho seguito un corso di progettazione ISA di base, principalmente nello studio e nella progettazione di un processore RISC modellato su concetti MIPS. Ecco cosa sono venuto a ricordare

Per quanto ne so, i blocchi di base di un processore come registri, ALU, multiplexer e moduli di memoria richiedono determinati segnali per svolgere il proprio lavoro. Chiamereste questi segnali i vostri segnali di "asserzione", poiché sono i segnali richiesti per far funzionare questi blocchi. Le CPU in sostanza, sono un blocco di spaghetti di ALU, moduli di memoria, registri e altro hardware. Significa che ogni CPU deve far valere una certa sequenza di segnali di controllo per svolgere il proprio lavoro (intendo istruzioni di base come ANDI, ORI, JMP, BNE, BEQ, ecc.). Ho avuto sentimenti contrastanti al riguardo quando ho dovuto far valere i segnali da solo (esaminando letteralmente tutte le istruzioni MIPS) durante il test e il debug di un set di istruzioni poiché il ritmo del curriculum non mi aveva insegnato nulla sulle unità di controllo in quel momento.

D'altra parte, il linguaggio assembler si riduce a codici operativi e ai loro operandi nella parola dell'istruzione (sostanzialmente la larghezza del bus dati). In termini di MIPS, i primi 6 bit della parola dell'istruzione sono il tuo codice operativo. Con la sola ispezione matematica, non è possibile "affermare" la propria ALU, il registro, la memoria, i mux ... fondamentalmente il resto dell'hardware con soli 6 bit.

A meno che tu non abbia ... UN DECODER DI ISTRUZIONI. Il decodificatore di istruzione prende fondamentalmente il tuo codice operativo e genera TUTTI i segnali di "asserzione" necessari per il funzionamento dell'hardware. Tuttavia, i decodificatori delle istruzioni differiscono nell'implementazione tra architetture e in alcuni casi è programmabile. Il microcodice influisce sulla sezione programmabile del decodificatore di istruzione.

Sono arrivato a credere che il firmware sia un termine generale per qualsiasi informazione incorporata nell'hardware. In alcuni casi farebbe anche riferimento al microcodice in quanto il suo bitstream può essere codificato e archiviato in hardware come EEPROM e memoria flash. Il più delle volte, tuttavia, si tratta di codice compilato, asm o persino flussi di bit VHDL / Verilog utilizzati negli FPGA. Il microcodice mi sembra la semantica usata per specificare i "segnali di asserzione" nel processore di scelta.


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.