DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BLGM223 SAYISAL MANTIK TASARIMI DENEY V : QUARTUS II TASARIM ORTAMI: TEMEL VHDL KULLANIMI AMAÇLAR: ALTERA tarafından geliştirilen son teknoloji elektronik tasarım otomasyonu yazılımı olan QUARTUS II ortamında VHDL dilini kullanmaya başlayacağız. QUARTUS II ile ilgili tasarım arayüzünü ve temel VHDL yapılarına ait bilgilerimizi tazeleyeceğiz. Uygulamalar yaparak becerilerimizi geliştireceğiz. Deney Öncesi Çalışma: Aşağıdaki Açıklamlar Bölümünü okuyunuz ve Deney Adımlarını yapmaya çalışınız. Açıklamalar: VHDL İle Tasarım İçin Temel Adımlar VHDL dili STD_LOGIC (Standard Mantık) sınıfındaki veri çeşitlerini destekler. Bu sınıfdaki sinyaller değişik mantık değerlerine sahip olabilirler. Örneğin, 1, 0, ve X. STD_LOGIC sınıfındaki veri tiplerini kullanabilmek için bu sınıfın tanımını VHDL koduna eklemek gerekir. Bu amaçla oluşturulan dosya kütüphanelerini "library" anahtar kelimesiyle tanımlayabilir ve VHDL koduna ekleyebiliriz. STD_LOGIC veri sınıfının tanımlandığı kütüphanenin adı "ieee" dir ve VHDL derleyicisine LIBRARY ieee; direktifi ile bildirilir. ieee kütüphanesinde STD_LOGIC veri sınıfını içeren dosyanın adı "ieee.std_logic_1164.all" dir. 1164 sayısı STD_LOGIC veri sınıfının IEEE -1164 standardına ait olduğunu gösterir ve dosya uzantısı all" ile bu dosyadaki tüm tanımlamaların kullanılacağını bildirmiş oluruz. VHDL derleyicisine bu dosyanın kullanılacağını USE ieee.std_logic_1164.all; direktifi ile bildiririz. STD_LOGIC veri sınıfı içinde kullanılabilen çeşitli değişken değerleri arasında en çok kullanılanlar 0, 1, Z, ve _ dir. Burada Z yüksek direnç değerini _ ise farketmez (don t care) durumunu belirtir. Bunlara ek olarak, STD_LOGIC veri tipleri bütün Bool operatörleri ile kullanılabilir. Böylece, bir VHDL programının ilk iki satırı aşağıdaki gibi olmalıdır: LIBRARY ieee; USE ieee.std_logic_1164.all;
Bütün VHDL programları temel olarak iki kısımdan oluşur: ENTITY ve ARCHITECTURE. ENTITY tasarımınızı dışarıdan görünümü itibariyle bir kara kutu olarak tanımlar. Bilgisayarınızı dışardan bakıldığında sadece giriş ve çıkış elemanları yönüyle detalı olarak tanımlamanız iyi bir ENTITY örneğidir. ARCHITECTURE kısmı tasarımınızın iç yapısını kapılar, sinyaller, işlevsel modüller, ve bağlantılar yönüyle tanımladığınız bölümdür. ENTITY ve ARCHITECTURE birlikte tasarımınızı bir sistem olarak hem dışardan bakıldığında giriş-çıkış terminalleri, hemde içeriden bakıldığında detaylı işlevsellik yönlerinden tanımlamanızı mümkün kılarlar. Bir VHDL Kodu Örneği: Library ieee; Use ieee.std_logic_1164.all; ENTITY Tasarım_Adı IS Terminal Tanımları END Tasarım_Adı; ARCHITECTURE Yapısal_Ad OF Tasarım_Adı IS BEGIN Tasarımın Yapısal Tanımlanması END Yapısal_Ad; Deney Çalışması: Aşağıdaki açıklamalar detaylı olarak QUARTUS II ortamında bir projeyi tanımlamanızı ve VHDL dilini kullanarak proje ile ilgili tasarımınızı yazılım ortamına girmenizin adımlarını göstermektedir. VHDL ile Tasarım Girişi Devre şeması girişine bir allternatif olarak, VHDL tasarım tanımlama ve girişi için oldukça etkili bir yol olarak kullanılabilir. Büyük boyutlu tasarımlarda, VHDL ile tasarım üretkenliğin artırılmasında ve tasarım zamanının önemli ölçüde kısaltılmasında önemli katkı sağlar. VHDL ile sadeleştirme, bağlantı şeması, devre elemanlarının çoklanması gibi işlemler otomatik derleyici ve sentez araçları tarafından yapılır. Adım 1: Proje Yaratma ve Kod Girişi Yeni bir proje tanımlamak için: [File] [New Project Wizard] seçeneğinden sonra proje yaratmak için önceki deneylerde belirtilen adımları uygulayınız. (Not: Deney #1 de proje yaratma adımlarını gözden geçiriniz)
[File] [New] menüsünden VHDL File seçiniz ve [Ok] butonuna tıklayınız. Vhdl1.vhd başlığına çift tıklayarak editör penceresini büyütünüz. [File]->[Save As] seçeneğiyle dosyanıza Ilk_Devrem adını veriniz ve [Save] ile kaydediniz.
VHDL kodu yazacağınız devre şeması: Bu devre ile ilgili olarak aşağıdaki VHDL kodunu editör pencersine. giriniz. library ieee; use ieee.std_logic_1164.all; entity Ilk_Devrem is port( a, b,c,d: in std_logic; y: out std_logic); end Ilk_Devrem;
architecture Islevsel of Ilk_Devrem is signal s1,s2: std_logic; begin s1 <= a nor b; s2 <= c nand d; y <= s1 and s2; end Islevsel; Adım 2. Projenizin Derlenmesi: 1. Processing Start Compilation seçeneğiyle projenizi derleyiniz. 2. Derleme sonunda Full compilation was successful mesajını görmelisiniz. Bu derlemenin başarılı olduğunu ifade eder. 3. Projeniz 0 hata ile sonlanmalıdır. Eğer hatalar var ise, yazdığınız kodu kontrol ederek bu hataları düzeltiniz. 4. Başarılı bir derlemenin sonunda aşağıdaki ekranı gözlemlemelisiniz. Bu durumda derleme pençeresini kapatınız.
Timing Analyzer menüsünden Timing Analyzer Summary seçeneğine tıklayınız. Bu seçenekten the worst-case tpd (giriş-çıkış sinyal geçikmesi) işlevini inceleyiniz. Adım 3: Projenizin Benzetimi (Simulasyonu): Bir sayısal devreyi iki şekilde simule edebilirsiniz: En basit yol, devre elemanlarının ve bağlantıların ideal olduğunu kabul ederek işlevsel simülasyon yapmaktır. Bu şekilde devre elemanları ve bağlantılar üzerindeki sinyal geçikmelerini dikkate almadan, devrenin işlevsel doğruluğunu test etmiş oluruz. Bu yaklaşıma işlevsel simülasyon denir. Biraz daha karmaşık olan ikinci yol, bütün sinyal geçikmelerinin dikkate alınarak yapıldığı simülasyondur ve zamanlama simülasyonu olarak adlandırılır. Genel olarak, işlevsel smülasyon çok daha kısa zaman alır. Bu deney çalışmasında da işlevsel simülasyon üzerinde duracağız. 1. File New Other Files Vector Waveform File menüsünü seçerek seçeneğine tıklayınız. 2. Ana menüden Edit Insert Node or Bus seçimini yapınız. 3. Node Finder seçeneğini tıklayınız. 4. Pins: all seçeneğini yapıp Start butonunu tıklayınız. 5. Nodes Found listesinden A, B, C, D ve Y isimlerini seçiniz. 6. Sağ ok butonuna tıklayarak A, B, C, D, ve Y seçimlerini Selected Nodes bölümüne aktarınız. 7. OK seçeneklerini tıklayınız 8. Fare ile hareket ettirerek seçtiğiniz isimleri istediğiniz sıraya sokabilirsiniz. Dalga formü editör penceresi 9. Simulasyon zaman aralığını 0.0ns ve 160.0ns olarak belirleyiniz. Bunun için Edit End Time menüsünden 160.0 ns olarak giriniz. 10. View Fit in Window seçimiyle tüm simülasyon aralığını ekrana yansıtınız. 11. Click on A and from the side bar, press Overwrite clock button 11. A sinyali üzerine tıklayınız, Overwrite clock butonuna tıklayarak bu sinyalin periyodu için 20.0 ns giriniz. 12. Aynı işlemi B için : 40.0 ns, C için : 80.0 ns, ve D için : 160.0 ns olarak tekrarlayınız.
Waveform Editor Window with Inputs 13. Assignments Settings seçeneğiyle bir seçim pençeresi açınız. Bu pençereden Simulations Settings seçeneği altında Mode seçimi ile simulasyon modunu Functional olarak değiştiriniz 14. File Save seçeneğine gidiniz 15. Şimdi dosyanınzın ismini projenizin ismiyle aynı bırakarak, OK seçeneğiyle dosyanızı saklayınız. 16. Ana menüden Processing Generate Functional Simulation Netlist seçeneğini yapınız. 17. Ana menüden Processing Start Simulation seçimini yapınız. 18. Simülasyon tamamlandığında, diyalog kutusundaki OK seçeneğini tıklayınız. 19. View Fit in Window seçimiyle simülasyonun tamamını ekrana yansıtınız. 20. Elde ettiğiniz doğruluk değerlerini doğruluk tablosundakilerle karşılaştırarak devrenin doğru çalıştığından emin olunuz. BAŞARILAR. Adnan ACAN