Cyrix 6x86

Cyrix 6x86 (kodenavn: M1), også kalt IBM 6x86, er en tidligere sjette generasjon 32-biter x86 mikroprosessor som ble utviklet av Cyrix Corporation og ble produsert av IBM og SGS-Thomson. Mikroprosessoren ble lansert den 5. februar 1996 som etterfølgeren til Cyrix Cx5x86.
Cyrix 6x86 var en toveis superskalær mikroprosessor med en 7-trinns instruksjonspipeline. Den var en klone av Intel Pentium Pro og hadde liksom denne egenskaper som registeromdøping, spekulativ utførelse, hopp-predikator, eksekvering utenfor rekkefølge og fjerning av dataavhengigheter. Men i motsetning til Intel Pentium Pro var den tilpasset Socket 5 og Socket 7, og kunne derfor erstatte Intel Pentium uten å måtte skifte hovedkort.
Cyrix 6x86 var raskere enn Intel Pentium ved samme klokkefrekvens. Dette kom til uttrykk i en performance rating hvor den ble gitt betegnelsene PR90+ (80 MHz), PR120+ (100 MHz), PR133+ (110 MHz), PR150+ (120 MHz), PR166+ (133 MHz) og PR200+ (150 MHz).
I januar 1997 ble avarten Cyrix 6x86L/IBM 6x86L lansert (kodenavn M1L), hvor L stod for low-power eller lavere elektrisk spenning. Liksom Intel Pentium MMX krevde den en spenningsregulator, ettersom kjernen kjørte i 2.8 Volt, mens grensensittet mot hovedkortet var 3.3 Volt.
Den 30. mai 1997 ble Cyrix 6x86 og Cyrix 6x86L erstattet av Cyrix 6x86MX.


== Bakgrunn ==
De fleste mikroprosessorer fra Cyrix Corporation var oppgraderingsprosessorer. Eksempelvis var Cyrix Cx486SLC, Cyrix Cx486SRx² og Cyrix Cx486SRu² å betrakte som ulike avarter av Intel 80486SX, men de passet inn i hovedkort for datamaskiner som var forsynt med Intel 80286 og Intel 80386SX.
På tilsvarende vis var det med Cyrix Cx486DLC, Cyrix Cx486DRx² og Cyrix Cx486DRu². Dette var avarter av Intel 80486DX som passet inn i hovedkort for Intel 80386DX. Da Cyrix Corporation lanserte sin femte generasjon x86 mikroprosessor, fortsatte de denne politikken: Cyrix Cx5x86 passet inn i Socket 3 på systemer med 80486DX.
Cyrix Corporation hadde på denne måten funnet en nisje i markedet. Det var således mulig å oppgradere eldre datamaskiner i stedet for å kassere dem og kjøpe helt nye. Spesielt i den tredje verden hadde dette aktualitet. Cyrix mikroprosessorer var svært populære i Latin-Amerika.
Cyrix Cx6x86 var en fortsettelse av denne strategien: Den passet inn i Socket 5 og Socket 7 som var beregnet for Intel Pentium. Av denne grunn kalles den ofte for en femte generasjons mikroprosessor. På den andre siden inneholder den en rekke egenskaper som ellers bare var å finne i Intel Pentium Pro, og vi har av denne grunn her valgt å kalle den for en sjette generasjon mikroprosessor.


== Arkitektur ==


=== CMOS prosess ===
Cyrix Cx6x86 var produsert med 650 nanometer CMOS transistorer i utgaver med hastighetene 80-120 Mhz. Utgavene på 133 og 150 Mhz var produsert med 500 nanometer CMOS transistorer. Den strømbesparende avarten Cyrix Cx6x86L, som ble lansert i juni 1997, var produsert med 350 nanometer CMOS. Intel Pentium Pro var produsert med 500 nanometers BiCMOS, og etterhvert med 350 nanometer BiCMOS.


=== Transistorer ===
Cyrix Cx6x86  hadde 3,3 millioner transistorer, mot 3,1 millioner i Intel Pentium. Intel Pentium Pro hadde 5,5 millioner transistorer + hurtigminne på 256 Kb (15,5 millioner), 512 Kb (31 millioner) eller 1 Mb (62 millioner).


=== Hurtigminne ===
Intel Pentium og Intel Pentium Pro hadde 8 Kb Nivå-1 hurtigminne for data, og 8 Kb for instruksjoner. Cyrix Cx6x86 hadde et delt hurtigminne på 16 Kb for data og instruksjoner. Samtidig var det den eneste x86 mikroprosessor med 256 byte Level-0 hurtigminne for instruksjoner.


=== Superskalær mikroprosessor ===
Cyrix Cx6x86 var en toveis superskalær arkitektur; den kunne utføre to heltallsinstruksjoner hver klokkepuls. Dette var identisk med Intel Pentium. Intel Pentium Pro var treveis superskalær og kunne utføre to heltallsinstruksjoner og en desimaltallsinstruksjon hver klokkepuls.


=== Bussbredde ===
Databussen var 64-biter og adressebussen 32-biter. Dette ga en teoretisk grense på 4 Gb RAM. Intel Pentium Pro hadde en 36-biter adressebuss (maksimalt 64 Gb RAM).


