Genel Tanımlama. Erkal USUK

Benzer belgeler
VHDL. Ece Olcay Güneş & S. Berna Örs

T.C. RC SERVO MOTOR KONTROLÜ

Yazılan programın simülasyonu için; (A<B), (A>B) ve (A=B) durumunu sağlayacak 2 şer tane değeri girerek modelsimde oluşan sonuçları çiziniz.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Bölüm 9. Altprogramlar ISBN

PASCAL PROGRAMLAMA DİLİ YAPISI

HSancak Nesne Tabanlı Programlama I Ders Notları

DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BLGM223 SAYISAL MANTIK TASARIMI : QUARTUS II TASARIM ORTAMI: TEMEL VHDL KULLANIMI

HSancak Nesne Tabanlı Programlama I Ders Notları

BİL-142 Bilgisayar Programlama II

PROGRAMLAMAYA GİRİŞ DERS 2

Pointer Kavramı. Veri Yapıları

Algoritma ve Akış Diyagramları

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

FPGA ile Gömülü Sistem Tasarımına Giriş

Ders Tanıtım Sunumu. Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr. Gör. Murat KEÇECİOĞLU 1

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Internet Programming II

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Digital Design HDL. Dr. Cahit Karakuş, February-2018

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Değişkenler ve Veri tipleri. Ders Notları

Öğr. Gör. Serkan AKSU 1

Göstericiler (Pointers)

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Programlanabilir Devreler

Bilgisayar Programlama MATLAB

Sunum İçeriği. Programlamaya Giriş

ELN1001 BİLGİSAYAR PROGRAMLAMA I

William Stallings Computer Organization and Architecture 9 th Edition

LAB 0 : Xilinx ISE Kullanımı

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

EK A VHDL DONANIM TANIMLAMA DİLİ

Algoritma ve Akış Diyagramları

MİKROİŞLEMCİ İLE A/D DÖNÜŞÜMÜ

Deney 10: Analog - Dijital Dönüştürücüler (Analog to Digital Converters - ADC) Giriş

Sahada Programlanabilir Kapı Dizileri (FPGA) Sayısal CMOS Tümdevre Tasarımı Y. Fırat Kula

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

VHDL DONANIM TANIMLAMA DİLİD ve FPGA, CPLD DONANIMLARI. Yard. Doç. Dr. Özdemir ÇETİN

ALGORİTMA VE PROGRAMLAMA II

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

BÖLÜM 11: YAPISAL VERİ TİPLERİ

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Dr. Fatih AY Tel: fatihay@fatihay.net

OTOMATİK KONTROL SİSTEMLERİ İŞARET AKIŞ DİYAGRAMLARI SIGNAL FLOW GRAPH

13 Aralık Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Verilog HDL e Giriş Bilg. Yük. Müh. Selçuk BAŞAK

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

Diziler İndisli Değişkenler

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

İÜ AÇIK VE UZAKTAN EĞİTİM FAKÜLTESİ. Süreç İyileştirme Standardı

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

18. FLİP FLOP LAR (FLIP FLOPS)

DERS 5 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 bacak bağlantıları PIC 16F84 bellek yapısı Program belleği RAM bellek Değişken kullanımı Komutlar

Özyineleme (Recursion)

BÖLÜM 3 OPERAT A ÖRLER

İvme VGA, İvme s_2.1 fiziksel işlemci çekirdeğinin, çalışan iç yapısının herhangi bir simülasyon olmaksızın fiziksel olarak dış dünyaya aktarımıdır.

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

BULANIK MANTIK VE SİSTEMLERİ BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK Bilişim Teknolojileri Mühendisliği ABD Doktora Programı

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Şekil 2.23: Window menüsü ve elemanları

TUŞ TAKIMI (KEYPAD) UYGULAMALARI

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

(I) şimdiki. durum (S) belleği. saat. girşi

Nesne Yönelimli Programlama

7- Turbo Pascal Programlamada Alt Programlar (Procedure)

Bölüm 4 Aritmetik Devreler

k ise bir gerçek sayı olsun. Buna göre aşağıdaki işlemler Matlab da yapılabilir.

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

HDL Dilleri VHDL. Son olarak, spesifik ASIC teknolojisi için devrenin yerleşimi netlist tanımlamalarından gelen diğer araçlarla oluşturulmuş olunur.

Ders Notlarının Creative Commons lisansı Feza BUZLUCA ya aittir. Lisans:

MĐKROĐŞLEMCĐLĐ FONKSĐYON ÜRETECĐ

İnternet Programcılığı Dersi 2.Dönem Ders Notu

C Programlama Dilininin Basit Yapıları

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Pointers (İşaretçiler)

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Genel Programlama II

Uygulamalı Yapay Zeka. Dr. Uğur YÜZGEÇ Ders 2: Prolog Giriş

Bilgisayarda Programlama. Temel Kavramlar

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Transkript:

