Benzer belgeler
Altera ile proje hazırlama. Quarturs programı üzerinde Altera De0 kartı için proje hazırlama

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.

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

T.C. RC SERVO MOTOR KONTROLÜ

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

İşletim Sistemleri (Operating Systems)

Dr. Feza BUZLUCA İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü

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

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ. İçerik

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

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

BM-311 Bilgisayar Mimarisi

PROGRAMLAMAYA GİRİŞ DERS 2

Bu derste! BBM 231 Yazmaçların Aktarımı Seviyesinde Tasarım! Yazmaç Aktarımı Düzeyi! Büyük Sayısal Sistemler! 12/25/12

mikroc Dili ile Mikrodenetleyici Programlama Ders Notları

7.Yazmaçlar (Registers), Sayıcılar (Counters)

Bölüm Bazı Temel Konseptler

Mikroçita. Mikroçita Rapor 2:

PASCAL PROGRAMLAMA DİLİ YAPISI

BBM 231 Yazmaçların Aktarımı Seviyesinde Tasarım! Hacettepe Üniversitesi Bilgisayar Müh. Bölümü

HAFTA 1 KALICI OLMAYAN HAFIZA RAM SRAM DRAM DDRAM KALICI HAFIZA ROM PROM EPROM EEPROM FLASH HARDDISK

İşletim Sistemlerine Giriş

Programlanabilir Devreler

Giris {\} /\ Suhap SAHIN

x86 Ailesi Mikroişlemciler ve Mikrobilgisayarlar

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

Deney 8: ALU da Aritmetik Fonksiyonlar

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

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.

Tek Vuruşluk Đşlemci. -- Company : Ege Universitesi, Elektrik-Elektronik Mühendisliği

8086 nın Bacak Bağlantısı ve İşlevleri. 8086, 16-bit veri yoluna (data bus) 8088 ise 8- bit veri yoluna sahip16-bit mikroişlemcilerdir.

İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır.

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

MİKROBİLGİSAYAR SİSTEMLERİ. Teknik Bilimler Meslek Yüksekokulu

Eğitim Amaçlı Temel Bir Mikrobilgisayarın Tasarlanması ve Gerçeklemesi Design and Implementation of a Basic Microcomputer for Educational Purpose

BÖLÜM 2 SAYI SİSTEMLERİ

D Duplex : Alıcı + Verici Çalışma Debouching : DMA : Direct Memory Access Data-Bus : Data Veri Yolu Data Flow : Veri Akışı Data Processing : Veri

EK A VHDL DONANIM TANIMLAMA DİLİ

İ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.


BM-311 Bilgisayar Mimarisi

Embedded(Gömülü)Sistem Nedir?

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

BİLGİSAYAR MİMARİSİ. << Bus Yapısı >> Özer Çelik Matematik-Bilgisayar Bölümü

İletişim Protokolleri (Communication Protocols)

Gömülü Sistemler. (Embedded Systems)

Von Neumann Mimarisi. Mikroişlemciler ve Mikrobilgisayarlar 1

EEM122SAYISAL MANTIK SAYICILAR. Elektrik Elektronik Mühendisliği Yrd. Doç. Dr. Hüseyin Sağkol

BÖLÜM Mikrodenetleyicisine Giriş

Sınavında sık yapılan temel hatalar:

Bilgisayar Mimarisi ve Organizasyonu Giriş

MX2-CJ2M ETHERNET/IP HABERLEŞMESİ

Bilgisayar Mimarisi Nedir?

Fen ve Mühendislik Uygulamaları ile MATLAB

Deney 7: Aritmetik ve Lojik İşlem Birimi(ALU)

CNC MACH breakout board user manual V8 type

İçindekiler FPGA GELİŞTİRME KARTI ENERJİ BESLEMESİ:... 5 ENERJİ SİSTEMİ ŞEMASI:... 5 FPGA GELİŞTİRME KARTINA PROGRAM YÜKLEME:... 6

7. Port Programlama. mikroc Dili ile Mikrodenetleyici Programlama Ders Notları -42- Şekil 2.1. Atmega16 mikrodenetleyici pin şeması

C-Serisi PLC İleri Seviye Eğitim

SAYISAL TASARIM. Ege Üniversitesi Ege MYO Mekatronik Programı

İŞLEMCİLER (CPU) İşlemciler bir cihazdaki tüm girdilerin tabii tutulduğu ve çıkış bilgilerinin üretildiği bölümdür.

MC6800. Veri yolu D3 A11. Adres yolu A7 A6 NMI HALT DBE +5V 1 2. adres onaltılık onluk bit 07FF kullanıcının program alanı

BİLGİSAYAR MİMARİSİ. Bilgisayar Bileşenleri Ve Programların Yürütülmesi. Özer Çelik Matematik-Bilgisayar Bölümü

K uark projesi. Temel Özellikler :

Güz Y.Y. Lojik Devre Laboratuvarı Laboratuvar Çalışma Düzeni

Ham Veri. İşlenmiş Veri Kullanıcı. Kullanıcı. Giriş İşleme Çıkış. Yazılı Çizili Saklama. Doç.Dr. Yaşar SARI-ESOGÜ-Turizm Fakültesi

Swansoft Fanuc OiT Kullanımı

Quiz:8086 Mikroişlemcisi Mimarisi ve Emirleri

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

VHDL Kullanarak FPGA ile Yüksek Kapasiteli Tam Çıkarıcı Devre Tasarımı

HSancak Nesne Tabanlı Programlama I Ders Notları

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 203 Veri Yapıları ve Algoritmalar I

e-tartı LTR3 Firmware Upgrade Yazılım Güncelleme Moduler Connection LTR3 Firmware Upgrade / LTR3 Yazılım Güncelleme v1.0.

Mikroişlemciler ve Assembler Programlama. Teknoloji Fakültesi / Bilgisayar Mühendisliği Öğr.Gör. Günay TEMÜR

Kullanıcı Dökümanı. Flash B2B. Versiyon 0.1

Multiplication/division

SPSS (Statistical Package for Social Sciences)

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

Ethercat 1S Servo Kütüphanesi

Mimari. risi. Yazar: İşlemci Mimar. bulunmasını istediğimiz. mimariyi. Şekil 1

Bilgisayarların Gelişimi

MIRACLE DATA WORKS KURULUM DOKÜMANI

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI KESMELİ GİRİŞ/ÇIKIŞ

MPLAB IDE ve ISIS ile ASSEMBLY DİLİNDE UYGULAMA GELİŞTİRMEK

DOĞU AKDENİZ ÜNİVERSİTESİ BAHAR BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BLGM-324 BİLGİSAYAR MİMARİSİ

Temel Mikroişlemci Tabanlı Bir Sisteme Hata Enjekte Etme Yöntemi Geliştirilmesi. Buse Ustaoğlu Berna Örs Yalçın

Sayıcılar n bitlik bir bilgiyi tutmanın yanısıra her saat çevriminde tuttukları değeri artıran veya azaltan ardışıl devrelerdir.

XILINX ISE WEBPACK 14.7 UYGULAMA TUTORIAL

XILINX ISE WEBPACK 14.7 UYGULAMA TUTORIAL

Bilgisayar Mühendisliğine Giriş. Yrd.Doç.Dr.Hacer KARACAN

T.C. İstanbul Medeniyet Üniversitesi Mühendislik ve Doğa Bilimleri Fakültesi Elektrik-Elektronik Mühendisliği Bölümü

İÇİNDEKİLER. 3 STM32F4 MIKRO-DENETLEYICISI 23 STM32 Ailesi ve STM32F STM32 Ailesi 23 STM32 Mikrodenetleyicileri 30 Numaralandırılması 30

SAYISAL MANTIK LAB. PROJELERİ

#include <stdio.h> int main(void) { float sayi; float * p; p = &sayi; printf("deger girin:"); scanf("%f", p); printf("girilen deger:%f\n", *p);

Hem lw hem de sw komutlarının ofseti 16-bitlik işaretli tamsayıdır.

1. LabVIEW ile Programlama

SAYISAL TASARIM. Ege Üniversitesi Ege MYO Mekatronik Programı

Transkript:

Res. Asist Erman Selim Res. Asist Sinan Zengin http://egedijitallab.weebly.com DİGİTAL SYSTEMS FPGA LAB 2015-2016

9/29/2015 Altera ile proje hazırlama Quartursprogramı üzerinde AlteraDe2 kartı için proje hazırlama Altera ile proje hazırlama Alterafpgakartları için derleyici programı Quartus tur. Bu programda da yazılan kodlar aynı çalışacaktır. Tek fark ara yüzdür. Aşağıdaki linkten quartus programı indirilebilir; https://www.altera.com/download/dnl-index.jsp

9/29/2015 Altera ile proje hazırlama Quartus programı çalıştırılır. Açılan programda «create new project» seçilirekyeni proje açılır. Altera ile proje hazırlama Projenin hedef dizini ve adı seçilir. (dizinde ve isimde türkçekarakter olmaması ve boşluk gibi özel karakterlerin olmaması gerekli)

9/29/2015 Altera ile proje hazırlama Projenin hedef dizini ve adı seçilir. (dizinde ve isimde türkçekarakter olmaması ve boşluk gibi özel karakterlerin olmaması gerekli) Altera ile proje hazırlama Kullanılacak fpgamodeli seçilir. De2 kartları için «Cyclone II EP2C35F672C6» seçilir.

