ece olcay güneş& s. berna Örs

of 30/30
VHDL Ece Olcay Güneş & S. Berna Örs

Post on 29-Nov-2021

1 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Microsoft PowerPoint - VHDL_sunumI.pptksaltmasdr. • VHSIC “Very High Speed Integrated Circuit” ‘in ksaltmasdr. • VHDL dnda da pekçok donanm tasarlama dilleri mevcuttur.
Verilog, AHDL, ABEL and CUPL dier donanm tasarlama dillerine örnek olarak gösterilebilir.
• VHDL ilk olarak 1981 ylnda tasarm yöntemlerinden ve var olan teknolojiden bamsz olarak tasarm için ABD savunma bakanl tarafndan gelitirilmitir. Daha sonra IEEE'ye yönlendirilmi ilk standart hali 1983 ylnda yaymlanmtr. 1993 ylnda gelitirilerek yine IEEE standart dilleri arasnda yeralmtr.
Saysal lojik tasarmda VHDL kullanm
Programn ne yapacan tanmla
VHDL Program kodunu yaz
Hedef cihazda tasarm uygula
• Yapsal (Structural): Lojik fonksiyon basit kaplar ve bunlarn balantlaryla tanmlanr.
• Veri Ak (Data Flow):Kaplardan iaret geçiinin nasl olaca tanmlanr. Yapsal ve veri ak tanmnn ikisi de devrenin iç-yapsnn ayrntlaryla ilgilidir.
• Davransal (Behavioral): Kaplarn tipi ve balantlarnn nasl olduu ya da bunlar arasnda veri aknn nasl olaca önemli deildir. Devrenin giri ve o andaki durumuna göre çklarnn ne olaca davransal tanm oluturur.
• Lojik devre çok basitse yapsal ve veri ak tanm, devre karmaksa, davransal tanm, çou zaman da 3’ü bir arada kullanlr
Alt Bloklar • Bir tasarm daha anlalabilir ve deiikliklere açk hale
getirebilmek için devreler alt bloklara ayrlr. • Daha sonra bu bloklar bütün devreyi oluturmak üzere
uygun ekilde balanr.
VHDL tasarm birimleri
Entity Entity: VHDL’de her blok kendi bana bir devre olarak düünülür ve entity olarak adlandrlr. Verilen bir lojik fonksiyon için bütün giri ve çklar tanmlar. Yani lojik fonksiyonun d dünyayla balantsn tanmlar.
entity entity tanmlayc is port (iaret tanmlama);
end entity tanmlayc;
Port: port giri ve çk iaretidir. Port ifadesi, her iaret için, port tanmlayc, port yönü ve port veri tipini belirlemelidir. Port da 3 yön kullanlr. Giri için in, çk için out, çift yönlü portlar için inout kullanlr. Pek çok deiik veri tipi kullanlabilir.
Veri tipleri: bit: 0 ve 1 deerini alabilir bit-vector: ayn isim altnda bir dizi 0 ve 1‘i göstermek için kullanlr. Bir dizideki herbir elemann ortak bir tanmlayc ad vardr. Mesela dizinin ad A ise, ilk eleman A(0)'a, ikinci eleman A(1)'e kar düer. integer: pozitif ya da negatif tamsaylara kar düer natural: 0'dan balayp istenen bir limit deere kadar tamsaylar için kullanlr. positive: 1'den balayp istenen bir limit deere kadar tamsaylar için kullanlr. Boolean: Doru ve yanl olmak üzere 2 deerli bir veri tipidir.
Entity Örnei entity Ornek is
port (A,B: in bit; Z: out naturel range 0 to 31); end Ornek;
• lk satr yeni tanmlanacak devrenin ismini bildirir: Ornek • Son satr tanmlamann bittiini gösterir. • Aradaki satrlar devrenin giri cklarn tanmlar. • Port tanmnda her satr bir giri-çk listesi, modunu ve
veri tipini gösterir. • lk satrn dndaki her satr ; ile bitirilir. Port tanmnn
tamam da ; ile bitirilir.
Lojik fonksiyonun ilevi architecture tarafndan belirlenir. Her entity için bir architecture tanmlanr.
architecture mimari ismi of tanmlayc ismi is begin lojik fonksiyonun yapaca i burada tanmlanr; end mimari ismi;
Architecture Örnei entity AND_Gate is
port(A, B: in bit; X:out bit); end entity AND_Gate; Architecture dataflow of AND_Gate is begin X <= A and B;
end dataflow;
• lk satr dataflow isimli mimarinin AND_Gate isimli devreye ait olduunu gösteriyor.
• begin ve end arasndaki satrlar AND_Gate in nasl bir ilem gerçekleyeceini belirtir.
Yapsal Tanmlamalar • Tasarmmzdaki temel bloklar entity ve karlk gelen
architecture kullanlarak tanmlandktan sonra dier tasarmlarda kullanlmak üzere birletirilebilirler. Bir program içerisinde bir eleman çok kere kullanlyorsa, buna ait entity ve architecture'i defalarca yazmak yerine component kullanlr.
• Bu ilem yaplrken alt bloklar üst bloun içinde component olarak tanmlanrlar.
component elemann-ad is port (uç tanmlar)
end component;
Component Örnei
OUT1 IN2
IN1
OUT2
IN4
IN3
OUT3
entity AND-OR-logic is port(IN1, IN2, IN3, IN4: in bit; OUT3: out bit);
end AND-OR-logic; architecture LogicOperation of AND-OR-logic
is component 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_Gate port map (A⇒IN1, B⇒IN2,
X⇒OUT1); G2: AND_Gate
G3: OR_Gate port map (A⇒OUT1, B⇒OUT2, X⇒OUT3);
end LogicOperation;
Ara balantlara kar düer. Entegre içinde d balants olmayan elemanlar aras balantlardr.
Veri Ak Tanmlama
• Veri ak tanmlamada temel bloklarn (örnein and kaps) girilerinin ve çklarnn devre içinde nasl balanaca tanmlanr.
• aretlerin devre içinde nasl akaca tanmlanr. • Çklarn Boole fonksiyonu ifadelerine ihtiyaç
vardr.
entity latch is port (s,r : in bit; q,nq :
inout bit); end latch; architecture dataflow of latch is begin q<=r nor nq; nq<=s nor q;
end dataflow;
A(0)
A(1)
A(2)
A(3)
X(0)
.
.
.
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 is begin
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;
Not • Bu örnekte birden fazla giri çk söz konusu olduu 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 elemanna kar düer. • Bu nedenle n dizideki eleman saysndan 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.
Durumsal ifadeler • IF
Bir saysal sistem belirli durumlar içinden en uygununu seçme durumunda kalabilir. "If " bir Boole fonksiyonunu doru veya yanla götüren ifadedir. Her zaman bir durumsal ifade ile birlikte kullanlr. Eer ifade doru ise VHDL ifadesi yerine getirilir. En sonunda mutlaka "end if" olmaldr.
If durumsal ifade then VHDL ifadesi
end if
Örnek: 2 girili 3 çkl bir devre tasarlanmak istenmektedir. A girii B giriine eitse V1 deikeni (yani çk) 1 arttrlr. (Çk 3 ile snrlandrld için natural veri tipi kullanlmas uygundur)
entity ornek1 is port (A,B: in bit; X:out natural range 0 to 7);
end entity ornek; architecture islem1 of ornek1 is begin
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;
•If Then Else
Else, if içerisinde alternatif bir yol önerir. Eer VHDL ifadesi yanla gidiyorsa, else ifadesini izler.
ÖRNEK:
entity örnek2 is
port (A,B: in bit; X:out natural range 0 to 7); end entity ornek2; architecture islem2 of ornek2 is begin
process (A,B) variable V1: natural range 0 to 7; begin V1:=6;
if (A=B) then V1:=V1+1;
else V1:=0;
end architecture islem2;
Bazen giri koullarna göre birden fazla seçenek tanmlanabilir. Bu durumda "elsif" ifadesi kullanlr. çiçe geçmi if olarak tanmlanabilir.
Örnek: 2 kontrol girili MUX tasarm 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 is begin process (S,D)
begin if (S="00") then
X⇐D(0); elsif (S="01") then
X⇐D(1); elsif (S="10") then
X⇐D(2); else
•Case
Case ifadesi içiçe geçmi if (elsif) ifadesinin bir dier seçeneidir. Bir fark case ifadesi, case blouna uygulanan tüm mümkün deerlere ayn kymeti verir. VHDL keywordlerinden "others" kymet verilmeyecek girilerin cevaplarn belirlemeye yarar. Eer tüm giriler belirliyse others'a gerek yoktur.
case ifade is when seçenek 1 ⇒
VHDL ifadesi; when seçenek 2 ⇒
VHDL ifadesi; when seçenek 3 ⇒
VHDL ifadesi; when others ⇒
VHDL ifadesi; end case
Örnek: 1 kontrol girili MUX entity MUX is
port(S,D0,D1:in bit; X:out bit); end entity MUX; architecture islem for MUX is begin
process (S, D0, D1) begin
case S is when '0' ⇒ X⇐D0;
when '1' ⇒ X⇐D1;
end case; end process;
Davransal yaklamda belirli bir iterasyon saysna sahip ardl bir ifadedir. For, çevrimin nerede balad nerede bittii belli ise kullanlr. For çevrimi 4 bölümden oluur.
• Giri noktas: çevrimin balad nokta • terasyon: • Terminal test: çevrimin bittiini belirleyerek çk
koullarn test eder • Çk noktas: Çevrimin son bulduu nokta
for tanmlayc (kullanc tarafndan belirlenir) in balangç noktas to durma noktas loop
VHDL ifadeleri end loop;
to durma noktasn izler. Balangç noktas terminal noktasndan küçük ise kullanlr.
downto balangç noktas terminal noktasndan büyükse ve çevrim terminal noktasna doru
azalarak hareket ediyorsa kullanlr.
Örnek: 7 girii olan ve giriine gelen say içindeki 1'lerin saysn sayp sonucu çka aktaran bir devre tasarlanacaktr. ( A girii için 8 bitlik std_logic_vector kullanlacaktr. X çk için naturel veri tipi kullanlacak hesaplanan deer 0 ile 7 arasnda olacaktr. V1 saylan 1'lerin saysn tutacaktr.
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 is begin
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') then V1:=V1+1;
end if; end loop; X⇐V1;
end process; ed architecture benimsayicim;
NOT • Bu örnekte çevrim ve iterasyon says bilindii için for
çevrimi kullanlmtr. • Sayc std_logic_vector (std_logic_1164 IEEE
tarafndan belirlenen bir standart kütüphanedir), 0 balangç pozisyonu ile balamakta ve en son bit okunana kadar devam etmektedir. 1'lerin sayld programda std_logic_vector ile belirlenen saynn bit saysnn belirlenmesi gerekir. Burada görüldüü gibi bu tanmlayc ismi (vektörün ismi) ' ve length ile belirlenmitir. 'length vektörün bit saysn verir. Böylece deiik uzunluklu vektörler için program yeniden düzenlenebilir. Bit says bilinmeden program tarafndan otomatik olarak dizinin bit says belirlenebilir.
While çevrimi terasyon saysnn bilinemedii durumlarda kullanlr. While çevrimi herhangi bir Boole ifadesi salanp çevrimi durduruncaya kadar devam eder. Ancak kilitlenen türden bir kod yazlmamasna dikkat edilmelidir. Bazen Boole ifadesi salanamad için çevrim son bulamaz. While çevrimi 3 bölümden oluur.
• Giri noktas: çevrimin balad nokta • Terminal test: çevrimin bittiini belirleyerek çk koullarn
test eder • Çk noktas: Çevrimin son bulduu nokta
while boole ifadesi loop VHDL ifadeleri
end loop;