
Tasarımını yapacağımız Memory 8×8 bitlik olacaktır.
MW=1 iken yazım işlemimizi, MW=0 iken okuma işlemimizi yaptıracağız.
Data in olarak bir data girişi ve Address kısmımızdan ise adres seçimi yapılacaktır.
Çıkan sonuçlarımız, data out ile dışarı verilecektir.
Kodumuzu yazdıktan sonra da ModelSim üzerinden örnek bir simülasyonunu göstereceğim.
[php]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity memory is
port(datain : in std_logic_vector(7 downto 0);
dataout : out std_logic_vector (7 downto 0);
wr : in std_logic;
adress : in std_logic_vector(3 downto 0)
 
);
end memory;
 
architecture beh of memory is
type mem_type is array(3 downto 0) of std_logic_vector (7 downto 0);
signal mem : mem_type;
begin
process(datain,wr,adress)
begin
if(wr=’0′) then
dataout<=mem(conv_integer(adress));
elsif (wr=’1′) then
mem(conv_integer(adress))<=datain;
end if;
end process;
end beh;
[/php]
ModelSim’de gördüğünüz gibi işlemlerimizi yaptık ve Memorymiz doğru şekilde çalışıyor.
Memory tasarımımızdan sonra şimdi de Register tasarımımıza geçiyoruz.
Registerımız da 8×8 bitlik olacaktır.
RW=1 iken yazım, RW=0 iken okuma yapılacaktır.
DA yazılacak adresin seçim bitleridir. RW=1 iken kullanacağız.
AA okuma anında A çıkışında gösterilecek Registerı seçen
bitlerdir.
BA okuma anında B çıkışında gösterilecek Registerı seçen
bitlerdir.
Yani DA ile yazma yapacağız ve okumak için ise RW bitini 0 yapıp BA veya AA’yı okuyacağız.
Senkronizasyon için düşen kenarlı Clock kullanılacaktır.
Veriler D data’dan girecektir.
[php]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity register0 is
port(datain : in std_logic_vector(7 downto 0);
dataout1 : out std_logic_vector (7 downto 0);
dataout2 : out std_logic_vector (7 downto 0);
wr : in std_logic;
DA : in std_logic_vector(2 downto 0);
AA : in std_logic_vector(2 downto 0);
BA : in std_logic_vector(2 downto 0) );
end register0;
architecture beh of register0 is
type mem_type is array(7 downto 0) of std_logic_vector (7 downto 0);
signal mem : mem_type;
begin
process(datain,wr,DA,AA,BA)begin
if(wr=’1′) then
mem(conv_integer(DA))<=datain;
elsif (wr=’0′) then
dataout1<=mem(conv_integer(AA));
dataout2<=mem(conv_integer(BA));
end if;
end process;
end beh;
[/php]
ModelSim üzerinde Registerımızı da simulasyonunu yaptık ve doğru bir şekilde çalıştığını görmüş olduk.
Buğra UNUTMAZ