Program ini membahas pembuatan program SAP-1 dengan VHDL untuk melakukan operasi dasar seperti LDA, ADD, SUB, dan OUT. Terdiri dari beberapa modul utama seperti PC, MAR, RAM, IR, regA, ALU, regB, outReg, dan CU. Setiap modul dibuat terpisah dan digabungkan untuk membentuk sistem SAP-1 secara keseluruhan.
1. Praktikum 10
Pemrograman SAP-1
Lusiana Diyan Ningrum
2210181051
2 D4 Teknik Komputer B
Program Studi Teknik Komputer
Departemen Teknik Informatika dan Komputer
Politeknik Elektronika Negeri Surabaya
Surabaya
2. 1. Tujuan:
a. Mahasiswa dapat menjelaskan kode operasi atau opcode.
b. Mahasiswa dapat membuat program SAP-1
2. Dasar Teori:
Untuk memasukkan instruksi dan kata-data kedalam memori SAP-1 kita harus
menggunakan kode tertentu yang dapat ditafsirkan oleh komputer. Tabel 2
memperlihatkan kode yang dipakai dalam SAP-1. Bilangan 0000 mewakiliki LDA,
0001 untuk ADD, 0010 untuk SUB, 1110 untuk OUT, dan 1111 untuk HLT. Karena
kode-kode ini memberitahu kepada komputer tentang operasi yang harus
dilaksanakan. Maka kode yang bersangkutan disebut kode operasi (operation code)
disingkat opcode.
TABEL 2. KODE OPERASI SAP-1
Mnemonik Kode Operasi
LDA 0000
ADD 0001
SUB 0010
OUT 1110
HLT 1111
Berdasarkan rancangan rangkaian, saklar-saklar tersebut menghasilkan logika 1
untuk posisi keatas (U) dan logika 0 untuk posisi Ke bawah (D). Dalam peprograman
saklar data dilaksanakan dengan satu instruksi, kode operasi yang akan diberikan
sebagai nibble bagian atas, dan operand (pelengkap instruksi ) sebagai nibble bagian
bawah.
Sebagai contoh, misalkan kita akan menyimpan instruksi sebagai Berikut :
Alamat Instruksi
0H LDA FH
1H ADD EH
2H HLT
Pertama, ubahlah setiap instruksi kedalam bentuk biner :
LDA FH = 0000 1111
ADD EH = 0001 1110
HLT = 1111 XXXX
3. Dalam instruksi pertama, 0000 adalah kode operasi untuk LDA, dan 1111
adalah ekivalen biner dari FH. Dalam instruksi kedua, 0001 adalah kode operasi untuk
ADD, dan 1110 adalah ekivalen biner dari EH. Dalam instruksi ketiga, 1111 adalah
kode operasi untuk HLT, dan XX adalah nibble yang tak diperdulikan karena HLT
bukan instruksi rujukan – memori.
Selanjutnya, susunlah saklar-saklat alamat dan data sebagai berikut :
Alamat Data
DDDD DDDD UUUU
DDDU DDDU UUUD
DDUD UUUU XXXX
Setiap kali setelah selesai menyusun suatu alamat dan kata- data, tekanlah tombol
“tulis” (write). Karena D menyimpan biner 0 dan U menyimpan biner 1, tiga lokasi
memori yang pertama sekarang mempunyai isi :
Alamat Data
0000 0000 1111
0001 0001 1110
0010 1111 XXXX
Suatu hal lagi yang perlu diketahui dalam penyusunan program adalah bahwa
bahasa asembli (assembly language) menyangkut tata cara penulisan program dan
mnemonik, sedangkan bahasa mesin (macine language) menyangkut tata cara
penulisan dengan bilangan 0 dan 1.
A. Pengendali Pengurut (Control Unit)
Blok terbawah di bagian kiri berisi Pengendali Pengurut. Pengendali Pengurut
atau Controller Sequencer yang disingkat CON merupakan unit pengendali
keseluruhan. Sebelum komputer bekerja, sinyal-sinyal CLR masing-masing
dikirimkan ke pencacah program dan register instruksi. Sebagai akibatnya, pencacah
program direset ke 0000 dan bersamaan ini instruksi terakhir dalam register instruksi
dihapus.
Sebuah sinyal detak CLK dikirimkan ke semua register bufer; sinyal ini
mensinkronkan operasi komputer, yang menjamin bahwa setiap langkah operasi akan
terjadi sebagaimana mestinya. Dengan kata lain, semua transfer dalam regiter terjadi
pada tepi positif dari sinyal detak CLK yang sama. Perhatikan bahwa sinyal CLK juga
memasuki pencacah program.
4. Data 12-bit yang berasal dari Pengendali Pengurut membentuk suatu kata
pengendalian komputer (seperti seorang pengawas yang memberitahu tentang apa
yang harus dikerjakan). 12 kawat yang menyalurkan kata kendali itu disebut bus
kendali (control bus). Kata kendali mempunyai format sbb:
CON = CpEp LM CE L1 E 1 LAEA SuEu LB Lo
Kata ini menentukan bagaimana register-register harus bereaksi terhadap tepi
positif sinyal detak berikutnya. Misalnya, Ep tinggi dan L M rendah berarti bahwa isi
pencacah program ditahan di dalam MAP pada tepi positif berikutnya. Sebagai contoh
yang lain, CE dan LA yang rendah berrati kata RAM yang telah ditunjuk alamatnya
akan ditransfer ke akumulator pada tepi positif berikutnya dari lonceng. Kelak kita
akan mempelajari diagram pewaktuan yang bersangkutan untuk melihat tepatnya
kapan dan bagaimana transfer data ini dilakukan.
3. Percobaan
Membuat program PC (Program Counter)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
entity PC is
Port ( nCLK : in STD_LOGIC;
nCLR : in STD_LOGIC;
Cp : in STD_LOGIC;
Ep : in STD_LOGIC;
BUS_Low : out STD_LOGIC_VECTOR (3 downto 0);
T : out STD_LOGIC_VECTOR (2 downto 0));
end PC;
architecture Behavioral of PC is
signal q: STD_LOGIC_VECTOR (3 downto 0):="0000";
signal sig_T: STD_LOGIC_VECTOR (2 downto 0):="000";
begin
process(nCLK, nCLR, Cp,Ep)
begin
if falling_edge(nCLK) then
if Cp = '1' then q <= q+1; end if;
if nCLR = '1' then q <= "0000"; end if;
sig_T <= sig_T + 1;
if sig_T = "110" then sig_T <= "000"; end if;
end if;
end process;
T <= sig_T;
BUS_Low <= q when Ep='1' else "ZZZZ";
end Behavioral;
5. Membuat program MAR
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MAR is
Port ( CLK : in STD_LOGIC;
nLm : in STD_LOGIC;
inMAR : in STD_LOGIC_VECTOR (3 downto 0);
outMAR : out STD_LOGIC_VECTOR (3 downto 0));
end MAR;
architecture Behavioral of MAR is
signal mar : STD_LOGIC_VECTOR (3 downto 0);
begin
process(CLK, nLm)
begin
if rising_edge(CLK) then
if nLm = '0' then outMAR <= inMAR; end if;
end if;
end process;
end Behavioral;
Membuat program RAM
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity RAM is
Port ( nCe : in STD_LOGIC;
inRAM : in STD_LOGIC_VECTOR (3 downto 0);
outRAM : out STD_LOGIC_VECTOR (7 downto 0));
end RAM;
architecture Behavioral of RAM is
signal ROM : STD_LOGIC_VECTOR (7 downto 0);
begin
process(inRAM)
begin
case inRAM is
when "0000" => ROM <= "00001001"; -- LDA 9h
when "0001" => ROM <= "00011010"; -- ADD 10h
when "0010" => ROM <= "00101011"; -- SUBB 11h
when "0011" => ROM <= "11100000"; -- OUT
when "0100" => ROM <= "11110000"; -- Halt
when "0101" => ROM <= "00000000";
when "0110" => ROM <= "00000001";
when "0111" => ROM <= "00000010";
when "1000" => ROM <= "00000011";
when "1001" => ROM <= "00000111"; -- 7
when "1010" => ROM <= "00000010"; -- 2
when "1011" => ROM <= "00000101"; -- 5
when "1100" => ROM <= "00000010";
when "1101" => ROM <= "00000000";
when "1110" => ROM <= "00000000";
when "1111" => ROM <= "11110000";
when others => ROM <= "00000000";
end case;
end process;
6. outRAM <= ROM when nCe='0' else "ZZZZZZZZ";
end Behavioral;
Membuat program IR (Intruction Register)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity IR is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
nLi : in STD_LOGIC;
nEi : in STD_LOGIC;
inIR : in STD_LOGIC_VECTOR (7 downto 0);
outIRlow : out STD_LOGIC_VECTOR (3 downto 0);
outIRhigh : out STD_LOGIC_VECTOR (3 downto 0));
end IR;
architecture Behavioral of IR is
signal regBuff : STD_LOGIC_VECTOR (7 downto 0);
begin
process (CLK,CLR)
begin
if rising_edge(CLK) then
if CLR = '1' then
regBuff <="00000000";
outIRlow <="ZZZZ";
elsif nLi='0' then
regBuff <= inIR;
outIRlow <= "ZZZZ";
end if;
end if;
end process;
outIRlow <= regBuff(3 downto 0) when nEi='0' else "ZZZZ";
outIRhigh <= regBuff(7 downto 4);
end Behavioral;
Membuata program regA (RegisterA)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity regA is
Port ( CLK : in STD_LOGIC;
nLa : in STD_LOGIC;
Ea : in STD_LOGIC;
inA : in STD_LOGIC_VECTOR (7 downto 0);
outA : out STD_LOGIC_VECTOR (7 downto 0);
regACC : out STD_LOGIC_VECTOR (7 downto 0));
end regA;
architecture Behavioral of regA is
signal sigA : STD_LOGIC_VECTOR (7 downto 0);
begin
process (CLK)
begin
if rising_edge(CLK) then
if nLa='0' then
sigA <= inA;
end if;
7. end if;
end process;
outA <= sigA when Ea='1' else "ZZZZZZZZ";
regACC <= sigA;
end Behavioral;
Membuat program ALU (Adder)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
use IEEE.STD_LOGIC_arith.ALL;
entity ALU is
Port ( Su : in STD_LOGIC;
Eu : in STD_LOGIC;
inA : in STD_LOGIC_VECTOR (7 downto 0);
inB : in STD_LOGIC_VECTOR (7 downto 0);
result : out STD_LOGIC_VECTOR (7 downto 0));
end ALU;
architecture Behavioral of ALU is
signal hasil: STD_LOGIC_VECTOR (7 downto 0);
begin
hasil <= inA+inB when Su='0' else inA-inB;
result <= hasil when Eu='1' else "ZZZZZZZZ";
end Behavioral;
Membuat program regB (RegisterB)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity regB is
Port ( CLK : in STD_LOGIC;
nLb : in STD_LOGIC;
inB : in STD_LOGIC_VECTOR (7 downto 0);
outB : out STD_LOGIC_VECTOR (7 downto 0));
end regB;
architecture Behavioral of regB is
begin
process (CLK)
begin
if rising_edge(CLK) then
if nLb = '0' then outB <= inB;
end if;
end if;
end process;
end Behavioral;
Membuat program outReg (RegisterOut)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity outReg is
Port ( CLK : in STD_LOGIC;
nLo : in STD_LOGIC;
8. inReg : in STD_LOGIC_VECTOR (7 downto 0);
LED : out STD_LOGIC_VECTOR (7 downto 0));
end outReg;
architecture Behavioral of outReg is
begin
process (CLK)
begin
if rising_edge(CLK) then
if nLo='0' then
LED <= inReg;
end if;
end if;
end process;
end Behavioral;
Membuat program CU (Control Unit)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity CU is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
opcode : in STD_LOGIC_VECTOR (3 downto 0);
ctrl_bus : out STD_LOGIC_VECTOR (11 downto
0):="001111100011"
);
end CU;
architecture Behavioral of CU is
type state_type is (t1,t2,t3,t4,t5,t6);
signal t_state: state_type;
begin
process(CLK,CLR)
begin
if CLR ='1' then t_state <=t1;
elsif rising_edge(CLK) then
case t_state is
when t1 => t_state <=t2;
when t2 => t_state <=t3;
when t3 => t_state <=t4;
when t4 => t_state <=t5;
when t5 => t_state <=t6;
when t6 => t_state <=t1;
end case;
end if;
end process;
process(clk)
begin
if falling_edge(CLK) then -- Cp, Ep, nLm, nCe, nLi, nEi,
nLa, Ea, Su, Eu, nLb, nLo
case opcode is
when "0000" => -- LD A
case t_state is
when t1 => ctrl_bus
<="010111100011";
when t2 => ctrl_bus
<="101111100011";
9. when t3 => ctrl_bus
<="001001100011";
when t4 => ctrl_bus
<="000110100011";
when t5 => ctrl_bus
<="001011000011";
when t6 => ctrl_bus
<="001111100011"; --No Operation
end case;
when "0001" => -- ADD
case t_state is
when t1 => ctrl_bus
<="010111100011";
when t2 => ctrl_bus
<="101111100011";
when t3 => ctrl_bus
<="001001100011";
when t4 => ctrl_bus
<="000110100011";
when t5 => ctrl_bus
<="001011100001";
when t6 => ctrl_bus
<="001111000111";
end case;
when "0010" => -- SUBB
case t_state is
when t1 => ctrl_bus
<="010111100011";
when t2 => ctrl_bus
<="101111100011";
when t3 => ctrl_bus
<="001001100011";
when t4 => ctrl_bus
<="000110100011";
when t5 => ctrl_bus
<="001011100001";
when t6 => ctrl_bus
<="001111001111";
end case;
when "1110" => -- OUT
case t_state is
when t1 => ctrl_bus
<="010111100011";
when t2 => ctrl_bus
<="101111100011";
when t3 => ctrl_bus
<="001001100011";
when t4 => ctrl_bus
<="001111110010";
when t5 => ctrl_bus
<="001111100011";
when t6 => ctrl_bus
<="001111100011";
end case;
when "1111" => -- OUT
case t_state is
when t1 => ctrl_bus
<="010111100011";
when t2 => ctrl_bus
<="101111100011";
10. when t3 => ctrl_bus
<="001001100011";
when t4 => ctrl_bus
<="001111100011";
when t5 => ctrl_bus
<="001111100011";
when t6 => ctrl_bus
<="001111100011";
end case;
when others => ctrl_bus <="001111100011";
end case;
end if;
end process;
end Behavioral;
Membuat program SAP1
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity SAP1 is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
T : out STD_LOGIC_VECTOR (2 downto 0);
outCU : out STD_LOGIC_VECTOR (11 downto 0);
wbus : out STD_LOGIC_VECTOR (7 downto 0);
LED : out STD_LOGIC_VECTOR (7 downto 0) );
end SAP1;
architecture Behavioral of SAP1 is
component PC is
Port ( nCLK : in STD_LOGIC;
nCLR : in STD_LOGIC;
Cp : in STD_LOGIC;
Ep : in STD_LOGIC;
BUS_Low : out STD_LOGIC_VECTOR (3 downto 0);
T : out STD_LOGIC_VECTOR (2 downto 0) );
end component;
component MAR is
Port ( CLK : in STD_LOGIC;
nLm : in STD_LOGIC;
inMAR : in STD_LOGIC_VECTOR (3 downto 0);
outMAR : out STD_LOGIC_VECTOR (3 downto 0));
end component;
component RAM is
Port ( nCe : in STD_LOGIC;
inRAM : in STD_LOGIC_VECTOR (3 downto 0);
outRAM : out STD_LOGIC_VECTOR (7 downto 0));
end component;
component IR is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
nLi : in STD_LOGIC;
nEI : in STD_LOGIC;
inIR : in STD_LOGIC_VECTOR (7 downto 0);
outIRlow : out STD_LOGIC_VECTOR (3 downto 0);
outIRhigh : out STD_LOGIC_VECTOR (3 downto 0));
end component;
component CU is
Port ( CLK : in STD_LOGIC;
11. CLR : in STD_LOGIC;
opcode : in STD_LOGIC_VECTOR (3 downto 0);
ctrl_bus : out STD_LOGIC_VECTOR (11 downto 0));
end component;
component regA is
Port ( CLK : in STD_LOGIC;
nLa : in STD_LOGIC;
Ea : in STD_LOGIC;
inA : in STD_LOGIC_VECTOR (7 downto 0);
outA : out STD_LOGIC_VECTOR (7 downto 0);
regACC : out STD_LOGIC_VECTOR (7 downto 0));
end component;
component ALU is
Port ( Su : in STD_LOGIC;
Eu : in STD_LOGIC;
inA : in STD_LOGIC_VECTOR (7 downto 0);
inB : in STD_LOGIC_VECTOR (7 downto 0);
result : out STD_LOGIC_VECTOR (7 downto 0));
end component;
component regB is
Port ( CLK : in STD_LOGIC;
nLb : in STD_LOGIC;
inB : in STD_LOGIC_VECTOR (7 downto 0);
outB : out STD_LOGIC_VECTOR (7 downto 0));
end component;
component outReg is
Port ( CLK : in STD_LOGIC;
nLo : in STD_LOGIC;
inReg : in STD_LOGIC_VECTOR (7 downto 0);
LED : out STD_LOGIC_VECTOR (7 downto 0));
end component;
signal sig_bus : STD_LOGIC_VECTOR (7 downto 0):="00000000";
signal sig_MARtoRAM : STD_LOGIC_VECTOR (3 downto 0):="0000";
signal AtoAlu : STD_LOGIC_VECTOR (7 downto 0):="00000000";
signal BtoAlu : STD_LOGIC_VECTOR (7 downto 0):="00000000";
signal IRtoCU : STD_LOGIC_VECTOR (3 downto 0):="0000";
signal ctrl_bus : STD_LOGIC_VECTOR (11 downto
0):="001111100011";
begin
u1: PC port map(
nCLK => CLK,
nCLR => CLR,
Cp => ctrl_bus(11), --Cp,
Ep => ctrl_bus(10), --Ep,
BUS_Low => sig_bus(3 downto 0),
T => T
); -- untuk monitoring State
u2: MAR port map(
CLK => CLK,
nLm => ctrl_bus(9), --nLm,
inMAR => sig_bus(3 downto 0),
outMAR => sig_MARtoRAM );
u3: RAM port map(
nCe => ctrl_bus(8), --nCe,
inRAM => sig_MARtoRAM,
outRAM => sig_bus );
u4: IR port map(
12. CLK => CLK,
CLR => CLR,
nLi => ctrl_bus(7), --nLi,
nEi => ctrl_bus(6), --nEi,
inIR => sig_bus,
outIRlow => sig_bus(3 downto 0),
outIRhigh => IRtoCU );
u6: regA port map(
CLK => CLK,
nLa => ctrl_bus(5), --nLa,
Ea => ctrl_bus(4), --ea,
inA => sig_bus,
outA => sig_bus,
regACC => AtoAlu );
u7: ALU port map(
Su => ctrl_bus(3), --Su,
Eu => ctrl_bus(2), --Eu,
inA => AtoAlu,
inB => BtoAlu,
result => sig_bus );
u8: regB port map(
CLK => CLK,
nLb => ctrl_bus(1), --nLb,
inB => sig_bus,
outB => BtoAlu );
u9: outReg port map(
CLK => CLK,
nLo => ctrl_bus(0), --nLo,
inReg => sig_bus,
LED => LED );
u5: CU port map(
CLK => CLK,
CLR => CLR,
opcode => IRtoCU,
ctrl_bus => ctrl_bus );
wbus <= sig_bus;
outCU <= ctrl_bus;
end Behavioral;
Membuat program Simulasi SAP1
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY SAP1_CU_tb IS
END SAP1_CU_tb;
ARCHITECTURE behavior OF SAP1_CU_tb IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT SAP1
PORT(
CLK : IN std_logic;
CLR : IN std_logic;
T : OUT std_logic_vector(2 downto 0);
outCU : OUT std_logic_vector(11 downto 0);
wbus : OUT std_logic_vector(7 downto 0);
LED : OUT std_logic_vector(7 downto 0)
13. );
END COMPONENT;
--Inputs
signal CLK : std_logic := '0';
signal CLR : std_logic := '0';
--Outputs
signal T : std_logic_vector(2 downto 0):="000";
signal outCU : std_logic_vector(11 downto 0):="000000000000";
signal wbus : std_logic_vector(7 downto 0):="00000000";
signal LED : std_logic_vector(7 downto 0):="00000000";
-- Clock period definitions
constant CLK_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: SAP1 PORT MAP (
CLK => CLK,
CLR => CLR,
T => T,
outCU => outCU,
wbus => wbus,
LED => LED
);
-- Clock process definitions
CLK_process :process
begin
CLK <= '0';
wait for CLK_period/2;
CLK <= '1';
wait for CLK_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
CLR <= '1'; wait for CLK_period;
CLR <= '0';
wait for CLK_period*30;
end process;
END;
14. Hasil Simulasi LDA
Hasil Simulasi ADD
Hasil Simulasi SUBB
Hasil Simulasi OUT
Hasil Simulasi HALT
15. 4. Latihan
a. Terjemahkan program dari Contoh 1 ke dalam bahasa mesin SAP-1.
b. Bagaimana cara memprogram SAP-1 untuk menyelesaikan persoalan aritmetik
ini? 16 + 20 + 24 – 32
Bilangan ini diberikan dalam bentuk desimal.
mengubah data desimal kedalam data heksa desimal untuk mendapatkan versi bahasa
assembly
c. Tuliskan program pada Contoh 3 dalam bentuk ringkas heksadesimal.
5. Analisa
Komputer SAP-1 (Simple As Possible) adalah komputer sederhana yang
berorganisasi yang dirancang untuk memperkenalkan semua gagasan penting
dibalik operasi komputer tanpa membenamkan ke dalam kerumitan yang tidak perlu.
SAP-1 merupakan tahap pertama dalam evolusi kearah pengembangan komputer-
komputer modern.
Pada praktikum ini yaitu membuat program siklus pengambilan SAP1. Dalam
program ini menggunakan beberapa program lainnya seperti RAM, MAR, IR, dan
PC untuk membangun sebuah program SAP1. SAP1 adalah sebagai top modul.
Pencacah Program (Program Counter) berfungsi untuk menyimpan program
pada bagian awal memori. Instruksi pertama disimpan pada alamat 0000, instruksi
kedua disimpan pada alamat 0001, instruksi ketiga disimpan pada alamat 0010,
dstPencacah program akan mencacah dari 0000 sd 1111. Tugas PC untuk
mengirimkan ke memori alamat instruksi berikutnya yang akan diambil dan
dieksekusi. Program Counter (PC) direset ke 0000 setiap kali komputer
dijalankanSaat komputer dijalankan: PC mengirimkan alamat 0000 ke memori.
16. Kemudian PC meng-increment cacahannya menjadi 0001Setelah isi alamat 0000
diambil dan dieksekusi, PC mengirimkan alamat 0001 ke memori. Pencacah
menaikkan cacahannya kembaliSetelah instruksi pada alamat 0001 diambil dan
dieksekusi, PC mengirimkan lagi alamat 0010 ke memori. Dan seterusnya sampai
dengan instruksi terakhir dieksekusi.
Masukan dan MAR Singkatan dari Memory Address Register merupakan
register yang digunakan untuk menahan (latched) alamat data yang akan dibaca dari
RAM kemudian MAR mengirimkan alamat 4-bit ke dalam RAM, dimana operasi
membaca dilaksanakan. Pada saat komputer bekerja, RAM menerima alamat 4-bit
dari MAR dan kemudian operasi membaca dilaksanakanProsesnya: instruksi dan
kata yang ada dalam RAM ditempatkan pada bus W untuk digunakan oleh beberapa
bagian lain komputer. Register instruksi merupakan bagian dari unit kendaliUntuk
mengambil sebuah instruksi dari memori, komputer melakukan operasi membaca
memori hasilnya dimuat ke bus W kemudian masuk ke register instruksi.
Dalam praktikum kali ini terdapat 3 keadaan T4, T5, dan T6 yang merupakan
siklus eksekusi dari SAP1. Pada intruksi LDA hnaya T4(alamat memori dikirim
dari register intruksi ke MAR) dan T5(data memori diambil dari register intruksi ke
akumulator) yang aktif. Pada intruksi ADD dan SUB 3 keadaan aktif semua dan data
diambil dari memori dan dijumlahkan dengan akumulator hasilnya akan disimpan di
kembali ke akumulator. Sedangkan untuk intruksi OUT hanya memerlukan satu
tahap T4 yaitu memindahkan data dari akumulator ke dalam register keluaran, dan
pengendali/pengurut akan mengirim nilai ke CON.
6. Kesimpulan
SAP adalah software yang berbasis ERP (Enterprise Resources Planning) yang
digunakan sebagai alat untuk membantu manajemen perusahaan, perencanaan,
hingga melakukan operasionalnya LDA merupakan instruksi yang berfungsi untuk
menyimpan sebuah nilai dari alamat tertentu. ADD dan SUB merupakan sebuah
instruksi aritmatika yang berarti penjumlahan dan pengurangan. OUT berfungsi
untuk menampilkan hasil dari proses komputasi serta HLT berarti instruksi untuk
menghentikan sebuah proses pada alamat tertentu.