Anda di halaman 1dari 13

Percobaan IV

Synthesizable MIPS32 Microprocessor


Bagian II : Arithmatic and Logical Unit (ALU)
dan Control Unit (CU)
Rosana Dewi Amelinda (13213060)
Asisten : Syaiful Andy (13212050)
Tanggal Percobaan : 18/11/2015
EL3111 Praktikum Arsitektur Sistem Komputer
Laboratorium Sinyal dan Sistem Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung

Abstrak Pada modul 1V ini dilakukan synthesizable


MIPS32 Mikroprosesor yang berhubugan dengan Arithmatic
and Logical Unit (ALU) dan Control Unit (CU). Terdapat 6 buah
tugas yang diberikan yaitu perancangan program counter
(dengan register 32 bit), perancangan dua jenis left shifter (lebar
input-output masing-masing 32-32 dan 26-28) , perancangan carry
look a head adder (32 bit), membuat sign extender (dari 16
menjadi 32 bit), membuat sebuah Arithmatic and Logical Unit
(ALU) 32 bit, dan terakhir yaitu membuat sebuah Control Unit
(CU) sederhana untuk mikroprosessor Single-Cycle MIPS32.
Software yang digunakan selama pratikum antara lain Altera
Quartus II v9.1 sp2 yang berfungsi untuk melakukan sintesis
dan simulasi rangkaian dan Notepad++ untuk membuat kode
program dalam Bahasa VHDL. Hasil yang diperoleh pada
percobaan kali ini yaitu praktikan dapat mengimplementasikan
perancangan tugas-tugas tersebut dalam Bahasa VHDL serta
melakukan synthesizable dan simlasinya secara functional dan
timing.

3.

synthesizable
dan dapat disimulasikan dengan
Altera Quartus IIv9.1sp2
Praktikan dapat membuat Control Unit (CU) dari
MIPS32 dalam kode VHDL yang synthesizable dan
dapat disimulasikan dengan Altera Quartus
IIv9.1sp2
II. LANDASAN TEORETIS

Arithmatic and Logical Unit (ALU)


Dalam sistem elektronik digital, sebuah arithmetic and
logical unit (ALU) adalah rangkaian digital yang berfungsi
untuk melakukan perhitungan integer dan operasi logika. ALU
merupakan blok pembangun dasar dari sebuah mikroprosesor.
Mikroprosesor modern meliputi central processing unit dan
graphics processing unit memiliki ALU yang sangat kompleks
untuk melakukan perhitungan. Dalam mikroprosesor modern,
digunakan sistem representasi bilangan twos complement.

Kata Kunci Arithmatic and Logical Unit (ALU), Control Unit


(CU), VHDL, MIPS.

I. PENDAHULUAN

ada praktikum kali ini akan mempelajari perancangan pada


mikriprosesor MIPS32. Perancangan yang dilakukan
yaitu dengan membuat instruction memory, data memory, dan
register dengan arsitektur MIPS32. Penguasaan bahasa
VHDL diperlukan pada praktikum kali ini dikarenakan dalam
pendefinisan komponen hingga pembuatan kode program
dilakukan dalam Bahasa VHDL baik secara behavioral maupun
structural. Setelah dilakukan kompilasi, rangkaian yang dibuat
selanjutnya diverifikasi dengan simulasi functional dan timing
pada Altera Quartus 9.1 sp2.
Pada praktikum ini tujuan yang ingin dicapai antara lain :
1. Praktikan memahami arsitektur mikroprosesor
MIPS32 beserta datapath eksekusinya
2. Praktikan dapat membuat Arithmatic and Logical Unit
(ALU) dari MIPS32 dalam kode VHDL yang

Pada mikroprosesor Single-Cycle MIPS32 yang akan


kita realisasikan dalam praktikum ini, terdapat arithmetic and
logical unit (ALU) yang sangat sederhana. ALU ini memiliki
lebar data input sebesar 32-bit untuk memasukkan dua buah
operanddan memiliki lebardata output sebesar 32-bit untuk
mengeluarkan hasil komputasi. ALU ini hanya dapat
menangani dua operasi matematika saja yaitu penjumlahan dan
pengurangan. Untuk operasi penjumlahan, ALU memanfaatkan
blok adder. Sedangkan untuk operasi pengurangan, ALU
memanfaatkan sifat bilangan twos complement. Dengan

demikian, pengurangan merupakan penjumlahan dengan


bilangan negatif. Oleh karena itu, operand kedua dapat diubah
menjadi bilangan negatif dengan memanfaatkan prinsip twos
complementyaitu rumus = ~+1. Setelah itu, adder akan
menjumlahkan kedua operand tersebut seperti biasa.Untuk
memilih operasi penjumlahan dan pengurangan, terdapat 2-to1 multiplexer yang akan memilih arah operand kedua berasal.
Untuk penjumlahan, selektor multiplexer bernilai 0
sedangkanuntukpengurangan selektor multiplexer bernilai
1.Selain itu, carry-inuntuk adderjuga ditentukan darioperasi
yang dilakukan. Untuk penjumlahan, carry-in bernilai 0
sedangkan untuk pengurangan, carry-in untuk bernilai 1.
Dengan demikian, kedua sinyal ini (carry-in dan selektor
multiplexer) dapat dihubungkan menjadi satu sinyal yaitu
OP_SEL. Untukmelakukan inverting operand kedua,
digunakan gerbang NOT dengan lebar data 32-bit.
Untuk mendesain adder, ada beberapa arsitektur adder
yang dapat dipilih. Masing-masing arsitektur memiliki
kelebihan dan kekurangan yang dapat ditinjau dari segi
kecepatan, konsumsi daya, dan konsumsi area. Dua contoh
arsitektur adder adalah ripple carry adder dan carry-lookahead
adder. Ripple carry adder merupakan adder yang relatif
sederhana. Kelemahan adder ini adalah dari segi kecepatan
karena setiap bit tidak dapat dijumlahkan secara bersamaan.
Tahap adder yang lebih tinggi harus menunggu carry yang
dibawa dari tahap adder yang lebih rendah. Pada carrylookahead adder, setiap tahap adder dapat menghitung carry
yang dia terima sehingga tidak perlu menunggu propagasi carry
dari tahap sebelumnya. Kelebihan carry-lookahead adder harus
dibayar dengan penambahan rangkaian logika yang akan
mengkonsumsi luas area.

sinyal kontrol yang dikeluarkan. Terdapat sepuluh sinyal


kontrolyang keluar dari CU ini yang dijelaskan sebagai berikut.

Terdapat sembilan instruksi yang dapat dieksekusi oleh


mikroprosesor Single-Cycle MIPS32 yang akan kita
realisasikan dalam praktikum ini. Kesembilan instruksi tersebut
akan menentukan nilai sinyal yang dikeluarkan oleh control
unitkarena setiap instruksi membutuhkan penanganan dan
aliran data yang berbeda-beda. Berikut ini tabel nilai sinyal
control unituntuk setiap instruksi yang dapat dieksekusi.

Control Unit (CU)


Control
Unit
(CU)
merupakan komponen dari
sebuah mikroprosesor yang
berfungsi untuk mengarahkan
operasi-operasi
yang
dilakukan oleh mikroprosesor
tersebut.
CUmengatur
komunikasi dan koordinasi
antarkomponen
mikroprosesormenggunakan
sinyal-sinyal kontrol. CU juga
membaca dan menerjemahkan
instruksi-instruksi yang diproses untuk menentukan urutan
pemrosesan data.
Pada mikroprosesor Single-Cycle MIPS32 yangakan kita
realisasikan dalam praktikum ini, terdapat control unit (CU)
yang sangat sederhana.CU menerima opcodedan functdari
instruksi setelah di-decodeuntuk menentukan nilai dari sinyal-

III. HASIL DAN ANALISIS


A. Tugas I : Perancangan Program Counter
Pada tugas 1 ini, praktikan diminta untuk membiuat sebuah
program counter yang berupa satu buah register dengan lebar
32-bit dalam Bahasa VHDL. Sebuah register dengan lebar data
1 bit dapat direalisasikan menggunakan satu buah D Flip-flop.
Dengan demikian, untuk merealisasikan satu buah register
dengan lebar 32-bit diperlukan 32 buah D Flip-flop.
Implementasi desain instruction memory dilakukan dalam
Bahasa VHDL. Dengan menyalin kode VHDL pada modul,
kemudian dilakukan simulasi dengan Software Altera Quartus,
diperoleh hasil simulasi sebagai berikut:

Gambar 1 Simulasi Functional Program Counter

Gambar 4 Simulasi Timing Left shifter I

Gambar 2 Simulasi Timing Program Counter

Gambar 5 Simulasi Functional Left shifter II

Berdasarkan hasil simulasi functional yang diperoleh seperti


