VHDL Veri Tipleri – std_logic ve std_logic_vector Tipleri

Aşağıda örnek std_logic tipinde signal bildirimleri verilmiştir:

signal clk : std_logic := baslangic_degeri;

Bu veri tipin kullanımı için VHDL kodumuzda, aşağıda verilen sözdizimi kütüphane kısmına eklenmelidir.

library ieee;
use ieee.std_logic_1164.all;

std_logic tipi ile bit tipi arasındaki temel fark std_logic tipinin sahip olabileceği durumların sayısının bit tipine oranla daha fazla olmasıdır. Bu açıklamada özellikle durum kelimesinin seçilmesinin yegâne nedeni, tanımlanan veri tipine göre sentezlenecek devrenin alabileceği değerlerin sadece 1 ve 0’dan ibaret olmamasıdır.  std_logic veri nesnesinin alabileceği değerler ve bu değerlerin sentezlenebilirlik durumları  Tablo 1’de verilmiştir.

Tablo 1  std_logic veri nesnesinin alabileceği değerler ve sentezlenebilirlik durumu

DeğerlerAçıklamaSentezlenebilir
0Güçlü 0+
1Güçlü 1+
ZYüksek Empedans+
XBilinmeyen+
Önemsiz
LZayıf 0
HYüksek 1
UTanımlanmamış
WZayıf Bilinmeyen

Tablo 1’den de görüleceği üzere, ilk dört değer lojik devre sentezinde kullanılabilmektedir. Diğerleri ise sadece benzetim programlarında kullanılabilmektedir. Aşağıda örnek signal bildirimleri verilmiştir. saat sinyali tek bitlik std_logic tipinde, hex_kelime 4 bitlik std_logic_vector tipinde ve kelime_12 12 bitlik std_logic_vector tipinde sinyallerdir. Aynı şekilde bu tanımlamalar variable ve constant için de yapılabilir.

signal saat : std_logic;
signal hex_kelime : std_logic_vector(0 to 3);
signal kelime_12 : std_logic_vector(11 downto 0);

std_logic_vector türü üzerinde temel aritmetik işlemleri yapabilmek için VHDL kodunda aşağıda verilen kütüphanenin eklenmesi gerekmektedir. Bu sayede temel aritmetik işlemleri gerçekleştirmek mümkün olmaktadır.

use ieee.std_logic_signed.all;

std_logic_signed paketi, “+, , *” gibi aritmetik operatörlerin std_logic_vector sinyalleri ile kullanımına olanak sağlamaktadır. VHDL sentezleyicisi bu paket kullanıldığı zaman işaretli sayılar için devre oluşturacaktır. Bu pakete alternatif olarak std_logic_unsigned kullanılabilir. Bu durumda sentezleyici işaretsiz sayılar için devre oluşturacaktır. Aşağıda “+, , *” işlemlerinin kullanıldığı ornek_std_logic.vhd VHDL kodu verilmiştir.

Kodda görüleceği üzere 1. satırda IEEE kütüphanelerinin kullanılacağına ilişkin bildirim yapılmaktadır. 2. satır da std_logic veri tipinin kullanımı içine gerekli kütüphane bildirimi yapılmaktadır. 3. satırda yapılan tanımlama ile std_logic veri tipinde toplama ve çarpma işlemlerinin yapılması sağlanmaktadır. ornek_std_logic varlığının port tanımlama işlemleri 6-12. satırlar arasında yapılmıştır. in_giris_1 ve in_giris_2 giriş portları 2 bitlik std_logic_vector tipindedir. Toplam ve çıkarma işlemlerinin sonuçları yine 2 bitlik olacağından dolayı out_cikis_toplam ve out_cikis_fark çıkış portları 2 bitlik std_logic_vector tipindedir. Çarpma işleminin sonuçları çarpılacak olan değerlerin toplam bit sayısına eşit olması gerekmektedir. Bu nedenle out_cikis_carpim çıkış portu 4 bitlik std_logic_vector tipindedir. 19. satırda in_giris_1 girişi ile in_giris_2 girişi toplanarak out_cikis_toplam çıkış portuna atanmaktadır. 20. satırda in_giris_1 girişinden in_giris_2 girişi çıkarılarak out_cikis_fark çıkış portuna atanmaktadır. 21. satırda in_giris_1 girişi ile in_giris_2 girişi çarpılarak out_cikis_carpim çıkış portuna atanmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_SIGNED.all;

entity ornek_std_logic is
  port(
    in_giris_1 : in  std_logic_vector(1 downto 0);
    in_giris_2 : in std_logic_vector(1 downto 0);
    out_cikis_toplam : out std_logic_vector(1 downto 0);
    out_cikis_fark : out std_logic_vector(1 downto 0);
    out_cikis_carpim : out std_logic_vector(3 downto 0)
  );
end ornek_std_logic;
 
architecture Behavioral of ornek_std_logic is
 
begin
 
  out_cikis_toplam <= in_giris_1 + in_giris_2;
  out_cikis_fark <= in_giris_1 - in_giris_2;
  out_cikis_carpim <= in_giris_1 * in_giris_2;
 
end Behavioral;

Bir yanıt yazın

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