ikroprogrammering I Olle Roos-datorn (fö2+) Björn Lindskog-datorn (lab) Att bygga en CPU Pipelinad dator (fö4,lab2) Variabel exekveringstid Variabelt format Inget överlapp Central styrenhet, som är mikroprogrammerad Flera adresseringsmoder/instruktion ackumulator Nästan alla instruktioner har operand i minnet: LDA A ; A=(A) ADDA A ; A=A+(A) Alla instruktioner tar 5 CK Alla instruktioner har samma format Pipelining/överlapp ger färdig instruktion/ck Flera avkodare (inget mprog) a-mod/instruktion 2 register Endast LD/ST har operand i minnet: LD Rd,(Ra) ; Rd=(Ra) ADD Rd,Ra,Rb ; Rd=Ra+Rb 2
Att bygga en CPU Typisk CISC Programmering på 2 nivåer asm och mikro Enkel controller: garageportsöppnare del av dator + an kan göra avancerade instruktioner: sortera - ånga CK/instr blir det Typisk RISC Programmering på nivå: asm Enkel CPU enkel mobil Finns bara enkla instr. Snabb Ritning inne Processor Programräknare Program, Instruktioner ALU Ackumulator Data, operander Instruktionsreg. Styrenhet Styrsignaler 2
ikroprogrammering o Vi ska bygga en liten dator med enkla komponenter o Styrenheten (sekvensnät) visar sig vara svårast. Hur gör man för att konstruera ett SN med 00 tillstånd? o mikroprogrammering är en vidareutveckling (och faktiskt begränsning) av tekniken att bygga sekvensnät med RO o idé: byt tillståndsvipporna mot en universalräknare o oore, få hopp 0 2 4 5 6 Ritning2 Autonom styrenhet med RO/Register NEXT-fält STYR-fält CLR Register SB adress utsignal LSB N U
Variant2 Styrenhet med RO/Register NEXT-fält STYR-fält CLR X Register L SB LSB adress 0 utsignal 0 adress utsignal 2 L N U Ritning Autonom styrenhet med RO/Räknare NEXT Instr. STYR LOAD CLR CE ------- 0 0 utsignal 0 nästa Räknare adress 0 - utsignal ------- - - utsignal 2 hopp börja om CLR LOAD CE N 4
Ritning 4 X 0 2 & LOAD Villkorliga hopp NEXT-fält Instr. STYR-fält CE CLR Räknare adress 0 0 2 styr CLR 2 CE N En variant Autonom styrenhet utan adressfält adr adr2 mux Instr STYR CLR + LD mux CLR +LD 5
Ritning 5 Register Din D 2 Dout 2 2 6 4 5 6
Ritning 6 och X LOAD CLR D in 8 OE + - 8 8 8 AR++ AR-- AR+= X AR-= X AR= X 8 D ut 8 universalräknare ALU/ackumulator Ritning 8 - Programmerarmodell AR 0 00: 0 SR XR SP PC FF: Endast 2 flaggor: Z,N
Ritning 9 - instruktionsformat OP Opkod 2 instruktioner 2 0 ärkfält 8 adresseringsmoder 2 0 OP byte Adress/data Adresseringsmoder (addr)->ar ((addr))->ar (XR+disp)->AR PC+2+disp->PC n->ar Exempelvis: LDA 0: : 2: : LDA 000 5 Absolut EA= Operanden = 5 8
Instruktioner ik rom aski nen LDA 000 2 ADD 00 STA 000 2 0 hämt abs 0 4 6 ome LDA RESET 4 2 STA ADDA 9
Normal arbetsgång - översikt OP För varje instruktion {. Hämtfas => Samma för alla instruktioner. Hämta instruktionen till IR 2. PC++. Hoppa till rätt 0: : 2: 2: LDA 000 2 2. Adresseringsmodsfas Beroende på sker olika saker. Vanligen: Hämta byten, PC++ 2. EA till ADR. Hoppa till rätt. Exekveringsfas => Beroende på OP sker olika saker }. Vanligen: Hämta operanden 2. Resultatet till AR och uppdatera SR. Hoppa till Hämtfas Ritning: Organisation av mikroprogram Instr -> IR Hämta Hämtfas st EA->ADR Abs Omedelbar Adresseringsmod 6st LDA STA ADD Exekvering 20 st 0
Steg (PC)->IR Hämtfas PC: 0: : LDA 0 2 0: pc->adr, mpc++ 8,, : adr->minne,data->dr,mpc++ 2,,5, 2: dr->ir,mpc++,8, : PC++, K2->mpc,0 K2(0) = 4 Steg 2 (PC)->ADR A-modsfas: absolut PC: 0: : LDA 0 2 4: pc->adr,mpc++ 8,, 5: data->dr,mpc++ 2,,5, 6: dr->adr,k->mpc,pc++,,9, K(0)=0
Steg AR=(ADR) Exe-fas: LDA AR: ADR: 2: : 0: data->dr,mpc++ 2,,5, : dr->tr,mpc++,25, 2: tr->ar,mpc++ 2,2,, : status, 0->mpc 4,2 0 ikrokod för ADD # Steg : samma som förut K2(4) = 2 Steg 2: omedelbar PC: 2: pc->adr, mpc++ 8,, 28: PC++,K->mpc,9 K(2)=6 LDA Steg : exekvering AR = AR + (ADR) 6: data->dr,mpc++ 2,,5, : dr->tr, mpc++,25, 8: ar+tr->ar,mpc++ 2,,0, 9: status, 0->mpc 4,2 2: : ADD 4 2
ikrokod för STA Steg : hämtfas har vi redan skrivit Steg 2: absolut har vi redan skrivit AR: ADR: 8 2: : 0 K(2)=4 Steg : exekvering AR->(ADR) 4: ar->dr,mpc++,6, 5: dr->, 0->mpc 2,4,5,2 Ritning LDA 2 ADD # STA Instr -> IR Hämta Hämta Hämta EA->ADR Abs Omedelbar Abs Gör något med mem(adr) LDA ADD STA
Hämtfas finns redan ikrokod för LDA (X) (XR+) ->AR indexerad a-mod 2: PC->ADR, PC++, PC++ : ->DR, XR->TR, PC++ 4: DR->TR, TR->AR, AR->HR, PC++ 5: AR+TR->AR, PC++ 6: HR->AR, AR->ADR, K->PC Exekvering för LDA finns redan PC LDA Hämtfas finns redan ikrokod för INCA AR+ ->AR underförstådd a-mod 29: K->PC Exekvering för INCA 44: AR+->AR, PC++ 45: status, 0->PC 4
Hämtfas finns redan ikrokod för LDA () (()) ->AR indirekt a-mod : PC->ADR, PC++, PC++ 8: ->DR, PC++ 9: DR->ADR, PC++ 0: ->DR, PC++ : DR->ADR, K->PC Exekvering för LDA finns redan PC 0 2 4 5 LDA 5 5