pada gambar diatas, terlihat bahwa hasil yang diperoleh sesuai
dengan yang diharapkan. Yaitu port PC_out akan meneruskan
nilai ada pada port PC_in ketika terjadi riding edge clock.
Kemudian pada simulasi timing diperoleh hasil yang sesuai
pula namun dengan sedikit terjadi delay. Delay yang terjadi ini
mengikuti worst case delay path dari rangkaian kombinasional
yang disintesis. Tetapi dengan pemilihan clock yang cukup
lambat maka diharapkan dapat mengurangi delay yang terjadi
sehingga tidak terlalu menggangu kerja dari program counter.
B. Tugas 2 : Perancangan Left Shifter Dua Kali
Pada tugas 2 ini diminta untuk membuat dua jenis Left Shifter
dua kali dalam Bahasa VHDL dengan spesifikasi :
Left shifter jenis pertama memiliki input data dengan
lebar 32-bit dan output data dengan lebar 32-bit.
Left shifter jenis kedua memiliki input data dengan
lebar 26-bit dan output data dengan lebar 28-bit.
Gambar 3 Simulasi Functional Left shifter I

Gambar 6 Simulasi Timing Left shifter II

Berdasarkan hasil simulasi diatas terlihat bahwa left shifter


yang dibuat telah bekerja dengan baik. Hal ini dibuktikan
dengan hasil output yang sesuai dengan hasil yang diharapkan
yaitu melakukan left shifter sebanyak 2 bit. Secara metematis
left shifter dua kali kekiri berarti dikalikan dengan 4, pada
semua hasil simulasi diperoleh hasil tersebut. Contohnya pada
left shifter pertama, ketika diberi input 4 (0x00000004)
menghasilkan output bernilai 16 (0x00000010). Lalu pada left
shifter kedua, saat diberi input 8 (0x00000008) maka
menghasilkan output 32 (0x00000020). Kemudian pada
simulasi timing diperoleh hasil yang sesuai pula namun dengan
sedikit terjadi delay. Delay yang terjadi ini mengikuti worst
case delay path dari rangkaian kombinasional yang disintesis.
Tetapi dengan pemilihan clock yang cukup lambat maka
diharapkan dapat mengurangi delay yang terjadi sehingga tidak
terlalu menggangu kerja dari left shifter.

C. Tugas 3 : Perancangan Carry-Lookahead Adder 32-bit


Pada tugas 3 ini dilakukan perancangan carry-lookahead adder
dalam Bahasa VHDL yang mampu menjumlahkan dua buah
input dengan lebar data masing-masing 32-bit
dan
mengeluarkan hasil penjumlahan dalam bentuk output dengan
lebar data 32 bit. Adder ini hendaknya dapat menerima carryin sebesar satu bit untuk meggeser carry-in pada tahap pertama
dari adder.
.

Gambar 9 Simulasi Functional Sign Extender

Gambar 7 Simulasi Functional Carry look ahead


Gambar 10 Simulasi Timing Sign Extender

Gambar 8 Simulasi Timing Carry look ahead

Berdasarkan gambar hasil simulasi diperoleh nilai output yang


sesuai. Yaitu diperoleh output yang merupakan hasil
penjumlahan dari input pertama (OPRND_1) dan input kedua
(OPRND_2) serta carry input yang ada. Selain itu, overflow
yang dihasilkan dari penjumlahan dapat diatasi dengan adaya
carry out yang dihasilkan oleh adder. Pada simulasi timing
diperoleh hasil yang sesuai pula namun dengan sedikit terjadi
delay. Delay yang terjadi ini mengikuti worst case delay path
dari rangkaian kombinasional yang disintesis. Tetapi dengan
pemilihan clock yang cukup lambat maka diharapkan dapat
mengurangi delay yang terjadi sehingga tidak terlalu
menggangu kerja dari carry look ahead. Penggunaan carry look
ahead 32 bit ini memiliki kelebihan dibandingkan ripple carry
adder yaitu adder jenis ini dapat menghitunga carry pada setiap
bit langsung sehingga tidak perlu menunggu hasil perhitungan
dari bit sebelumnya seperti yang dilakukan pada ripple carry
adder. Keuntungan lainnya yaitu delay yang dihasilkan menjadi
lebih sedikit. Namun kerugiannya adalah implementasi
rangakaian logika menjadi lebih besar dan memakan cukup
banyak memory di IC mikroprosessor nantinya serta konsumsi
daya yang cukup besar.
D. Tugas 4: Sign Extender
Pada tugas 4 ini dibuat sebuah sign extender dalam Bahasa
VHDL yang menerima data input sebesar 16-bit dan
mengeluarkan data output sebesar 32-bit.Prinsip sign extension
mengikuti aturan bilangan twos complement dengan tetap
mempertahankan nilai bit MSB.

Berdasarkan gambar hasil simulasi diatas didapatkan hasil sign