9/29/2015 Altera ile proje hazırlama Gelen boş ekranda sol üst pencerede gözüken proje isimli logic kapı resmi projenin açıldığını gösterir. Altera ile proje hazırlama Sol köşedeki yeni ikonu ile yeni kaynak kod dosyası açılabilir. VHDL file seçilerek yeni kod dosyası açılır.

9/29/2015 Altera ile proje hazırlama Gelen boş ekran kod dosyasıdır. Quartustahazır kod şablonu açılmamaktadır. Altera ile proje hazırlama Kod yazıldıktan sonra dosyayı kaydederken ilk kod dosyasını proje ismine uygun yazınız. Örnekte counter kodu vardır. Ama projeye göre değiştirilmiştir.

9/29/2015 Altera ile proje hazırlama «Analysis&Synthesis» seçilerek kodun yazım doğrulu kontrol edilir. (Sentez edilir.) Simulasyon(Modelsim)

9/29/2015 Alteraile beraber yüklene Modelsim programı ücretsizdir. Modelsim programı adresinden öğrenci sürümü indirilebilir http://model.com/content/modelsim-pestudent-edition-hdl-simulationprogram yüklendikten sonra sitesine yönlenerek lisans almanızı sağlar. Öğrenci lisansı 180 gündür. Modelsim Simulasyonu Simülasyon işlemine başlamak için herhangi bir derleyicide yazılan VHDL kodunda error olmadığı doğrulanmalıdır.

9/29/2015 Modelsim Simulasyonu Modelsim programı açılır. Modelsim Simulasyonu New->Library açılır. gelen ekrandan ayar yapılabilir. (yapılmasa da olur «ok»)

9/29/2015 Modelsim Simulasyonu Compile seçilerek proje dosyaları eklenir. Modelsim Simulasyonu Start Simulation seçilerek simülasyon başlar. Gelen simulasyonu çalıştırılacak olan dosya seçilir. (tek dosya simüle edilir)

9/29/2015 Modelsim Simulasyonu Simulasyonişlemi zamana göre adım adım ilerlemektedir. Modelsim Simulasyonu Öncelikle simülasyon sinyalleri yani modelin entity kısmındaki in/out lar simülasyona eklenir.

9/29/2015 Modelsim Simulasyonu Okların yönü giriş/çıkışı gösterir. Sinyaller önceden belirlenmez. Anlık olarak oluşturulup çalıştırılır. Modelsim Simulasyonu a girişi 1, b girişi 0 olan sistem çalıştırılacaktır. a sinyaline sağ tık ile «Force» seçilir. Gelen ekrana değer yazılır. Aynısı b için tekrarlanır.(«force»)

9/29/2015 Modelsim Simulasyonu Değerler belirlendikten sonra («Force») simülasyon belirtilen süre kadar (ör:100ns) çalıştırılır. «Run» butonu ile Modelsim Simulasyonu Denenecek başka bir durum için «Force» ile değer belirlenip yeniden «run» yapılır.(ör: a=0,b=1 için)

9/29/2015 Projenin Karta Aktarımı Altera ile proje hazırlama Kart üzerine pinatamaları yapılmalıdır. Bunu assignments-> pin planner seçilerek yapılır.

9/29/2015 Altera ile proje hazırlama Pin değerlerini linkteki tabloda bulabilirsiniz; www.terasic.com.tw/attachment/archive/30/de2_pin_ta ble.pdf Altera ile proje hazırlama Kodun yazım hatası olmadığı görüldükten ve kodun modelsim simulasyonuyapıldıktan sonra (modelsim simulasyonudökümanındaanlatılmıştır.) Pindeğerlerinin atanması yapılmıştır. Artık karta aktarıma geçilebilir. «compile design» seçilerek devam edilir.

9/29/2015 Altera ile proje hazırlama Yükleme işlemi için programmer seçilir. Programmer ekranında *.sof dosyası yükleme dosyasını gösteri. No Hardware gözüküyorsa ya takılı kart yoktur yada driver sorunu vardır. Altera ile proje hazırlama Driver sorunu varsa driveryükleme işlemi için aygıt yöneticisini açın. Alterausb! işateriylegözüküyordur. Sağ basarak sürücüyü güncelleyin. Driver dosyası quartusun kurulu olduğu dizinin altındadır.

9/29/2015 Altera ile proje hazırlama Bağlantı veya sürücüyle ilgili sorun yoksa programmerda hardware setup butonundan usbblaster seçilir. Altera ile proje hazırlama Hardware setup butonunun yanında USB-Blaster gözüküyorsa yükleme yapılabilir. Start butonuna basılrak yükleme yapılır.

9/29/2015 Altera ile proje hazırlama alterafpga/quartusile ilgili ayrıntılı ve geniş bilgi kendi sitesinden bulunabilir. http://www.altera.com/index.jsp

9/29/2015 VHDL Basics Entity Declaration The entity declaration defines the NAME of the entity and lists the input and output ports. The general form is as follows, entity NAME_OF_ENTITY is port (signal_names: mode type; signal_names: mode type; : signal_names: mode type); end [NAME_OF_ENTITY] ;

9/29/2015 Modes & Types mode: is one of the reserved words to indicate the signal direction: in indicates that the signal is an input out indicates that the signal is an output of the entity whose value can only be read by other entities that use it. inout the signal can be an input or an output. type: a built-in or user-defined signal type. o bit can have the value 0 and 1 o bit_vector is a vector of bit values (e.g. bit_vector(0 to 7) o std_logic, std_ulogic, std_logic_vector, std_ulogic_vector: o boolean can have the value TRUE and FALSE o integer can have a range of integer values o real can have a range of real values o character any printing character o time to indicate time Entity Declaration a b sum carry entity half_adder is port( a, b : instd_logic; sum, carry :out std_logic); end half_adder; The interface is a collection of ports Ports are a new programming object: signal Ports have a type: std_logic Ports have a mode: in, out, inout (bidirectional)

9/29/2015 Architecture body architecture architecture_name of NAME_OF_ENTITY is -- Declarations -- components declarations -- signal declarations -- constant declarations -- function declarations -- procedure declarations -- type declarations: begin -- Statements: end architecture_name; Architecture body a b sum carry entity half_adder is port(a, b : in std_logic; sum, carry :out std_logic); end half_adder; architecture behavior of half_adder is begin sum <=a xorb; carry <= a andb; end behavior; Description of events on output signals in terms of events on input signals: the signal assignment statement

9/29/2015 VHDL Operators Logical Operators not, and,nand, or, nor, xor, xnor - works on types BIT, BIT_VECTOR, BOOLEAN -vectors must be same length -the result is always the same type as the input Numerical Operators + "addition" - "subtraction" * "multiplication" / "division" mod "modulus" rem "remainder" abs "absolute value" ** "exponential" -works on types INTEGER, REAL -the types of the input operands must be the same VHDL Operators Relational Operators - Output is always BOOLEAN (TRUE, FALSE) - works on types: BOOLEAN, BIT, BIT_VECTOR, CHARACTER, INTEGER, REAL, TIME, STRING = "equal«/= "not equal" < "less than«<= "less than or equal" > "greater than«>= "greater than or equal«shift Operators - works on one-dimensional arrays - works on arrays that contain types BIT, BOOLEAN sll "shift left logical«srl "shift right logical" sla "shift left arithmetic«sra "shift right arithmetic" rol "rotate left«ror "rotate right«concatenation Operator -combines objects of same type into an array & "concatenate" ex) New_Bus<= ( Bus1(7:4) & Bus2(3:0) )

9/29/2015 signals ENTITY fewgates IS PORT ( A : IN STD_LOGIC; B : IN STD_LOGIC; C : IN STD_LOGIC; Y : OUT STD_LOGIC behavior ); END fewgates; ARCHITECTURE c1_behavior OF fewgates IS SIGNAL sig1: STD_LOGIC; BEGIN sig1 <= (NOT A) AND (NOT B); Y <= C OR sig1; END c1_behavior; sig1 Internal signals connect components component Half adder«ha» Halfadderalt modül yapılarak full adderda kullanılacaktır. full adder«fa»

9/29/2015 component Alt modüllerin sağ taraflarında kalan boşluklara virgülden önceye bağlanacak port ismi yazılarak. bağlantılar yapılır. Yazılacak başka kod varsa (örnekte or işlemi)kodun devamına yazılır. component

9/29/2015 process process (sensitivity_list) declarations; begin sequential statement; sequential statement;... end process; Contains a set of sequential statements to be executed sequentially The whole process is a concurrent statement Can be interpreted as a circuit part enclosed inside of a black box process Process with sensitivity list. Interpretation: black box, indivisible circuit part. Sensitivity list The execution of the process is initiated whenever an event occurs on any of the signals in the sensitivity list

9/29/2015 syntax for IF, CASE, WITH and WHEN!!! Inner of process!!! syntax for IF, CASE, WITH and WHEN!!! Inner of process!!!

9/29/2015 syntax for IF, CASE, WITH and WHEN!!! Outof process!!! syntax for IF, CASE, WITH and WHEN!!! Outof process!!!