Genel Tanımlama 16-Bit CS5525 ve 20-bit CS5526 aygıt yükselteci, PGA (programmable gain amplifier) programlanabilir kazanç yükselteci, sekiz sayısal süzgeç ve sistem/kendi kendine kalibrasyon devresi içeren çok tümleşik Σ A/D dönüştürücülerdir. Bu dönüştürücüler kendi negatif gerilimi sağlamak için tasarlanmıştır. Çift kutuplu toprak referanslı işareti ( ±100 mv) ölçmek için sistemde aygıt yükseltecine kullanır. NBV yi direk olarak -2.5V ve VA+ yı ise 5V ile besleyerek ±2.5 V luk işaret (toprağa göre) elde edilebilir. Sayısal süzgeçler 3.76 Sps ile 202 Sps arasında güncellenebilen seviyelerde programlanabilir çıkış sağlarlar. Çıkış kelime seviyesi XIN=100KHz kullanılarak yaklaşık 3 katına çıkartılabilir. Her süzgeç bir dönüştürme çevriminde çıkış güncelleme seviyesini tam doğrulukta oluşturmak için tasarlanmıştır. Kelime seviyesi 15 Sps veya daha altı (XIN = 32.768 KHz) olan süzgeçler 50 ve 60Hz lik (±3 Hz) hat girişimini eşzamanlı olarak yok etmektedir. Düşük güç, tek çevrimlik yatışma süresi, programlanabilir çıkış seviyesi ve tek kaynakla negatif giriş işareti elde edebilmesi bu ürünü yalıtılmış ve yalıtılmamış tüm uygulamalar için ideal bir çözüm haline getirmiştir. 3

Anahtarlama karakteristiği (TA = 25 C; VA+ = 5 V ±5%; VD+ = 3.0 V ±10% or 5 V ±5%; Giriş seviyeleri: Lojik 0 = 0 V, Lojik 1 = VD+; CL = 50 pf.) 4

Sürekli Zaman SCLK Zamanlaması (Ölçülendirilmemiş) SDI Yazma Zamanlaması (Ölçülendirilmemiş) SDO Okuma Zamanlaması (Ölçülendirilmemiş) 5

Đşlem Teorisi CS5525 ve CS5526 A/D dönüştürücüleri 5V luk tek analog kaynaktan farklı seviyelerde girişler elde edilebilmesi için tasarlanmıştır. CS5525/26 nin NBV den beslenerek sistemde sarj edilebilir şekli Mesela burada ki devrede CS5525/26 kendi negatif gerilim değerini elde etmek için sistemde CPD kullanılarak tasarlanmıştır. VD+ = 3V için CPD devresi Burada devre +3 V sayısal kaynak ile beslenerek CPD devresi elde edilmiştir. 6

Alternatif NBV devresi Burada ise negatif gerilim negatif kaynak veya bölücü kullanarak elde edilmiştir. CS5525/26 Tek Kutuplu Toprak Referanslı Đşaret için yapılandırılmış şekli Burada pozitif kutuplu 1V, 2.5V ve 5V luk giriş gerilimleri kullanılarak tasarlanmıştır. 7

Komut Đşlemler CS5525/26 in çevrim işlemleri için 5 saklayıcısı olan bir mikrodenetleyicisi vardır. Her saklayıcı 8-bitlik komut saklayıcısı hariç 24-bit uzunluğundadır. Komut saklayıcısı (command register) 8-bit Yapılandırma saklayıcısı (configuration register) 24-bit Ofset saklayıcısı (offset register) 24-bit Kazanç saklayıcısı (gain register) 24-bit Dönüşüm verisi saklayıcısı (conversion data register) 24-bit Sistem ilk çalışmaya başladıktan veya tekrar başlatıldıktan sonra dönüştürücünün seri portu komut moduna geçer ve geçerli 8-bit (seri porta gelen ilk 8-bit) komut gelene kadar da bu modda kalır. Aşağıdaki tabloda geçerli komutlar gösterilmiştir. Đlk önce 8-bitlik komut (yazma veya okuma komut kelimesi) alınır ve komut saklayıcısı tarafından yorumlanır, seri port veri moduna geçer. Veri modunda gelecek 24 seri saat darbesinde (kurma saklayıcısı şeçilmiş ise 72 seri saat darbesi gerekir) seri porttan içeri veya dışarı veri kaydırılır. 8

TABLO: Komut Seti 9

10

2 VHDL VHDL Nedir? VHDL sayısal elektronik sistemleri tanımlamak ve bir FPGA içine gömmek için kullanılan bir programlama dilidir. Bu dil Birleşik Devletler Hükümeti nin Çok Yüksek Hızlı Tümdevreler (Very High Speed Đntegrated Circuits)(VHSIC) programı çerçevesinde 1980 yılında başlatıldı. Program çerçevesinde geliştirme çalışmaları sürerken tümdevrelerin(ics) yapılarını ve fonksiyonlarını tanımlamak için standart bir programlama diline ihtiyaç duyulduğu anlaşıldı. Bu sebepten dolayı VHSIC Hardware Description Language (VHDL) geliştirildi. VHDL 1986 da IEEE standardı olması için IEEE ye teklif sunuldu. 1987 nin Aralık ında IEEE 1076 standardı olarak kabul edilmesine kadar VHDL bir çok revizyona uğradı. Bu proje hazırlanırken yararlanılan ve burada adı geçen kitapta bu standart göz önüne alınarak yazılmıştır. Bütün örnekler bu standart tarafından tanımlanmış ve simülasyon programları tarafından da sonuçları gözlenmiştir. VHDL Yapısı Birinci olarak bir tasarımın yapısı tamamen VHDL ile tanımlanabilir. Bu tasarımı alt tasarımlara ayrıştırır ve bu alt tasarımların birbirleriyle bağlantıları sağlanabilir.ikinci olarak bu dil yakın bir programlama dili olan dillerle hazırlanmış fonksiyonların kullanılmasına izin verir. Üçüncü olarak yapılan tasarımlar işlevi olan sistemde kullanılmadan önce simülasyonu yapılabilir. Tasarımcılar hızlı bir şekilde alternatifleri geliştirip bir prototip olmadan bu alternatiflerin doğruluklarını sınayabilirler. 11