extender yang sesuai dengan yang diharapkan. Pada bilangan
positif ditambahkan bit 0 sebanyak 16 bit pada LSB sedangkan
pada bilangan negative ditambahkan bit 1 sebanyak 16 bit pada
LSB pula. Hal ini menunjukan bahwa program telah bekerja
dengan baik. Lalu pada simulasi timing diperoleh hasil yang
sesuai pula namun dengan sedikit terjadi delay. Delay yang
terjadi ini mengikuti worst case delay path dari rangkaian
kombinasional yang disintesis. Tetapi dengan pemilihan clock
yang cukup lambat maka diharapkan dapat mengurangi delay
yang terjadi sehingga tidak terlalu menggangu kerja dari sign
extender.
E. Tugas 5 : Arithmatic and Logical Unit (ALU)
Pada tugas 5 ini dibuat sebuah Arithmetic and Logical Unit
(ALU) dalam bahasa VHDL dengan memanfaatkan carrylookahead adder yang telah dibuat pada tugas 3. ALU
menerima dua buah operandsebagai input dengan masingmasing memiliki lebar data 32-bit. ALU akan memberikan data
hasil perhitungan melalui output dengan lebar 32-bit. ALU juga
memiliki selektor untuk memilih operasi yang akan dilakukan,
apakah penjumlahan atau pengurangan. Apabila selektor
bernilai 0x00, maka operasi yang dilakukan adalah
penjumlahan. Apabila selektor bernilai 0x01, maka operasi
yang dilakukan adalah pengurangan.

Gambar 11 Simulasi Functional ALU

Gambar 13 Simulasi Functional Control Unit (CU)

Gambar 12 Simulasi Timing ALU


Gambar 14 Simulasi Timing Control Unit (CU)

Berdasarkan hasil simulasi diatas diperoleh output yang sesuai


dengan yang diharapkan yaitu ketika OP_SEL bernilai 0 (0x00)
maka akan dilakukan penjulahan kedua input dan ketika
OP_SEL bernilai 1 (0x01) maka akan dilakukan pengurangan
kedua input. Hasil dari penjumlahan dan pengurangan kedua
input tersebut selanjutnya di assign ke port OUTPUT.
Contohnya saat OP_SEL = 0x01, untuk input = 8 dan 3, maka
dihasilkan output = 5. Lalu saat OP_SEL = 0x00, untuk input16
dan 6, maka dihasilkan output = 22 (dapat dilihat pada simulasi
functional). Hal ini menunjukan bahwa ALU telah bekerja
dengan baik. Kemudian pada simulasi timing diperoleh hasil
yang sesuai pula namun dengan sedikit terjadi delay. Delay
yang terjadi ini mengikuti worst case delay path dari rangkaian
kombinasional yang disintesis. Tetapi dengan pemilihan clock
yang cukup lambat maka diharapkan dapat mengurangi delay
yang terjadi sehingga tidak terlalu menggangu kerja dari
arithmetic and logical unit (ALU).
F. Tugas 6 : Control Unit (CU)
Untuk tugas terakhir (tugas 6) ini praktikan diminta untuk
membuat sebuah Control Unit(CU) dalam bahasa VHDL untuk
mikroprosesor Single-Cycle MIPS32 Anda. Contol Unit (CU)
ini melakukan assignment sinyal kontrol terhadap opcode dan
funct.

Berdasarkan hasil simulasi yang diperoleh diatas terlihat bahwa


CU telah bekerja dengan baik. Hal ini dibuktikan dengan output
yang diperoleh telah sesuai dengan table yang ada pada studi
pustaka pada modul. Control unit bekerja dengan menerima
input dari instruction memory, kemudian melakukan decoding
untuk menentukan nilai-nilai dati tiap control signal yang
nantinya akan memberi sinyal pada multiplexer dan ALU yang
terhubug pada bagian lain dari mikroprosessor untuk menjalan
kan instruksi yang diinginkan. Contohnya untuk func = 100000
dan opcode = 000000, yang merupakan instruksi add (operasi
penjumlahan), maka dihasilkan Sig_ALUCtrl bernilai 0,
Sig_ALUScr bernilai 0, Sig_Bne bernilai 0, Sig_Branch
bernilai 0, Sig_Jmp bernilai 0, Sig_MemRead bernilai 0,
Sig_MemtoReg bernilai 0, Sig_MemWrite bernilai 0,
Sig_RegDest bernilai 1 dan Sig_RegWrite bernilai 1.
Kemudian pada simulasi timing diperoleh hasil yang sesuai
pula namun dengan sedikit terjadi delay. Delay yang terjadi ini
mengikuti worst case delay path dari rangkaian kombinasional
yang disintesis. Tetapi dengan pemilihan clock yang cukup
lambat maka diharapkan dapat mengurangi delay yang terjadi
sehingga tidak terlalu menggangu kerja dari control unit (CU).
Pertanyaan Analisis :
Mikropeosessor MIPS32 mendeteksi jenis-jenis instruksi
yang diberikan dengan cara mengenali nilai-nilai opcode dan
funct dari intruksi yang diminta karena setiap instruksi memiki
nilai opcode dan func yang unik.
Aliran data/datapath (komunikasi dan koordinasi
antarkomponen) pada mikroprosessor MIPS32 diatur oleh
control unit dengan memanfaatkan sinyal-sinyal control yang
ada. Selanjutnya CU akan membaca dan menerjemahkan