LAB 1) Do rt Bit Toplayıcı 1a) Half adder tasarımı. Half adder mantıksal devresi, VHDL dili kullanılarak tasarlanacak ve simülasyonu yapılacaktır. Half adder tasarımı kapılar kullanılarak aşağıdaki gibi gerçekleştirilir. 1b) Full adder tasarımı VHDL kod sayfasıyla elde hazırlanan Half adder tasarımını bitirdikten sonra tasarımı komponent olarak kullanarak VHDL ortamında full adder yaparken kullanacağız. 1c) 4 Bitlik toplayıcı Tasarladığımız full adder'ı kullanarak 4 bitlik bir toplayıcı yapmak istersek tasarladığımız full adder'ı da aynı half adder da olduğu gibi component olarak kullanarak VHDL ortamında carry sinyalleri ripple edicek şekilde devreyi aşağıdaki gibi birleştirmeliyiz. Bu devredeki carry lerin ripple etmesi demek bitlerdeki toplama işleminin gerçekleşebilmesi için önceki tüm bitlerdeki toplama işleminin bitirilmiş olması demektir. İşlem paralel gerçekleştirilmesine rağmen carry lerin aktarımı ekstra gecikmeye neden olmaktadır.

1d) Laboratuarda hardware tasarımın denenmesi Gerçek ortamda tasarımımızı deneyebilmemiz için değişiklik yapabileceğimiz girişlere ve bu girişlere karşı oluşan çıktıyı gözlemleyebilmek için çıkışlara ihtiyacımız var. Çıkışları laboratuar ortamında kolayca ledler üzerinde gözlemleyebiliriz. Girişler için ise tasarımımıza 4 er bitlik anahtar takımını Input_1 ve Input_2 operandları için kullanacağız. Pin atamasını.ucf dosyasının içerisinde ya da assignments-> pin planner kısmından yapmalıyız. Pin atamaları DE2_Pin_Table dan bakılarak yapılabilir.

LAB 2) 4-bit Up/Down Counter Sayıcılar n bitlik bir bilgiyi tutmanın yanısıra her saat çevriminde tuttukları değeri artıran veya azaltan ardışıl devrelerdir. Genel olarak iki gruba ayrılır: Senkron sayıcılar Asenkron sayıcılar (Ripple sayıcılar) Senkron sayıcılarda tüm flip-flop lara uygulanan ortak bir saat sinyali vardır. Böylece tüm flip-floplar aynı şekilde, saatin her bir pozitif kenarında tetiklenmekte ve çıkış üretmektedirler. Aşağıdaki resimde 8 bitlik bir sayıcının genel şematiği gösterilmiştir. Enable girişi; sistemin sayıp/saymayacağını gösterir. 1 için sayma işlemini yapar, 0 için içindeki değeri sabit tutar. Up_down girişi ; sistemin sayma yönünü gösterir. 1 için yukarı yönde, 0 için aşağı yönde sayar. asynch_clr senkron dışı sıfırlamadır. Saat sinyaline bakmaksızın her ne zaman 1 olursa içeriği 00000000 yapar, aksi halde normal işlem devam eder. clk girişi klasik saat girişidir. Q çıkışları ise 8 bitlik sayıcının her bir bitini çıkışıdır. Hint1: iç içe yazılabilecek if- else komutları düşündüğünüz mantığı VHDL diline aktarmanızda kolay yöntem olabilir. Hint2: Std_logic_vector türündeki değişkenleri toplamak için vektör boyuna dikkat edin. Örneğin 8 bitlik count vektörünü bir arttırmak için count+ 00000001 işlemi yapılabilir. Hint3: karta aktarıldı zaman clk sinyali için kartın üzerindeki 50MHz lik sinyal kullanılırsa insan gözünün algılayamadığı hızlarda sayım yapar. Çözüm için sinyal bölücü eklenmelidir. Sinyal bölücünün kodları hazır olarak kullanılabilir. Sinyal bölücü; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity clk_div is Port ( clk_50 : in STD_LOGIC; reset: in std_logic; clk_out : out STD_LOGIC ); end clk_div; --50Mhz giriş clk --dışardan sıfırlamak için atadık. --çıkış clk

architecture Behavioral of clk_div is signal control: std_logic:='0'; signal counter: integer range 0 to 49999999 :=0; begin process (clk_50,reset) begin if (reset='1') then counter <= 0; control <= '0'; elsif (rising_edge(clk_50)) then if (counter=49)then--999999) then control <= not(control); counter <= 0; else counter <=counter + 1; end if; end if; end process; clk_out <= control; end Behavioral;

LAB 3) Multiplexer ve ALU Tasarımı 3a) 3to8 Multiplexer Tasarımı Aşağıdaki 3to8 multiplexer ı tasarlayınız. X0..X7 i veri girişidir. S0..S2 seçme bitleridir. S3 multiplexerı aktif etmek için kullanılmalıdır. S3=0 iken multiplexer aktif olmalıdır. Y veri girişinden gelen bilgi, Y ise onun terslenmiş hali olmalıdır. Dip Not: Tasarımın gerçeklenmesine gerek yoktur, simülasyonda gösterilecektir. 3.b) ALU Tasarımı Aşağıda özellikleri verilen ALU yu tasarlayınız. S3..S0 pinleri selection bitleri olmalıdır. İşlem seçebilmek için N17, H18, L14 ve L13 switchleri kullanılmalıdır. A girişi 5, B girişi 15 olmalıdır. İşlem sonuçlarını binary görmek için F9, E9, D11, C11, F11, E11, E12, F12 ledleri kullanılmalıdır. S3..S0 bitlerinin durumlarına göre işlemler tabloda listelendiği gibi olmalıdır.

LAB 4) State Machine FSM(Finite State Machine) sınırlı sayıdaki durumlarım arasındaki iletişimi modellemek için kullanılır. Bu iletişim o anki durum ile dışardan gelen girdilere bağlıdır. Bu sistem VHDL'de ardışıl devreleri programlamak için kullanılan yöntemler biridir. ASM chart, sistem akışını gösteren diyagramdır. State(durum) box, desicion box ve conditional output box larından oluşur. Atama kutularında giriş ve çıkışlara göre yapılacak atama işlemleri veya değişkenler arasında matematiksel işlemler yapılabilir. Karar kutusunda ise şart tanımlanır. İf kutusu gibi düşünülebilir. Tahtaya çizilen örnek state machine diyagramını VHDL kodu ile gerçekleştiriniz. 3 ana bölüm olarak düşününüz.; 1. Bölüm: başlangıç ayarları ve reset işlemini yürütür. 2. Bölüm: stateler arası geçiş ve sistem akışını kontrol eder. 3. Bölüm: statelerde yapılacak işlemleri ve atamaları kontrol eder. Hint: Föyün arkasında bulunana örnek kodlardan yararlanabilirsiniz.

LAB 5) Memory ve Register Memory Tasarımı 5.a) Memory Tasarımı Memory 8x8 bitlik olacaktır. MW=1 iken yazım, MW=0 iken okuma yapılacaktır. Data in den data girişi, Address ten ise adres seçimi yapılacaktır. Veriler, data out tan dışarı yansıyacaktır. İstenilen bilginin yazılıp, okunabildiği simülasyonda gösterilecektir. Yukarıdaki özellikleri taşıyan memory i tasarlayınız. Hint: memory yapısı 2 boyutlu vektör olarak yeni şeklinde tanımlanır. Örnekte, 8bitlik 4 satır bilgi tutulmaktadır. type mem_type is array (3 downto 0) of std_logic_vector (7 downto 0); signal mem: mem_type:=("00000100","00000011","00000010","00000001"); 5.b) Register Tasarımı Register 8x8 bitlik olacaktır. RW=1 iken yazım, RW=0 iken okuma yapılacaktır. DA yazılacak adresin seçim bitleridir. AA okuma anında A çıkışında gösterilecek registeri seçen bitlerdir. BA okuma anında B çıkışında gösterilecek registeri seçen bitlerdir. Senkronizasyon için düşen kenarlı Clk kullanılacaktır. Veriler D data dan girecektir. İstenilen bilginin yazılıp, istenilen tarafta okunabildiği simülasyonda gösterilecektir. Hint: Föyün sonundaki örnek kodlardan yararlanılabilir.

LAB 6) Datapath Tasarımı Yukarıda gösterilen datapath yani veri yolu tasarlanacaktır. Bir önceki deneylerde oluşturulmuş register memory bu deneyde kullanılabilecektir. Tekrar tasarıma gerek yoktur. ALU (Fonksiyon ünitesi) tasarımı yapılırken eski ALU tasarımı V (Taşma), C (Elde), N (Negatif), Z (sıfır) bayrakları çıkartılarak kullanılabilir. İsterseniz ALU yu tekrar tasarlayabilirsiniz. ALU da en az 8 işlem yapılmalıdır. Şekilde görülen mux lar ayrı ayrı tasarlanacaktır. Tüm tasarımlar gerçekleştiğinde en sonunda birleştirme sağlanarak, örnek en az 2 uygulama gösterilecektir. Örnek Uygulama: R0=5, R5=15, İşlem: R3=R5-R0 Sonuç=10, Bayraklar: Z=0, V=0, C=0, N=0, R3=10

LAB 7) Control Unit Yukarıda gösterilen control unit tasarlanacaktır. Öncelikle her saniyede bir artan, 0..8 sayan counter (PC) yapılacaktır. 8x8 Bitlik instruction memory tasarımı yapılacaktır, address değerine göre çıkışta o adreste yazılan bilgi gösterilecektir. Zero fill de memory çıkışının son 3 biti alınıp dışarı 8 bit olarak yansıtılacaktır. Örneğin memory çıkışı 0b01010101 ise zerofill çıkışı 0b00000101 olacaktır. Instruction decoder komut çözen decoderiniz olacaktır. Memoryden gelen 8 bitlik bilgiye göre datapath e gidecek bilgiler ayrıştırılmalıdır. Tüm tasarımlar gerçekleştiğinde en sonunda birleştirme sağlanarak, örnek en az 2 uygulama gösterilecektir. Dip not: Kod ayrıştırma kısmını kendiniz yapabileceğiniz gibi, kitabınızdan da örnek alabilirsiniz. Fakat hangi 8 bitlik kodun, ne iş yapacağı belirtilmeli, ona göre çıkış değerleri simülasyonda gösterilmelidir.

LAB 8) Single Cycle Tasarımı 1) CPU Nedir? Bir bilgisayarın en önemli parçalarından biri işlemcidir. Kısaca CPU (Central Processing Unit) ya da MİB (Merkezi İşlem Birimi) olarak anılan ve adından da anlaşılacağı üzere bilgisayardaki işlemleri sayısal olarak yürüten ve sonuçları gerekli yerlere gönderen elemanlardır. İşlemciler aritmetik ve mantıksal işlem yapabilme yeteneğine sahiptirler. Bu işlevlerini kullanabilmek için işlemci içerisine tanımlanmış, komut listelerinden ibaret bir takım programlar mevcuttur. Bu komutlar işlemciye iki sayının toplamı, çıkarılması yönünde emirler verebildiği gibi dış çevreden (örneğin klavyeden, yazıcıdan, fareden) alacağı emirlere göre bir takım komutları atlayıp başka komut satırlarını işlemeye devam edebilir. Temel olarak işlemcinin yaptığı iş, bitler üzerinde işlem yapmak üzere belirlediğimiz komutları çalıştırmaktır. CPU veya çeşitli donanım aygıtlarını kontrol edebilecek öte yandan kullanıcının rahatça vereceği komutları gerekli yerlere ulaştıracak bir sisteme ihtiyaç vardır. Temelde bu sistemler bilgisayarlarda yazılım tabanlıdır ve görevi diğer yazılımların belleğe, girdi/çıktı aygıtlarına ve kütük sistemine erişimini sağlar. Birden çok program aynı anda çalışıyorsa, işletim sistemi her programa yeterli sistem kaynağını ayırmaktan ve birbirleri ile çakışmamalarını sağlamaktan da sorumludur. Bu deneyede yapacağınız işlemci 8 bitlik veriyoluna sahip, an az 8 komutu rahatlıkla işleyebilen, harvard mimarisine sahip single cycle computer olacaktır.

2) İşlemci Mimarileri 2.1) Von Neumann Mimarisi: John Von Neumann'ın 1945'teki makalesinde adı geçen ve bilgisayar tarihinde ilk kez ortaya atılan mimaridir. Basit bir temel üzerine kurulu olan yapıda kısaca komut hafızası ve veri hafızanın birlikte bulunduğu tek bir bellek elemanı, komutları işlem sırasına sokan denetim birimi ve istediğimiz işlemi yapmak için ise gelişmiş bir ALU'ya (CPU) sahiptir. Von Neumann mimarisinin en büyük eksikliği kaydedicilerin ve hafızanın aynı bellekte elemanı üzerinde bulunmasıdır. Bu ona hız konusunda büyük eksiklikler getirir. Genelde CISC işlemciler bu mimariyi baz alır ve oldukça fazla komuta sahiptirler. Buna örnek olarak Intelin 8051 mikrodenetleyicisi (255 komut içerir) gösterilebilir. Şekil 2 - Von Neumann Mimarisi 2.2) Harvard Mimarisi: Von Neumann'ın eksikliklerini gören IBM ve Intel mühendislerinin bir araya gelerek oluşturdukları mimaridir. Mühendislerin yaptığı ise komut hafızası ile veri hafızasını birbirinden ayırmaktır. Böylece bir komut işlenirken belleğe yazma işlemi beklenmemekte ve dolayısıyla hız artmaktadır. Genelde RISC işlemciler bu mimariye dayanmaktadır ve oldukça az komuta sahiptirler. Dolayısı ile işi işlemciyi programlayacak kişiye bırakır. Örnek olarak Microchip firmasının Picleri (16f serisi 35 komut içerir) ve daha birçok mikrodenetleyicisi ve günümüz işlemcileri (pentium vb.) gösterilebilir. 2.2) Single Cycle Computer: Adının da belirttiği gibi bir komutu tek bir adımda işleyen en basit CPU yapısıdır. Harvard mimarisine sahip CPU, kısaca veri yolu ve kontrol ünitesinden oluşur (3. bölümde anlatılacak). İşlemcimiz dışarıdan sağlayacağımız saatin frekansına göre çalışır ve o frekansla hızı anılır fakat tasarımda kullanılan malzemelerin hız değerleri, örneğin memory'e yazma hızı gibi etkenler CPU'nun çalışma hızını etkiler. Yapıda en yavaş çalışan bölüm, hız belirleme açısından en önemli bölüm olmaktadır.

2.3) Çalışma Mantığı: Programcı öncelikle yapmak istediği işlemleri komut hafızasına (Instruction Memory) yükler, Daha sonra CPU çalıştırılmaya başlanır, Program Counterher bir saat darbesinde birer artar (bu değiştirilebilir), Her bir PC değerine göre gerekli kod işletilir, İstenilen değerler Registerlere yüklenir, Bu değerler ile gerekli işlemler yapılır, Gerekirse işlem sonuçları hafızaya alınır, Komutlar bittiğinde program sonlanır. Örnek bir işlem yaptırmak istersek; *8 register tanımladığımızı R1=4, R4=5 olduğunu gerisinin ise '0' olduğunu kabul edelim *Komut belleğine ise 0) R3=R1+R4 1) R2=R3*R1 2) R5=R2/R4 olarak tanımlansın. *PC değerimiz sırasıyla 0,1,2,3.. şeklinde gidecek ve komutlar sırasıyla işletilecektir. *Sırayla işlemler yapıldığında son değerlerimiz; R3=9 R2=36 R5=7,2 olacaktır. *Tüm bu işlemler toplamda 3 clock cycle süre alacaktır. 3) Veri Yolu ve Kontrol Ünitesi 3.1) Veri Yolu: Veri yolu, işlemcinin yükünü çeken kısmıdır. Verilen komutlara göre sırasıyla çıkarma, toplama, çarpma gibi tüm işlemler bu kısımda yapılır. Çıkan sonuçlara göre bizlere kontrol etme olanağı da sağlayan bölümlere sahiptir. Kabaca veri yolu yukarıda görüldüğü gibi şu parçalardan oluşur; Register Birimi Fonksiyon Ünitesi Hafıza Elemanı

3.1.1. Register Birimi: İşlemlerde geçici hafıza olarak kullanılan bölümdür. Projemizde toplam 8 adet, 8 bitlik register kullanılacaktır. Register içerikleri istenildiği zaman dışarıdan kontrolle sıfır yapılabilmekte ve yine istediğimiz komuta göre istenilen registere, istenilen değer atanabilmektedir. 3.1.2. Fonksiyon Ünitesi: Veri yolunun en önemli yapısıdır. Toplama, çıkarma, çarpma, and ve or gibi aritmetik ve mantıksal işlemleri yerine getirebilmek için tasarlanmış bölüm burasıdır. Tasarımımızda 8 bitlik, 15 işlemi gerçekleştirebilen ALU tasarlanacaktır. İşlem sonuçlarına göre taşma (V), toplam sonuçlarında elde (C), negatiflik (N) ve sonucun sıfır (Z) olup olmadığını kontrol edebileceğimiz bit çıkışları da yine aynı yapı içerisine gömülmüş olup ayrıca bu bayrakları da yine bu yapıdan kontrol edilebilir. 3.1.3. Hafıza Elemanı: İşlemcide istediğimiz bilgiyi saklamak için kullanabileceğimiz, gerektiği zaman tekrar sakladığımız bilgiyi kullanabileceğimiz bölümdür. Tasarımızda 8x8 bitlik memory kullanacak olup şekilde görülen address out ve data out kısımları ile bu elemanın kontrolünü sağılanacaktır. 3.2) Kontrol Ünitesi: Veri yolu tasarlandıktan sonra verilen komutları sıralayan, kontrol eden ve düzenleyen kısım burasıdır. Bu bölüm daha önceki bahsettiğimiz Harvard mimarisinin bire bir yansımasıdır. Yukarıdaki resimde görülen kontrol ünitesi aşağıdaki birimlerden oluşur: Program Counter Birimi Komut Hafızası Komut Çözücü 3.2.1. Program Counter Birimi: Seri işlemcilerin en büyük özelliklerinden biri olan, sırayla işlem yapma özelliğini kazandıran bölümdür. Görevi her saat darbesinde bir artmak ya da atlama komutu verildiğinde istenilen program koduna ulaşmayı sağlamaktır. Bu tasarımda kullanıcının da kontrol edebileceği, 8 bitlik sayıcı tasarlanacaktır. 3.2.2. Komut Hafızası: İşlemcinin hangi sırayla, hangi işlemleri yapacağı bilgisini saklandığı bölümdür. Şekil-2 de görülebilecek (Instruction Memory) bu kısım, özellikle işlemciyi programlayacak kişi tarafından algoritmalar geliştirilip, bu bölüme yükleme yapılmasıyla anlam kazanmaktadır. Bölüm kısaca aldığı program counter değeri ne ise, o kısmı işletme emri vermekle yükümlüdür. Yapılan tasarımda işlemciye 28 işlemi art ardına yapabilme özelliği kazandırılmıştır. Bu da basit bir algoritma yazacak programcı için oldukça yeterli bir hafızadır.

3.2.3 Komut Çözücü: Kontrol ünitesinin en önemli kısmıdır. Kullanıcı tarafından makine dilinde yazılan kodun çözüldüğü, veri yoluna hangi görevlerin yaptırılacağı, hafızaya değer alımları, atlama emirleri ve bunun gibi birçok komutun süzüldüğü yer burasıdır. Yapılan tasarımda 16 ya 17 lik kod çözücü tasarlanacaktır. 3.3) Hızı Etkileyen Unsurlar: Hızı etkileyen en büyük unsur veri yolundaki yavaşlıktan kaynaklanır. Genel anlamda ne kadar hızlı bir veri yolu tasarlanırsa o denli hızlı işlemci elde etmek mümkündür. Gelişen teknoloji ve kullanılan değişik mimari metotları ile (mesela pipeline) bu bölümü hızlandırmak mümkündür. Günümüz işlemcilerinde birden fazla veri yolu bulunmakta ve dahası bunlar paralel çalışarak işlemciye hız konusunda büyük özellikler kazandırmaktadır. One cycle computer de işlemler şöyle gerçekleşir: 1) Tüm bu işlemler komut hafızasına sırayla uygun olanı seçilerek yüklenir. 2) İşlemci çalıştırılır. 3) Program counter saymaya başlar ve komut hafızasının ilk adresinden itibaren kodları okutmaya başlar. 4) Kodlanmış komutlar komut çözücüye gelir ve veri yolunun anlayabileceği duruma getirilir. 5) Kullanılacak registerler, fonksiyonlar seçilir ve işlem bir saat darbesi içerisinde biter. 6) Daha sonra durum bir kez daha 3. maddeye döner ve bu sefer yeni bir komut alınarak işlemler devam eder. Bu deneyde, daha önce veri yolu ve kontrol ünitesi yapılmış single cycle computer tasarımı yapılacaktır. Yapacağınız işlemci en az 8 işlem yürütebilecek kapasitede olmalıdır. Instruction registere 8 farklı işlem tanımlanıp, çalıştığı simülasyon olarak gösterilecektir. Yapılan işlemlerin sonuçları memory e yazılacaktır. 8 sonuç da, memoryde gösterilecektir.

Altera DE2 Board Pin Table Signal Name FPGA Pin No. Description SW[0] PIN_N25 Toggle Switch[0] SW[1] PIN_N26 Toggle Switch[1] SW[2] PIN_P25 Toggle Switch[2] SW[3] PIN_AE14 Toggle Switch[3] SW[4] PIN_AF14 Toggle Switch[4] SW[5] PIN_AD13 Toggle Switch[5] SW[6] PIN_AC13 Toggle Switch[6] SW[7] PIN_C13 Toggle Switch[7] SW[8] PIN_B13 Toggle Switch[8] SW[9] PIN_A13 Toggle Switch[9] SW[10] PIN_N1 Toggle Switch[10] SW[11] PIN_P1 Toggle Switch[11] SW[12] PIN_P2 Toggle Switch[12] SW[13] PIN_T7 Toggle Switch[13] SW[14] PIN_U3 Toggle Switch[14] SW[15] PIN_U4 Toggle Switch[15] SW[16] PIN_V1 Toggle Switch[16] SW[17] PIN_V2 Toggle Switch[17] Signal Name FPGA Pin No. Description DRAM_ADDR[0] PIN_T6 SDRAM Address[0] DRAM_ADDR[1] PIN_V4 SDRAM Address[1] DRAM_ADDR[2] PIN_V3 SDRAM Address[2] DRAM_ADDR[3] PIN_W2 SDRAM Address[3] DRAM_ADDR[4] PIN_W1 SDRAM Address[4] DRAM_ADDR[5] PIN_U6 SDRAM Address[5] DRAM_ADDR[6] PIN_U7 SDRAM Address[6] DRAM_ADDR[7] PIN_U5 SDRAM Address[7] DRAM_ADDR[8] PIN_W4 SDRAM Address[8] DRAM_ADDR[9] PIN_W3 SDRAM Address[9] DRAM_ADDR[10] PIN_Y1 SDRAM Address[10] DRAM_ADDR[11] PIN_V5 SDRAM Address[11] DRAM_DQ[0] PIN_V6 SDRAM Data[0] DRAM_DQ[1] PIN_AA2 SDRAM Data[1] DRAM_DQ[2] PIN_AA1 SDRAM Data[2] DRAM_DQ[3] PIN_Y3 SDRAM Data[3] DRAM_DQ[4] PIN_Y4 SDRAM Data[4] DRAM_DQ[5] PIN_R8 SDRAM Data[5] DRAM_DQ[6] PIN_T8 SDRAM Data[6] DRAM_DQ[7] PIN_V7 SDRAM Data[7] DRAM_DQ[8] PIN_W6 SDRAM Data[8] DRAM_DQ[9] PIN_AB2 SDRAM Data[9] DRAM_DQ[10] PIN_AB1 SDRAM Data[10] DRAM_DQ[11] PIN_AA4 SDRAM Data[11] DRAM_DQ[12] PIN_AA3 SDRAM Data[12] DRAM_DQ[13] PIN_AC2 SDRAM Data[13] DRAM_DQ[14] PIN_AC1 SDRAM Data[14] DRAM_DQ[15] PIN_AA5 SDRAM Data[15] DRAM_BA_0 PIN_AE2 SDRAM Bank Address[0] DRAM_BA_1 PIN_AE3 SDRAM Bank Address[1] DRAM_LDQM PIN_AD2 SDRAM Low-byte Data Mask DRAM_UDQM PIN_Y5 SDRAM High-byte Data Mask DRAM_RAS_N PIN_AB4 SDRAM Row Address Strobe DRAM_CAS_N PIN_AB3 SDRAM Column Address Strobe DRAM_CKE PIN_AA6 SDRAM Clock Enable DRAM_CLK PIN_AA7 SDRAM Clock DRAM_WE_N PIN_AD3 SDRAM Write Enable DRAM_CS_N PIN_AC3 SDRAM Chip Select Signal Name FPGA Pin No. Description FL_ADDR[0] PIN_AC18 FLASH Address[0] FL_ADDR[1] PIN_AB18 FLASH Address[1] FL_ADDR[2] PIN_AE19 FLASH Address[2] FL_ADDR[3] PIN_AF19 FLASH Address[3] FL_ADDR[4] PIN_AE18 FLASH Address[4]

Altera DE2 Board Pin Table FL_ADDR[5] PIN_AF18 FLASH Address[5] FL_ADDR[6] PIN_Y16 FLASH Address[6] FL_ADDR[7] PIN_AA16 FLASH Address[7] FL_ADDR[8] PIN_AD17 FLASH Address[8] FL_ADDR[9] PIN_AC17 FLASH Address[9] FL_ADDR[10] PIN_AE17 FLASH Address[10] FL_ADDR[11] PIN_AF17 FLASH Address[11] FL_ADDR[12] PIN_W16 FLASH Address[12] FL_ADDR[13] PIN_W15 FLASH Address[13] FL_ADDR[14] PIN_AC16 FLASH Address[14] FL_ADDR[15] PIN_AD16 FLASH Address[15] FL_ADDR[16] PIN_AE16 FLASH Address[16] FL_ADDR[17] PIN_AC15 FLASH Address[17] FL_ADDR[18] PIN_AB15 FLASH Address[18] FL_ADDR[19] PIN_AA15 FLASH Address[19] FL_ADDR[20] PIN_Y15 FLASH Address[20] FL_ADDR[21] PIN_Y14 FLASH Address[21] FL_DQ[0] PIN_AD19 FLASH Data[0] FL_DQ[1] PIN_AC19 FLASH Data[1] FL_DQ[2] PIN_AF20 FLASH Data[2] FL_DQ[3] PIN_AE20 FLASH Data[3] FL_DQ[4] PIN_AB20 FLASH Data[4] FL_DQ[5] PIN_AC20 FLASH Data[5] FL_DQ[6] PIN_AF21 FLASH Data[6] FL_DQ[7] PIN_AE21 FLASH Data[7] FL_CE_N PIN_V17 FLASH Chip Enable FL_OE_N PIN_W17 FLASH Output Enable FL_RST_N PIN_AA18 FLASH Reset FL_WE_N PIN_AA17 FLASH Write Enable Signal Name FPGA Pin No. Description SRAM_ADDR[0] PIN_AE4 SRAM Address[0] SRAM_ADDR[1] PIN_AF4 SRAM Address[1] SRAM_ADDR[2] PIN_AC5 SRAM Address[2] SRAM_ADDR[3] PIN_AC6 SRAM Address[3] SRAM_ADDR[4] PIN_AD4 SRAM Address[4] SRAM_ADDR[5] PIN_AD5 SRAM Address[5] SRAM_ADDR[6] PIN_AE5 SRAM Address[6] SRAM_ADDR[7] PIN_AF5 SRAM Address[7] SRAM_ADDR[8] PIN_AD6 SRAM Address[8] SRAM_ADDR[9] PIN_AD7 SRAM Address[9] SRAM_ADDR[10] PIN_V10 SRAM Address[10] SRAM_ADDR[11] PIN_V9 SRAM Address[11] SRAM_ADDR[12] PIN_AC7 SRAM Address[12] SRAM_ADDR[13] PIN_W8 SRAM Address[13] SRAM_ADDR[14] PIN_W10 SRAM Address[14] SRAM_ADDR[15] PIN_Y10 SRAM Address[15] SRAM_ADDR[16] PIN_AB8 SRAM Address[16] SRAM_ADDR[17] PIN_AC8 SRAM Address[17] SRAM_DQ[0] PIN_AD8 SRAM Data[0] SRAM_DQ[1] PIN_AE6 SRAM Data[1] SRAM_DQ[2] PIN_AF6 SRAM Data[2] SRAM_DQ[3] PIN_AA9 SRAM Data[3] SRAM_DQ[4] PIN_AA10 SRAM Data[4] SRAM_DQ[5] PIN_AB10 SRAM Data[5] SRAM_DQ[6] PIN_AA11 SRAM Data[6] SRAM_DQ[7] PIN_Y11 SRAM Data[7] SRAM_DQ[8] PIN_AE7 SRAM Data[8] SRAM_DQ[9] PIN_AF7 SRAM Data[9] SRAM_DQ[10] PIN_AE8 SRAM Data[10] SRAM_DQ[11] PIN_AF8 SRAM Data[11] SRAM_DQ[12] PIN_W11 SRAM Data[12] SRAM_DQ[13] PIN_W12 SRAM Data[13] SRAM_DQ[14] PIN_AC9 SRAM Data[14] SRAM_DQ[15] PIN_AC10 SRAM Data[15]

Altera DE2 Board Pin Table SRAM_WE_N PIN_AE10 SRAM Write Enable SRAM_OE_N PIN_AD10 SRAM Output Enable SRAM_UB_N PIN_AF9 SRAM High-byte Data Mask SRAM_LB_N PIN_AE9 SRAM Low-byte Data Mask SRAM_CE_N PIN_AC11 SRAM Chip Enable Signal Name FPGA Pin No. Description OTG_ADDR[0] PIN_K7 ISP1362 Address[0] OTG_ADDR[1] PIN_F2 ISP1362 Address[1] OTG_DATA[0] PIN_F4 ISP1362 Data[0] OTG_DATA[1] PIN_D2 ISP1362 Data[1] OTG_DATA[2] PIN_D1 ISP1362 Data[2] OTG_DATA[3] PIN_F7 ISP1362 Data[3] OTG_DATA[4] PIN_J5 ISP1362 Data[4] OTG_DATA[5] PIN_J8 ISP1362 Data[5] OTG_DATA[6] PIN_J7 ISP1362 Data[6] OTG_DATA[7] PIN_H6 ISP1362 Data[7] OTG_DATA[8] PIN_E2 ISP1362 Data[8] OTG_DATA[9] PIN_E1 ISP1362 Data[9] OTG_DATA[10] PIN_K6 ISP1362 Data[10] OTG_DATA[11] PIN_K5 ISP1362 Data[11] OTG_DATA[12] PIN_G4 ISP1362 Data[12] OTG_DATA[13] PIN_G3 ISP1362 Data[13] OTG_DATA[14] PIN_J6 ISP1362 Data[14] OTG_DATA[15] PIN_K8 ISP1362 Data[15] OTG_CS_N PIN_F1 ISP1362 Chip Select OTG_RD_N PIN_G2 ISP1362 Read OTG_WR_N PIN_G1 ISP1362 Write OTG_RST_N PIN_G5 ISP1362 Reset OTG_INT0 PIN_B3 ISP1362 Interrupt 0 OTG_INT1 PIN_C3 ISP1362 Interrupt 1 OTG_DACK0_N PIN_C2 ISP1362 DMA Acknowledge 0 OTG_DACK1_N PIN_B2 ISP1362 DMA Acknowledge 1 OTG_DREQ0 PIN_F6 ISP1362 DMA Request 0 OTG_DREQ1 PIN_E5 ISP1362 DMA Request 1 OTG_FSPEED PIN_F3 USB Full Speed, 0 = Enable, Z = Disable OTG_LSPEED PIN_G6 USB Low Speed, 0 = Enable, Z = Disable Signal Name FPGA Pin No. Description LCD_DATA[0] PIN_J1 LCD Data[0] LCD_DATA[1] PIN_J2 LCD Data[1] LCD_DATA[2] PIN_H1 LCD Data[2] LCD_DATA[3] PIN_H2 LCD Data[3] LCD_DATA[4] PIN_J4 LCD Data[4] LCD_DATA[5] PIN_J3 LCD Data[5] LCD_DATA[6] PIN_H4 LCD Data[6] LCD_DATA[7] PIN_H3 LCD Data[7] LCD_RW PIN_K4 LCD Read/Write Select, 0 = Write, 1 = Read LCD_EN PIN_K3 LCD Enable LCD_RS PIN_K1 LCD Command/Data Select, 0 = Command, 1 = Data LCD_ON PIN_L4 LCD Power ON/OFF LCD_BLON PIN_K2 LCD Back Light ON/OFF Signal Name FPGA Pin No. Description SD_DAT PIN_AD24 SD Card Data SD_DAT3 PIN_AC23 SD Card Data 3 SD_CMD PIN_Y21 SD Card Command Signal SD_CLK PIN_AD25 SD Card Clock Signal Name FPGA Pin No. Description TDI PIN_B14 CPLD -> FPGA (Data in) TCS PIN_A14 CPLD -> FPGA (CS) TCK PIN_D14 CPLD -> FPGA (Clock) TDO PIN_F14 FPGA -> CPLD (Data out) Signal Name FPGA Pin No. Description IRDA_TXD PIN_AE24 IRDA Transmitter IRDA_RXD PIN_AE25 IRDA Receiver Signal Name FPGA Pin No. Description

Altera DE2 Board Pin Table HEX0[0] PIN_AF10 Seven Segment Digit 0[0] HEX0[1] PIN_AB12 Seven Segment Digit 0[1] HEX0[2] PIN_AC12 Seven Segment Digit 0[2] HEX0[3] PIN_AD11 Seven Segment Digit 0[3] HEX0[4] PIN_AE11 Seven Segment Digit 0[4] HEX0[5] PIN_V14 Seven Segment Digit 0[5] HEX0[6] PIN_V13 Seven Segment Digit 0[6] HEX1[0] PIN_V20 Seven Segment Digit 1[0] HEX1[1] PIN_V21 Seven Segment Digit 1[1] HEX1[2] PIN_W21 Seven Segment Digit 1[2] HEX1[3] PIN_Y22 Seven Segment Digit 1[3] HEX1[4] PIN_AA24 Seven Segment Digit 1[4] HEX1[5] PIN_AA23 Seven Segment Digit 1[5] HEX1[6] PIN_AB24 Seven Segment Digit 1[6] HEX2[0] PIN_AB23 Seven Segment Digit 2[0] HEX2[1] PIN_V22 Seven Segment Digit 2[1] HEX2[2] PIN_AC25 Seven Segment Digit 2[2] HEX2[3] PIN_AC26 Seven Segment Digit 2[3] HEX2[4] PIN_AB26 Seven Segment Digit 2[4] HEX2[5] PIN_AB25 Seven Segment Digit 2[5] HEX2[6] PIN_Y24 Seven Segment Digit 2[6] HEX3[0] PIN_Y23 Seven Segment Digit 3[0] HEX3[1] PIN_AA25 Seven Segment Digit 3[1] HEX3[2] PIN_AA26 Seven Segment Digit 3[2] HEX3[3] PIN_Y26 Seven Segment Digit 3[3] HEX3[4] PIN_Y25 Seven Segment Digit 3[4] HEX3[5] PIN_U22 Seven Segment Digit 3[5] HEX3[6] PIN_W24 Seven Segment Digit 3[6] HEX4[0] PIN_U9 Seven Segment Digit 4[0] HEX4[1] PIN_U1 Seven Segment Digit 4[1] HEX4[2] PIN_U2 Seven Segment Digit 4[2] HEX4[3] PIN_T4 Seven Segment Digit 4[3] HEX4[4] PIN_R7 Seven Segment Digit 4[4] HEX4[5] PIN_R6 Seven Segment Digit 4[5] HEX4[6] PIN_T3 Seven Segment Digit 4[6] HEX5[0] PIN_T2 Seven Segment Digit 5[0] HEX5[1] PIN_P6 Seven Segment Digit 5[1] HEX5[2] PIN_P7 Seven Segment Digit 5[2] HEX5[3] PIN_T9 Seven Segment Digit 5[3] HEX5[4] PIN_R5 Seven Segment Digit 5[4] HEX5[5] PIN_R4 Seven Segment Digit 5[5] HEX5[6] PIN_R3 Seven Segment Digit 5[6] HEX6[0] PIN_R2 Seven Segment Digit 6[0] HEX6[1] PIN_P4 Seven Segment Digit 6[1] HEX6[2] PIN_P3 Seven Segment Digit 6[2] HEX6[3] PIN_M2 Seven Segment Digit 6[3] HEX6[4] PIN_M3 Seven Segment Digit 6[4] HEX6[5] PIN_M5 Seven Segment Digit 6[5] HEX6[6] PIN_M4 Seven Segment Digit 6[6] HEX7[0] PIN_L3 Seven Segment Digit 7[0] HEX7[1] PIN_L2 Seven Segment Digit 7[1] HEX7[2] PIN_L9 Seven Segment Digit 7[2] HEX7[3] PIN_L6 Seven Segment Digit 7[3] HEX7[4] PIN_L7 Seven Segment Digit 7[4] HEX7[5] PIN_P9 Seven Segment Digit 7[5] HEX7[6] PIN_N9 Seven Segment Digit 7[6] Signal Name FPGA Pin No. Description KEY[0] PIN_G26 Pushbutton[0] KEY[1] PIN_N23 Pushbutton[1] KEY[2] PIN_P23 Pushbutton[2] KEY[3] PIN_W26 Pushbutton[3] Signal Name FPGA Pin No. Description LEDR[0] PIN_AE23 LED Red[0] LEDR[1] PIN_AF23 LED Red[1]

