Vivado ile Nexys 4 Kartı Üzerinde Hata Ayıklama (Debug) Uygulaması

Aşğaıda verilen display.vhd VHDL kod ile tanımlı 4 bitlik giriş portunun aldığı değeri 7 Segment Displaylerde gösterilmektedir. Aynı zamanda bu kod ile Vivado programında sinyal değişlenlerinin aldığı değerleri kontrol edilebilmektedir. 26-33. satırlarda tanımlı nitelikler (attribitude) ile kod FPGA içerisinde çalışırken tanımlı sinyallerin aldığı değerleri görebilmemiz sağlanacaktır.  26-27. satırlarda tanımlı nitelikle kod içerisinde kesinlikle bulunması gerekmektedir. 29-30 ve 32-33. satırlarda tanımlı ifadelerde ise r_giris ve r_cikis sinyallerinin aldığı değerlerin izlenceği tanımlanmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
entity display is
    Port (
        in_clk : in std_logic;
        in_rst : in std_logic;
        in_giris : in std_logic_vector(3 downto 0);
        out_disp_sec : out std_logic_vector(7 downto 0);
        out_cikis : out std_logic_vector(7 downto 0)
    );
end display;
 
architecture Behavioral of display is
 
    type t_display_ekran is array (0 to 15) of std_logic_vector(7 downto 0);
    constant DISP_EKRAN : t_display_ekran := ("10000001", "11001111", "10010010",
"10000110", "11001100", "10100100", "10100000", "10001111", "10000000",
"10000100", "10001000", "11100000", "10110001", "11000010", "10110000",
"10111000");
 
    signal r_giris : std_logic_vector(3 downto 0) := (others => '0');
    signal r_cikis : std_logic_vector(7 downto 0) := (others => '0');
   
    attribute syn_keep : string;
    attribute mark_debug : string;
 
    attribute syn_keep of r_giris : signal is "true";
    attribute mark_debug of r_giris : signal is "true";   
 
    attribute syn_keep of r_cikis : signal is "true";
    attribute mark_debug of r_cikis : signal is "true";   
 
begin
   
    out_disp_sec <= "00000000";
    out_cikis <= r_cikis;
   
    process(in_clk, in_rst, in_giris)
    begin
        if in_rst = '1' then
            r_giris <= (others => '0');
            r_cikis <= (others => '0');
        elsif rising_edge(in_clk) then
            r_giris <= in_giris;
            r_cikis <= DISP_EKRAN(conv_integer(r_giris));
        end if;
    end process;
end Behavioral;

Uygulamaya ilişkin pin atama işlemlerinin yapıldığı varsayımı ile anlatıma devam edilecektir. 7 Segment Display modülünün Nexys 4 kartında çalışabilmesi için gerekli port konumları ve port standarları  Tablo 1’de verilmiştir. 

PortKonumI/O Standart
in_clkE3LVCMOS33
in_rstV10LVCMOS33
in_giris(0)U9LVCMOS33
in_giris(1)U8LVCMOS33
in_giris(2)R7LVCMOS33
in_giris(3)R6LVCMOS33
out_disp_sec(0)N6LVCMOS33
out_disp_sec(1)M6LVCMOS33
out_disp_sec(2)M3LVCMOS33
out_disp_sec(3)N5LVCMOS33
out_disp_sec(4)N2LVCMOS33
out_disp_sec(5)N4LVCMOS33
out_disp_sec(6)L1LVCMOS33
out_disp_sec(7)M1LVCMOS33
out_cikis(0)L6LVCMOS33
out_cikis(1)M2LVCMOS33
out_cikis(2)K3LVCMOS33
out_cikis(3)L4LVCMOS33
out_cikis(4)L5LVCMOS33
out_cikis(5)N1LVCMOS33
out_cikis(6)L3LVCMOS33
out_cikis(7)M4LVCMOS33
Tablo 1 Display modülünün Nexys 4 kartında bağlantıları

Sentezleme ve port tanımlama işlemleri yapıldıktan sonra Window sekmesi altında bulunan Debug seçilir (Şekil 1).

Şekil 1 Hata ayıklama işlemleri – 1

Açılan Debug penceresinde bulunan Set Up Debug pencersi seçilir (Şekil 2).

Şekil 2 Hata ayıklama işlemleri – 2

Açılan pencerede Next butonuna basılır (Şekil 3).

Şekil 3 Hata ayıklama işlemleri – 3

Niteliklerde tanımlı r_cikis ve r_giris sinyallerinin listelendiği görülmektedir. Next butonuna basılarak bir sonraki aşamaya geçilir (Şekil 4).

Şekil 4 Hata ayıklama işlemleri – 4

Next butonuna basılarak bir sonraki aşamaya geçilir (Şekil5).

Şekil 5 Hata ayıklama işlemleri – 5

Finish butonuna basılarak işlem sonlandırılır (Şekil 6).

Şekil 6 Hata ayıklama işlemleri – 6

İşlemin bitirilmesinin ardından Debug penceresinde bağlantılar görülmektedir (Şekil 7).

Şekil 7 Hata ayıklama işlemleri – 7

Var olan bağlantıyı silmek için bağlantı üzerine sağ tıklanır ve Delete seçilir. Daha sonra açılan pencereden Yes seçilirerek bağlantı silinir (Şekil 8,  Şekil 9).

Şekil 8 Hata ayıklama işlemleri – 8

Şekil 9 Hata ayıklama işlemleri – 9

Yeni bağlantı eklemek için Debug penceresinde Create Debug Port seçilir (Şekil 10).

Şekil 10 Hata ayıklama işlemleri – 10

Açılan pencerede Ok butonuna basılır (Şekil 11).

Şekil 11 Hata ayıklama işlemleri – 11

Oluşan yeni bağlantı noktasına boşta olan sinyal sürüklenerek bırakılırak yeni bağlantı oluşturulur (Şekil 12).

Şekil 12 Hata ayıklama işlemleri – 12

Bağlantı işlemlerinin tamamlanmasından sonra tüm işlemler kaydedilir. Analtıma Implementation ve Generate Bitstream aşamalarının tamamlanıp kodun FPGA’ya yüklendiği varsayımı yapılarak devam edilecektir.

Yükelme işlemini bitiminden Name penceresinde xc7a100t_0 sekmesine sağ tıklanırak Run Trigger seçilir (Şekil 13).

Şekil 13 Hata ayıklama işlemleri – 13

Anahtarlarla giriş portuna “0001” değeri gönderilmiştir. Şekil 14’den de görüleceği üzere r_giris sinyali 1 hex değerini ve r_cikis sinyali de DISP_EKRAN(1) değerini almıştırlar.

Şekil 14 Hata ayıklama işlemleri – 14

Anahtarlarla giriş portuna “1101” değeri gönderilmiştir. Şekil 15’den de görüleceği üzere r_giris sinyali d hex değerini ve r_cikis sinyali de DISP_EKRAN(14) değerini almıştırlar.

Şekil 15 Hata ayıklama işlemleri – 15

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir