Chapter1: Introduction

Chapter1: Introduction
Ders – 1: Giriş
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-1
Chapter1: Introduction
Programlanabilir Devreler
CPLD (Complex Programmable Logic Device) –
FPGA (Field-Programmable Gate Array) Yapısı ve Avantajları
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-2
Chapter1: Introduction
Tarihsel gelişimi
•İlk programlanabilir aygıtlar pahalı maske programlı
ROM ‘lar yerine geliştirilmiştir.
•Bu ROM modüllerde bir değişikliğe gidilmesi
gerektiğinde maske değiştirilip yeni çip’in tekrar
fabrikada üretilmesi gerekiyordu.
•Bu özelliği nedeniyle programda yapılan bir hata
ancak üretim sonucunda anlaşılmaktaydı.
•Daha sonra PROM modüller geliştirildi.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-3
Chapter1: Introduction
PROM
 Bu modüller bir bilgisayar programı ile bir
kez programlanabilmekteydi.
 Programlama evlerdeki sigorta
sistemine benzeyen sigortalar
yardımıyla yapılmaktaydı.
 Fazla akım geçirilen bağlantı
koparılıyor geçirilmeyen kısımlar
ise devreyi oluşturuyordu.
 PROM chipler sayesinde tasarımdaki
hatalar kolayca bulunabiliyor, değişiklikler
üretime gitmeden denenebiliyor ve
optimizasyonlar yapılabiliyordu
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-4
Chapter1: Introduction
PROM
 Daha sonra bu çiplerin yeniden
programlanabilmelerine ihtiyaç duyuldu.
 Geliştirilen teknikler birlikte EEPROM
modüller üretildi.
 İlk versiyonları UV ışınla silinebilmekteyken
günümüzde EEPROM yani elektrikle
silinebilen versiyonları kullanılmaktadır.
 PROM ‘lar önceleri combinational devreleri
gerçeklemek için kullanılsalar da
günümüzde veri depolamada
kullanılmaktadır.
 PROM ‘ların kullanımının bırakılmasındaki
asıl neden yeterince hızlı olmayışları ve giriş
sınırlamasıdır .
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-5
Chapter1: Introduction
PLA
• Programmable logic array (PLA)
hız ve giriş sınırlamasına bir
çözüm olarak geliştirildi.
• AND, OR seviyeleri ve NOT
kapılarından oluşmaktadır.
• Bu nedenle PROM lardaki gibi
her olası tasarım gerçeklenemez.
Tasarımınızı and,or ve not
kapılarıyla gerçeklemeniz
gerekektedir.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-6
Chapter1: Introduction
PAL
• PAL chip ‘ler PLA çiplerin bir
türevidir.
• PLA ‘e göre OR seviyeleri
azaltılmıştır. Çünkü and ve not
kapıları ile “de-morgan” kuralına göre
or kapısı elde edilebilmekteydi.
• Or kapılarından boşalan alana
multiplexer, xor kapıları, letch ve
flip-flop yapıları konulmuştur.
• Böylece PLA ‘e göre çok daha fazla
fonksiyonu hızlı bir biçimde yerine
getirebilmektedir.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-7
Chapter1: Introduction
ASIC
• FPGA ve CPLD ile karşılaştırılırken “masked gate
array” de denmektedir
• İç devreleri oldukça hızlı çalışmaktadır
• Büyük çaplı üretimde oldukça ucuzdur (maske üretim
maliyeti)
• Üretim ve test aşamaları
oldukça fazla zaman
gerektirmektedir
• Tasarımda bir hata
yapılmışsa bunu düzeltmek
uzun masraflı bir iştir.
(Tekrar doğru maskeyi
oluşturup üretim tekrarlanmalı)
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-8
Chapter1: Introduction
ASIC
• ASIC programlanabilen bir aygıt değildir.
• Tasarımcılar üreticinin sağlamış olduğu hücre ve
fonksiyon kütüphanelerini kullanarak çalışırlar
• Tasarımcının tasarımının tam olarak silikona nasıl
aktarıldığını bilmesine gerek yoktur.
• Gerçekleme düşük seviye fonksiyonlardan tamamına
doğru olmaktadır
• Öncelikle tasarım için gerekli
birbirine yakın transistorler, daha
sonrada birbirine yakın olacak
şekilde modüller oluşturulur.
(routing)
• Tasarıma göre oluşturulan maske
yardımı ile chip oluşturulur
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-9
Chapter1: Introduction
CPLD & FPGA
• Donanım geliştiricileri ASIC gibi yüksek yoğunluklu,
hızlı ve aynı zamanda gerçeklemenin kolay olduğu bir
programlanabilir aygıt istemekteydi.
– CPLD = complex programmable logic device – PAL
– FPGA = field programmable gate array – ASIC
• Bu aygıtlar ASIC ve PAL ‘ın iyi özlelliklerini
barındırmaktadır.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-10
Chapter1: Introduction
CPLD


CPLD bir çok PAL aygıtın aynı çip içerisinde toplanıp
birbirine switch ler aracılığı ile bağlanmasından
oluşmuşdur.
PAL ile aynı tabandadır ancak daha büyük ve
komplaks dizaynları gerçekleyebilir.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-11
Chapter1: Introduction
CPLD
• Güncel CPLD ler üreticisine göre
değişmekle birlikte and or not
kapılarına ek olarak xor gibi ekstra
yapılar da bulundururlar.
• I/O pinleri giriş çıkış ve çift yönlü
atanabilir
• Özel bir “clock thee” 'ye sahiptir.
Bu sayede clock sinyali chipin
her tarafına çok yakın
zamanlarda ulaşır
• CPLD de tasarımcılar girişten çıkışa
olan gecikmeyi tahmin edebilirler.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-12
Chapter1: Introduction
CPLD
• JTAG üzerinden seri olarak
programlanabilmekte
• EEPROM yapısı ile
programlama verisini
tutuğundan programlama
verisi uçucu değildir.
• EEPROM a programlama
verisini yüklediğinizde her
açılışta veriyi okuyarak
kendini konfigüre etmektedir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-13
Chapter1: Introduction
•
•
•
•
•
•
Terminoloji
Interconnect
Programable Switch
Logic Block
Logic Capacity
Logic Density
Speed - Performance
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-14
Chapter1: Introduction
FPGA
• ASIC gibi düzgün
mantıksal dizilerinden
oluşur
• Yapısı oldukça kompleks
dizaynlara izin
vermektedir
• I/O hücreleri,
programlanabilen logic
blokları ve ara bağlantı
elemanlarından oluşurlar
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-15
Chapter1: Introduction
Konfigüre edilebilir mantıksal
bloklar (CLB) - FPGA
• FPGA nın sahip olduğu CLB ler sayesinde CPLD ye göre
çok daha complex devreleri gerçekleme avantajı vardır.
• Ancak devre büyüdükçe sinyalin yönlendirilmesi
işlenmesinden daha fazla zaman alabilmektedir.
• FPGA 'da sinyaller CLB ler dolayısıyla kapılar
üzerinden geçerek
ilerlediğinden
yönlendirme gecikmesi
ASIC 'e göre oldukça
fazladır.
• ASIC de sinyal direk
metal yollar üzerinden
ilerlemektedir.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-16
Chapter1: Introduction
Konfigüre edilebilir mantıksal
bloklar (CLB) - FPGA
• FPGA üzerinde bulunan CLB ler LUT lardan
oluşmaktadır ve görüldüğü gibi RAM flip-flop ve
multiplexer işlevlerini yerine getirirler.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-17
Chapter1: Introduction
I/O Blokları - FPGA
• Her I/O portu giriş
çıkış ya da çift yönlü
ayarlanabilir
• Giriş çıkışlar diğer
aygıtlarla uyumlu
olabiecek şekilde
değişik voltaj
seviyelerine
ayarlanabilmektedir.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-18
Chapter1: Introduction
FPGA
• Switch Matrix ler
uzaktaki CLB ler ile hızlı
hat üzerinden bağlantı
kurulmasını
sağlamaktadır
• Bunlar dışında birde “long
line” denen çipin bir
ucundan diğerine giden
hızlı bağlantılar
bulunmaktadır
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-19
Chapter1: Introduction
Saat devresi - FPGA
• Özel yüksek hızlı saat
buffer ları çip yüzeyine
dağılmıştır
• Bu buffer lar saat giriş
pinlerine bağlıdırar
• Clock tree boyunca saat
hatlarına sinyali sürerler
• Senkron tasarımlarda saat
‘in devrenin her yerine
aynı anda ulaşması çok
önemlidir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-20
Chapter1: Introduction
Programlama
• CPLD aygıtlar programlama için EEPROM kullanmaktadır
• FPGA ‘ler ise programlama verilerini SRAM içerisinde tutar
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-21
Chapter1: Introduction
CPLD & FPGA Seçimi
• Seçim tamamen gerekliliklere bağlıdır
• İkisi de yeniden programlanabildiğinden donanım
geliştirmek için oldukça avantajlı platformlardır
• Hız olarak ise ASIC 'in hızına yetişemezler
• Bu yüzden çoklu üretimde geliştirme FPGA-CPLD
üzerinde yapılırken olgunlaşan dizayn ASIC e
aktarılır
CPLD
FPGA
Mimari
PAL benzeri
Kapı dizisi - benzeri
Hızlı, tahmin edilebilir
Uygulama bağımlı
Yoğunluk
Düşük - orta
Orta - yüksek
Bağlantı
Crossbar
Routing
Kapı başına yüksek
Kapı başına düşük
Hız
Güç Tüketimi
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-22
Chapter1: Introduction
Proje için Platform Seçimi
• FPGA ve CPLD ler her ne kadar esnek yapılar olsa da proje
geliştirme yeni başlayanlar için zaman alan bir süreçtir.
• Bazı durumlarda sıralı komutlar işleyen bir
işlemcinin kullanılması daha avantajlıdır.
• Proje ile ilgili IP(Intellectual property) ‘ler
araştırılmalıdır.
• FPGA ya da CPLD projenin gerekliliklerine
uyacak şekilde seçilmelidir
• İçerisinde bir işlemci ve FPGA
bulunduran hibrit yapılar da değerlendirilmelidir.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-23
Chapter1: Introduction
FPGA programlama ve HDL ’e giriş
CPLD – FPGA Programlamaya giriş
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-24
Chapter1: Introduction
İçerik
• Bu ünitede aşağıdaki konular işlenecektir
–
–
–
–
FPGA – CPLD programlama metodolojisini
Şematik tasarım ile tasarım gerçeklenmesini
VHDL dilinde tasarım gerçeklenmesini
Verilog dilinde tasarım gerçeklenmesini
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-25
Chapter1: Introduction
HDL’lerin önemi
• HDL: Hardware Description Language
(Donanım Tanımlama Dili)
• Yaygın kullanılan iki HDL:
– Verilog HDL (also called Verilog for short)
– VHDL (Very high-speed integrated circuits HDL)
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-26
Chapter1: Introduction
HDL’lerin Özellikleri
• Tasarım soyut bir seviyede betimlenir.
• Fonksiyonel sağlama tasarım aşamasının
erken safhalarında yapılabilir.
• HDL ile tasarım yapma bilgisayar
programlama ile benzerdir.
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-27
Chapter1: Introduction
Basit Tasarım süreci
• Tasarımın donanım tanımlama dilleri
kullanılarak tanımlanması
• Fonksiyonel simulasyon
• Sentez
• Yerleştirme ve
yönlendirme
• Tasarımın yüklenmesi
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-28
Chapter1: Introduction
Programlama
• Yüklenecek hafıza türü
– CPLD – EEPROM
– FPGA – EEPROM & SRAM
• Yükleme ara yüzü
– JTAG
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-29
Chapter1: Introduction
Verilog HDL
• Genel amaçlı, öğrenmesi kolay ve
kullanılması kolay bir HDL dilidir.
• Aynı modül içerisinde farklı seviyelerden
soyutlamaya olanak tanır.
• Programming Language Interface (PLI)
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-30
Chapter1: Introduction
Verilog - Giriş
• 1984 de oluşturuldu 1990 da Candance tarafından açık kaynak
yapıldı. 1995 de IEEE standardı oldu.
• C diline benzerliği nedeniyle adaptasyon kolaydır.
• Genel özellikleri;
– Tanımlayıcılar maksimum 1024 karakter olabilir
– İlk karakter sayı olamaz
– İfadeler “ ;” ile sonlandırılır
• String ler çift tırnak ile tek satırda yazılmalıdır
– Yorumlar;
• // dan sonraki tüm karakterler
• /* -- */ arasındaki tüm karakterler yorum olarak algılanırlar
• Compiler komutları “ ` ” ile başlar
– Hazır task lar ya da function lar “$” ile başlar
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-31
Chapter1: Introduction
Verilog - Giriş
• Case sensitive bir dildir
– Anahtar sözcükler küçük karakter ile yazılırlar.
• Değişkenlerin yaşam alanaları vardır.
– Aynı alanda geçerli değişkenler için farklı isimler kullanılmalıdır
• Tanımlayıcı karakterler
– Büyük ve küçük alfabetik karakterler
– Nümerik karakterler
– Alt çizgi
• Boşluklar ve boş satırlar istenildiği gibi bırakılabilir
• Verilog 4 mantık değerli önceden tanımlı (0, 1, z, x) bir sisteme
sahiptir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-32
Chapter1: Introduction
Verilog - Giriş
• Integer ve Real türleri tanımlıdır
• Procedure 'ler üzerinden işlem yapar paketlere sahip değildir
• Verilog dilinde dijital sistemler modüller oluşturularak
gösterilir
• VHDL de olduğu gibi structural ve behavioral tasarım
yapılabilmektedir
• Yapısal dizayna RTL (Register transfer level) de denmektedir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-33
Chapter1: Introduction
HDL Tabanlı Tasarım Basamakları
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-34
Chapter1: Introduction
Verilog – Davranışsal dizayn
• Dizayn davranışına göre
gerçeklenmektedir
• Always içerisinde sadece
register değerlerine
atama yapılabilir.
• Out çıkışının register
tanımlanması ona always
bloğu içerisinde atama
yapılabilmesini sağlıyor
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-35
Chapter1: Introduction
Verilog – Hiyerarşik Dizayn
Top Level
Module
Sub-Module
1
Basic Module
1
Basic Module
2
Full Adder
Sub-Module
2
Half Adder
Half Adder
Basic Module
3
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-36
Chapter1: Introduction
Verilog – Hiyerarşik
(Örnek)
module half_add (A, B, S, C);
module full_add (A, B, CI, Sum, Cout) ;
input A, B, CI ;
output Sum, Cout ;
wire S1, C1, C2;
input A, B ;
output S, C ;
half_add HA1 (A, B, S1, C1);
half_add HA2 (S1, CI, Sum, C2);
xor (S, A, B) ;
and (C, A, B) ;
or P1 (Cout, C1, C2);
endmodule
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-37
Chapter1: Introduction
Verilog - Örnek
module fa_rtl (A, B, Cin, Sum, Cout) ;
input A, B, Cin ;
output Sum, Cout ;
assign Sum = A ^ B ^ Cin;
assign Cout = A & B | (A ^ B )& Cin;
//continuous assignment
//continuous assignment
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-38
Chapter1: Introduction
Verilog – Sayılar, Türler
<size>’<radix> <value>
•
Bit
Sayısı
Binary
 b or B
Octal
 o or O
Decimal
 d or D
Hexadecimal  h or H
Consecutive chars
0-f, x, z
• 3’b000 8’hAB
• Nets: Donanım elemanlarını birleştiren fiziksel bağlantı
• Registers: Bağlı olmasa bile depolanan değer
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-39
Chapter1: Introduction
•
•
•
•
•
•
•
•
•
•
Verilog – Veri Türleri
wire – sadece bağlantı; mantıksal değil
reg – mantıksal değer depolama
tri – wire gibi, ama donanım olarak 3-state gösterir
wand – çoklu sürücü- kablolanmış and
wor – çoklu sürücü - kablolanmış or
triand – wand gibi, fakat 3-state
trior – wor gibi, fakat 3-state
supply0 - Global net GND
supply1 - Global Net VCC (VDD)
tri0, tri1, trireg
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-40
Chapter1: Introduction
Verilog – Diziler
• Yazım kuralları
integer count[1:5]; // 5 integers
reg var[-15:16]; // 32 1-bit regs
reg [7:0] mem[0:1023]; // 1024 8-bit regs
• Array elemanlarına erişim
• mem[10] = 8'b00011101
• temp = mem[10];
• var[6] = temp[2];
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-41
Chapter1: Introduction
•
•
•
•
•
•
•
•
Verilog - Operatörler
Arithmetic (binary: +, -,*,/,%*); (unary: +, -)
Bitwise (~, &,|,^,~^,^~)
Reduction (&,~&,|,~|,^,~^,^~)
Logical (!,&&,||,==,!=,===,!==)
Relational (<,<=,>,>=)
Shift (>>,<<)
Conditional ? :
Concatenation and Replications {A,B} {4{B}}
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-42
Chapter1: Introduction
Verilog – Sürekli Atama
• Yazım kuralı:
assign #del <id> = <expr>;
opsiyonel
net türü !!
• Bunarı nereye yazmalıyız:
– Modülün içerisine
– Prosedürlerin dışarısına
• Özellikler:
– Hepsi paralel işlenir
– Birbirinden bağımsız, aynı zamanda aktif olurlar
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-43
Chapter1: Introduction
V erilog - Procedure
• Modüller istenen sayıda procedure içerebilir
• Procedure ler iki tür blok ile ifade edilirler:
– İnitial  Sadece bir kez işlenir. Sentezlenebilir değildir fakat
testbenches için kullanılır
– Always  Sonsuza kadar işlenir. (simulasyon ya da işlem bitene
kadar)
• Procedurel işlemlerde yalnızca registerlara değer ataynır
• Sürekli atamalar ve pirimitive atamaları ise inputlarda bir
değişiklik olduğunda gerçekleşir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-44
Chapter1: Introduction
Verilog – Initial
• 0 zamanında çalışmaya başlayıp içerisindeki son
komutu çalıştırıncaya kadar çalışırlar
module nothing;
initial
$display(“I’m first”);
initial begin
#50;
$display(“Really?”);
end
simulation zamanı 0
da gösterilecek
simulation zamanı 50
de gösterilecek
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-45
Chapter1: Introduction
Verilog – Sistem görevleri
• $display(“..”, arg2, arg3, ..);  printf() gibidir,
çağırıldığında formatlanmış stringleri gösterir
• $monitor(“..”, arg2, arg3, ..);  $display() gibidir, fakat
argümanlarından herhangi biri değiştiğinde tekrar
ekrana basar
• $stop;  çağırıldığında simulasyonu duraksatır
• $finish;  çağırıldığında simulasyonu bitirir
• $fopen(“filename”);  dosya tanımını döndürür
(integer); daha sonra bunu $fdisplay(fd, “..”, arg2,
arg3, ..); ya da $fmonitor(fd, “..”, arg2, arg3, ..); ile
yazdırma işleminde kullanabilirsiniz
• $fclose(fd);  dosyayı kapatır
• $random(seed);  random integer döndürür
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-46
Chapter1: Introduction
Verilog – Always
• Bir duyarlılık listesine sahiptir
• Adından da anlaşılabileceği gibi duyarlılık listesindeki herhangi
bir değişken değiştiğinde herzaman işlenir
• Wire türlerini süremez !!!
• İnteger ve Register türleri üzerine işlem yapılabilir!!!
• İçerisinde “=” seri ve “<=” paralel atamaları yapılabilir
• Bu atamalara blocking ve nonblocking atama denilmektedir
• Sıralı işlenme mantığı => process ler ile aynı davranıştadır
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-47
Chapter1: Introduction
Verilog – Always (örnek)
module fa_bhv (A, B, Cin, Sum, Cout) ;
input A, B, Cin ;
output Sum, Cout ;
reg Sum, Cout;
//output reg Sum, Cout;
always@(A or B or Cin) // always@(A,B,Cin) yada always@(*)
begin
Sum <= A ^ B ^ Cin;
// procedural assignment
Cout <= A & B | (A ^ B )& Cin; // procedural assignment
end
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-48
Chapter1: Introduction
Verilog – Register atamaları
• Registerlara yalnızca aşağıdaki alanlarda atama
yapılır:
– Procedural statement (always, initial)
– Kullanıcı tarafından tanımlanan sıralı işleyen primitivelerde
– Task yada fonksiyonlarda.
• Register 'a aşağıdaki alanlarda atama yapılamaz:
– Primitive Kapı çıkışı
– Sürekli atamalar
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-49
Chapter1: Introduction
Verilog - Atama kuralları
• Register değişkenleri modülün her yerinde referans
gösterilebilirler
• Register değişkenlerinin içerisine sadece prosedürsel
ifadelerde yani always ve initial bloklarının içerisinde, task ya
da function larda atama yapılabilir
• Register değişkenleri input ya da inout olamazlar
• Net değişkenler modülün her yerinde referans gösterilebilirler
• Net değişkenleri behavior, task or function içerisinde
atanamazlar. İstisna: force … release
• Net değişkenleri modül içerisinde primitive, continuous
assignment, force … release ya da module port tarafından
sürülmelidir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-50
Chapter1: Introduction
•
Verilog – Bloklu ve Bloksuz
Atamalar
Bloksuz Atamalar
 Bloklu Atamalar
– “<= “ ile atama yapılır
– İşlemler paralel bir şekilde
aynı anda yapılır
Örnek:
always @(posedge clk)
begin
b <= 0; c <= 0;
b <= a + a;
c <= b + a;
d <= c + a;
 “=” ile gerçekleştirilir
 Bloklu atamalar sıralı
gerçekleştirilir
Örnek:
always @(posedge clk)
begin
b = 0; c = 0;
b = a + a;
c = b + a;
d = c + a;
end
end
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-51
Chapter1: Introduction
Verilog – Gecikme ve Olay
Operatörleri
• Gecikme Kontrol Operatörü(#)
– İfadenin sonuçlanmasını geciktirir
– Bloklu atamalarda (=), gecikme tüm alttaki ifadeleri etkiler
– Example: always @(posedge clk) #10 Q = D;
• Olay Kontrol Operatörü(@)*
– Bir doğruluk net ya da register 'da gerçekleşen değişim ile devrenin
aktivite akışını senkronize eder
– Örnek 1: @ (start) RegA = Data;
– Örnek 2: @(toggle) begin
– @ (posedge clk) Q = D;
• posedge: 0 -> 1, 0 -> x, x -> 1 anlamına gelir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-52
Chapter1: Introduction
Verilog – (if…else)
always@(a or b or c)
begin
if (a == b)
begin
 Tüm seçeneklerin ele alınıp
alınmadığını kontrol edin
yoksa istenmeyen letch
oluşturabilirsiniz
q <=
data;
 Else en yakın if ile ilişkilidir.
stop
Begin ve end kullanarak
<= 1’b1;
okunabilirlği arttırabilirsiniz.
end
 İç içe geçmiş if … else sentez
else if (a > b)
işleminden sonra seri ya da
q <= a;
öncelikli devre oluşumuna
else
q <=
neden olmaktadır.
b;
end
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-53
Chapter1: Introduction
Verilog - Case
always@(state, x)
begin
case (state)
2’b00: next_state <= s1;
2’b01: next_state <= s2;
2’b10: begin
if (x) next_state <= s0;
else next_state <= s1;
end
default next_state <= 1’bxx;
endcase
end
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-54
Chapter1: Introduction
Verilog – For döngüsü
initial
integer r, i;
begin
r = 0;
for (i = 1; i <= 7; i = i + 2)
begin
r[i] = 1;
end
end
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-55
Chapter1: Introduction
Verilog – Forever döngüsü
initial
begin
clk = 0;
forever
begin
#50 clk = 1;
#50 clk = 0;
end
end
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-56
Chapter1: Introduction
Verilog – Task ve Fonksiyon
• Tasks
– Modül içerisinde tanımlanır
– Davranış olarak modül içerisinde kullanılır
– Tasklara in ya da inout ile parametre göndeilirken out ya da inout ile
çıktı alınabilir
– Yerel değişken tanımlanabilir
– Recursion desteklenmemektedir.
• Functions
– Combinational davranışlar gerçekleştirilir
– Zaman kontrolü, task, while yoktur
– Recursion olmadan diğer fonksiyonları çağırabilir
– Reference ile çağırılabilir
– Output ya da inout a izin verilmez
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-57
Chapter1: Introduction
Değerlendirme
• Bu derste öğrenilenler;
– FPGA &CPLD Tasarım süreci ve programlama
– Shematik tasarım geliştirme
– VHDL ve Verilog dilleri
• Sonraki derslerde öğrenilecekler;
– Quartus programının kullanımı
– Tasarımların simülasyonunun yapılması
– Örnek tasarımlar
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-58
Chapter1: Introduction
Modüller
• Modül iki kısımdan oluşur:
– Çekirdek devre (yani Gövde)
– Arayüz (yani portlar)
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-59
Chapter1: Introduction
Modüller
• module --- Temel yapı bloğu
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-60
Chapter1: Introduction
Verilog – Diziler
• Yazım kuralları
integer count[1:5]; // 5 integers
reg var[-15:16]; // 32 1-bit regs
reg [7:0] mem[0:1023]; // 1024 8-bit regs
• Array elemanlarına erişim
• mem[10] = 8'b00011101
• temp = mem[10];
• var[6] = temp[2];
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-61
Chapter1: Introduction
•
•
•
•
•
•
•
•
Verilog - Operatörler
Arithmetic (binary: +, -,*,/,%*); (unary: +, -)
Bitwise (~, &,|,^,~^,^~)
Reduction (&,~&,|,~|,^,~^,^~)
Logical (!,&&,||,==,!=,===,!==)
Relational (<,<=,>,>=)
Shift (>>,<<)
Conditional ? :
Concatenation and Replications {A,B} {4{B}}
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-62
Chapter1: Introduction
Verilog – Sürekli Atama
• Yazım kuralı:
assign #del <id> = <expr>;
opsiyonel
net türü !!
• Bunarı nereye yazmalıyız:
– Modülün içerisine
– Prosedürlerin dışarısına
• Özellikler:
– Hepsi paralel işlenir
– Birbirinden bağımsız, aynı zamanda aktif olurlar
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-63
Chapter1: Introduction
V erilog - Procedure
• Modüller istenen sayıda procedure içerebilir
• Procedure ler iki tür blok ile ifade edilirler:
– İnitial  Sadece bir kez işlenir. Sentezlenebilir değildir fakat
testbenches için kullanılır
– Always  Sonsuza kadar işlenir. (simulasyon ya da işlem bitene
kadar)
• Procedurel işlemlerde yalnızca registerlara değer ataynır
• Sürekli atamalar ve pirimitive atamaları ise inputlarda bir
değişiklik olduğunda gerçekleşir
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-64
Chapter1: Introduction
Verilog – Initial
• 0 zamanında çalışmaya başlayıp içerisindeki son
komutu çalıştırıncaya kadar çalışırlar
module nothing;
initial
$display(“I’m first”);
initial begin
#50;
$display(“Really?”);
end
simulation zamanı 0
da gösterilecek
simulation zamanı 50
de gösterilecek
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-65
Chapter1: Introduction
Lexical Conventions
• C dili ile neredeyse aynı kurallar geçerlidir.
• Tanıtıcılar: alphanumeric characters, _, and $
– Verilog büyük – küçük harf ayrımına sahip bir
dildir.
• White space: blank space (\b), tabs (\t), and
new line (\n)
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-66
Chapter1: Introduction
Lexical Conventions
• Comments
– // --- the remaining of the line
– /* ….*/ --- what in between them
• Sized number: <size>`<base
format><number>
– 4`b1001
– 16`habcd
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-67
Chapter1: Introduction
Lexical Conventions
• Uzunluğu Belli Olmayan Sayı:
`<Taban><Sayı>
– 2009
– `habc
• x or z
– x: Belirli olmayan değer
– z: Yüksek Empedans
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-68
Chapter1: Introduction
Lexical Conventions
• Negatif Sayılar:
-<Uzunluk>`<Taban><Sayı>
– -4`b1001
– -16`habcd
• ”_” and “?”
– 16`b0101_1001_1110_0000
– 8`b01??_11?? // = 8`b01zz_11zz
• String: “Have a lovely day”
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-69
Chapter1: Introduction
Kodlama Stili
• Küçük Harfler
– Sinyal isimleri, değişken isimleri ve port isimleri
için,
• Büyük Harfler
– Sabit isimleri ve kullanıcı tanımlı veri tipleri için.
• Anlamlı isimleme
– Sinyaller, portlar, fonksiyonlar ve parametreler
için
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-70
Chapter1: Introduction
Değerler Kümesi
• Dört Değerli Lojik
– 0 : lojik 0, yanlış
– 1 : lojik 1, doğru
– z : yüksek empedans
– x : bilinmez
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-71
Chapter1: Introduction
Veri Tipleri
• Nets: Donanım bağlantı noktaları
• Variables: Veri depolama üniteleri
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-72
Chapter1: Introduction
Nets
• Aşağıdakiler tarafından sürülürler:
– Primitive
– continuous assignment
– force … release
– module port
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-73
Chapter1: Introduction
Değişkenler
• Aşağıdakilerin içinde atama yapılır.
– Procedural statement
– Task
– Function
• Kulanılmadığı durumlar:
– input
– inout
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-74
Chapter1: Introduction
Modül Modelleme Teknikleri
• Yapısal (Structural)
– Kapı seviyesinde (Gate level)
– Anahtar seviyesinde (Switch level)
• Veri Akışı (Dataflow)
• Davranışsal veya algoritmik (Behavioral)
• Karmaşık (Mixed)
– RTL = synthesizable behavioral + dataflow
constructs
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-75
Chapter1: Introduction
Port Tanımlama
• Port Tipleri:
– input
– output
– inout
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-76
Chapter1: Introduction
Port Bağlantı Kurallar
• Named association
• Positional association
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-77
Chapter1: Introduction
Port Tanımlama
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-78
Chapter1: Introduction
Structural modeling (Yapısal
Modelleme)
// gate-level hierarchical description of 4-bit adder
// gate-level description of half adder
module half_adder (x, y, s, c);
input x, y;
output s, c;
// half adder body
// instantiate primitive gates
xor (s,x,y);
and (c,x,y);
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-79
Chapter1: Introduction
Structural modeling (Yapısal
Modelleme)
// gate-level description of full adder
module full_adder (x, y, cin, s, cout);
input x, y, cin;
output s, cout;
wire s1, c1, c2; // outputs of both half adders
// full adder body
// instantiate the half adder
half_adder ha_1 (x, y, s1, c1);
half_adder ha_2 (cin, s1, s, c2);
or (cout, c1, c2);
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-80
Chapter1: Introduction
Structural modeling (Yapısal
Modelleme)
// gate-level description of 4-bit adder
module four_bit_adder (x, y, c_in, sum, c_out);
input [3:0] x, y;
input c_in;
output [3:0] sum;
output c_out;
wire c1, c2, c3; // intermediate carries
// four_bit adder body
// instantiate the full adder
full_adder fa_1 (x[0], y[0], c_in, sum[0], c1);
full_adder fa_2 (x[1], y[1], c1, sum[1], c2);
full_adder fa_3 (x[2], y[2], c2, sum[2], c3);
full_adder fa_4 (x[3], y[3], c3, sum[3], c_out);
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-81
Chapter1: Introduction
Hierarchical Design
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-82
Chapter1: Introduction
Dataflow Modeling (Veri Akışı
Seviyesinde Modelleme)
module full_adder_dataflow(x, y, c_in, sum, c_out);
// I/O port declarations
input x, y, c_in;
output sum, c_out;
// specify the function of a full adder
assign #5 {c_out, sum} = x + y + c_in;
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-83
Chapter1: Introduction
Behavioral Modeling
(DavranışsalModelleme)
module full_adder_behavioral(x, y, c_in, sum, c_out);
// I/O port declarations
input x, y, c_in;
output sum, c_out;
reg sum, c_out; // need to be declared as reg types
// specify the function of a full adder
always @(x, y, c_in) // always @(*) or always@(x or y or c_in)
#5 {c_out, sum} = x + y + c_in;
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-84
Chapter1: Introduction
Mixed-Style Modeling
module full_adder_mixed_style(x, y, c_in, s, c_out);
// I/O port declarations
input x, y, c_in;
output s, c_out;
reg c_out;
wire s1, c1, c2;
// structural modeling of HA 1
xor xor_ha1 (s1, x, y);
and and_ha1(c1, x, y);
// dataflow modeling of HA 2
assign s = c_in ^ s1;
assign c2 = c_in & s1;
// behavioral modeling of output OR gate
always @(c1, c2) // always @(*)
c_out = c1 | c2;
endmodule
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley
1-85