Altera DE2 Board Pin Table LEDR[2] PIN_AB21 LED Red[2] LEDR[3] PIN_AC22 LED Red[3] LEDR[4] PIN_AD22 LED Red[4] LEDR[5] PIN_AD23 LED Red[5] LEDR[6] PIN_AD21 LED Red[6] LEDR[7] PIN_AC21 LED Red[7] LEDR[8] PIN_AA14 LED Red[8] LEDR[9] PIN_Y13 LED Red[9] LEDR[10] PIN_AA13 LED Red[10] LEDR[11] PIN_AC14 LED Red[11] LEDR[12] PIN_AD15 LED Red[12] LEDR[13] PIN_AE15 LED Red[13] LEDR[14] PIN_AF13 LED Red[14] LEDR[15] PIN_AE13 LED Red[15] LEDR[16] PIN_AE12 LED Red[16] LEDR[17] PIN_AD12 LED Red[17] LEDG[0] PIN_AE22 LED Green[0] LEDG[1] PIN_AF22 LED Green[1] LEDG[2] PIN_W19 LED Green[2] LEDG[3] PIN_V18 LED Green[3] LEDG[4] PIN_U18 LED Green[4] LEDG[5] PIN_U17 LED Green[5] LEDG[6] PIN_AA20 LED Green[6] LEDG[7] PIN_Y18 LED Green[7] LEDG[8] PIN_Y12 LED Green[8] Signal Name FPGA Pin No. Description CLOCK_27 PIN_D13 On Board 27 MHz CLOCK_50 PIN_N2 On Board 50 MHz EXT_CLOCK PIN_P26 External Clock Signal Name FPGA Pin No. Description UART_RXD PIN_C25 UART Receiver UART_TXD PIN_B25 UART Transmitter Signal Name FPGA Pin No. Description PS2_CLK PIN_D26 PS2 Data PS2_DAT PIN_C24 PS2 Clock Signal Name FPGA Pin No. Description I2C_SCLK PIN_A6 I2C Data I2C_SDAT PIN_B6 I2C Clock Signal Name FPGA Pin No. Description TD_DATA[0] PIN_J9 TV Decoder Data[0] TD_DATA[1] PIN_E8 TV Decoder Data[1] TD_DATA[2] PIN_H8 TV Decoder Data[2] TD_DATA[3] PIN_H10 TV Decoder Data[3] TD_DATA[4] PIN_G9 TV Decoder Data[4] TD_DATA[5] PIN_F9 TV Decoder Data[5] TD_DATA[6] PIN_D7 TV Decoder Data[6] TD_DATA[7] PIN_C7 TV Decoder Data[7] TD_HS PIN_D5 TV Decoder H_SYNC TD_VS PIN_K9 TV Decoder V_SYNC TD_RESET PIN_C4 TV Decoder Reset Signal Name FPGA Pin No. Description VGA_R[0] PIN_C8 VGA Red[0] VGA_R[1] PIN_F10 VGA Red[1] VGA_R[2] PIN_G10 VGA Red[2] VGA_R[3] PIN_D9 VGA Red[3] VGA_R[4] PIN_C9 VGA Red[4] VGA_R[5] PIN_A8 VGA Red[5] VGA_R[6] PIN_H11 VGA Red[6] VGA_R[7] PIN_H12 VGA Red[7] VGA_R[8] PIN_F11 VGA Red[8] VGA_R[9] PIN_E10 VGA Red[9] VGA_G[0] PIN_B9 VGA Green[0] VGA_G[1] PIN_A9 VGA Green[1] VGA_G[2] PIN_C10 VGA Green[2]

Altera DE2 Board Pin Table VGA_G[3] PIN_D10 VGA Green[3] VGA_G[4] PIN_B10 VGA Green[4] VGA_G[5] PIN_A10 VGA Green[5] VGA_G[6] PIN_G11 VGA Green[6] VGA_G[7] PIN_D11 VGA Green[7] VGA_G[8] PIN_E12 VGA Green[8] VGA_G[9] PIN_D12 VGA Green[9] VGA_B[0] PIN_J13 VGA Blue[0] VGA_B[1] PIN_J14 VGA Blue[1] VGA_B[2] PIN_F12 VGA Blue[2] VGA_B[3] PIN_G12 VGA Blue[3] VGA_B[4] PIN_J10 VGA Blue[4] VGA_B[5] PIN_J11 VGA Blue[5] VGA_B[6] PIN_C11 VGA Blue[6] VGA_B[7] PIN_B11 VGA Blue[7] VGA_B[8] PIN_C12 VGA Blue[8] VGA_B[9] PIN_B12 VGA Blue[9] VGA_CLK PIN_B8 VGA Clock VGA_BLANK PIN_D6 VGA BLANK VGA_HS PIN_A7 VGA H_SYNC VGA_VS PIN_D8 VGA V_SYNC VGA_SYNC PIN_B7 VGA SYNC Signal Name FPGA Pin No. Description AUD_ADCLRCK PIN_C5 Audio CODEC ADC LR Clock AUD_ADCDAT PIN_B5 Audio CODEC ADC Data AUD_DACLRCK PIN_C6 Audio CODEC DAC LR Clock AUD_DACDAT PIN_A4 Audio CODEC DAC Data AUD_XCK PIN_A5 Audio CODEC Chip Clock AUD_BCLK PIN_B4 Audio CODEC Bit-Stream Clock Signal Name FPGA Pin No. Description ENET_DATA[0] PIN_D17 DM9000A DATA[0] ENET_DATA[1] PIN_C17 DM9000A DATA[1] ENET_DATA[2] PIN_B18 DM9000A DATA[2] ENET_DATA[3] PIN_A18 DM9000A DATA[3] ENET_DATA[4] PIN_B17 DM9000A DATA[4] ENET_DATA[5] PIN_A17 DM9000A DATA[5] ENET_DATA[6] PIN_B16 DM9000A DATA[6] ENET_DATA[7] PIN_B15 DM9000A DATA[7] ENET_DATA[8] PIN_B20 DM9000A DATA[8] ENET_DATA[9] PIN_A20 DM9000A DATA[9] ENET_DATA[10] PIN_C19 DM9000A DATA[10] ENET_DATA[11] PIN_D19 DM9000A DATA[11] ENET_DATA[12] PIN_B19 DM9000A DATA[12] ENET_DATA[13] PIN_A19 DM9000A DATA[13] ENET_DATA[14] PIN_E18 DM9000A DATA[14] ENET_DATA[15] PIN_D18 DM9000A DATA[15] ENET_CLK PIN_B24 DM9000A Clock 25 MHz ENET_CMD PIN_A21 DM9000A Command/Data Select, 0 = Command, 1 = Data ENET_CS_N PIN_A23 DM9000A Chip Select ENET_INT PIN_B21 DM9000A Interrupt ENET_RD_N PIN_A22 DM9000A Read ENET_WR_N PIN_B22 DM9000A Write ENET_RST_N PIN_B23 DM9000A Reset Signal Name FPGA Pin No. Description GPIO_0[0] PIN_D25 GPIO Connection 0[0] GPIO_0[1] PIN_J22 GPIO Connection 0[1] GPIO_0[2] PIN_E26 GPIO Connection 0[2] GPIO_0[3] PIN_E25 GPIO Connection 0[3] GPIO_0[4] PIN_F24 GPIO Connection 0[4] GPIO_0[5] PIN_F23 GPIO Connection 0[5] GPIO_0[6] PIN_J21 GPIO Connection 0[6] GPIO_0[7] PIN_J20 GPIO Connection 0[7] GPIO_0[8] PIN_F25 GPIO Connection 0[8] GPIO_0[9] PIN_F26 GPIO Connection 0[9]

