Transcript
Page 1: Ece Olcay Güneş& S. Berna Örs

VHDLEce Olcay Güneş & S. Berna Örs

Page 2: Ece Olcay Güneş& S. Berna Örs

Giriş• VHDL “VHSIC Hardware Description Language” ‘in

kısaltmasıdır. • VHSIC “Very High Speed Integrated Circuit” ‘in kısaltmasıdır.• VHDL dışında da pekçok donanım tasarlama dilleri mevcuttur.

Verilog, AHDL, ABEL and CUPL diğer donanım tasarlama dillerine örnek olarak gösterilebilir.

• VHDL ilk olarak 1981 yılında tasarım yöntemlerinden ve var olan teknolojiden bağımsız olarak tasarım için ABD savunma bakanlığı tarafından geliştirilmiştir. Daha sonra IEEE'yeyönlendirilmiş ilk standart hali 1983 yılında yayımlanmıştır. 1993 yılında geliştirilerek yine IEEE standart dilleri arasında yeralmıştır.

Page 3: Ece Olcay Güneş& S. Berna Örs

Sayısal lojik tasarımda VHDL kullanımı

Programın ne yapacağınıtanımla

Programın yapacağı işi nasıl yapacağınıtanımla

VHDL Program kodunu yaz

Program kodunu derle ve test et

Hedef cihazda tasarımıuygula

Page 4: Ece Olcay Güneş& S. Berna Örs

3 farklı devre tanımlama şekli kullanılır

• Yapısal (Structural): Lojik fonksiyon basit kapılar ve bunların bağlantılarıyla tanımlanır.

• Veri Akışı (Data Flow):Kapılardan işaret geçişinin nasıl olacağı tanımlanır. Yapısal ve veri akışı tanımının ikisi de devrenin iç-yapısının ayrıntılarıyla ilgilidir.

• Davranışsal (Behavioral): Kapıların tipi ve bağlantılarının nasıl olduğu ya da bunlar arasında veri akışının nasıl olacağı önemli değildir. Devrenin giriş ve o andaki durumuna göre çıkışlarının ne olacağı davranışsal tanımıoluşturur.

• Lojik devre çok basitse yapısal ve veri akışı tanımı, devre karmaşıksa, davranışsal tanımı, çoğu zaman da 3’ü bir arada kullanılır

Page 5: Ece Olcay Güneş& S. Berna Örs

Alt Bloklar• Bir tasarımı daha anlaşılabilir ve değişikliklere açık hale

getirebilmek için devreler alt bloklara ayrılır.• Daha sonra bu bloklar bütün devreyi oluşturmak üzere

uygun şekilde bağlanır.

Page 6: Ece Olcay Güneş& S. Berna Örs

VHDL tasarım birimleri

EntityEntity: VHDL’de her blok kendi başına bir devre olarak düşünülür ve entity olarak adlandırılır. Verilen bir lojik fonksiyon için bütün giriş ve çıkışlarıtanımlar. Yani lojik fonksiyonun dış dünyayla bağlantısınıtanımlar.

entity entity tanımlayıcı isport (işaret tanımlama);

end entity tanımlayıcı;

Page 7: Ece Olcay Güneş& S. Berna Örs

Port: port giriş ve çıkış işaretidir. Port ifadesi, her işaret için, port tanımlayıcı, port yönü ve port veri tipini belirlemelidir. Portda 3 yön kullanılır. Giriş için in, çıkış için out, çift yönlü portlariçin inout kullanılır. Pek çok değişik veri tipi kullanılabilir.

Veri tipleri:bit: 0 ve 1 değerini alabilirbit-vector: aynı isim altında bir dizi 0 ve 1‘i göstermek için kullanılır. Bir dizideki herbir elemanın ortak bir tanımlayıcı adıvardır. Mesela dizinin adı A ise, ilk eleman A(0)'a, ikinci eleman A(1)'e karşı düşer. integer: pozitif ya da negatif tamsayılara karşı düşernatural: 0'dan başlayıp istenen bir limit değere kadar tamsayılar için kullanılır.positive: 1'den başlayıp istenen bir limit değere kadar tamsayılar için kullanılır.Boolean: Doğru ve yanlış olmak üzere 2 değerli bir veri tipidir.

Page 8: Ece Olcay Güneş& S. Berna Örs

Entity Örneğientity Ornek is

