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ğerler | Açıklama | Sentezlenebilir |
0 | Güçlü 0 | + |
1 | Güçlü 1 | + |
Z | Yüksek Empedans | + |
X | Bilinmeyen | + |
– | Önemsiz | – |
L | Zayıf 0 | – |
H | Yüksek 1 | – |
U | Tanımlanmamış | – |
W | Zayı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;