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
© Copyright 2024 Paperzz