port (A,B: in bit; Z: out naturel range 0 to 31);end Ornek;

• İlk satır yeni tanımlanacak devrenin ismini bildirir: Ornek• Son satır tanımlamanın bittiğini gösterir.• Aradaki satırlar devrenin giriş cıkışlarını tanımlar. • Port tanımında her satır bir giriş-çıkış listesi, modunu ve

veri tipini gösterir.• İlk satırın dışındaki her satır ; ile bitirilir. Port tanımının

tamamı da ; ile bitirilir.

Page 9: Ece Olcay Güneş& S. Berna Örs

Architecture

Lojik fonksiyonun işlevi architecture tarafından belirlenir. Her entity için bir architecturetanımlanır.

architecture mimari ismi of tanımlayıcı ismi isbeginlojik fonksiyonun yapacağı iş burada tanımlanır;end mimari ismi;

Page 10: Ece Olcay Güneş& S. Berna Örs

Architecture Örneğientity AND_Gate is

port(A, B: in bit; X:out bit);end entity AND_Gate;Architecture dataflow of AND_Gate isbeginX <= A and B;

end dataflow;

• İlk satır dataflow isimli mimarinin AND_Gate isimli devreye ait olduğunu gösteriyor.

• begin ve end arasındaki satırlar AND_Gate in nasıl bir işlem gerçekleyeceğini belirtir.

Page 11: Ece Olcay Güneş& S. Berna Örs

Yapısal Tanımlamalar• Tasarımımızdaki temel bloklar entity ve karşılık gelen

architecture kullanılarak tanımlandıktan sonra diğer tasarımlarda kullanılmak üzere birleştirilebilirler. Bir program içerisinde bir eleman çok kere kullanılıyorsa, buna ait entity ve architecture'i defalarca yazmak yerine component kullanılır.

• Bu işlem yapılırken alt bloklar üst bloğun içinde component olarak tanımlanırlar.

component elemanın-adı isport (uç tanımları)

end component;

Page 12: Ece Olcay Güneş& S. Berna Örs

Component Örneği

OUT1IN2

IN1

OUT2

IN4

IN3

OUT3

entity AND-OR-logic isport(IN1, IN2, IN3, IN4: in bit; OUT3: outbit);

end AND-OR-logic;architecture LogicOperation of AND-OR-logic

iscomponent AND_Gate is

port(A, B:in bit; X:out bit);end component;component OR_Gate is

port(A,B:in bit; X:out bit);end component;signal OUT1, OUT2:bit;begin

G1: AND_Gateport map (A⇒IN1, B⇒IN2,

X⇒OUT1);G2: AND_Gate

port map (A⇒IN3, B⇒IN4, X⇒OUT2);

G3: OR_Gate port map (A⇒OUT1, B⇒OUT2, X⇒OUT3);

end LogicOperation;

Ara bağlantılara karşı düşer. Entegre içinde dış bağlantısıolmayan elemanlar arasıbağlantılardır.

Page 13: Ece Olcay Güneş& S. Berna Örs

Veri Akışı Tanımlama

• Veri akışı tanımlamada temel blokların (örneğin and kapısı) girişlerinin ve çıkışlarının devre içinde nasıl bağlanacağı tanımlanır.

• İşaretlerin devre içinde nasıl akacağı tanımlanır.• Çıkışların Boole fonksiyonu ifadelerine ihtiyaç

vardır.

Page 14: Ece Olcay Güneş& S. Berna Örs

Veri Akışı Tanımlama Örneği 1

entity latch isport (s,r : in bit; q,nq :

inout bit);end latch;architecture dataflow oflatch isbeginq<=r nor nq;nq<=s nor q;

end dataflow;

Page 15: Ece Olcay Güneş& S. Berna Örs

Sayıları BCD'den Decimal'e çeviren decodertasarımı (Örnek 2)

A(0)

A(1)

A(2)

A(3)

X(0)

X(3)X(2)X(1)

X(9)

.

.

.

entity decoder is port (A: in bit-vector(0 to3); X:out bit-vector (0 to 9));

end decoder;

architecture BCD-to-decimal of decoder isbegin

