3. Kütüphaneler (Libraries)
• use IEEE.std_logic_1164.all;
std_logic, std_logic_vector türleri ile ilgili fonksiyonları
içerir.
• use IEEE.numeric_std.all;
std_logic_arith kütüphanesinin alternatifidir.
• use IEEE.std_logic_signed.all;
işaretli aritmetik fonksiyonları içerir.
• use IEEE.std_logic_arith.all;
signed, unsigned, integer ve std_logic_vector türleri
için aritmetik, dönüştürme ve karşılaştırma
fonksiyonlarını içerir.
VHDL tasarımda kullanılacak
kodların işlevlerini içeren yapılardır.
3
Dr. Serkan DERELİ (dereli@subu.edu.tr)
4. Varlık (Entity)
entity Uyg41 is
Port (
clk : in std_logic;
rst : in std_logic;
sayi_16b : in std_logic_vector(15 downto 0);
say1_8b : out std_logic_vector(7 downto 0);
say2_8b : out std_logic_vector(7 downto 0)
);
end Uyg41;
Tasarımın giriş değerleri ile çıkış
değerlerinin tanımlandığı
bölümdür.
4
Dr. Serkan DERELİ (dereli@subu.edu.tr)
5. Mimari (Architecture)
1. architecture Behavioral of Uyg41 is
2. – sinyal ve değişken tanımlamaları
3. begin
4. process1(clk,rst);
5. process2(say);
6. process3(esit);
7. …
8. end Behavioral;
• Yapılan bir tasarımın ne iş
yaptığı tam olarak bu bölümde
tanımlanmaktadır.
• Tasarlanan sistemin sıralı veya
paralel bir şekilde çalışacağı da
bu bölümde ortaya çıkmaktadır.
5
Dr. Serkan DERELİ (dereli@subu.edu.tr)
6. ÖRNEK 4.1.
Girişine gelen 16-bitlik sayıyı 8-bit ve 8-bit olmak
üzere ikiye bölerek çıkışa aktaran VHDL tasarımı
gerçekleştiriniz.
6
Dr. Serkan DERELİ (dereli@subu.edu.tr)
7. Örnek 4.1.VHDL Kod
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-–varlık tanımlaması
entity Uyg41 is
Port (
clk : in std_logic;
rst : in std_logic;
sayi_16b : in std_logic_vector(15 downto 0);
say1_8b : out std_logic_vector(7 downto 0);
say2_8b : out std_logic_vector(7 downto 0)
);
end Uyg41;
–mimari tanımlaması
architecture Behavioral of Uyg41 is
begin
process(clk, rst)
begin
if (rst = '1') then
say1_8b <= (others => '0');
say2_8b <= (others => '0');
elsif rising_edge(clk) then
say1_8b <= sayi_16b(7 downto 0);
say2_8b <= sayi_16b(15 downto 8);
end if;
end process;
end Behavioral;
7
Dr. Serkan DERELİ (dereli@subu.edu.tr)
11. 1) Sinyaller
- Sayısal bir tasarımda bloklar
arasındaki bağlantıları sağlayan
nesnelerdir.
- Sinyaller; paket, mimari (architecture)
ve varlık (entity) içerisinde
tanımlanabilir.
- “process”, “procedure” ve “function”
içerisinde tanımlanamazlar.
- Sadece tanımlandığı blok içerisinde
aktiftirler.
11
Dr. Serkan DERELİ (dereli@subu.edu.tr)
12. Sinyaller
ÖRNEK 4.2.
Sisteme gelen 8-bitlik bir sayının pozitif mi yoksa
negatif mi olduğunu çıkışa aktaran tasarımı
yapınız.
12
Dr. Serkan DERELİ (dereli@subu.edu.tr)
14. Örnek 4.2.VHDL Kod (Sinyal)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity isaret_biti is
Port (
clk: in std_logic;
rst: in std_logic;
sayi: in std_logic_vector(7 downto 0);
isaret: out std_logic
);
end isaret_biti;
–mimari tanımlaması
architecture Behavioral of isaret_biti is
signal msb_bit: std_logic;
begin
process(clk,rst begin
if rst='1' then
isaret <= 'U';
elsif rising_edge(clk) then
msb_bit <= sayi(7);
if msb_bit='1' then
isaret <= '1';
else
isaret <= '0';
end if;
end if;
end process;
end Behavioral;
14
Dr. Serkan DERELİ (dereli@subu.edu.tr)
16. 1) Değişkenler (Variable)
- Sadece process içerisinde
erişilebilir.
- Değeri hızlıca değişebilen ve en
son değeri muhafaza edebilen
yapılardır.
- Dolayısıyla signal nesnesi ile
arasındaki en önemli fark içeriğinin
hemen güncellenebilmesidir.
16
Dr. Serkan DERELİ (dereli@subu.edu.tr)
17. Değişkenler (Variable)
ÖRNEK 4.3.
Sisteme gelen 8-bitlik bir sayının pozitif mi yoksa
negatif mi olduğunu çıkışa aktaran tasarımı
yapınız.
17
Dr. Serkan DERELİ (dereli@subu.edu.tr)
19. Örnek 4.3.VHDL Kod (Sinyal)
varlıktanımlaması
ibrary IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity isaret_biti is
Port (
clk: in std_logic;
rst: in std_logic;
sayi: in std_logic_vector(7 downto 0);
isaret: out std_logic
);
end isaret_biti;
–mimari tanımlaması
architecture Behavioral of isaret_biti is
begin
process(clk,rst)
variable msb_bit: std_logic;
begin
if rst='1' then
isaret <= 'U';
elsif rising_edge(clk) then
msb_bit := sayi(7);
if msb_bit='1' then
isaret <= '1';
else
isaret <= '0';
end if;
end if;
end process;
end Behavioral;
19
Dr. Serkan DERELİ (dereli@subu.edu.tr)
21. Sinyal ve Değişken Farkı
- Değişken hemen değişir sinyal ise
process in sonunda değişir.
- Sinyal, en son atanan değeri alır.
Örneğin yanda önce A sonra C atanmış
olduğundan C değeri ile işlem yapmıştır.
21
Dr. Serkan DERELİ (dereli@subu.edu.tr)
22. Sabitler (Constant)
- Signal ve variable nesnelerinin
aksine değeri sonradan
değiştirilemez.
- Kodun okunabilirliğini
artırdığından dolayı son derece
kullanışlı bir nesnedir.
22
Dr. Serkan DERELİ (dereli@subu.edu.tr)
23. Sabitler (Constant)
ÖRNEK 4.4.
Girişteki anahtar bitinin «1» olması ile beraber
0 – 13 arası sayma işlemi yapan sayıcı tasarımını
yapınız.
23
Dr. Serkan DERELİ (dereli@subu.edu.tr)
25. Örnek 4.4.VHDL Kod
(Sabitler)
architecture Behavioral of sayici is
constant ust: std_logic_vector(3 downto 0):="1101";
begin
process (clk,rst)
variable say : std_logic_vector(3 downto 0) := (others=>'0');
variable an : std_logic := '0'; -------------------------------
begin
if (rst='1') then
say := (others=>'0');
elsif rising_edge(clk) then
an := anahtar; ------------------------------------------
if an='1' then
say := say + 1;
if say=ust then
say := "0000";
end if;
else
null;
end if;
cik <= say;
end if;
end process;
end Behavioral;
Varlıktanımlaması
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity sayici is
Port (
clk: in std_logic;
rst: in std_logic;
anahtar: in std_logic;
cik: out std_logic_vector(3 downto 0)
);
end sayici;
25
Dr. Serkan DERELİ (dereli@subu.edu.tr)
27. Örnek 4.4.VHDL Kod
(Sinyal Kullanımı)
architecture Behavioral of sayici is
constant ust: std_logic_vector(3 downto 0):="1101";
signal an: std_logic := '0'; --------------------------------------
begin
process(clk,rst)
variable say : std_logic_vector(3 downto 0) := (others=>'0');
--variable an : std_logic := '0';
begin
if (rst='1') then
say := (others=>'0');
elsif rising_edge(clk) then
an <= anahtar; -------------------------------------
if an='1' then
say := say + 1;
if say="1101" then
say := "0000";
end if;
else
null;
end if;
cik <= say;
end if;
end process;
end Behavioral;
Varlıktanımlaması
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity sayici is
Port (
clk: in std_logic;
rst: in std_logic;
anahtar: in std_logic;
cik: out std_logic_vector(3 downto 0)
);
end sayici;
27
Dr. Serkan DERELİ (dereli@subu.edu.tr)