Unit Kendali
MIPS Datapath #1
Unit Kendali (1) Tujuan: mengendalikan semua aktifitas prosesor, atau lebih tepatnya untuk mengendalikan semua komponen seperti ALU, PC, Register, dll Masukan: Operation Code (Opcode) = 6 bit Keluaran (9 bit): 1. RegDst 2. Branch 3. MemRead 4. MemtoReg 5. ALUOp (2 bit) 6. MemWrite 7. ALUSrc 8. RegWrite #2
Unit Kendali (2) RegDst Branch Instruction (31-26) CONTROL UNIT MemRead MemToReg ALUOp MemWrite ALUSrc RegWrite Masukan/input instruksi bit 31-26 adalah kode operasi Unit kendali akan menterjemahkan kode operasi dan mengeluarkan 9 bit kendali yang mengendalikan jalannya prosesor #3
Input Unit Kendali (1) Instruksi 32 bit terdiri dari opcode dan operand: 6 bit di awal (dari MSB atau dari kiri) disebut opcode 26 bit berikutnya adalah operand Contoh: ($ = register; s = source; t = target; d = destination) #4
Input Unit Kendali (2) Operation Code (Opcode 6 bits) = jenis instruksi yang akan dieksekusi Misal instruksi add $t2, $s2, $t1 Artinya: jumlahkan data dalam register $s2 dan $t1 dan simpan hasilnya ke dalam register $t2 Instruksi dalam biner: 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit bit ke: 31-26 25-21 20-16 15-11 10-6 5-0 000000 10010 01001 01010 00000 100000 Opcode <-----------------Operand ------------> 000000 adalah kode operasi untuk aritmatika (R) 10010 adalah nomor $s2 = 18 01001 adalah nomor $t1 = 9 01010 adalah nomor $t2 = 10 00000 tidak digunakan dalam operasi aritmatika 100000 adalah kode fungsi operasi add #5
Output CU: RegDst Tujuan: untuk mengendalikan multiplekser yang menentukan nomor register yang akan ditulisi (Write Register) Mux Input: bit instruksi 5 bit [20-16] atau [15-11] Mux Output: 5 bit tergantung nilai RegDst If RegDst = 0 then output = Instruction[20-16] If RegDst = 1 then output = Instruction[15-11] #6
Output CU: Branch (1) Shift Left 2 ADD ALU Result 0 M U X 1 Branch ALU Zero Flag Result Tujuan: Bersama dengan zero flag dari ALU digunakan untuk mengendalikan mux yang memilih sumber nilai PC selanjutnya If Zero flag=1 and Branch=1 then branch occur If not (zero flag=1 and branch=1) then branch not occur #7
Output CU: Branch (2) Jika branch tidak terjadi: (control branch = 0) Output Mux berasal dari keluaran adder yang menjumlahkan PC dengan 4 (desimal) PC = PC + 4 Jika branch terjadi: (control branch = 1) Output Mux berasal dari keluaran adder yang menjumlahkan (PC+4) dengan hasil dari Shift left 2 PC = (PC+4) + hasil dari Shift left 2 #8
Output CU: MemRead (1) Tujuan: Untuk mengaktifkan memori data agar data dari memori data dapat dibaca If MemRead=1 then Read Data Data Memory[address] #9
Output CU: MemRead (2) Memori bisa dibaca dan bisa ditulisi secara bergantian Pada saat memori dibaca, maka memori tidak dapat ditulisi, demikian pula sebaliknya MemRead mengendalikan pembacaan memori Jika MemRead bernilai 1 maka isi memori dapat dibaca melalui pin Read Data #10
Output CU: MemToReg (1) Tujuan: Untuk mengendalikan mux yang menentukan asal data yang akan ditulis ke dalam register apakah dari memori data atau dari hasil ALU If MemtoReg=0 then Register Data Memory If MemtoReg=1 then Register ALUResult #11
Output CU: MemToReg (2) Jalur kendali yang mengendalikan multiplexer 2 ke 1 Mux tersebut memilih salah satu input yang berasal dari ALU atau dari memori Jika MemToReg bernilai 1 maka data yang menuju Register berasal dari ALU Jika MemToReg bernilai 0 maka data yang menuju Register berasal dari Memori #12
Output CU: ALUOp (1) Tujuan: untuk memilih jenis operasi ALU yang akan dilakukan yang ditentukan oleh nilai 6 bit instruksi [5-0], sebagai fungsi dalam tipe R #13
Output CU: ALUOp (2) AluOp adalah jalur kendali yang mengendalikan ALU control ALU control menentukan jenis instruksi yang dikerjakan oleh ALU Input dari ALU control berasal dari 6 bit fungsi (Function field) dari bit 0 5 Pada instruksi tipe-r jenis operasinya ditentukan oleh keenam bit ini Apa maksud dari set on less than? #14
Output CU: MemWrite (1) Tujuan: Untuk mengaktifkan memori data agar dapat ditulisi dengan data yang berasal dari register (Read Data 2) If MemWrite=1 then DataMemory[ALUResult] Read Data 2 #15
Output CU: MemWrite (2) MemWrite mengendalikan penulisan memori Alamat memori yang akan ditulisi ditentukan oleh hasil dari operasi ALU Data yang dimasukkan ke dalam memori berasal dari register (Read Data 2) #16
Output CU: ALUSrc Tujuan: Untuk mengendalikan mux yang menentukan asal data yang akan diolah oleh ALU apakah berasal dari register (Read Data 2) atau dari SignExtend(Instruction[15-0]) If ALUSrc=0 then ALUInput Register If ALUSrc=1 then ALUInput SignExtend(Instruction[15-0]) #17
Output CU: RegWrite Tujuan: Untuk mengaktifkan register agar register dapat ditulisi Data yang ditulisi bisa berasal dari memori atau dari hasil operasi ALU If RegWrite=1 then Register[writeRegister] Write Data #18
Instruksi-Instruksi MIPS
Instruksi Instruksi disimpan dalam memori pada alamat awal Data disimpan di memori pada alamat akhir Bagaimana mengeksekusi instruksi? Pada umumnya terdapat tiga tahap: Fetch: Pengambilan Decode: Penerjemahan Execute: Eksekusi Pada beberapa prosesor tahapannya bisa lebih dari 3 tahap #20
Fetch (1) Tujuan: untuk mengambil instruksi dari memori instruksi ke register Instruksi memiliki lebar 32 bit Setiap 8 bit menggunakan 1 alamat memori, sehingga satu instruksi menempati 4 alamat Karena satu instruksi disimpan dalam 4 alamat maka PC akan ditambah nilainya dengan 4 setiap kali selesai mengambil instruksi #21
Fetch (2) 32 4 32 ADD Result 32 RegDst Branch Shift Left 2 32 32 ALU Result ADD 32 32 0 M U X 1 PCSrc MemRead Instruction (31-26) 6 CONTROL UNIT MemToReg ALUOp MemWrite ALUSrc PC Read Address Instruction (31-0) INSTRUCTION MEMORY 32 Instruction (25-21) Instruction (20-16) Instruction (15-11) RegDst 0 M U X 1 5 5 5 32 Read Register 1 Read Register 2 Write Register Write Data RegWrite REGISTERS Read Data 1 Read Data 2 ALUSrc 0 M U X 1 32 32 Zero Flag ALU Result 32 3 32 Address MemWrite DATA MEMORY Write Data Read Data MemToReg 1 M U X 0 Instruction (15-0) Instruction (5-0) Sign Extend 16 32 6 ALUOp ALU Control 2 MemRead 32 #22
Fetch (3) Misal instruksi add $t2, $s2, $t1 Bahasa mesin: 00000010 01001001 01010000 00100000 Disimpan dalam memori: Address 0 00000010 Address 1 01001001 Address 2 01010000 Address 3 00100000 Fetch: Instruction Register 00000010010010010101000000100000 PC PC+4 # untuk mengambil instruksi berikutnya #23
Decode (1) RegDst Branch MemRead Instruction (31-26) CONTROL UNIT MemToReg ALUOp MemWrite ALUSrc RegWrite Tujuan: untuk menterjemahkan kode operasi (instruction[31-26]) dan menghasilkan 9 bit kontrol (microinstruction) Opcode: 6 bits awal instruksi yang terdapat dalam register instruksi Unit kendali mendefinisikan tipe instruksi dan membuat 9 bit kendali #24
Decode (2) Dalam unit kendali terdapat ROM yang berguna untuk menterjemahkan instruksi Kode operasi sebagai input akan diproses sehingga dikeluarkan satu kombinasi jalur kendali 9 bit Nilai yang keluar dari unit kendali disebut mikroinstruksi Mikroinstruksi mengendalikan operasi pada datapath #25
Execute Tujuan: mengeksekusi instruksi Instruksi dibagi menjadi tiga kelas: R-type Load/Store-type Branch-type Tipe R adalah tipe aritmetik Tipe Load/Store melakukan pengaksesan memori baik menyimpan maupun membaca Tipe Branch digunakan untuk instruksi lompatan dan pencabangan Setting jalur kendali tergantung field opcode pada instruksi: #26
Instruksi Tipe-R (1) 0: opcode (6 bit = 000000) rs: register source (5 bit) = Read register 1 = nomor register yang digunakan untuk menaruh operand pertama rt: register target (5 bit) = Read register 2 = nomor register yang digunakan untuk menaruh operand kedua rd: register destination (5 bit) = Write register = nomor register yang digunakan untuk menaruh hasil dari ALU shamt: tidak digunakan (5 bit = 00000) funct: jenis fungsi yang akan dilakukan oleh ALU (6 bit) = and, or, add, substract, dan set on less than #27
Instruksi Tipe-R (2) Pada instruksi tipe R kode operasinya sama yaitu 000000 Pembeda satu instruksi dengan instruksi yang lain adalah pada 6 bit bagian bawah (LSB) sebagai fungsi operasi aritmetik Untuk melakukan operasi ALU sesuai dengan instruksi digunakan control ALU dengan input 6 bit terbawah dari instruksi #28
Instruksi Tipe-R (3) #29
Instruksi Tipe-R (4) Terdapat beberapa komponen yang terlibat pada pengeksekusian tipe aritmatik: Register ALU MUX ALU control Keempat komponen tersebut beroperasi saling bebas #30
Instruksi Tipe-R (5) Contoh operasi R-Type: add $t1,$t2,$t3 1. Ambil instruksi dari memori instruksi pada alamat yang terdapat di dalampc 2. Update isi PC dengan menambah 4 3. Baca isi dua register yaitu $t2 (Read register 1) dan $t3 (Read register 2) dari register file 4. Unit kendali menentukan setting baris kendali 5. ALU mengoperasikan data yang dibaca dari register file menggunakan kode fungsi (yaitu bit 5 0 atau field funct dari instruksi) untuk menghasilkan fungsi ALU 6. Hasil dari ALU dituliskan ke dalam register file menggunakan bit 15-11 dari instruksi untuk memilih register tujuan $t1 (Write register) #31
Instruksi Tipe-R (6) Nilai tiga bit jalur kendali ALU Input kendali ALU berasal dari 6 bit terbawah instruksi Kendali ALU dikendalikan oleh ALUOp #32
Instruksi Tipe-R (7) Kendali operasi pada ALU ditentukan oleh ALUOp dan field fungsi Bagaimana bit kendali ALU diset tergantung dari bit kendali ALUOp dan fungsi yang berbeda untuk instruksi tipe-r #33
Instruksi Tipe-R (8) Tabel kebenaran untuk tiga bit kendali ALU Pada saat ALUOp bernilai 00 (LW dan SW) atau X1 (branch), maka field fungsi tidak digunakan Pada saat ALUOp bernilai 1X (R-type), maka field fungsi digunakan untuk menentukan operasi yang akan dilakukan oleh ALU #34
Referensi Hennessy, John L. dan Patterson, David A. 2005. Computer Organization and Design: The Hardware/Software Interface. 3 rd edition. Morgan Kaufmann publisher Inc. San Fransisco. USA http://chortle.ccsu.edu/assemblytutorial/ Chapter- 01/ #35