X(0)⇐not A(3) and not A(2) and not A(1) and not A(0);X(1)⇐not A(3) and not A(2) and not A(1) and A(0);X(2)⇐not A(3) and not A(2) and A(1) and not A(0);X(3)⇐not A(3) and not A(2) and A(1) and A(0);X(4)⇐not A(3) and A(2) and not A(1) and not A(0);X(5)⇐not A(3) and A(2) and not A(1) and A(0);X(6)⇐not A(3) and A(2) and A(1) and not A(0);X(7)⇐not A(3) and A(2) and A(1) and A(0);X(8)⇐A(3) and not A(2) and not A(1) and not A(0);X(9)⇐A(3) and not A(2) and not A(1) and A(0);

end BCD-to-decimal;

Page 16: Ece Olcay Güneş& S. Berna Örs

Not• Bu örnekte birden fazla giriş çıkış söz konusu olduğu için

bunlar VHDL'de bir dizi (bit-vector) veri tipi ile gösterilebilir.

• Genel olarak bit dizilerinin büyüklüğü 0'dan n'ye seçilir.• 0 her zaman dizinin ilk elemanına karşı düşer.• Bu nedenle n dizideki eleman sayısından 1 eksik olarak

seçilmelidir. • n+1 giriş veya çıkış dizi olarak bit-vector (0 to n) olarak

gösterilir.• Örnekte giriş bit-vector (0 to 3)• Çıkış bit-vector (0 to 9) biçimindedir.

Page 17: Ece Olcay Güneş& S. Berna Örs

Durumsal ifadeler• IF

Bir sayısal sistem belirli durumlar içinden en uygununu seçme durumunda kalabilir. "If " bir Boole fonksiyonunu doğru veya yanlışa götüren ifadedir. Her zaman bir durumsal ifade ile birlikte kullanılır. Eğer ifade doğru ise VHDL ifadesi yerine getirilir. En sonunda mutlaka "end if" olmalıdır.

If durumsal ifade thenVHDL ifadesi

end if

Page 18: Ece Olcay Güneş& S. Berna Örs

Örnek: 2 girişli 3 çıkışlı bir devre tasarlanmak istenmektedir. A girişi B girişine eşitse V1 değişkeni (yani çıkış) 1 arttırılır. (Çıkış 3 ile sınırlandırıldığı için natural veri tipi kullanılması uygundur)

entity ornek1 isport (A,B: in bit; X:out natural range 0 to 7);

end entity ornek;architecture islem1 of ornek1 isbegin

process (A,B)variable V1: natural range 0 to 7;begin

V1:=0;if (A=B) then

V1:=V1+1;end if;

X⇐V1;end process;

end architecture islem1;

Page 19: Ece Olcay Güneş& S. Berna Örs

•If Then Else

Else, if içerisinde alternatif bir yol önerir. Eğer VHDL ifadesi yanlışa gidiyorsa, else ifadesini izler.

Page 20: Ece Olcay Güneş& S. Berna Örs

ÖRNEK:

entity örnek2 is

port (A,B: in bit; X:out natural range 0 to 7);end entity ornek2;architecture islem2 of ornek2 isbegin

process (A,B)variable V1: natural range 0 to 7;beginV1:=6;

if (A=B) thenV1:=V1+1;

elseV1:=0;

end ifX⇐V1;end process;

end architecture islem2;

Page 21: Ece Olcay Güneş& S. Berna Örs

•Elsif

Bazen giriş koşullarına göre birden fazla seçenek tanımlanabilir. Bu durumda "elsif" ifadesi kullanılır. İçiçe geçmiş if olarak tanımlanabilir.

Page 22: Ece Olcay Güneş& S. Berna Örs

Örnek: 2 kontrol girişli MUX tasarımıentity MUX2 is

port(S:in bit_vector (0 to 1); D:in bit_vector (0 to 3); X:out bit);end entity MUX2;architecture islem of MUX2 isbeginprocess (S,D)

beginif (S="00") then

X⇐D(0);elsif (S="01") then

X⇐D(1);elsif (S="10") then

X⇐D(2);else

X⇐D(3);end if;

end process;end architecture islem;

Page 23: Ece Olcay Güneş& S. Berna Örs

•Case

Case ifadesi içiçe geçmiş if (elsif) ifadesinin bir diğer seçeneğidir. Bir farkı case ifadesi, case bloğuna uygulanan tüm mümkün değerlere aynı kıymeti verir. VHDL keywordlerinden "others" kıymet verilmeyecek girişlerin cevaplarını belirlemeye yarar. Eğer tüm girişler belirliyse others'a gerek yoktur.