instruksi-instruksi yang diproses untuk mementukan urutan


pemrosesan data.
Program counter berfungsi untuk menyimpan input yang
berupa alamat ketika rising edge clock. Cara kerjanya yaitu
apabila terjadi perubahan nilai clock dari 0 menjadi 1 (rising
edge clock) maka nilai output akan sama dengan nilai input
(dalam hal ini input berupa alamat data).
Apabila terdapat instruksi branch (beq atau bne) pada
program counter maka apabila syarat branch tersebut terpenuhi
maka akan dilakukan proses jump ke alamat selanjutnya.
Sign extender dalam desain Single Cycle MIPS32 di
praktikum ini bekerja dengan mempertahankan nilai MSB
menggunakan aturan twos complement. Penggunaan sign
extander ini merupakan inisialisasi pada operasi arithmetic right
shift.
Bus merger dalam desain Single Cycle MIPS32 di
praktikum ini berfungsi untuk menggambungkan dua buah
input (lebar datanya bisa sama atau berbeda) sehingga
dihasilkan suatu output dengan lebar data yang merupakan hasil
penjumlahan dari lebar data kedua inputnya.
Nilai konstanta maksimum pada operasi matematika yang
melibatkan nilai konstan pada mikroprosessor MIPS32 yaitu
sebesar 232 1 atau 4,294,967,295.
Penjumlahan dari carry-lookehead adder lebih baik
daripada ripple carry adder karena pada carry-lookahead adder
penjumlahan langsung dilakukan dengan menjumlahkan nilainilai carry-nya sehingga penjumlahan tidak bergantung pada
hasil penjulahan dari proses sebelumnya.
Fungsi komparator dalam menentukan ada tidak nya
branch yaitu dengan melakukan pembandingan kedua input
yang diberikan, kemudian apabila syarat perbandingan
terpenuhi maka akan dilakukan jump ke alamat selanjutnya
namun apabila syarat pembanding tidak terpenuhi maka akan
dilakukan eksekusi untuk instruksi selanjutnya.
Hasil functional dan timing dari setiap komponen yang
telah direalisasikan menunjukan hasil yang sesuai dengan apa
yang diharapkan. Contohnya untuk program counter (pada
tugas 1) telah berhasil melakukan pengambilan data input yang
berupa alamat lalu meneruskan data tersebut menjadi nilai
output ketika terjadinya rising edge clock.
Pada mikroprosessor Single-Cycle MIPS32, CU
menerima opcode dan func dari instruksi setelah sebelumnya
dilakukan decode (pada instruksi). Hal ini bertujuan untuk
menentukan nilai dari sinyal-sinyal control yang dikeluarkan.
Terdapat 10 sinyal control yang keluar dari CU yaitu Sig_Jmp,
Sig_Bne, Sig_Branch, Sig_MemoReg, Sig_MemRead,
Sig_MemWrite, Sig_RegDest, Sig_RegWrite, Sig_ALUSrc,
dan Sig_ALUCtrl. Komponen yang digunakan antara lain
ALU, Data Memory, Register, 2 buah gerbang AND 2 input, 1
buah Inverter, 1 buah gerbang OR 2 input, 2-to-1 Mux dan 4to-1 Mux.
IV. SIMPULAN

Datapath atau aliran data pada MIPS32 dilakukan dalam


5 tahap, yaitu Instruction Fetch, Inctruction Decode,
Memory, Execution dan terakhir Write Back.

Arithmatic
and
Logical
Unit
(ALU)
dapat
diimplementasikan dalam mikroprosesor MIPS32
dengan menggunakan adder dan inverter.
Control Unit (CU) dapat diimplementasikan pada
mikroprosesor
MIPS32
dengan
menggunakan
pendekatan behavioral maupun structural. Impementasi ini
akan menentukan performa kecepatan, komsumsi daya,
dan kompleksitas rangkaian yang akan disintesis.
REFERENSI
[1] Bryant, Randal E. dan David R. OHallaron. Computer
System: A Programmers Perspective.Prentice Hall.
USA.2011
[2] Tim Asisten Praktikum.Modul Praktikum EL3111
Arsitektur Sistem Komputer. Laboratorium Sinyal dan
Sistem Sekolah Teknik Elektro dan Informasika
Institut Teknologi Bandung. Bandung. 2015.

