Академический Документы
Профессиональный Документы
Культура Документы
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
I. PENDAHULUAN
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
Lampiran
1. Tugas 1
-----------
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);
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;