Altera DE2 Board Pin Table GPIO_0[10] PIN_N18 GPIO Connection 0[10] GPIO_0[11] PIN_P18 GPIO Connection 0[11] GPIO_0[12] PIN_G23 GPIO Connection 0[12] GPIO_0[13] PIN_G24 GPIO Connection 0[13] GPIO_0[14] PIN_K22 GPIO Connection 0[14] GPIO_0[15] PIN_G25 GPIO Connection 0[15] GPIO_0[16] PIN_H23 GPIO Connection 0[16] GPIO_0[17] PIN_H24 GPIO Connection 0[17] GPIO_0[18] PIN_J23 GPIO Connection 0[18] GPIO_0[19] PIN_J24 GPIO Connection 0[19] GPIO_0[20] PIN_H25 GPIO Connection 0[20] GPIO_0[21] PIN_H26 GPIO Connection 0[21] GPIO_0[22] PIN_H19 GPIO Connection 0[22] GPIO_0[23] PIN_K18 GPIO Connection 0[23] GPIO_0[24] PIN_K19 GPIO Connection 0[24] GPIO_0[25] PIN_K21 GPIO Connection 0[25] GPIO_0[26] PIN_K23 GPIO Connection 0[26] GPIO_0[27] PIN_K24 GPIO Connection 0[27] GPIO_0[28] PIN_L21 GPIO Connection 0[28] GPIO_0[29] PIN_L20 GPIO Connection 0[29] GPIO_0[30] PIN_J25 GPIO Connection 0[30] GPIO_0[31] PIN_J26 GPIO Connection 0[31] GPIO_0[32] PIN_L23 GPIO Connection 0[32] GPIO_0[33] PIN_L24 GPIO Connection 0[33] GPIO_0[34] PIN_L25 GPIO Connection 0[34] GPIO_0[35] PIN_L19 GPIO Connection 0[35] GPIO_1[0] PIN_K25 GPIO Connection 1[0] GPIO_1[1] PIN_K26 GPIO Connection 1[1] GPIO_1[2] PIN_M22 GPIO Connection 1[2] GPIO_1[3] PIN_M23 GPIO Connection 1[3] GPIO_1[4] PIN_M19 GPIO Connection 1[4] GPIO_1[5] PIN_M20 GPIO Connection 1[5] GPIO_1[6] PIN_N20 GPIO Connection 1[6] GPIO_1[7] PIN_M21 GPIO Connection 1[7] GPIO_1[8] PIN_M24 GPIO Connection 1[8] GPIO_1[9] PIN_M25 GPIO Connection 1[9] GPIO_1[10] PIN_N24 GPIO Connection 1[10] GPIO_1[11] PIN_P24 GPIO Connection 1[11] GPIO_1[12] PIN_R25 GPIO Connection 1[12] GPIO_1[13] PIN_R24 GPIO Connection 1[13] GPIO_1[14] PIN_R20 GPIO Connection 1[14] GPIO_1[15] PIN_T22 GPIO Connection 1[15] GPIO_1[16] PIN_T23 GPIO Connection 1[16] GPIO_1[17] PIN_T24 GPIO Connection 1[17] GPIO_1[18] PIN_T25 GPIO Connection 1[18] GPIO_1[19] PIN_T18 GPIO Connection 1[19] GPIO_1[20] PIN_T21 GPIO Connection 1[20] GPIO_1[21] PIN_T20 GPIO Connection 1[21] GPIO_1[22] PIN_U26 GPIO Connection 1[22] GPIO_1[23] PIN_U25 GPIO Connection 1[23] GPIO_1[24] PIN_U23 GPIO Connection 1[24] GPIO_1[25] PIN_U24 GPIO Connection 1[25] GPIO_1[26] PIN_R19 GPIO Connection 1[26] GPIO_1[27] PIN_T19 GPIO Connection 1[27] GPIO_1[28] PIN_U20 GPIO Connection 1[28] GPIO_1[29] PIN_U21 GPIO Connection 1[29] GPIO_1[30] PIN_V26 GPIO Connection 1[30] GPIO_1[31] PIN_V25 GPIO Connection 1[31] GPIO_1[32] PIN_V24 GPIO Connection 1[32] GPIO_1[33] PIN_V23 GPIO Connection 1[33] GPIO_1[34] PIN_W25 GPIO Connection 1[34] GPIO_1[35] PIN_W23 GPIO Connection 1[35]

ECE385 DIGITAL SYSTEMS LABORATORY Introduction to VHDL What is VHDL: VHSIC Hardware Description Language VHSIC - Very High Speed Integrated Circuits Follows the structure of ADA programming Language Originally intended as a Simulation Language for very large systems Very Strongly Typed Language, for example, bit vector 0011 and integer 3 are not easily interchangeable. VHDL is not case sensitive. Uses 9 Signal Values (IEEE standard): A Signal Value must be enclosed in single quotes 0 -- Forcing 0 1 -- Forcing 1 X -- Forcing Unknown - -- Don t Care Z -- High Impedance U -- Uninitialized L -- Weak 0 H -- Weak 1 Data Objects: VHDL provides different data objects, such as, signal, variable, and constant. Signals can be thought of as representing wires in the circuit. A signal holds the current and future values of an object. Declaring signals: signal <signal_name>: <signal_type> signal <signal_name>: std_logic; signal count: std_logic; signal <signal_name>: std_logic_vector(<upper_bound> downto <lower_bound>); signal vector_a: std_logic_vector(7 downto 0); Variables can be assigned a single value of a specific data type. Variables are used for computations within processes, just like in conventional programming languages. Declaring variables: variable <variable_name>: <variable_type> variable var1: std_logic; variable var2: std_logic_vector(7 downto 0); variable var3: integer range 0 to 8;

Constants can be any valid data type. Constants are only allowed to be declared and initialized at the beginning of the simulation. Declaring constants: constant <constant_name>: <constant_type> constant max: integer:= 25; Difference between signals and variables: Signals can be assigned different values at different points in time so a signal can have multiple values. Signals are scheduled to receive certain values at certain points in time by the simulator, and thus signal objects must maintain a history of values. Variables, on the other hand, can only be assigned one value at any point in time. Variables are assigned value during the execution of the assignment statement. Also, you can trace signals in simulation waveforms but not variables. Data Types: You will generally be using signals and variables of type std_logic and std_logic_vector, but VHDL also has other standard data types that you can use, such as, integer, boolean etc. Single bit values are enclosed in single quotes and bit vectors are enclosed in double quotes. The data types are defined in STANDARD package libraries provided according to the IEEE standard system. Operators: Operators can be used in expressions involving signals, variables, or constant object types. Here are some of the useful operators: Logical: not, and, or, nand, nor, xor Relational: =, /= (inequality), <, <=, >, >= Addition: +, - Concatenation: & (used to combine bits) Shift: sll (logical left shift), srl, sla (arithmetic left shift), sra Note: VHDL also has some other operators that are not mentioned here since all operators are not supported by all synthesis tools. Older versions of VHDL may not include some of the operators. For example, xnor is not supported in VHDL 87, but is supported in VHDL 93. Shift operators are also only supported in VHDL 93. Converting Between Data Types: CONV_STD_LOGIC_VECTOR(integer, bits) Converts an integer to a standard logic vector. Example: CONV_STD_LOGIC_VECTOR(2, 3) will produce a standard logic vector of 010. CONV_INTEGER(std_logic_vector) Converts a standard logic vector to an integer. Example: CONV_INTEGER( 010 ) will produce an integer value of 2.

Entities and Architectures: Design Entity Entity is the primary design unit in VHDL. Multiple entities may be combined to form a larger design. An entity-architecture pair provides design entity description. Entity declaration provides the external interface to the design entity. It contains pinout description, interface description, input-output port definitions etc. Architecture describes the behavior of an entity or its structure (gates, wires, etc.) using VHDL constructs. Example: -- Always include necessary Libraries library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Entity declaration. -- x and y are the inputs and z is the output of the entity called Example -- entity Example is Port ( x : in std_logic; y : in std_logic; z : out std_logic); end Example; -- Architecture definition. -- The behavior of the entity, Behavioral (can be any name), describes -- the function of the design entity. -- architecture Behavioral of Example is begin z <= x or y; -- output z will be the logical or of x and y end Behavioral; Concurrency in VHDL: Concurrent Signal Assignments (CSA) All statements in a VHDL description are executed concurrently unless specified within a process. Concurrency is useful in describing combinational logic circuits. A concurrent statement is evaluated when any of its arguments change its value.

A process executes only on specified triggers A process declaration includes a sensitivity list. A process executes only when one of the arguments in the sensitivity list changes. Processes are useful in describing sequential circuits and state transition diagrams. Signals and Variables: Signal assignments take effect during the next simulation cycle and after exiting a process if put in a process construct. If it is desired that the values change immediately, then variables should be used. Signals are declared before begin in architecture definition and variables are declared before begin in process definition. Example: Using Signals and Variables library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity sig_var_example is Port ( a : in std_logic; b : in std_logic; c : in std_logic; out_sig : out std_logic; out_var : out std_logic); end sig_var_example; architecture Behavioral of sig_var_example is signal sig1, sig2 : std_logic; -- Signals are declared here begin sig_proc: process (a, b, c) is begin sig1 <= b or c; sig2 <= sig1 and a; out_sig <= sig1 nand sig2; end process; -- Output based on signals var_proc: process (a, b, c) is variable var1, var2 : std_logic; -- Notice where variables are declared. begin var1 := b or c; -- Notice the assignment operator var2 := var1 and a; out_var <= var1 nand var2; -- Output based on variables end process; end Behavioral;

In this case, the values of sig1 and sig2 will not change until the next simulation cycle after the process exits. out_sig will be computed using the old values of sig1 and sig2. out_var will be calculated from the current values of a, b, and c since var1 and var2 will reflect the results immediately (rather than during the next simulation cycle). Behavioral Simulation: Notice the difference between out_sig and out_var If-Then-Else and If-Then-Elsif Statements: An if statement executes a block of sequential statements upon matching certain condition(s). It can also include an else component or one or more elsif (not elseif or else if, no e in else) components. If-then-elsif construct forces a priority order in the logic. I.e. the first statement will be evaluated first and then the following statements in order. If statements are only allowed within a process. The statements are executed sequentially if a conditional match is detected. To avoid inferred latches, all outputs should be assigned values on all execution paths. Keep common statements outside of the if-then-else or if-then-elsif statements. Example: Inference library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity if_example is Port ( x : in std_logic; y : in std_logic; z : in std_logic; sel : in std_logic; w : out std_logic); end if_example;