2.2.1 Yapısal Tanımlama Bir yapı tanımlama örneği Bir sayısal elektronik sistemi giriş ve/veya çıkışlarıyla beraber bir modül olarak tanımlanabilir.çıkışın elektriksel değerleri girişin elektriksel değerlerinin bir ve birkaç fonksiyonu olarak karşımıza çıkarlar. Şekil 1.1.a da bir sayısal sistemin modül halinde gösterimi mevcuttur. Görüldüğü üzere F modülünün A ve B olmak üzere iki girişi ve bir Y çıkışı vardır.vhdl terminolojisi kullanılarak F bir tasarım(entity) olarak düşünülürse girişler ve çıkışlar port diye nitelendirilebilir. Modüle işlevi kazandırmanın bir yolu modülü alt modüllere ayırmaktır. Bu modüllerin portlarını oluşturduktan signal tipi yapılarla birbirleriyle haberleştirmektir. Şekil 1.1.b de bir bütün yapının daha küçük yapılara nasıl ayrıldığı gösterilmiştir. Burada F modülü G, H ve I alt modüllerine ayrıştırılıp bunların istenen fonksiyonu gerçekleştirecek konfigürasyonunu yapmak gerekecektir. Bu tür tanımlamaya yapısal tanımlama denir. F bir yapısal tanımlama olduğu gibi G, H, ve I alt modülleri de yapısal tanımlama olabilir. 2.2.2 Davranışsal Tanımlama Bir çok durumda bir işlevi yapısal olarak tanımlama uygun olmayabilir. Bazen bir modül diğer yapısal tanımlanmış bir hiyerarşinin en alt tabanında olabilir. Bazen sadece satıcıdan alınan tümdevrelerle sistem tasarlanmak istenebilir. Belki de içsel bir yapıya ihtiyaç duyulmayan fonksiyonlar gerçeklenmek istenebilir. Bu tür tanımlamaları yapmak için fonksiyonel veya 12

davranışsal tanılama adı verilen bir tanımlama tipi ile tanımlanırlar. Yani bu tip tanımlamalarda tasarımın yapısını tanımlamadan davranışını tanımlamak yeterlidir. Bunu göstermek için daha önce şekil 1.1 deki örneği tekrar ele almak gerekecektir. Burada F fonksiyonunu dışaran-veya (EXOR) kapısı olarak düşünülebilir. Daha karmaşık davranışlar sadece girişin fonksiyonu olarak tanımlanamayabilirler. Geri beslemeli sistemlerde ayrıca çıkışlar da zaman düzleminde bir fonksiyondurlar. Özet olarak biz bir tasarımda gerektiği yerde yapısal tanımlama gerektiği yerde ise davranışsal tanımlama kullanıyoruz. VHDL Terimleri Öncelikle yazılacak programlarda karşımıza çıkacak olan terimleri incelememiz gerekmektedir. Bu terimler yazılan her temel programda genelde bulunur. Bunları anlamak programın yapısını anlamak ve yeni yapılar oluşturmak için önemlidir. Entity. Kelime olarak anlamı mevcudiyet, varlık ve vücuttur.bütün tasarımlar entitylerle ifade edilir. Architecture. Kelime anlamı olarak mimaridir. Yukarıda tanımlanan programın vücudu yani temel program içinde barındırdığı mimarilere göre simülasyonu yapılır. Mimari(architecture) programın yani yapının davranışını belirler. Bir temel yapı(entity) içinde birkaç adet mimari olabilir.mesela bir mimari, davranışı belirlerken diğeri de yapıyı belirleyebilir. Configuration. Bu deyim genel olarak programda kullanılacak konfigürasyonu belirtir. Configuration tasarım için bir parça listesi olarak tanımlanabilir. Bu hangi entity hangi özelliklerin kullanılacağını ifade eder. Genel olarak parçaların nerede ve nasıl kullanılacağını belirten bir mönü gibi ifade edilebilir. Package. Kelime anlamı olarak pakettir. Programı yazarken kullanılacak olan alt programlar ve veri tipleri bu yapıyla paketlenir. Bunu tasarım yaparken kullanacağımız bir araç kutusu (toolbox) gibi düşünebiliriz. 13