Biodata Penulis

Penulis memiliki nama lengkap Rosana Dewi Amelinda.


Lahir 20 tahun silam di Baturaja, 9 April 1995 dari pasangan
suami istri Masri dan Eviyarti yang sekarang bertempat
tinggal di Jalan Bambu Kuning no 21, 22 Hadimulyo Barat,
Metro, Lampung. Penulis memiliki seorang kakak bernama
Ricky Andreas Pratama yang lahir di Baturaja, 9 Mei 1992.
Kakak penulis merupakan sarjana Ilmu Komputer di
Universitas Lampung angkatan 2010. Saat ini penulis sedang
menjalani perkuliahan semester 5 di Institut Teknologi
Bandung dengan mengambil jurusan Teknik Elektro.
Sebelumnya penulis bersekolah di SMA Negeri 1 Metro,
Lampung. Selama masa perkuliahan di ITB penulis
bertempat tinggal di Jalan Cisitu Baru no 7, Bandung.

Lampiran
1. Tugas 1
-----------

Praktikum EL3111 Arsitektur Sistem Komputer


Modul : 4
Percobaan : 1
Tanggal : 18 November 2015
Kelompok : 30
Rombongan : C
Nama (NIM) 1 : Rosana Dewi Amelinda (13213060)
Nama (NIM) 2 : Audinata Ibrahim Sitaba (13213061)
Nama File : program_counter.vhd
Deskripsi : Program counter yang berupa satu buah register dengan lebar 32 bit

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY program_counter IS
PORT (
clk : IN std_logic;
PC_in : IN std_logic_vector (31 DOWNTO 0);
PC_out : OUT std_logic_vector (31 DOWNTO 0)
);
END program_counter;
ARCHITECTURE behavior OF program_counter IS
BEGIN
PROCESS (clk)
BEGIN
if clk' EVENT and clk='1' then
PC_out <= PC_in;
end if;
END PROCESS;
END behavior;

2. Tugas 2
a.
-- Praktikum EL3111 Arsitektur Sistem Komputer
-- Modul : 4
-- Percobaan : 2
-- Tanggal : 18 November 2015
-- Kelompok : 30
-- Rombongan : C
-- Nama (NIM) 1 : Rosana Dewi Amelinda (13213060)
-- Nama (NIM) 2 : Audinata Ibrahim Sitaba (13213061)
-- Nama File : lshifter_32_32.vhd
-- Deskripsi : Left shifter yang memiliki input data dengan lebar 32 bit dan output
data dengan lebar 32 bit
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY lshifter_32_32 IS
PORT (
D_IN : IN std_logic_vector (31 DOWNTO 0);

D_OUT : OUT std_logic_vector (31 DOWNTO 0)


);
END lshifter_32_32;
ARCHITECTURE behavior OF lshifter_32_32 IS
BEGIN
D_OUT (31 DOWNTO 2) <= D_IN (29 DOWNTO 0);
D_OUT (1 DOWNTO 0) <= (others => '0');
END behavior;

b.
-- Praktikum EL3111 Arsitektur Sistem Komputer
-- Modul : 4
-- Percobaan : 2
-- Tanggal : 18 November 2015
-- Kelompok : 30
-- Rombongan : C
-- Nama (NIM) 1 : Rosana Dewi Amelinda (13213060)
-- Nama (NIM) 2 : Audinata Ibrahim Sitaba (13213061)
-- Nama File : lshifter_26_28.vhd
-- Deskripsi : Left shifter yang memiliki input data dengan lebar 26 bit dan output
data dengan lebar 28 bit
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY lshifter_26_28 IS
PORT (
D_IN : IN std_logic_vector (25 DOWNTO 0);
D_OUT : OUT std_logic_vector (27 DOWNTO 0)
);
END lshifter_26_28;
ARCHITECTURE behavior OF lshifter_26_28 IS
BEGIN
D_OUT (27 DOWNTO 2) <= D_IN (25 DOWNTO 0);
D_OUT (1 DOWNTO 0) <= (others => '0');
END behavior;

