FPGA FPGA İle 8×8 Bitlik Memory ve Register Tasarımı By Buğra Unutmaz Posted on 13 Aralık 2017 5 min read 0 3 2,866 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr 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