=== Tradisjonell CISC-arkitektur ===
Cyrix 6x86 var en tradisjonell x86 CISC-prosessor. Intel Pentium Pro på sin side hadde en RISC-kjerne, og benyttet emulering av x86 CISC-instruksjonene. Også NexGen 5x86 benyttet denne løsningen, og hadde sitt eget RISC86 instruksjonsett. Også AMD K5 og AMD K6 hadde interne RISC-kjerner og en ytre x86 CISC-arkitektur.


=== Instruksjonspipeline ===
Cyrix 6x86 hadde en 7-trinns instruksjonspipeline:

Hent instruksjon
Dekod instruksjon 1
Dekod instruksjon 2
Adressekalkulering 1
Adressekalkulering 2
Eksekvering
Skriv tilbake til hurtigminneIntel Pentium hadde en 5-trinns instruksjonspipeline, og Pentium Pro hadde hele 14 trinn.


=== Registeromdøping ===

Og så kommer vi til den første av fem egenskaper, som gjør det mulig å kalle Cyrix 6x86 for en sjette generasjons x86-arkitektur, eller som i hvert fall fikk Cyrix til å gjøre det. Denne generasjonen hadde innebygd maskinvare som sørget for flyt i programvareutførelsen.
Den første var registeromdøping, der instruksjoner kunne skifte registernavn i løpet av en klokkepuls. Cyrix 6x86 var en superskalær mikroprosessor, som utførte to instruksjoner per klokkepuls. Uten registeromdøping ville serialiseringen ved bruk av prosessorregistre kunne føre til at den superskalære utførelsen stoppet opp.


=== Oppheving av dataavhengigheter ===

Instruksjoner kan utføres samtidig, når de ikke er innbyrdes avhengige av hverandre.

 Avhengighet           Ingen avhengighet
 A = 1 + 1             A = 1 + 1
 B = 1 + A             B = 1 + 2

I det første eksempel kan ikke begge beregningene utføres samtidig. Man må beregne A, før man kan beregne B. Intel Pentium kunne i dette tilfellet ikke utføre to avhengige instruksjoner samtidig.
I likhet med andre sjette generasjon x86-mikroprosessorer, hadde Cyrix 6x86 innebygd maskinvare som opphevet slike avhengigheter i programvaren.


=== Eksekvering utenfor rekkefølge ===

Den tredje egenskapen henger nært sammen med den forrige, og er også en egenskap ved sjette generasjon mikroprosessorer. Cyrix 6x86 kunne oppdage avhengigheter før de oppstod, og utføre instruksjonene i en annen rekkefølge enn programmet tilsa (eksekvering utenfor rekkefølge):

 Avhengighet           Utførelse i en
                       annen rekkefølge
 A = 1 + 1             A = 1 + 1
 B = 1 + A             C = 1 + 2
 C = 1 + 1             B = 1 + A

A og C (to instruksjoner) kunne utføres samtidig, istedenfor at A og B utføres sekvensielt etter hverandre (én instruksjon av gangen).


=== Spekulativ utførelse ===

Den fjerde egenskapen var å utføre et arbeid i forkant av dets programmerte rekkefølge. På denne måten unngikk man en forsinkelse på en senere fase i programmet. Måten dette var implementert på var ved hjelp av en hopp-predikator.


=== Hopp-predikator ===

En hopp-predikator er en integrert krets som prøver å gjette utfallet av et hopp i en if-then-else struktur. Hensikten er å forbedre flyten i en instruksjonspipeline.
Betingede hopp kan hemme parallell utførelse. I programmerings-språket C kan dette illustreres slik:

 if (x == 2)                Hvis x = 2
   subrutine1();               så hopp til subrutinen "subrutine1"
 else                       I motsatt fall
   ....                        fortsett med neste instruksjon

I dette tilfelle vet man ikke på forhånd om betingelsen for et hopp til en annen del av programmet er tilstede.
Hopp-predikatoren prøvde å gjette hvilken «grein» (branch) av programmet som fortsetter under betingede hopp, basert på erfaringer fra programutførelsens historikk. Prosessoren hadde et Branch Prediction Buffer bestående av 512 «inngangsporter» til forskjellige utfall av betingelser. Instruksjoner fra forskjellige «greiner» ble hentet, dekodet og utført, før mikroprosessoren visste hvilken «grein» som er korrekt. Når dette var avgjort, ble alle instruksjonene på de feilaktige «greinene» forkastet, mens den korrekte «greinen» ble beholdt.


=== Manglende støtte for symmetrisk flerprosessering ===
Cyrix 6x86 manglet støtte for symmetrisk flerprosessering. Dette i motsetning til Intel Pentium Pro, som kunne kjøre fire mikroprosessorer i parallell på et hovedkort.


== Referanser ==


== Eksterne lenker ==
Cyrix 6x86 ("M1") it PCGuide
cpu-collection.de Cyrix 6x86 bilder og beskrivelser
Paul Hsieh's 6th Generation x86 CPU Comparison analyse av 6. generasjons x86 mikroprosessorer, deriblant 6x86MX.
Cyrix M1 stats på Sandpile.org