3. Tugas 3
-- Praktikum EL3111 Arsitektur Sistem Komputer
-- Modul : 4
-- Percobaan : 3
-- Tanggal : 18 November 2015
-- Kelompok : 30
-- Rombongan : C
-- Nama (NIM) 1 : Rosana Dewi Amelinda (13213060)
-- Nama (NIM) 2 : Audinata Ibrahim Sitaba (13213061)
-- Nama File : cla_32.vhd
-- Deskripsi : Mampu menjumlahkan dua buah input dengan lebar data masing-masing 32
bit dan mengeluarkan hasil penjumlahan dalam bentuk output dengan lebar data 32 bit
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cla_32 IS

PORT (
OPRND_1 : IN STD_LOGIC_VECTOR (31 DOWNTO 0); -- Operand 1
OPRND_2 : IN STD_LOGIC_VECTOR (31 DOWNTO 0); -- Operand 2
C_IN : IN STD_LOGIC; -- Carry in
RESULT : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); -- RESULT
C_OUT : OUT STD_LOGIC -- Overflow
);
END cla_32;
ARCHITECTURE behavioral OF cla_32 IS
signal sum : std_logic_vector (31 DOWNTO 0);
signal carry_a : std_logic_vector (31 DOWNTO 0);
signal carry_b : std_logic_vector (31 DOWNTO 0);
signal carry_in : std_logic_vector (31 DOWNTO 1);
BEGIN
sum <= OPRND_1 XOR OPRND_2;
carry_a <= OPRND_1 AND OPRND_2;
carry_b <= OPRND_1 OR OPRND_2;
PROCESS (carry_a, carry_b, carry_in)
BEGIN
carry_in(1) <= carry_a(0) OR (carry_b(0) AND C_IN);
carry : for i in 1 to 30 loop
carry_in(i+1) <= carry_a(i) or (carry_b(i) and carry_in(i));
END loop;
C_OUT <= carry_a(31) or (carry_b(31) and carry_in(31));
END PROCESS;
RESULT(0) <= sum(0) XOR C_IN;
RESULT(31 DOWNTO 1) <= sum(31 DOWNTO 1) XOR carry_in(31 DOWNTO 1);
END behavioral;

4. Tugas 4
-- Praktikum EL3111 Arsitektur Sistem Komputer
-- Modul : 4
-- Percobaan : 4
-- Tanggal : 18 November 2015
-- Kelompok : 30
-- Rombongan : C
-- Nama (NIM) 1 : Rosana Dewi Amelinda (13213060)
-- Nama (NIM) 2 : Audinata Ibrahim Sitaba (13213061)
-- Nama File : sign_extender.vhd
-- Deskripsi : Menerima data input sebesar 16bit dan mengeluarkan data output
sebesar 32-bit
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY sign_extender IS
PORT (
D_IN : IN std_logic_vector (15 DOWNTO 0); --Data Input
D_OUT : OUT STD_LOGIC_VECTOR (31 DOWNTO 0) -- Data Output
);
END sign_extender;
ARCHITECTURE behavior OF sign_extender IS

BEGIN
PROCESS (D_IN(15))
BEGIN
if D_IN(15) = '1' then
D_OUT(31 DOWNTO 16) <= (others => '1');
else
D_OUT(31 DOWNTO 16) <= (others => '0');
END IF;
END PROCESS;
D_OUT(15 DOWNTO 0) <= D_IN(15 DOWNTO 0);
END behavior;

5. Tugas 5
-- Praktikum EL3111 Arsitektur Sistem Komputer
-- Modul : 4
-- Percobaan : 5
-- Tanggal : 18 November 2015
-- Kelompok : 30
-- Rombongan : C
-- Nama (NIM) 1 : Rosana Dewi Amelinda (13213060)
-- Nama (NIM) 2 : Audinata Ibrahim Sitaba (13213061)
-- Nama File : ALU.vhd
-- Deskripsi : Menerima dua buah operand sebagai input dengan masing-masing memiliki
lebar data 32 bit. ALU akan memberikan data hasil perhitungan melalui output dengan
lebar data 32 bit. ALU juga memiliki selektor untuk memilih operasi yang akan
dilakukan (penjumlahan => 0X00 atau penguarangan 0X01).
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ALU IS
PORT (
OPERAND_1 : IN std_logic_vector (31 DOWNTO 0); --Data Input 1
OPERAND_2 : IN std_logic_vector (31 DOWNTO 0); --Data Input 1
OP_SEL : IN std_logic_vector (1 DOWNTO 0); --Operation Selector
OUTPUT : OUT std_logic_vector (31 DOWNTO 0) --Data Output
);
END ALU;
ARCHITECTURE behavior OF ALU IS
signal op_a : std_logic_vector (31 DOWNTO 0);
signal op_b : std_logic_vector (31 DOWNTO 0);
signal c_in : std_logic;
signal c_out : std_logic;
signal hasil : std_logic_vector (31 DOWNTO 0);
COMPONENT cla_32
PORT (
OPRND_1 : IN STD_LOGIC_VECTOR (31 DOWNTO 0); -- Operand 1
OPRND_2 : IN STD_LOGIC_VECTOR (31 DOWNTO 0); -- Operand 2
C_IN : IN STD_LOGIC; -- Carry in
RESULT : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); -- RESULT
C_OUT : OUT STD_LOGIC -- Overflow
);
END COMPONENT;
BEGIN
componentcarry: cla_32