Driver. Kelime anlamı olarak sürücüdür. Burada sinyal kaynağı anlamında kullanılmıştır. Eğer sinyalin iki kaynağı varsa ve her iki kaynak da aktifse kaynağın iki sürücüsü var denir. Diğer bir deyimle veri sağlayıcılarına sürücü Bus. Bus genel olarak akla veri yolu kavramını getirir. Ama VHDL de bus özel bir işarettir ki bu işaretin kaynağı sönüktür. Kullanım itibariyle yine yol özelliği taşır. Attribute. Kelime anlamı olarak öznitelik, özelliktir. Biz VHDL de kendimiz yeni veri tipleri tanımlarız. Bunu yaparken veri tipinin özelliklerini kendimiz belirleriz. Aynı durum nesne tanımlarken de geçerlidir. Biz nesneyi oluştururken onun herhangi bir durum karşısında onun davranışını tanımlarız yani ona bir özellik kazandırırız. Generic. Bu VHDL terimi bir entity in içine bilgi gönderebilmek için kullanılan bir parametredir. Bunu da tanımlarken veri tipini belirtmek gerekir. Mesela entity inen kenar ve çıkan kenar gecikmeli bir kapı seviye modeli ise inen kenar ve çıkan kenar arasındaki gecikmeyi biz entity e ancak Generic tipi parametrelerle bildiririz. Process. VHDL in temel yürütme birimlerinden birisidir. Genelde biz bunu sıralı program (for, if kullanılarak yazılan program) yazarken kullanırız. Çünkü ilerde anlatacağımız üzere VHDL normal dillerde olduğu gibi programı satır satır yürütmez. Program satırları hepsi birden paralel olarak çalışır. FPGA işlemcilerin hızı da buradan kaynaklanmaktadır. Ama paralel çalışan bir programda if deyimi ve for döngüsü gibi yapıların kullanılması olanaksızdır. Bu yüzden bu yapıları kullanmak için biz Process yapısını kullanırız. Process ile tanımlı program parçaları normal programlar gibi satır satır çalışır. Veri Tipleri VHDL de birçok veri tipi bulunur. Biz öncelikle nesnel tiplerden bahsedeceğiz. Daha sonra skaler sayılardan bileşik dizilere, yapılardan dosya tiplerine kadar bir çok tipin incelenmesi yapılacaktır. Bu bölüm nesne türleri ve veri tipleri adında iki başlıkla incelenecektir. VHDL gerçek hayattaki nesnelere benzer nesneler vardır. Bunlar bazen bir veri yolu bazen bir değişken olabilir. Birinci bölümde bunlar incelenecektir. Tabi ki bunların kullanım yerleri farklıdır. Bu nesnelerden genel projemiz olan VHDL ile FPGA Đçine Mikro Denetleyici Gömülmesi projesinde çok işimize yarayacak bilgilerdir. Bu yüzden veri tiplerini genel olarak incelemek 14

yerine biraz daha detaya inmek yararlı olacaktır. Nesne türlerinin incelenmesinden sonra bu türlerin hangi tip verilerle oluşturulacağının öğrenileceği veri tipleri balığına geçilecektir. Nesne Türleri (Object Types) Programlama dilleri bildiğimiz gibi yapısal ve nesneye yönelik olmak üzere ikiye ayrılır. Yapısal dillere örnek olarak hepimizin duyduğu ya da kullandığı C, Pascal, Ada, Fortran,... verilebilir. Nesnel diller dillerde nesneler gerçek hayattaki nesneler model alınarak oluşturulur. Gerçek hayatta her nesnenin kendisine uygulanan etkilere göre bir davranışı veya bir işlevi vardır. Nesnel programlarda yapılan iş bundan farklı değildir. Nesne oluşturulur ve ona davranışlar ve işlevler kazandırılır. Modüler programlama için uygun olduğu için büyük hacimli yazılımlarda çok kullanılır. Bilinen ilk nesnel dil Smalltalk tır. Sonraları C++, Java... gibi nesnel diller oluşturulmuştur. VHDL yapısal dil özelliği gösterdiği gibi içinde nesnel özellikler barındırır. Bir VHDL nesnesi ancak aşağıdaki tiplerden birisiyle veya birkaçıyla oluşturulur. Signal(SĐNYAL) : Bu component portları arasında karşılıklı bağlaşmayı sağlayan kablo gibi davranır. Variable(DEĞĐŞKEN) : Değişken veriler için kullanılır. Genelde lokal olarak sadece Process ler içinde kullanılır. Constant(SABĐT) : Sabit değerler için kullanılır onun değeri sistem oluşumunun sonuna hiç değişmez. Đşaretler (Signal) Sinyal nesneleri entity leri birbirine ve aynı zamanda form modellerine bağlar. Sinyallerin görevi entity leri birbirleriyle dinamik verilerle haberleştirmektir. Sinyal tanımlaması şöyle olur: SIGNAL sinyalin_adı : sinyalin_tipi [ :=başlangıç değeri ]; SIGNAL tanımlamasının ardından sinyal ismi gelir. Sinyal isimleri ihtiyaç kadar belirtilir. 15

