Intel mikrokode - Intel Microcode
Intel mikrokode er mikrokode som kjører inne i x86 -prosessorer laget av Intel . Siden P6-mikroarkitekturen ble introdusert på midten av 1990-tallet, kan mikrokodeprogrammene lappes av operativsystemet eller BIOS- fastvaren for å løse feil som finnes i CPU-en etter utgivelsen. Intel hadde opprinnelig designet mikrokodeoppdateringer for feilsøking av prosessorer under sitt design for testing (DFT) -initiativ.
Etter Pentium FDIV-feilen tok den patterbare mikrokodefunksjonen et bredere formål for å tillate oppdatering i feltet uten å måtte tilbakekalle et produkt .
I P6 og senere mikroarkitekturer konverteres x86 -instruksjoner internt til enklere RISC -stil mikrooperasjoner som er spesifikke for en bestemt prosessor og trinnnivå .
Mikrooperasjoner
På Intel 80486 og AMD Am486 er det omtrent 250 linjer med mikrokode, totalt 12 032 biter lagret i mikrokode -ROM -en .
På Pentium Pro er hver mikrooperasjon 72-bits bred eller 118-bits bred. Dette inkluderer en opcode, to kildefelt og ett målfelt, med mulighet for å holde en 32-biters umiddelbar verdi. Pentium Pro er i stand til å oppdage paritetsfeil i sin interne mikrokode -ROM og rapportere disse via Machine Check Architecture .
Mikrooperasjoner har et konsistent format med opptil tre kildeinnganger og to destinasjonsutganger. Prosessoren utfører nytt navn på register for å kartlegge disse inngangene til og fra den virkelige registerfilen (RRF) før og etter utførelsen. Utførelse uten ordre brukes, så det kan hende at mikrooperasjonene og instruksjonene de representerer ikke vises i samme rekkefølge.
Under utviklingen av Pentium Pro ble flere mikrokodeløsninger inkludert mellom A2 og B0 trinnene. For Pentium II (basert på P6 Pentium Pro) ble det lagt til flere mikrooperasjoner for å støtte MMX-instruksjonssettet . I flere tilfeller ble "mikrokodehjelp" lagt til for å håndtere sjeldne hjørnesaker på en pålitelig måte.
Pentium 4 kan ha 126 mikrooperasjoner i flukt samtidig. Mikrooperasjoner dekodes og lagres i en Execution Trace Cache med 12 000 oppføringer, for å unngå gjentatt dekoding av de samme x86-instruksjonene. Grupper på seks mikrooperasjoner er pakket inn i en sporlinje. Mikrooperasjoner kan låne ekstra umiddelbar datarom innenfor samme cache-linje. Komplekse instruksjoner, for eksempel håndtering av unntak, resulterer i at du hopper til mikrokoden ROM. Under utviklingen av Pentium 4 utgjorde mikrokoden 14% av prosessorfeilene mot 30% av prosessorfeilene under utviklingen av Pentium Pro.
Den Intel Core-mikroarkitektur introdusert i 2006 lagt til " mikro-operasjoner fusion " for noen vanlige par av instruksjoner inkludert sammenligning fulgt av et hopp. Instruksjonsdekoderne i Core konverterer x86 -instruksjoner til mikrokode på tre forskjellige måter:
| x86 instruksjoner | x86 dekodere | mikrooperasjoner |
|---|---|---|
| felles | enkel dekoder × 3 | 1–3 |
| de fleste andre | kompleks dekoder × 1 | ≤4 |
| veldig komplekst | mikrokodesekvenser | mange |
For Intels hyper-threading- implementering av samtidig multithreading deles mikrokode-ROM, sporingsbuffer og instruksjonsdekodere, men mikrooperasjonskøen deles ikke.
Oppdateringsanlegg
På midten av 1990-tallet ble et anlegg for levering av ny mikrokode opprinnelig referert til som Pentium Pro BIOS Update Feature . Det var meningen at applikasjoner i brukermodus skulle foreta et BIOS-avbruddsanrop for å levere en ny "BIOS Update Data Block", som BIOS delvis ville validere og lagre i ikke-flyktig BIOS-minne ; dette kan leveres til de installerte prosessorene ved neste oppstart.
Intel distribuerte et program kalt BUP_UTIL.EXE, omdøpt CHECKUP3.EXEsom kan kjøres under DOS . Samlinger av flere mikrokodeoppdateringer ble sammenkoblet og nummerert nummerert med utvidelsen .PDB, for eksempel PEP6.PDB.
Prosessorgrensesnitt
Prosessoren starter opp ved hjelp av et sett med mikrokode som er inne i prosessoren og lagret i en intern ROM . En mikrokodeoppdatering fyller ut et eget SRAM og sett med "matchregistre" som fungerer som brytpunkter i mikrokodens ROM, slik at du kan hoppe til den oppdaterte listen over mikrooperasjoner i SRAM. En kamp utføres mellom Microcode Instruction Pointer (UIP) alle kampregistrene, med hvilken som helst kamp som resulterer i et hopp til den tilsvarende destinasjonsmikrokode -adressen. I den originale P6-arkitekturen er det plass i SRAM for 60 mikrooperasjoner og flere match/destinasjonsregisterpar. Det tar en prosessorinstruksjonssyklus for å hoppe fra ROM -mikrokode til lappet mikrokode i SRAM. Matchregistre består av en mikrokodeadresseadresse og en destinasjonsadresse for mikrokode.
Prosessoren må være i beskyttelsesringen null (" Ring 0 ") for å starte en mikrokodeoppdatering. Hver CPU i et symmetrisk flerbehandlingsarrangement må oppdateres individuelt.
En oppdatering initieres ved å plassere adressen i eaxregister, sette ecx = 0x79og utføre et wrmsr(Skriv modellspesifikt register ).
Oppdateringsformat for mikrokode
Intel distribuerer mikrokodeoppdateringer som en 2.048 (2 kilobyte) binær blob . Oppdateringen inneholder informasjon om hvilke prosessorer den er designet for, slik at dette kan sjekkes mot resultatet av CPUID -instruksjonen. Strukturen er en 48-byte-overskrift, etterfulgt av 2000 byte som skal leses direkte av prosessoren som skal oppdateres:
- Et mikrokodeprogram som kjøres av prosessoren under oppdateringen av mikrokoden. Denne mikrokoden er i stand til å omkonfigurere og aktivere eller deaktivere komponenter ved hjelp av et spesielt register, og den må oppdatere breakpoint -matchregistrene.
- Opptil seksti lappede mikrooperasjoner som skal fylles ut i SRAM.
- Polstring som består av tilfeldige verdier, for å skjule forståelsen av formatet til mikrokodeopdateringen.
Hver blokk er kodet annerledes, og flertallet av de 2000 byte brukes ikke som konfigurasjonsprogram, og selve SRAM-mikrooperasjonsinnholdet er mye mindre. Endelig bestemmelse og validering av om en oppdatering kan brukes på en prosessor utføres under dekryptering via prosessoren. Hver mikrokodeoppdatering er spesifikk for en bestemt CPU -revisjon, og er designet for å bli avvist av CPUer med et annet trinnnivå . Mikrokodeoppdateringer er kryptert for å forhindre manipulering og for å muliggjøre validering.
Med Pentium er det to lag med kryptering og de presise detaljene eksplisitt ikke dokumentert av Intel, i stedet bare kjent for færre enn ti ansatte.
Mikrokodeoppdateringer for Intel Atom , Nehalem og Sandy Bridge inneholder i tillegg en ekstra 520-byte header som inneholder en 2048-biters RSA- modul med en eksponent på 17 desimaler.
| Mikroarkitektur | Eksempler på prosessorer | Levert lengde | Funksjonell lengde | Mistenkt koding |
|---|---|---|---|---|
| P6 | Pentium Pro | 2000 | 864; 872; 944; 1968 | 64-bits blokkering |
| Kjerne | PIII ... Kjerne 2 | 4048 | 3096 | |
| Netburst | P4 , Pentium D , Celeron | 2000–7120 | 2000 + N*1024 | lenket blokk |
| Atom, Nehalem, Sandy Bridge | Core i3/i5/i7 | 976–16336 | 976 + N*1024; 5120 | AES + RSA signatur |
Feilsøking
Spesiell feilsøkingsspesifikk mikrokode kan lastes inn for å aktivere Extended Execution Trace, som deretter sender ut ekstra informasjon via Breakpoint Monitor Pins. På Pentium 4 kan lasting av spesiell mikrokode gi tilgang til modusen Microcode Extended Execution Trace. Når du bruker JTAG Test Access Port (TAP), tillater et par Breakpoint Control -registre å bryte mikrokodeadresser.
I midten av 1980-årene hadde NEC og Intel en langvarig amerikansk føderal rettssak om opphavsrett til mikrokoder. NEC hadde fungert som en andre kilde for Intel 8086- prosessorer med sine NEC μPD8086, og hadde langsiktige patent- og opphavsrettslige krysslisensieringsavtaler med Intel. I august 1982 saksøkte Intel NEC for brudd på opphavsretten om implementering av mikrokoder. NEC seiret ved å demonstrere via cleanroom software engineering at likhetene i implementeringen av mikrokode på V20- og V30 -prosessorene var et resultat av restriksjonene som arkitekturen krever, snarere enn via kopiering.
Den Intel 386 kan utføre en innebygd i selvtest av mikrokode og programmerbare logiske oppstillinger , med verdien av selvtesten plasseres i EAXregisteret. Under BIST brukes mikroprogramtelleren igjen til å gå gjennom alle ROM-ene, og resultatene samles via et nettverk av signaleregistre med flere innganger (MISR) og lineære tilbakemeldinger. Ved oppstart av Intel 486 , kjører en maskinvarekontrollert BIST i 2 20 klokkesykluser for å kontrollere forskjellige matriser, inkludert mikrokode-ROM, hvoretter kontrollen overføres til mikrokoden for ytterligere selvtesting av registre og beregningsenheter. Intel 486 mikrokode -ROM har 250 000 transistorer.
AMD hadde en langsiktig kontrakt for å gjenbruke Intels 286, 386 og 486 mikrokode. I oktober 2004 bestemte en domstol at avtalen ikke dekket AMD som distribuerer Intels 486 in-circuit emulation (ICE) mikrokode.
Test av direkte tilgang
Direct Access Testing (DAT) er inkludert i Intel -CPUer som en del av design for testing (DFT) og Design for Debug (DFD) -initiativer som tillater full dekningstest av individuelle CPUer før salg.
I mai 2020 ble et skriptlesning direkte fra kontrollregisterbussen (CRBUS) (etter å ha utnyttet "Red Unlock" i JTAG USB-A til USB-A 3.0 med feilsøkingsfunksjoner, uten D+, D- og Vcc) brukt til å lese fra Local Direct Access Test (LDAT) -porten til Intel Goldmont -CPU og de lastede mikrokodene og patch -matrisene ble lest. Disse matrisene er bare tilgjengelige etter at CPU -en er satt i en bestemt modus, og består av fem matriser som er tilgjengelig via offset 0x6a0:
- ROM: Mikrokode triader
- ROM: Sekvensord
- RAM: Sekvensord (kan oppdateres)
- RAM: Match/Patch -par (kan oppdateres)
- RAM: Mikrokode -triader (kan oppdateres)
Referanser
Videre lesning
- US patent 5404473 , Papworth, David B .; Fetterman, Michael A. & Glew, Andrew F. et al., "Apparat og metode for håndtering av strengoperasjoner i en rørprosessor ", utgitt 1995-04-04, tildelt Intel "de første Cuops i en REP-svingoperasjon laster MS Loop Counter med antall iterasjoner som gjenstår etter at de utrullede iterasjonene er utført.… Et lite antall iterasjoner (f.eks. Syv), sendes i løpet av den tiden det tar for Loop Counter i MS å lastes inn. Denne avrullede koden er utført betinget basert på verdien av (E) CX ... gjenværende tre iterasjoner blir til NOPS . "
- US patent 5559974 , Boggs, Darrell D .; Brown, Gary L. & Hancock, Michael M. et al., "Dekoder med uavhengig lastede mikroalias- og makroaliasregistre tilgjengelig samtidig med en mikrooperasjon", publisert 1996-09-24, tildelt Intel
- US patent 5566298 , Boggs, Darrell D .; Brown, Gary L. & Hancock, Michael M. et al., "Metode for statlig gjenoppretting under assist og omstart i en dekoder som har en aliasmekanisme", utgitt 1996-10-15, tildelt Intel "... kontroll returnerer til Micro -operasjonssekvens (MS) -enhet for å utstede ytterligere feilkorrigering Kontrollmikrooperasjoner (Cuops). For å forenkle omstart blir Cuops som stammer fra den feilfremkallende makroinstruksjonen levert av translate programmerbare logikk-matriser (XLAT PLA) lastet inn i Cuop -registre, med sine gyldige biter uten påstand. "
- US patent 5600806 , Brown, Gary L. & Parker, Donald D., "Metode og apparat for å justere en instruksjonsgrense i makroinstruksjoner med variabel lengde med en instruksjonsbuffer", publisert 1997-02-04, tildelt Intel "ADD, XOR, SUB, AND og OR, som er implementert med én generisk Cuop. En annen gruppe instruksjoner som bare kan representeres av én Cuop inkluderer ADC og SBB
- US patent 5630083 , Carbine, Adrian L .; Brown, Gary L. & Parker, Donald D., "Dekoder for dekoding av flere instruksjoner parallelt", utgitt 2013-03-01, tildelt Intel
- US patent 6055656 , Wilson, Jr., James A .; Miller, Anthony C. & Rhodehamel, Michael W. et al., "Kontrollregistrer bussadgang gjennom en standardisert testtilgangsport", publisert 2000-04-25, tildelt Intel
- US patent 20030196096 , Sutton, James A., "Microcode patch authentication", publisert 2003-10-16
- US patent 5948097 , Glew, Andrew & Rodgers, Scott Dion, "Metode og apparater for å endre privilegienivåer i et datasystem uten bruk av en anropsport ", publisert 1999-09-07, tildelt Intel "SYSENTER og SYSEXIT er montering- språkinstruksjoner som kan utføres på en Intel-arkitekturprosessor, for eksempel Pentium Pro-prosessoren ... mikrooperasjon er fast bestemt på å være klar når kildefeltene er fylt med passende data ... instruksjonsavkodningsenhet består av en eller flere translate (XLAT) programmerbare logiske matriser (PLA) som dekoder hver instruksjon til en eller flere mikrooperasjoner.… SYSENTER og SYSEXIT instruksjoner blir avkodet til mikrooperasjoner som utfører trinnene vist i henholdsvis figur 5 og 6. "
-
"Microcode updater interface sysctl" (
ucode.cdriver) . XNU . Hentet 24. januar 2018 .#define IA32_BIOS_UPDT_TRIG (0x79) /* microcode update trigger MSR */ - Sivaram, AT; Fan, Daniel; Yiin, A. (2002-10-10). Effektiv innebygd minnetesting med APG . 1 . Baltimore, Maryland: IEEE. doi : 10.1109/TEST.2002.1041744 . ISBN 0-7803-7542-4. ISSN 1089-3539 . S2CID 19579807 .
-
Bosch, Peter (2020-10-01). "Under panseret på en CPU: Reverse Engineering P6 -mikrokoden" . Nederland . Hentet 2020-11-01 . Cite journal krever
|journal=( hjelp )
Eksterne linker
uCodeDisasm - Intel mikrokode demonterer i Python (fra CRBUS), navn på uops