library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;
use ieee.std_logic_unsigned.all;
--******************************************************************************
--** AckReg
--**
--** Deskripsi: Ini digunakan untuk menjaga nilai dari isyarat acknowledgement
--**            dimana suatu intrupsi sedang diproses. Ketika clock
--**            high dibandingkan kemudian intrupsi acknowledged diset
--**            dalam register AckReg. Isyarat acknowledgement kemudian 
--**            dikirim keluar pada clock positif.
--******************************************************************************
ENTITY AckReg IS
    PORT(Ack                            : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
         clk                            : IN STD_LOGIC;
         AckSignals                     : OUT STD_LOGIC_VECTOR(5 DOWNTO 0));
END ENTITY AckReg;

ARCHITECTURE AckReg_behav OF AckReg IS
BEGIN
    name : PROCESS(clk) IS
    
  --Variabel ini digunakan untuk menjaga nilai dari acknowledgements
  --Nilai ini semua bernilai nol.
    VARIABLE regValue                : STD_LOGIC_VECTOR(5 DOWNTO 0) := "000000";
    
    BEGIN
        IF(clk='1') THEN
            
            --Jika clock high, kemudian menset acknowledgement
            --register ke nilai dari acknowledgement sekarang dan mengeluarkan hasil.
            regValue := Ack;
            AckSignals <= regValue;
        END IF;
    END PROCESS name;
END ARCHITECTURE AckReg_behav;