Belirttiğimiz isim sayısınca sinyal üretilir.tanımlamada da belirtildiği gibi sinyal nesnelerine ilk değer atanabilir. Son olarak sinyaller entity, architecture, ve package(paket) yapılarının içinde tanımlanabilir. Paketler her yerde kullanılabileceği için burada yapılan tanımlamalar global özellik taşır. Çünkü bu tanılamalar ancak paket kullanıldığı zaman aktif olurlar.(daha geniş bilgi ve özgül örnekler için..(computers - Vhdl Programming By Example (Mcgraw Hill - 4Th Ed)sayfa93)) Sinyaller için bir takım kapsama(yerel, genel,...) kuralları bulunmaktadır. Sinyaller; varlık(entity), mimari ve paket tanımlama anlarında tanımlanabilirler. Paket içi tanımlamalarda sinyaller genel bir tanımlama yapılmış gibi davranırlar. Çünkü paket bilindiği üzere birçok mimari veya varlık tarafından kullanılabilir. Ayrıca değer atamaları da tanımlandığı yerde olmayabilir. Değişkenler (variables) Değişkenler yerel olarak sadece Process ler veya altprogramlar içinde geçici değerleri tutmak için kullanılırlar. Sinyal tanımlamanın tersine değişken tanımlamada, değişkenin tanımlandığı yerde değer atanamayabilirler. Değer atamaları daha sonraki satırlarda olabilir. Değişkenler ortaya çok hızlı çıkıp işini yapıp ortadan kaybolurlar yani hafızada yer kaplamazlar. Bir değişkenin tanımlanması genel hatlarıyla aşağıdaki gibi olur; VARIABLE değişkenin_adı : değişkenin_tipi [:=başlangıç_değeri] ; Burada her değişken adı birkaç tane değişken adı olabilir. Her isme ait bir değişken üretilir. variable_type değişkenin veri tipini tanımlar. Bu veri tipi kendi tanımladığımız bir veri tipi olabilir. Yukarıda belirtildiği gibi değişkenler ancak ve ancak altprogram ve process tanımlamalarında kullanılırlar. Đlgili örneği aşağıda görebiliriz; 16

Bu örnek 5-girişli bir AND kapısının mimarisini belirtmiştir. Burada yukarıda belirtildiği gibi sadece process içinde iki adet değişken bildirimi yapılmıştır. Bunlardan birisi durum(state), diğeri ise gecikme(delay) değişkenidir. Durum değişkeni girişlerin AND fonksiyonu için geçici verileri tutmak için kullanılır. Yine aynı biçimde, çıkış değerlerini sıralarken oluşan gecikme değerlerini de bu delay değişkeni tutar. Bu iki değişkenin de tuttuğu veriler statik(static) değildir. Çünkü bunların değerleri girişlere(a,b,c,d,e) bağlı olarak değişir. Şurası unutulmamalıdır ki; verileri tutmak için değişkenler yerine sinyaller(signals) de kullanılabilirdi. Ama kullanılmadı. Bunun birçok nedeni vardır. Bunlardan başlıcaları; 17

Doğal(içsel) olarak değişkenler veri tutma ve değiştirmede sinyallerden daha üstündür. Çünkü değişkenler ve yaptığı işlevler aniden oluşurlar. Fakat sinyallerin oluşması için bir plan oluşturulmaktadır. Değişkenler daha az yer kaplarlar. Sinyaller yapısı bakımından oluşturulması için o andaki durum la ilgili daha fazla veriye ihtiyaç duyarlar ve bu veriler elde edildiğinde çok yer kaplarlar. Sinyal kullanırken veri senkronizasyonunu sağlamak için WAIT deyiminin kullanılmasına ihtiyaç vardır. Burada tanımlanan a,b,c,d veya e girişlerinden herhangi birisinin değer değişiminde programın içinde tanımlanmış process kısmı çalışmaya başlar. Durum değişkeni olan state tüm girişlerin değerini tutmak üzere görevlendirilir. Daha sonra state değişkeni tabanına dayanılarak gecikmeleri tutmak üzere de delay değişkeni görevlendirilir. Gecikmelere dayanılarak bu değerler delay değişkenine sevk edilir. Bu değerlere dayanılarak çıkış sinyali q, durum değişkeni olan state değişkenin değerini alır ve çıkış üretilmiş olur. Sabitler (constants) Sabitler bir tasarımda çok özel verileri tutmak için kullanılırlar. Sabitler tasarımcıya çok iyi dokümantasyona sahip bir model ortaya koyma olanağı sağlar. Eğer tasarımı yapılan modelde değişmez değerlere ihtiyaç varsa sabitler kullanılır. Tasarımcı isterse sabitlerin değerini elle değiştirip programı tekrar derleme ve optimum değeri bulma olanağına kavuşur. Bir sabitin çok iyi dokümantasyon sağlamasından kasıt şudur; mesela tasarlanan modelde çok sayıda pi sayısı kullanılacak olsun. Her kullanışta pi sayısının direkt değeri olan 3.1414 ü kullanmaktansa bir adet sabit tanımlamalıdır. Bu tanımlama aşağıdaki gibi olur; CONSTANT PI : REAL := 3.1414; Burada bu tanımlamanın yapılması programın okunurluğunu artırmıştır. Programa bir tertip düzen katmıştır. Genel sabit bildirimi aşağıdaki gibi olur; 18