case ifade iswhen seçenek 1 ⇒

VHDL ifadesi;when seçenek 2 ⇒

VHDL ifadesi;when seçenek 3 ⇒

VHDL ifadesi;when others ⇒

VHDL ifadesi;end case

Page 24: Ece Olcay Güneş& S. Berna Örs

Örnek: 1 kontrol girişli MUXentity MUX is

port(S,D0,D1:in bit; X:out bit);end entity MUX;architecture islem for MUX isbegin

process (S, D0, D1)begin

case S iswhen '0' ⇒X⇐D0;

when '1' ⇒X⇐D1;

end case;end process;

end architecture islem;

Page 25: Ece Olcay Güneş& S. Berna Örs

For Çevrimi

Davranışsal yaklaşımda belirli bir iterasyonsayısına sahip ardışıl bir ifadedir. For, çevrimin nerede başladığı nerede bittiği belli ise kullanılır. For çevrimi 4 bölümden oluşur.

• Giriş noktası: çevrimin başladığı nokta• İterasyon: • Terminal test: çevrimin bittiğini belirleyerek çıkış

koşullarını test eder• Çıkış noktası: Çevrimin son bulduğu nokta

Page 26: Ece Olcay Güneş& S. Berna Örs

for tanımlayıcı (kullanıcı tarafından belirlenir) in başlangıçnoktası to durma noktası loop

VHDL ifadeleriend loop;

to durma noktasını izler. Başlangıç noktasıterminal noktasından küçük ise kullanılır.

downto başlangıç noktası terminal noktasından büyükse ve çevrim terminal noktasına doğru

azalarak hareket ediyorsa kullanılır.

Page 27: Ece Olcay Güneş& S. Berna Örs

Örnek: 7 girişi olan ve girişine gelen sayı içindeki 1'lerin sayısını sayıp sonucu çıkışa aktaran bir devre tasarlanacaktır. ( A girişi için 8 bitlik std_logic_vector kullanılacaktır. X çıkışı için naturel veri tipi kullanılacak hesaplanan değer 0 ile 7 arasında olacaktır. V1 sayılan 1'lerin sayısını tutacaktır.

library ieee;use ieee.std_logic_1164.all;entity Birsayici is

port (A: in std_logic_vector (0 to 7); X:out natural range 0 to 7);end entity Birsayici;architecture benimsayicim of Birsayici isbegin

process(A)variable V1:natural range 0 to 7;begin

V1:=0;for i in 0 to A'length-1 loop

if (A(i)='1') thenV1:=V1+1;

end if;end loop;X⇐V1;

end process;ed architecture benimsayicim;

Page 28: Ece Olcay Güneş& S. Berna Örs

NOT• Bu örnekte çevrim ve iterasyon sayısı bilindiği için for

çevrimi kullanılmıştır.• Sayıcı std_logic_vector (std_logic_1164 IEEE

tarafından belirlenen bir standart kütüphanedir), 0 başlangıç pozisyonu ile başlamakta ve en son bit okunana kadar devam etmektedir. 1'lerin sayıldığıprogramda std_logic_vector ile belirlenen sayının bit sayısının belirlenmesi gerekir. Burada görüldüğü gibi bu tanımlayıcı ismi (vektörün ismi) ' ve length ile belirlenmiştir. 'length vektörün bit sayısını verir. Böylece değişik uzunluklu vektörler için program yeniden düzenlenebilir. Bit sayısı bilinmeden program tarafından otomatik olarak dizinin bit sayısı belirlenebilir.

Page 29: Ece Olcay Güneş& S. Berna Örs

While çevrimiİterasyon sayısının bilinemediği durumlarda kullanılır. Whileçevrimi herhangi bir Boole ifadesi sağlanıp çevrimi durduruncaya kadar devam eder. Ancak kilitlenen türden bir kod yazılmamasına dikkat edilmelidir. Bazen Boole ifadesi sağlanamadığı için çevrim son bulamaz. While çevrimi 3 bölümden oluşur.

• Giriş noktası: çevrimin başladığı nokta• Terminal test: çevrimin bittiğini belirleyerek çıkış koşullarını

test eder• Çıkış noktası: Çevrimin son bulduğu nokta

while boole ifadesi loopVHDL ifadeleri

end loop;

Page 30: Ece Olcay Güneş& S. Berna Örs

1. Bölümün sonu


Top Related