PORT MAP(
OPRND_1 => op_a,
OPRND_2 => op_b,
C_IN => c_in,
C_OUT => c_out,
RESULT => hasil
);
PROCESS (OP_SEL)
BEGIN
if OP_SEL = "00" then
op_a <= OPERAND_1;
op_b <= OPERAND_2;
c_in <= OP_SEL(0);
OUTPUT <= hasil;
elsif OP_SEL = "01" THEN
op_a <= OPERAND_1;
op_b <= (not OPERAND_2);
c_in <= OP_SEL(0);
OUTPUT <= hasil;
END IF;
END PROCESS;
END behavior;

6. Tugas 6
-- Praktikum EL3111 Arsitektur Sistem Komputer
-- Modul : 4
-- Percobaan : 6
-- Tanggal : 18 November 2015
-- Kelompok : 30
-- Rombongan : C
-- Nama (NIM) 1 : Rosana Dewi Amelinda (13213060)
-- Nama (NIM) 2 : Audinata Ibrahim Sitaba (13213061)
-- Nama File : cu.vhd
-- Deskripsi : Suato Control Unit yang melalakukan assignment sinyal kontrol
terhadap opcode dan func.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cu IS
PORT (
OP_In
: IN STD_LOGIC_VECTOR (5 DOWNTO 0);
FUNCT_In : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
Sig_Jmp
: OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
Sig_Bne
: OUT STD_LOGIC;
Sig_Branch : OUT STD_LOGIC;
Sig_MemtoReg : OUT STD_LOGIC;
Sig_MemRead : OUT STD_LOGIC;
Sig_MemWrite : OUT STD_LOGIC;
Sig_RegDest : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
Sig_RegWrite : OUT STD_LOGIC;
Sig_ALUSrc : OUT STD_LOGIC;
Sig_ALUCtrl : OUT STD_LOGIC_VECTOR (1 DOWNTO 0)
);
END cu;
ARCHITECTURE behavior OF cu IS
BEGIN

PROCESS (OP_In,FUNCT_In)
BEGIN
--Sig_Jmp
IF OP_In = "000010" THEN
Sig_Jmp <= "01";
ELSE
Sig_Jmp <= "00";
END IF;
--Sig_Bne
IF OP_In = "000101" THEN
Sig_Bne <= '1';
ELSE
Sig_Bne <= '0';
END IF;
--Sig_Branch
IF OP_In = "000100" THEN
Sig_Branch <= '1';
ELSE
Sig_Branch <= '0';
END IF;
--Sig_MemtoReg and Sig_MemRead
IF OP_In = "100011" THEN
Sig_MemtoReg <= '1';
Sig_MemRead <= '1';
ELSE
Sig_MemtoReg <= '0';
Sig_MemRead <= '0';
END IF;
--Sig_MemWrite
IF OP_In = "101011" THEN
Sig_MemWrite <= '1';
ELSE
Sig_MemWrite <= '0';
END IF;
--Sig_RegDest
IF (OP_In = "000000" AND (FUNCT_In = "100000" OR FUNCT_In = "100010")) THEN
Sig_RegDest <= "01";
ELSE
Sig_RegDest <= "00";
END IF;
--Sig_RegWrite
IF (OP_In = "000000" AND (FUNCT_In = "100000" OR FUNCT_In = "100010")) OR OP_In =
"001000" OR OP_In = "100011" THEN
Sig_RegWrite <= '1';
ELSE
Sig_RegWrite <= '0';
END IF;
--Sig_ALUSrc
IF OP_In = "001000" OR OP_In = "100011" OR OP_In = "101011" THEN
Sig_ALUSrc <= '1';
ELSE
Sig_ALUSrc <= '0';
END IF;

--Sig_ALUCtrl
IF (OP_In = "000000" AND FUNCT_In = "100010") THEN
Sig_ALUCtrl <= "01";
ELSE
Sig_ALUCtrl <= "00";
END IF;
END PROCESS;
END behavior;