CONSTANT sabitin_adı : veri_tipi [ := başlangıç_değeri ]; Sabitlerin tanımlanmasında esneklikler söz konusudur. VHDL değer ataması için ertelemeye olanak sunmaktadır. Yani sabitin değeri sabiti tanımlanan yerde atanmak zorunda değildir. Bir sabit paket tanımlanırken tanımlanabilir, değeri ise paket gövdesi tanımlanırken (koşullu atama olabilir) atanabilir. Sabilerin de sinyaller gibi bir takım kapsama kuralları vardır; Bir sabit bir çok varlık(entity) tarafından kullanılan bir pakette tanımlanıyorsa, o sabit genel(global) bir sabit olmuş olur. Bir sabit eğer bir Process içinde tanımlanmışsa sadece o Process içinde kullanılabilir. Bir mimaride tanımlanan bir sabit processler dâhil hiçbir ifade tarafından kullanılmayabilir. Şimdi veri tipleri adı altında diğer veri tiplerini açıklamaya başlayabiliriz: Veri Tipleri (Data Types) Bundan önceki bölümde sinyaller, değişkenler ve sabitler olmak üzere nesnel tipler açıklanmıştır. Bunlar en sade haldeki nesnelerdir. Eğer daha karmaşık nesneler oluşturulmak istenirse diğer veri tiplerini bilmek gereklidir. VHDL çok geniş bir çerçevede birçok veri tipini destekler. En başta; yeni bir veri tipi oluşturmak istenirse bir veri tipi tanım şablonuna gerek vardır. Bir veri tipi tanım şablonu, veri tipinin adı ve tipin tanım bölgesinden oluşur. Daha ileride verilen örneklerle konu daha iyi anlaşılacaktır. Yeni bir veri tipi paket tanımlama anında, varlık(entity) tanımlama anında, mimari tanımlama anında, altprogram ve process tanımlama anlarında oluşturulabilir. Yeni bir tip tanımlama şöyle olur; TYPE tipin_adı IS tipin_markası; 19

Burada tipin_markası biraz anlamsız gelebilir. Bu kısımda normal veri tiplerinden herhangi birisi veya bunlardan oluşmuş bir karmaşık veri tipleri olabilir. Bundan sonraki birkaç örnekte bunların nasıl kullanıldığı daha iyi anlaşılacaktır. Sinyaller ve sabitler için var olan kapsama kuralları buradaki kullanımlarında da geçerlidir. Şekil 1. de VHDL de geçerli olan veri tipleri gösteren diyagram görülmektedir. Burada dört ana kategori göze çarpmaktadır. Bunlar ; skaler tipler, birleşik tipler, erişimli ve dosyasal tiplerdir. Skaler tipler tamsayı ve gerçek sayı basit(sade) tiplerden oluşmaktadır. Birleşik tipler ise diziler ve kayıt tiplerini içerir. Erişimli tipler kasıt ise klasik programlama dillerindeki işaretçilere denktir. Son olarak dosyasal tipler ise tasarımcıya dosya nesneleri oluşturma olanağı sağlar. Skaler Tipler (Scaler Types) Skaler veri bir zaman diliminde sadece bir tane değer tutabilen nesnelerdir. Bir nesne kendi kendine birden çok değer içerebilir. Bir zaman diliminde bu değerlerden sadece bir tanesini tutabilir. Skaler tipler şu dört kısımdan oluşur; Tamsayılar Gerçek sayılar Sıralı sayılar Fiziksel sayılar 20

Şekil 1. VHDL Veri Tipleri Diyagramı Tamsayılar (Integer Types ) Buradaki kullanılan tamsayılar tamamen matematikte kullanılan tamsayılara benzerler. Bu tamsayılarla matematikte yaptığımız toplama, çıkarma, çarpma ve bölme işlemlerini yapabiliriz. VHDL LRM tamsayıların maksimum aralığını değil de minimum aralığı olan (- 2,147,483,647) dan +2,147,483,674 ye kadar olan kısmını destekler. Bunlar Standart Library(kütüphane) deki Standart pakette tanımlanmıştır. Bu standart paket VHDL diline ihtiyaç olan bütün veri tiplerini tanımlanmıştır. Fakat bu paket normal bir varlık veya paket tarafından özel olarak çağrılamaz. Aşağıda tamsayı ile ilgili birkaç örnek verilmiştir; 21

Đlk iki ifadede(1 ve 2) pozitif ve negatif tamsayıların atamaları gösterilmektedir. Üçüncü ifadede ise tamsayı olarak tanımlanmış bir değişkene gerçek sayı gibi atama yapılmıştır. Bu ifade derleyicide bir sorun olarak algılanacak ve hata mesajı bildirecektir. Çünkü VHDL veri tipi bakımından oldukça güçlü bir dildir. Gerçek Sayılar (Real Types) Gerçek sayılar matematikte bilinen gerçek sayılardan VHDL de nesneler oluşturmak için kullanılır. Ayrıca kesirli sayılar gibi tamsayıların gösteremediği sayıları göstermek için de kullanılırlar. Tamsayılar gibi gerçek sayıların minimum değer aralıkları Standart Kütüphanedeki Standart pakette tanımlanmıştır. Bu aralık -1.0E+38 den başlar ve +1.0E+38 de son bulur. Aşağıdaki örnekteki birkaç ifadede kullanım biçimleri görülmektedir; 22

Burada görüldüğü üzere gerçek sayı tipinden bir sinyal(signal) nesnesi tanımlanmıştır. Bütün gerçek sayılar yazılırken mutlaka bir ondalık kısmı bulunur. Bu ondalık kısmın değeri sıfır bile olsa belirtilir. Bu derleyicinin gerçek sayıları diğer tiplerden ayırt etmesini sağlar. Yukarıdaki örnekte birinci ifade bir nesneye bir değer atamasını göstermektedir. Anlatıldığı gibi ondalık kısmın değeri sıfır olmasına rağmen bildirimi yapılmıştır. Nitekim ikinci ifadede sayısal değer aynı olmasına rağmen imla hatası yapılmıştır. Çünkü orada yapılan atama; tanımlanan sinyalin tipinin bir tamsayı olduğunu bildirmektedir. Beşini ifadede ise imla hatası yoktur fakat tip uyuşmazlığı vardır. Çünkü tanımlanan nesneni tipi zaman(time) değil gerçek sayıdır. Sıralı Sayılar (Enumerated Types) Sıralı sayılar soyut kavramları modellemek için çok güçlü tiplerdir. Bu tipten verilerin veri tiplerini tasarımcı oluşturabilir. Bu değerler karakter veya sayı olabilirler. Buna örnek bir veri x, abc, siyah gibi isimlerle tanıtılabilir. Bazen bu bir yılın ayları bazen haftanın günleri bazen rasgele isimler olabilirler. Mesela karakteristik bir örnek vermek gerekirse dört durumlu bir simülasyon sistemi bu tip verilerle şöyle tanımlanabilir; TYPE fourval IS ( X, 0, 1, Z ); Görüldüğü üzere bu sistemde dört adet veri gösterilebilir. Bunların açıklaması şöyle olur; X Bilinmeyen değer 0 Mantıksal 0 1 Mantıksal 1 Z Yüksek empedans durumu Diğer bir örnek ise aşağıda olduğu gibi elemanları renk olan veri tipidir. TYPE renk IS (kırmızı, sarı, mavi, yeşil, turuncu); 23

Bu örnekte veri tipleri tamamen soyuttur. Yani fiziksel bir değere sahip değildirler. Bu yüzden sıra dışılardır. Bizim projemize uygun bir örnek olarak bir komut seti bu çeşit bir tanımlama ile tanımlanabilir: Bu çeşit veri tipleri genel olarak mantıksal olarak durum makinesi modellemelerinde kullanılabilirler. Durum makineleri genel olarak ASIC veya FPGA aygıtlarının kontrol mantığını oluşturmada kullanılmaktadırlar. Bu metot işlem sırasının doğru yürütülmesinde çok büyük kolaylık sağlar. 24

3 VHDL kodlarının yazılması send_8bit modülü Company: Engineer: Create Date: Design Name: Module Name: send_8bit - Behavioral Project Name: Target Devices: Tool versions: Description: Dependencies: Revision: Revision 0.01 - File Created Additional Comments: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Uncomment the following library declaration if instantiating any Xilinx primitives in this code. library UNISIM; use UNISIM.VComponents.all; 25

entity send_8bit is port ( send_ctrl : in std_logic; s_data : in std_logic_vector (7 downto 0); sclk_sig : in std_logic; sdi_sig : out std_logic; send_done : out std_logic := '0'); end send_8bit; architecture Behavioral of send_8bit is signal init:bit:='1'; begin process(send_ctrl,sclk_sig) variable x: integer:=7; variable data: std_logic_vector(7 downto 0); begin if x= 0 then init <='1'; if send_ctrl = '1' then if init = '1' then x := 7; data := s_data; sdi_sig <= data(x); init <= '0'; send_done <= '0'; else if falling_edge(sclk_sig) then x:= x-1; sdi_sig <= data(x); if x=0 then send_done <= '1'; end process; end Behavioral; send_8bit modülü Modelsim çıktısı 26

receive_8bit modülü Company: Engineer: Create Date: Design Name: Module Name: receive_8bit - Behavioral Project Name: Target Devices: Tool versions: Description: Dependencies: Revision: Revision 0.01 - File Created Additional Comments: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Uncomment the following library declaration if instantiating any Xilinx primitives in this code. library UNISIM; use UNISIM.VComponents.all; entity receive_8bit is port ( receive_ctrl: in std_logic; r_data : out std_logic_vector (7 downto 0); sclk_sig : in std_logic; 27

sdo_sig : in std_logic; receive_done : out std_logic := '0'); end receive_8bit; architecture Behavioral of receive_8bit is begin process(receive_ctrl,sclk_sig) variable x:integer:=8; variable data: std_logic_vector (7 downto 0); begin if receive_ctrl ='1' then if rising_edge(sclk_sig) then receive_done <='0'; x := x-1; data(x) := sdo_sig; if x=0 then receive_done <= '1'; r_data <= data; x := 8; end process; end Behavioral; receive_8bit modülü Modelsim çıktısı 28

Clock modülü Company: Engineer: Create Date: Design Name: Module Name: clock - Behavioral Project Name: Target Devices: Tool versions: Description: Dependencies: Revision Revision 0.01 - File Created Additional Comments: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Uncomment the following library declaration if instantiating any Xilinx primitives in this code. library UNISIM; use UNISIM.VComponents.all; entity clock is port ( clk_sig: in std_logic; sclk_sig: out std_logic:='1'); end clock; architecture Behavioral of clock is signal clk_temp: std_logic:='0'; begin process(clk_sig) variable x: integer:=0; begin if rising_edge(clk_sig) then x := x+1; if x = 25 then clk_temp <= not(clk_temp); 29

sclk_sig <= clk_temp; x := 0; end process; end Behavioral; clock modülü Modelsim çıktısı Ana modül Company: Engineer: Create Date: Design Name: Module Name: main - Behavioral Project Name: Target Devices: Tool versions: Description: Dependencies: Revision: Revision 0.01 - File Created Additional Comments: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Uncomment the following library declaration if instantiating 30

any Xilinx primitives in this code. library UNISIM; use UNISIM.VComponents.all; entity main is port ( clk : in std_logic; sdo : in std_logic; sdi : out std_logic; cs : out std_logic:='0'; sclk : out std_logic; deneme amacli portlar start_buton : in std_logic:='0'; send_buton : in std_logic:='0'; receive_buton : in std_logic:='0'; s0,s1,s2,s3,s4,s5,s6,s7 : in std_logic; r0,r1,r2,r3,r4,r5,r6,r7 : out std_logic); end main; architecture Behavioral of main is send_8bit component tanimlamasi component send_8bit is port ( send_ctrl : in std_logic; s_data : in std_logic_vector (7 downto 0); sclk_sig : in std_logic; sdi_sig : out std_logic; send_done : out std_logic := '0'); end component; receive_8bit component tanimlamasi component receive_8bit is port ( receive_ctrl: in std_logic; r_data : out std_logic_vector (7 downto 0); sclk_sig : in std_logic; sdo_sig : in std_logic; receive_done : out std_logic := '0'); end component; clock component tanimlamasi component clock is port ( clk_sig: in std_logic; sclk_sig: out std_logic:= '1'); end component; signal tanimlamalari signal s_data,r_data : std_logic_vector(7 downto 0); signal send_ctrl, receive_ctrl, sdi_sig, sdo_sig, send_done, receive_done, sclk_sig, clk_sig: std_logic; ana process icin signal tanimlamalari signal start_push : std_logic:='0'; start butonuna basili olan durumu denetlemek icin signal send_push : std_logic:='0'; send butonuna basili olan durumu denetlemek icin signal receive_push : std_logic:='0'; receive butonuna basili olan durumu denetlemek icin diger signal tanimlamalari 31

signal start_init : std_logic:= '1'; begin port haritalarinin yapilmasi snd : send_8bit port map(send_ctrl, s_data, sclk_sig, sdi_sig, send_done); rcv : receive_8bit port map(receive_ctrl, r_data, sclk_sig, sdo_sig, receive_done); clck : clock port map(clk_sig, sclk_sig); girislerin ve cikislerin esitlenmesi clk_sig <= clk ; sdo_sig <= sdo; sdi <= sdi_sig; sclk <= clk_sig; process baslangici process(clk) variable t : integer :=1003; begin start tusuna basildiginda... if start_buton = '1' and start_push = '0' then start_push <= '1'; if falling_edge(clk)then if start_init = '1' then t := 1003; t := t-1; if t=0 then start_init <= '0'; if start_buton = '0' and start_push = '1' then start_push <= '0'; send tusuna basildiginda... if send_buton = '1' and send_push = '0' then send_push <= '1'; s_data(7) <= s7; s_data(6) <= s6; s_data(5) <= s5; s_data(4) <= s4; s_data(3) <= s3; s_data(2) <= s2; s_data(1) <= s1; s_data(0) <= s0; send_ctrl <= '1'; if falling_edge(send_done) then cs <='1'; if send_buton = '0' and send_push = '1' then send_push <= '0'; 32

receive tusuna basildiginda... if receive_buton = '1' and receive_push = '0' then receive_push <= '1'; receive_ctrl <= '1'; almada (receive e basildiginde) yapilacak isler if receive_buton = '0' and receive_push = '1' then receive_push <= '0'; if falling_edge(receive_done) then r0 <= r_data(0); r1 <= r_data(1); r2 <= r_data(2); r3 <= r_data(3); r4 <= r_data(4); r5 <= r_data(5); r6 <= r_data(6); r7 <= r_data(7); end process; end Behavioral; Deneme amaçlı yapılan ana modülün yapısı 33