Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Ders – 1: Giriş
2
Programlanabilir Devreler
CPLD (Complex Programmable Logic Device) – FPGA (Field-Programmable Gate Array) Yapısı ve Avantajları
3
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. Bu derste programlanabilir devrelerin tarihsel gelişimleri ve iç yapıları anlatılacaktır. Bu dersi tamamladığınızda, bir projede programlanabilir devreler kullanılacağında, ihtiyaca göre hangi tür ve özelliklere sahip programlanabilir entegre kullanılması gerektiğine karar verebileceksiniz. Programlanabilir entegrelerin tarihi gelişme sürecini inceleyecek olursak; Günümüzdeki kullanımından farklı bir şekilde ilk olarak programlanabilir devrelerin işlevlerini gerçeklemek için ROM lar kullanılmaktaydı. İ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ı. ROM modüller sabit bir and kapı dizisi ve programlanabilir or kapı dizisinin birbirine bağlanmasından oluşmaktaydı. Daha sonra PROM modüller geliştirildi.
4
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 PROM modüller bir bilgisayar programı ile bir kez programlanabilmekteydi. Günümüzde de bu şekilde 1 kere programlanabilen antifuse yapıdaki programlanabilir entegreler bulunmaktadır. 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. Resimde görülen programlanmış bağlantı bu şekilde oluşturulmakta ya da koparılmaktadır. PROM chipler sayesinde tasarımdaki hatalar kolayca bulunabiliyor, değişiklikler üretime gitmeden denenebiliyor ve optimizasyonlar yapılabiliyordu.
5
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 . 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. Adres hatları mantıksal devrenin girişleri ve veri hatları da çıkış olarak kullanılabilmekteydi. Basit mantıksal devrelerin gerçeklenmesinde kullanılmışlardı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.
6
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. Programmable logic array (yani PLA ler) PROM yapılardaki hız problemi 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. Yapısı sum of product formundaki mantıksal fonksiyonların gerçeklenmesine uygundur. Yapısındaki AND kapı dizisi ve Or kapı dizisi kullanıcı tarafından programlanabilmektedir. Dezavantaj olarak düşük performans gösterir ve üretimleri pahalıdır. Bu dezavantajlarından dolayı PAL yapısı geliştirildi.
7
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. PAL chip ‘ler PLA çiplerin bir türevidir. PLA den farklı olarak yanlızca AND kapı dizisi programlanabilmektedir. PLA ‘e göre OR seviyeleri azaltılmış ve sabitlenmiştir. Çü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. PAL ‘lar genellikle yapılarında flip-flop devreleri bulundurduklarından senkron devrelerin gerçeklenmesine uygundurlar. PAL yapısı ile önceki yapılardan farklı olarak flip flop, letch, xor ve multiplexer gibi yapıları içerdiğinden tasarımların karmaşıklığı artmış ve bu nedenle ilk donanım tanımlama dillerinin ortaya çıkmasını sağlamıştır. En önemli karakteristik özelliği düşük maliyetli olması ve göreceli olarak yüksek performansa sahip olmasıdır. Bu özellikleri ile günümüz teknolojilerinin geliştirilmesine temel teşkil eder.
8
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ı) ASIC aplication spesific integrated circuit yani ugulamaya özel entegre devre kelimelerinin kısaltılmasıdır. FPGA ve CPLD ile karşılaştırılırken “masked gate array” de denmektedir İç devreleri mekanik olarak kalıcı olarak oluşturulduğundan oldukça hızlı çalışmaktadır Büyük çaplı üretimde oldukça ucuzdur (maske üretim maliyeti nedeniyle proje bazlı uygulamalarda ise oldukça pahalıdır) Ü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ıdır) Bu nedenle gerçeklenmek istenen tasarımda performans önemli ve üretim miktarı fazla olduğunda tercih edilmektedir.
9
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 ASIC in programlanabilen bir aygıt olmadığı bilinmelidir. 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. ASIC entegreler kapı dizisi ya da standart hücreler kullanılarak gerçeklenir. Ö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 seri üretim chipler üretilebilir. İç devreleri hızlı ve gecikmeleri düşük olduğundan performansları oldukça iyidir. Yapılan tasarıma ve kullanılan teknolojiye göre FPGA ile kıyaslandığında 5 ile 25 kat arası alan, gecikme ve performans olarak üstündür. En önemli dezavantajı üretim ve test aşamalarının zaman almasıdır. Bir hata yapıldığında bunun düzeltilmesi ve yeni chiplerin oluşturulması pahalı ve zaman alan bir işlemdir.
10
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. 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. Ayrıca her zaman yüksek miktarda ürüne ihtiyaç duyulmamaktaydı. Tek bir ürün oluşturulan projelerde ASIC kullanılması maske üretim süreci nedeni ile oldukça pahalıdır. Bu nedenlerle içerisinde birçok PAL modülü bir arada bulunduran CPLD ler ve ASIC e benzer yapısı ile FPGA ler geliştirildi. CPLD = complex programmable logic device – Kompleks programlanabilir mantıksal aygıt ın kısaltılmasıdır ve PAL yapıdadır FPGA = field programmable gate array – Alan programlanabilir kapı dizisi nin kısaltılmasıdır ve ASIC e benzer yapıdadır Bu aygıtlar ASIC ve PAL ‘ın iyi özlelliklerini barındırmaktadır.
11
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. Tasarlanan devrelerin boyutu büyüdükçe 1 adet PAL ya da PLA entegre içerisinde bu devrenin gerçeklenmesi olanaksız hale geldi. Bu yüzden büyük kapasiteli ve PAL ya da PLA yapılarından birden fazlasını bir chip içerisinde üretme fikri doğdu. CPLD bir çok PAL aygıtın aynı çip içerisinde toplanıp birbirine anahtarlar aracılığı ile bağlanmasından oluşmuşdur. Şemadan da görebileceğiniz gibi I/O yani giriş çıkış birimleri FB yani fonksiyonel bloklar ve aradaki arabağlantı matrisinden oluşmaktadır. Foksiyonel bloklar PAL yapısı ile gerçekleşirken 1 den fazla PAL yapısı kullanan tasarımlarda PAL lar arası bağlantı ara bağlantı matrisi ile sağlanır. Temelde PAL ile aynı tabandadır ancak daha büyük ve komplaks dizaynları gerçekleyebilir. Günümüzde üretilen CPLD lerde bu yapılardan farklı bazı özelleşmiş yapılar da bulunabilmektedir.
12
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. 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. Bunun haricinde FPGA yapısına benzer yapıda logic bloklardan oluşan modelleri de üretilmektedir. 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. Bu, özellikle senkron tasarımların gerçeklenmesinde önemlidir. CPLD de tasarımcılar girişten çıkışa olan gecikmeyi tahmin edebilirler. Bunun nedeni CPLD üzerinde gerçeklenecek tasarımın PAL Bloklarına ayrılması ve bu bloklarla ilgli gecikmelerin bilinmesidir. FPGA sistemler ise logic bloklardan oluştuğundan tasarımın uygun logic bloklar üzerine dağıtılması gerekmekte ve interconnect yapısı nedeni ile birçok gecikme eklenmektedir.
13
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 CPLD ler artık günümüzde özellikle entegre devrelerin programlanmasında bir standart haline gelen JTAG arayüzü üzerinden seri olarak programlanabilmektedir. EEPROM yapısı ile programlama verisini tutuğundan programlama verisi uçucu değildir. Chip resetlendiğinde ya da olası bir elektrik kesintisinde harici bir hafıza modülüne ihtiyaç duymadan programlama verilerini koruyarak çalışmalarına devam edebilirler. Programlama aşamasında EEPROM a programlama verisini yüklediğinizde her açılışta veriyi okuyarak kendini konfigüre etmektedir.
14
Terminoloji Interconnect Programable Switch Logic Block Logic Capacity
Logic Density Speed - Performance FPGA lere geçmeden önce kullanılan bazı terimlerin öğrenilmesi yerinde olacaktır. Interconnect, Alan programlanabilir entegrelerin içerisindeki kablolama kaynaklarına verilen ismdir. Progeamlanabilir switch, Mantıksal elementleri interconnectlere ya da interconnectleri diğer interconnectlere beğlamakta kullanılan, kullanıcı tarafından programlanabilir anahtarlara verilen isimdir. Logic Blok, Alan programlanabilir entegrelerdeki en küçük devre bloğuna verilen isimdir. Bir tasarım alan programlanabilir entegrede gerçeklenmek istendiğinde küçük alt devrelere bölünerek logic bloklar üzerinde gerçeklenir. Bu yapıya değişik üreticiler tarafından değişik isimler verilmektedir. Logic capacity, Bir adet alan programlanabilir entegre içerisinde bulunan dijital mantık devre miktarına verilen isimdir. Genellikle entegrenin gerçekleyebildiği maksimum kapı miktarı ile belirlenir. Örneğin gerçeklenebilen maksimum 2 girişli NAND kapı sayısı. Logic density, Alan programlanabilir entegrelerde birim alanda bulunan mantıksal devre miktarına verilen isimdir. Speed ya da performance ise tasarlana devrenin alan programlanabilir entegre üzerinde gerçeklenmesinde ölçülen maksimum çalışma hızı şeklinde ölçülür. Kombinasyonel devrelerde bir yol için en uzun gecikme süresi ve senkron devrelerde ise devrenin kararlı çalıştığı maksimum saat frekansı şeklinde ölçülür.
15
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 CPLD ler geliştikçe 50 ve daha fazla basit programlanabilir mantıksal aygıtın kapasitesine ulaştılar. Fakat bu yapı daha fazla gelişmeye müsaade etmiyordu. Daha büyük devrelerin gerçeklenmesi için daha farklı bir yaklaşıma ihtiyaç vardı. Bu düşünce ile logic bloklar, giriş/çıkış bağlantıları ve interconnectlerden oluşan FPGA yapısı geliştirildi. FPGA sistemlerde programlama için SRAM yaygın olarak kullanılmaktadır. SRAM yapı uçucu fakat tekrar programlanabilir bir özellik sağlar. Bazı FPGA firmalarının bir kere programlanabilen, antifuse programlama ile çalışan ürünleri de bulunmaktadır. FPGA ler ASIC gibi düzgün mantıksal dizilerinden oluşur Yapısı oldukça kompleks dizaynlara izin vermektedir I/O yani giriş çıkış hücreleri, programlanabilen logic blokları ve ara bağlantı elemanlarından oluşurlar
16
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. 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. Şekilde gösterilen yapılara farklı üreticiler tarafından farklı isimler verilse de genel olarak yapı bu şekildedir. Bunlara ek olarak günümüzde üretilen çoğu FPGA gömülü dekoder, çoklayıcı ve aritmetik üniteden tam bir işlemciye kadar yapısında pek çok hazır bileşen bulundurabilir. Bu sayede kullanıcılar chip üzerinde komle bir sistami oluşturabilirler. Böylece sistem tek bir chipte toplandığından alan ve hızda kazanç sağlanabilir.
17
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. FPGA üzerinde bulunan CLB ler yani konfigure edilebilir mantıksal bloklar LUT look up table lardan oluşmaktadır. Görüldüğü gibi RAM flip-flop ve multiplexer işlevlerini yerine getirirler. Şekilde görebileceğiniz gibi C1 C2 C3 C4 diğer konfigüre edilebilir mantıksal bloklardan ya da giriş/çıkış birimlerinden gelen sinyallerdir FPGA'i programladığınızda şekildeki M harfi ile belirtilen mux'lar için seçim sinyallerini belirlemiş oluyorsunuz Saat sinyalinin sadece dışarıdan gelen saat hattından alınabildiğine dikkat edin Kombinasyonal tasarımların gerçeklenebilmesi için sonuç değerlerinin flip-flop lara girmeden de çıkabildiğine dikkat edin. Burada genel bir yapı gösterilmektedir. Bu yapı üreticiden üreticiye fpga modeline göre değişebilmektedir. Amaç FPGA in en küçük programlanabilir kısmının anlaşılmasını sağlamaktır.
18
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. 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. Burada giriş ve çıkış için kullanılan özelleşmiş registerlar olduğuna dikkat edilmelidir. FPGA sistemlerde bazen sinyalin yönlendirmesi sinyalin işlenmesinden daha fazla gecikme yaratabilir. Bunun nedeni sinyalin bir CLB den diğerine gitmek için FPGA in yapsı gereği multiplexerlar üzerinden geçmek zorunda olmasıdır. ASIC programlandığında yollar metal hatlar ile belirlenir ve bu nedenle yol gecikmesi FPGA e göre oldukça azdır. FPGA lerde giriş çıkış bloklarına da registerlar konularak yönlendirme gecikmesi bir nebze azaltılmaya çalışılmıştır.
19
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 Switch Matrix ler uzaktaki CLB ler ile hızlı hat üzerinden bağlantı kurulmasını sağlıyor. Bu yapı CPLD de bulunan merkezi yönlendirmeden farklı ve daha çok ASIC yapısına benzemektedir. Gerçekte bir CLB etrafındaki 4 CLB ile doğrudan bağlantıya sahiptir. Diğer CLB lere veri göndermek için anahtar matrislere başvurulur. CLB ler bazen yanlızca yönlendirme yapmak için de kullanılırlar. Bu durumda sinyal üzerinde hiçbir değişiklik yapmadan çıkışa iletirler. Ancak iç yapılarında sinyal multipexerlar üzerinden geçtiği için belirli bir gecikmeye maruz kalır. Bu gecikme FPGA lere özgüdür. Bunlar dışında birde “long line” denen çipin bir ucundan diğerine giden hızlı bağlantılar bulunmaktadır. Bu bağlantılar genellikle büyük tasarımlarda entegrenin bir ucundan diğer ucuna veri taşınması gerektiğinde kullanılır. Daha önce bahsettiğimiz gibi routing işlemi öncesinde gecikmelerin belirlenememesinin nedeni de yapılan tasarımın CAD aracı ile ilgili teknolojiye göre optimize edilerek hazırlanmasıdır. Gecikmeler optimizasyon seviyesine göre değişebilmektedir. Bu şekilde gösterilmeyen bir de saat ağacı bağlantıları bulunmaktadır.
20
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 FPGA lerde Özel yüksek hızlı clock buffer ları çip yüzeyine dağılmıştır Bu buffer lar clock giriş pinlerine bağlıdırar Clock tree boyunca clock hatlarına sinyali sürerler Bu yapıların amacı saat sinyallerindeki gecikmeyi azaltmak ve saat sinyalinin tasarımın her yerine çok yakın bir zamanda ulaştırılmasını sağlamaktır. Senkron tasarımlarda clock 'un devrenin her yerine aynı anda ulaşması çok önemlidir
21
Programlama CPLD aygıtlar programlama için EEPROM kullanmaktadır
FPGA ‘ler ise programlama verilerini SRAM içerisinde tutar CPLD lerde EEPROM yapısı ile programlama verisini tutuğundan programlama verisi uçucu değildir. Bunun bazı avantaj ve dezavantajları bulunmaktadır. Chip resetlendiinde içerisindeki programlama verisini bu sayede koruyabilmektedir. FPGA lerde olduğu gibi SRAM yapılarda ise program uçucudur. Bu nedenle ekstra uçuucu olmayan bir hafıza modülünün de devreye eklenmesi gerekmektedir ve bu ekstra maliyet anlamına gelir. SRAM yapının avantajı ise çalışma esnasında değişikliğe izin vermesidir. Fpga de bulunan sram yapısının programlama verisini koruması istenirse fpga açıldığında dışarıda bulunan bir hafızadan okuma yapılacak şekilde konfigure edilmiş olması ve programlama verisinin de bu hafıza modülü üzerine yüklenmesi gerekmektedir.
22
Hızlı, tahmin edilebilir
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 Seçim tamamen gerekliliklere bağlıdır. CPLD ler sahip oldukları kapasite ve hız ile geniş bir kullanım alanına sahiptirler. Özellikle glue-logic olarak bilinen 2 farklı protokol ya da sistem arasında dönüşüm yapan sistemlerde sıklıkla kullanılırlar.Bunun yanında bazı büyük çaplı örneğin LAN kontyrolcüsü ya da UART tasarımlarında da kullanılabilirler. Bir projede CPLD kullanmaya karar vermek için projenin göreceli olarak fazla sayıda and or kapısı içermesi problem yaratmazken fazla sayıda flip-flop içermemesine dikkat edilmelidir. Tekrar programlanabilen EEPROM yapısı ile uçucu olmayan bir şekilde programlanabilemesi de başka bir avantajıdır. CPLD de olduğu gibi FPGA ler de küçük büyük pekçok tasarımın gerçeklenmesinde kullanılabilirler. CPLD lerden farklı olarak daha büyük dizaynlara da uygundurlar. Özellikle birden fazla FPGA in birbirine bağlanması ile çok büyük tasarımların donanımsal olarak emule edilmesini sağlarlar. Ayrıca geniş yapıları nedeni ile paraleleştirilebilen uygulamalarda tasarlanan modülden birden falzla kullanılması ve bu modüllerin eş zamanlı çalıştırılması ile belirli uygulamalarda yüksek performans elde edilebilir. İ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ız Hızlı, tahmin edilebilir Uygulama bağımlı Yoğunluk Düşük - orta Orta - yüksek Bağlantı Crossbar Routing Güç Tüketimi Kapı başına yüksek Kapı başına düşük
23
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. 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. Özellikle acele sonuç alınması gereken projelerde ilk seferde belirli bir bilgi birikimi yok ise ve zorunlu değilse kullanmak projenin zamanında yetişmemesine neden olabilmektedir. Dijital mantıksal devreler ile donanım tasarımı genellikle alışılmış olan gömülü sistem programlamaya benzememektedir.Tasarımcıların multithread uygulamalar geliştirseler bile seri bir şekilde işlenen kod yazımından paralel işlenen kodlara alışması zaman alabilmektedir. Bunun yanında özellikle parlelleştirilebilen uygulamalarda, gerçek zamanlı sonuçlara ihtiyaç duyan sinyal işleme uygulamalarda FPGA kullanımı önerilmektedir. Kod genellikle yüksek seviyeli olan verilog ya da vhdl dilleri kullanılarak yazılmakta, sentezlenip yüklenebilir kod oluşturulduktan sonra FPGA e yüklenmektedir. Tasarım ve geliştirme süreci ileriki derslerde detaylı olarak işlenecektir. Yapmak istediğiniz projenin bir benzerini daha önce sıralı kod işleyen bir işlemcide gerçeklediyseniz tekrar aynı yolu izlemeniz hızlı sonuç almanızı sağlayabilir. FPGA in buradaki avantajı genişlemeye daha müsait olmasıdır. FPGA kullanmaya karar verdikten sonra projede ihtiyaç duyulacak modüller ya IP yani intellectual property olarak dışarıdan alınmalı ya da tasarımcı tarafından tasarlanmalıdır. Piyasada açık kaynak ücretsiz pek çok IP bulunmaktadır. Bu yüzden ihtiyaç duyacağınız tüm birimleri tasarlamak yerine projeye özel modülleri tasarlayarak diğer kısımları ücertli ve ücretsiz dışarıdan IP olarak temin edebilirsiniz. Bu size zaman kazandıracaktır. FPGA ve CPLD lerin de farklı verisyonları bulunmaktadır. Özellikle giriş çıkış pin sayısı, kapasitesi, hızı ve içerisinde bulundurduğu gömülü modüller incelenerek seçim yapılmalıdır. FPGA geliştirme kitleri kullanım alanlarına göre 50 dolar dan 5000 dolar a kadar fiyatlandırılmaktadır. Bu yüzden doğru seçim ekonomik olarak kazanç olarak size döner. Hibrit çipler olarak bilinen modellerde ise IP olarak gerçeklenen modüllerden farklı olarak işlemci gibi bazı modüller hard core olarak chipe gömülü şekilde gelmektedir. Chipin geri kalan alanı dijital tasarımların gerçeklenmesinde kullanılır. Günümüzde içerisinde ARM9 gibi gelişmiş işlemciler bulunduran hibrit chipler bulunabilmektedir.
24
FPGA programlama ve HDL ’e giriş
CPLD – FPGA Programlamaya giriş
25
İç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 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 Ve son olarak da Verilog dilinde tasarım gerçeklenmesi. VHDL ve Verilog dilleri hakkında geniş çapta bir eğitim yerine giriş seviyesinde bu dillere hakim olmayan kullanıcılara bu dilleri tanıtmak amaçlanmıştır. Daha detaylı bilgi arayan kullanıcılar dokümantasyon için sitemizi ziyaret edebilirler.
26
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)
27
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.
28
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 Dijital devrelerin tasarım işlemi aşina olabileceğiniz gömülü sistem programlama işlemine benzememektedir. Donanımsal yapılar, davranışsal ya da yapısal olarak genellikle yüksek seviyeli donanım tanımlama dilleri olan VHDL ya da verilog dilleri ile yazılırlar. Bu dillerin yanında şematik tasarım da kullanılabilmektedir. Özellikle kompleks ve büyük tasarımlarda şematik tasarım tercih edilmemektedir. Bu tasarımlarda, tasarım üzerinde değişiklik yapmak donanım tanımlama dillerinde çok daha kolaydır. Yine de tasarımın görsel olarak ifade edilmesi gereken durumlarda özellikle top modül olarak şematik tasarım kullanılabilmektedir. Programlanabilir mantıksal devreler için tasarım geliştirme süreci şekilde gösterilmektedir. Yazılım geliştirme ile donanım geliştirme arasındaki temel fark tasarımcının problemler karşısındaki düşünce yapısıdır. Yazılım geliştiriciler, yazılımlarının sıralı kod işleyen bir işlemci üzerinde gerçekleştirileceğini bildiklerinden sıralı şekilde yazdıkları komutların program sırasına göre işleneceğini bilirler. Donanım geliştiriciler ise üzerinde çalıştıkları yapı gereği paralel çalışabilecek şekilde düşünmeleri ve bu şekilde tasarım yapmaları gerekmektedir. Tüm giriş sinyalleri aynı anda paralel olarak alınır ve çıkışa kadar ilgili LUT ve interconnectler üzerinden paralel şekilde ilerlerler. Donanım tanımlama dilleri ile gerektiğinde sıralı kendi içerisinde sıralı işlenecek kod blokları oluşturmak da mümkündür. Tasarımın donanım tanımlama dilleri kullanılarak tanımlanması ile tasarım girişi aşaması tamamlanmış olur. Tasarım girişi aşamasının tamamlanmasının ardından fonksiyonel simülasyon kısmına geçilir. Bir simülatör yardımı ile tasarım çalıştırılarak belirlenen giriş değerleri için tasarımın doğru sonuçlar üretip üretmediğine bakılır. Alan ve zamanlama ile ilgili problemler değerlendirilmez. Çünkü bu problemler kullanılacak teknolojiye bağımlıdır. İlk yapılan simülasyon ile sadece yazılan kodun fonksiyonelliği test edilmiş olur. Daha sonra klasik olarak kodun derlenmesi ve yüklenebilir dosyanın oluşturulması toplamda 2 farklı aşamada gerçekleşir. İlk olarak kod, tabii ki burada şematik tasarım kullanılmışsa şematik tasarım, bir ara gösterim haline çevrilir. Bu işleme sentez denilmektedir ve sonucunda bir netlist oluşturulur. Bu netlist programlamada kullanılacak aygıttan bağımsızdır ve genellikle EDIF yani elektronik dizayn interchange format yapıdadır. Bu işlem yapılırken tasarım kütüphanelerinden kullanılan yapılar hakkında bilgi alınır ve varsa belirli tasarım sınırlamaları dikkate alınır. İkinci kısım ise gerçekleme ya da implementation olarak bilinir. Bu aşamada belirli bir chip yani teknolojiye göre yerleştirme ve yönlendirme işlemi yapılır. Sentez işlemi sonrasında netlist haline gelen dijital yapı belirli bir chip için CLB ve interconnectlerde kullanılacak hale getirilir. Bu işlem sonrasında belirli bir chip için içerisinde giriş çıkış tanımlamaları ve bağlantıları tanımlayan bir dosya elde ederiz. Bu dosya yalnızca belirtilen chip yapısına özeldir ve başka bir chipte kullanılamaz. Daha önceki ünitede FPGA lerin SRAM hafıza yapısı ile CLB ler içerisindeki seçim verilerini ve yönlendirme verilerini tuttuğunu görmüştük. Yerleştirme ve yönlendirme aşamasından sonra elde edilen binari yani ikili bitstream dosyası da bu SRAM içerisinde tutulacak olan değerleri içerir. Bitstream dosyasının hatasız üretiminden sonra bu dosyanın FPGA içerisine yüklenmesi ile tasarım tamamlanmış olur. Bu adımların dışında tasarımın boyutlarına göre pek çok ara kontrol adımı da bu şemaya eklenebilir.
29
Programlama Yüklenecek hafıza türü Yükleme ara yüzü CPLD – EEPROM
FPGA – EEPROM & SRAM Yükleme ara yüzü JTAG Elinizde bulunan FPGA ya da CPLD chip için ürettiğiniz bitstream dosyasını, son olarak yüklemeniz gerekmektedir. Program CPLD kullanıyorsanız EEProm yonga üzerine yüklenecektir. FPGA kullanıyorsanız genelde iki temel seçeneğiniz olur. Bunun nedeni FPGA modüllerin SRAM teknolojini kullanmaları ve üreticilerin buradaki açığı kapatmak için kitlerine uçucu olmayan flash yonga eklemeleridir. Programınızı yükleme aşamasında kalıcı programlama için flash yongaya ya da direk denemek için FPGA e atabilirsiniz. Flash yongaya attığınız program FPGA resetlense bile sonrasında yüklenecektir. Flash yonganın kullandığı yüklenebilir dosya tipi daha farklıdır ancak oluşturma süreci normal programlamaya benzemektedir. Yükleme işlemi genellikle FPGA sağlayıcının temin ettiği yükleme programı ile yapılmaktadır. Yükleme işlemi için kullanılacak arayüz genellikle jtag olmaktadır. Günmüzde üretilen çoğu geliştirme kiti üzerinde bir usb – jtag dönüştürücüsü bulundurduğundan direk usb üzerinden programlanabilmektedirler. Bu işlem için kullanılan usb arayüzü ile ilgili driver işletim sistemine yüklenmelidir. İlgili driver üretici tarafından geliştirme ortamı ile bilgisayarınıza yüklenmektedir. Sistemi oluşturduktan sonra bu driver ı bilgisayarınızda aratmanız yeterli olacaktır. Daha eski kitler ile ya da kendi tasarladığınız bir baskı devre üzerinde çalışacaksanız, FPGA ler jtag üzerinden programlanabildiklerinden bir paralel, seri ya da usb den jtag dönüştürücüye ihtiyaç duyarsınız. Yükleme işlemleri bir sonraki ünitede uygulamalı olarak anlatılacaktır.
30
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)
31
Verilog - Giriş 1984 de oluşturuldu 1990 da Candance tarafından açık kaynak yapıldı 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 VHDL dilini kısaca tanıttıktan sonra şimdi de verilog donanım tanımlama dilini kısaca inceleyelim. Verilog dili 1984 de oluşturuldu 1990 da Candance tarafından açık kaynak yapıldı 1995 de IEEE standardı oldu ve bu güne kadar birçok güncelleme geçirdi. Özellikle C diline benzerliği nedeniyle vhdl diline göre adapte olması kolay bir dildir. Dilin genel özelliklerine bakacak olursak; Tanımlayıcılar maksimum 1024 karakter olabilir İlk karakter sayı olamaz İfadeler “ ;” ile sonlandırılır String ler yani harf dizileri ç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. VHDL den farklı olarak çoklu satır yoruma izin vermektedir. Compiler komutları “ ` ” ile başlar Hazır task lar ya da function lar “$” ile başlar
32
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 Case-sensitive yani büyük küçük harf duyarlı bir dildir. Anahtar sözcükler lower case yani küçük harf kullanılarak yazılır Aynı alanda geçerli değişkenler için farklı isimler kullanılmalı Tanımlayıcı karakterler Upper and lower case alphabeticals decimal digits Underscore Boşluklar ve boş satırlar vhdl dilinde olduğu gibi istenilen şekilde kullanılabilir Verilog 4 mantık değerli önceden tanımlı (0, 1, z, x) bir sisteme sahiptir
33
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 Integer ve Real türleri tanımlıdır. Real türü sentezlenebilir değildir. Procedure 'ler üzerinden işlem yapar paketlere sahip değildir. Verilog dilinde dijital sistemler modüller oluşturularak gösterilir. Yaptığınız tasarım temelde bir top modül ve alt modüllerinden oluşur. VHDL de olduğu gibi structural yani yapısal ve behavioral yani davranışsal tasarım yapılabilmektedir Yapısal dizayna RTL (Register transfer level) de denmektedir
34
HDL Tabanlı Tasarım Basamakları
35
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 Davranışsal tasarımda yapılmak istenen tasarım davranışına göre koda dökülmektedir. Bu yol ile çok daha az kod yazarak çok daha hızlı bir şekilde çözüm alabilmek mümkündür. Ancak kodu derleyici kapı seviyesine indirgediğinden alan ve hız olarak performansı derleyiciye bağlıdır. Verilog dilinde farklı veri türlerine farklı alanalarda atama yapılabilmektedir. Net türündeki yapılara modülün içerisinde assign anahtar sözcüğü ile arama yapılırken register yapılara always ve initial blokları içerisinde atama yapılır. Buradaki örnekte out çıkış değerinin always bloğunda kullanılabilmesi için tekrardan register olarak tanımlandığına dikkat edin.
36
Verilog – Hiyerarşik Dizayn
Top Level Module Sub-Module 1 2 Basic Module 3 Full Adder Half Adder Bir tasarımı gerçeklerken onu daha küçük bloklara ayırarak gerçeklemeye hiyerarşik dizayn denilmektedir. Öncelikle alt birimler tasarlanarak üst modülde tasarlanan bu modüllerin kullanılmasıyla tasarım tamamlanmış olur. Örneğin bir full adder iki adet half adder kullanılarak tasarlanabilmektedir. Şimdi bu yapının kodlarını inceleyelim.
37
Verilog – Hiyerarşik (Örnek)
module half_add (A, B, S, C); input A, B ; output S, C ; xor (S, A, B) ; and (C, A, B) ; endmodule module full_add (A, B, CI, Sum, Cout) ; input A, B, CI ; output Sum, Cout ; wire S1, C1, C2; half_add HA1 (A, B, S1, C1); half_add HA2 (S1, CI, Sum, C2); or P1 (Cout, C1, C2); endmodule Tasarım hiyerarşik olarak yapıldıktan sonra en alt modülden başlayarak kod yazma işlemine geçilir. Sağ tarafta alt modül olan half adder tasarımını görmektesiniz. Tasarım bir xor ve and kapısından oluştuğundan bu primitive ler kullanılarak tasarım yapısal olarak koda aktarılmış. Sol alt tarafta ise iki adet half adder ve bir or kapısı kullanılarak gerçekleştirilen full adder tasarımını görmektesiniz. Full adder tasarımının kodlarına göz attığımızda half adder modüllerinden iki adet kullanıldığını ve bir adet de or kapısı kullanıldığını görmekteyiz. Bir modülün altında diğer modülü kullanmak diğer programlama dillerindeki fonksiyon çağırmaya benzemektedir. Kullanılacak modülün adı yanına kullanılacak modüle verilecek isim ve giriş çıkış bağlantıları parantez içerisinde yazılarak kullanılır. Burada dikkat edilmesi gereken önemli bir nokta da kullanılacak modülün giriş çıkışları hangi sıra ile tanımlanmışsa ilgili sinyalleri o sıra ile modüle gönderme gerkliliğidir. Eğer bu şekilde yapılmazsa explicit yani açık bir şekilde yönlendirme yapılmalıdır. EDA programlarının kullanılan modülü bulabilmesi için bu modülün de proje altında bulunması gerekir. Siz böyle bir tasarım yaptığınızda yazılım alt modüllerinizi üst modülün üzerinde göstermeye başlar.
38
Verilog - Örnek module fa_rtl (A, B, Cin, Sum, Cout) ;
input A, B, Cin ; output Sum, Cout ; assign Sum = A ^ B ^ Cin; //continuous assignment assign Cout = A & B | (A ^ B )& Cin; //continuous assignment endmodule Burada da farklı bir şekilde tasarlanmış full adder görmektesiniz. Alt modül olarak 2 adet half adder kullanmak yerine tek modülde tasarlanmış. Tasarım büyüdüğünde bu tarz tasarımların koda dökülmesi daha zor olmaktadır. Örneğil 4 bitlik bir toplayıcı 4 tane full adder modülünün kullanılması ile çok daha kolay şekilde gerçeklenebilir.
39
Verilog – Sayılar, Türler
<size>’<radix> <value> 3’b000 8’hAB Nets: Donanım elemanlarını birleştiren fiziksel bağlantı Registers: Bağlı olmasa bile depolanan değer 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 Verilog dilinde sayılar boyut tırnak işareti biçim ve değerden oluşur. Boyut sayının sahip olduğu bit miktarını ifade ederken radix bölümü sayının hangi gösterim biçimi ile ifade edileceğini gösterir. Burada da 3 ve 8 bitilk binary yani ikili ve hexadesimal değerleri görmektesiniz. Verilog dilinde de VHDL dilinde olduğu gibi temelde iki tür bulunmaktadır. Bunlar donanım elemanlarını birleştiren fiziksel bağlantısında kullanılan ne türü ve bir yere bağlı olmasa bile değeri üzerinde tutabilen register türüdür.
40
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 Bu slaytta verlog dili ile kullanılabilecek diğer veri türlerini görmektesiniz.
41
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]; // bit regs Array elemanlarına erişim mem[10] = 8'b temp = mem[10]; var[6] = temp[2]; Verilog dilinde tek ve çok boyutlu diziler tanımlanabilmektedir. Tür isim boyut şeklinde tanımlanır. Array elemanlarının belirli bir kısmına ya da tek tek bitlerine ulaşılabilmektedir.
42
Verilog - Operatörler Arithmetic (binary: +, -,*,/,%*); (unary: +, -)
Bitwise (~, &,|,^,~^,^~) Reduction (&,~&,|,~|,^,~^,^~) Logical (!,&&,||,==,!=,===,!==) Relational (<,<=,>,>=) Shift (>>,<<) Conditional ? : Concatenation and Replications {A,B} {4{B}} Verilog dilinde kullanılan operatörleri görmektesiniz. Kırmızı ile belirtilen operatörler değişkenler ile kullanılamamaktadır. Buradaki conditional yani durumsal operatör ile basit bir if else yapısı gerçeklenebilir. Concatenation operatörü ise birleştirme operatörüdür sinyalleri yada busları daha büyük buslar oluşturmak için birleştirirken kullanılır. Diğer operatörler ise programlama dillerinden aşina olunan operatörler olduğundan üzerinde durulmamaktadır.
43
Verilog – Sürekli Atama
Yazım kuralı: assign #del <id> = <expr>; 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 opsiyonel net türü !! Assign İfadesi sürekli atama işlemlerinde kullanılır. Bir duyarlılık listesine sahip değildir Combinational devreleri modellemede kullanılır Yanlızca wire türünden değişkenleri sürebilmektedir. Assiğn anahtar sözcüğü, simulasyon için opsiyonel olan gecikme ifadesi atanacak olan wire türünden değişken ve atama ya da bir ifadeden oluşur. Assig ifadeleri nereye yazılmalıdır: Bu modüller modülün içerisinde ancak Prosedürlerin dışarısına yazılmalıdır. Assign ifadeleri paralel işlenir ve birbirinden bağımsız, aynı zamanda aktif olurlar
44
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 Modüller istenen sayıda procedure içerebilir Procedure ler iki tür blok ile ifade edilirler: initial – bir kere sıralı işleme – 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
45
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 endmodule simulation zamanı 0 da gösterilecek simulation zamanı 50 de gösterilecek 0 zamanında çalışmaya başlayıp içerisindeki son komutu çalıştırıncaya kadar çalışırlar. Bir duyarlılık listeleri yoktur. Simulsayon işlemleri için test bech oluşturulurken kullanılırlar. Sadece simulasyon işlemlerinde kullanılan display gibi bazı sistem görev komutları bu kısımda kullanılır. Dşyez işaretinden sonra gelen değer ne kadar bir gecikme uygulanacağını simulasyon programına iletir. Simulasyon dışarısında sentezlenmez.
46
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 Sistem görevleri her zaman Prosedüelerin içerisine yazılır ve özellikle simulasyonda kullanılırlar. Display ve monitör ekrana basma işlemlerinde, stop ve finish simulasyonu durdurma ve bitirme işlemlerinde kullanılırlar. Belirli bir dosyadan okuma yapılmak istendiğinde örneğin bir hafıza modülünün içeriği dosyadan alınacağında fopen ve fclose komutları kullanılabilir.
47
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 Always Bloğu Kendi duyarlılık listelerine sahiptirler. VHDL dilindeki procedure ler gibi duyarlılık listesindeki bir değişkende değişikilk olduğunda içlerindeki kod işlenir. Wire türlerini süremez !!! İnteger ve Register türleri üzerine işlem yapılabilir!!! Ancak wire türleri sağ taraf değeri olarak kullanılabilir. İçerisinde “=” seri ve “<=” paralel atamaları yapılabilir Bu atamalara blocking ve nonblocking atama denilmektedir Sıralı işlenme mantığı => vhdl dilindekiprocess ler ile aynı davranıştadır Sıralı devrelerin gerçeklenemsi saat sinyalinin tetiklemesi ile olduğundan always blokları içerisinde gerçekleşir. Saat sinyali duyarlılık listesine eklendiğinde saat tetiklemeli bir flip floplu tasarım gerçeklenmiş olur. Ayrıca kombinasyonal devrelerin de gerçeklenmesinde kullanılırlar.
48
Verilog – Always (örnek)
module fa_bhv (A, B, Cin, Sum, Cout) ; input A, B, Cin ; output Sum, Cout ; //output reg Sum, Cout; reg Sum, Cout; or B or Cin) // yada begin Sum <= A ^ B ^ Cin; // procedural assignment Cout <= A & B | (A ^ B )& Cin; // procedural assignment end endmodule Aynı full adder tasarımının always bloğu içerisinde gerçeklenmesini görmektesiniz. (Bu tasarımı deneyelim) Sum ve cout değişkenlerinin ayrıca reg olarak tanımlandıklarına dikkat edin. Ayrıca yeni standarda göre tek satırda output reg olarak da tanımlama yapılabilmektedir. Ayrıca always ifadeleri yanında yorum olarak yazılan şekillerde duyarlılık listeleride tanımlanabilmektedir. Yıldız işareti ile tanımlama kombinasyonel devrelerde always bloğu içerisindeki sağ taraf değerlerini otomatik olarak duyarlılık listesine alan kullanışlı bir operatördür.
49
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 Registerlara yalnızca aşağıdaki alanlarda atama yapılır: Procedural statement (always, init) 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
50
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 Şimdi de prosedürsel atamalar ile ilgili bazı kuralları inceleyelim. Register değişkenleri modülün her yerinde referans gösterilebilir yani sağ taraf değeri olabilirler. 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. force … release bir istisnadır Net değişkenleri modül içerisinde primitive, continuous assignment, force … release ya da module port tarafından sürülmelidir
51
Verilog – Bloklu ve Bloksuz Atamalar
“<= “ ile atama yapılır İşlemler paralel bir şekilde aynı anda yapılır Örnek: clk) begin b <= 0; c <= 0; b <= a + a; c <= b + a; d <= c + a; end Bloklu Atamalar “=” ile gerçekleştirilir Bloklu atamalar sıralı gerçekleştirilir Örnek: clk) begin b = 0; c = 0; b = a + a; c = b + a; d = c + a; end Verilog dilinde vhdl dilinden farklı olarak sıralı ve paralel işlenecek kodlar kullanıldıkları yere göre değil de atama işaretine göre belirlenmektedir. Sol tarafta bloksuz atamave örneğini görmektesiniz. Örnekte verilen kod derlendiğinde hata verecektir. Çünkü sol tarafa yükleme işlemi bloksuz atamalarda aynı anda gerçekleşeceğinden “b” değişkenine iki farklı atama aynı anda yapılmak istenmektedir. Bu birden fazla sürücü hatasına yol açar. Eğer kod sağ taraftaki gibi bloklu atama şeklide yeniden yazılırsa bu hata alınmaz. Çünkü butür atamalarda 2.komuta geçildiğinde 1. komutun bitirilmesi garanti edilir. Burada bir önemli nokta da bu devrelerin sıralı devreler olmasıdır. Always bloğunun duyarlılık listesine bakacak olursanız saat sinyali ile tetiklendiğini görürsünüz. Posedge anahtar sözcüğünü bu tetiklemenin yükselen kenarda olmasını istediğimizde kullanırız.
52
Verilog – Gecikme ve Olay Operatörleri
Gecikme Kontrol Operatörü(#) İfadenin sonuçlanmasını geciktirir Bloklu atamalarda (=), gecikme tüm alttaki ifadeleri etkiler Example: clk) #10 Q = D; Olay Kontrol Bir doğruluk net ya da register 'da gerçekleşen değişim ile devrenin aktivite akışını senkronize eder Örnek (start) RegA = Data; Örnek begin @ (posedge clk) Q = D; posedge: 0 -> 1, 0 -> x, x -> 1 anlamına gelir Delay Control Operator (#) ifadenin sonuçlanmasını geciktirir Bloklu atamalarda (=), gecikme tüm alttaki ifadeleri etkiler Example: clk), #10 Q = D; Event Control Operator Bir doğruluk net ya da register 'da gerçekleşen değişim ile devrenin aktivite akışını senkronize eder Example (start) RegA = Data; Example begin … @ (posedge clk) Q = D; end posedge: 0 -> 1, 0 -> x, x -> 1 anlamına gelir
53
Verilog – (if…else) or b or c) begin if (a == b) q <= data; stop <= 1’b1; end else if (a > b) q <= a; else q <= b; Tüm seçeneklerin ele alınıp alınmadığını kontrol edin yoksa istenmeyen letch oluşturabilirsiniz Else en yakın if ile ilişkilidir. Begin ve end kullanarak okunabilirlği arttırabilirsiniz. İç içe geçmiş if … else sentez işleminden sonra seri ya da öncelikli devre oluşumuna neden olmaktadır. Tüm seçeneklerin ele alınıp alınmadığını kontrol edin yoksa istenmeyen letch oluşturabilirsiniz else en yakın if ile ilişkilidir. Begin ve end kullanarak okunabilirlği arttırabilirsiniz. İç içe geçmiş if … else sentez işleminden sonra seri ya da öncelikli devre oluşumuna neden olmaktadır. Bu yüzden bu yapılar gecikmeyi arttırmaktadır. Özellikle gecikmenin kritik olduğu tasarımlardarda case kullanılarak paralel devre oluşturulması daha uygun olur.
54
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 Case ifadesinin yazım şekli buradaki örnekteki gibidir. Burada tüm sağ taraf değerleri always bloğu duyarlılık listesinde yazılmamıştır. Bu yüzden derleyici uyarı vericektir. En son satırdaki default değeri ile ouşabilecek diğer tüm olasılıklar kapsanmış olmaktadır. Case komutu bloksuz atama ile paralel olarak gerçekleştirilir. İçerisinde buradaki if else ifadeleri gibi birden fazla satırdan oluşan komutlar gerçeklenebilmektedir.
55
Verilog – For döngüsü initial integer r, i; begin r = 0;
for (i = 1; i <= 7; i = i + 2) r[i] = 1; end Bu örnekte bir For döngüsünü görmektesiniz. For döngüsü combinational devreler için kullanılırken while ve forever döngüleri sequential devre oluşturmakta kulanılır Kaç adet devre oluşturulacağını tanımladığından. Loop değişkenine atama yapılamıyor. Klasik programlama dilinden farklı olarak benzer yapıda birden çok devre oluşturmak gerektiğinde okunabilirliği arttırmak için ve simulasyonlarda kullanılır.
56
Verilog – Forever döngüsü
initial begin clk = 0; forever #50 clk = 1; #50 clk = 0; end forever Loop Örneğini görmektesiniz. Sentezlenebilir devreler yerine genellikle testbench 'lerde kullanılır. Bir simulasyon için sonsuz döngü oluşturulmasını sağlar. Buradaki örnekte simulasyon için %50 duty cycle a sahip bir saat sinyali oluşturulmasını görmektesiniz.
57
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 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. Biribirini çağıran yapıların donanımsal olarak aynı alanı kullanmaları gerektiğinden bu mümkün değildir. Functions Combinational davranışlar gerçekleştirilir Zaman kontrolü, task ve while yoktur Recursion olmadan diğer fonksiyonları çağırabilir Reference ile çağırılabilir Output ya da inout a izin verilmez
58
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 Bu ünitede FPGA &CPLD Tasarım süreci ve programlama Shematik tasarım geliştirme Ve son olarak da giriş seviyesinde VHDL ve Verilog dillerini öğrenedik. Bundan sonraki derslerde donanım tanımlama dilleri ve şematik tasarım bilindiği varsayılarak Quartus programının kullanımı, proje geliştirme, simulasyon yapma ve örnek tasarımlar üzerinde durulacaktır. Kendinizi donanım tanımlama dillerinde daha fazla geliştirmek istiyorsanız sitemizdeki bu konulardaki dokümanları inceleyebilirsiniz.
59
Modüller Modül iki kısımdan oluşur: Çekirdek devre (yani Gövde)
Arayüz (yani portlar)
60
Modüller module --- Temel yapı bloğu
61
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]; // bit regs Array elemanlarına erişim mem[10] = 8'b temp = mem[10]; var[6] = temp[2]; Verilog dilinde tek ve çok boyutlu diziler tanımlanabilmektedir. Tür isim boyut şeklinde tanımlanır. Array elemanlarının belirli bir kısmına ya da tek tek bitlerine ulaşılabilmektedir.
62
Verilog - Operatörler Arithmetic (binary: +, -,*,/,%*); (unary: +, -)
Bitwise (~, &,|,^,~^,^~) Reduction (&,~&,|,~|,^,~^,^~) Logical (!,&&,||,==,!=,===,!==) Relational (<,<=,>,>=) Shift (>>,<<) Conditional ? : Concatenation and Replications {A,B} {4{B}} Verilog dilinde kullanılan operatörleri görmektesiniz. Kırmızı ile belirtilen operatörler değişkenler ile kullanılamamaktadır. Buradaki conditional yani durumsal operatör ile basit bir if else yapısı gerçeklenebilir. Concatenation operatörü ise birleştirme operatörüdür sinyalleri yada busları daha büyük buslar oluşturmak için birleştirirken kullanılır. Diğer operatörler ise programlama dillerinden aşina olunan operatörler olduğundan üzerinde durulmamaktadır.
63
Verilog – Sürekli Atama
Yazım kuralı: assign #del <id> = <expr>; 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 opsiyonel net türü !! Assign İfadesi sürekli atama işlemlerinde kullanılır. Bir duyarlılık listesine sahip değildir Combinational devreleri modellemede kullanılır Yanlızca wire türünden değişkenleri sürebilmektedir. Assiğn anahtar sözcüğü, simulasyon için opsiyonel olan gecikme ifadesi atanacak olan wire türünden değişken ve atama ya da bir ifadeden oluşur. Assig ifadeleri nereye yazılmalıdır: Bu modüller modülün içerisinde ancak Prosedürlerin dışarısına yazılmalıdır. Assign ifadeleri paralel işlenir ve birbirinden bağımsız, aynı zamanda aktif olurlar
64
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 Modüller istenen sayıda procedure içerebilir Procedure ler iki tür blok ile ifade edilirler: initial – bir kere sıralı işleme – 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
65
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 endmodule simulation zamanı 0 da gösterilecek simulation zamanı 50 de gösterilecek 0 zamanında çalışmaya başlayıp içerisindeki son komutu çalıştırıncaya kadar çalışırlar. Bir duyarlılık listeleri yoktur. Simulsayon işlemleri için test bech oluşturulurken kullanılırlar. Sadece simulasyon işlemlerinde kullanılan display gibi bazı sistem görev komutları bu kısımda kullanılır. Dşyez işaretinden sonra gelen değer ne kadar bir gecikme uygulanacağını simulasyon programına iletir. Simulasyon dışarısında sentezlenmez.
66
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)
67
Lexical Conventions Comments
// --- the remaining of the line /* ….*/ --- what in between them Sized number: <size>`<base format><number> 4`b1001 16`habcd
68
Lexical Conventions Uzunluğu Belli Olmayan Sayı:
`<Taban><Sayı> 2009 `habc x or z x: Belirli olmayan değer z: Yüksek Empedans
69
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”
70
Kodlama Stili Küçük Harfler Büyük Harfler Anlamlı isimleme
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
71
Değerler Kümesi Dört Değerli Lojik 0 : lojik 0, yanlış
1 : lojik 1, doğru z : yüksek empedans x : bilinmez
72
Veri Tipleri Nets: Donanım bağlantı noktaları
Variables: Veri depolama üniteleri
73
Nets Aşağıdakiler tarafından sürülürler: Primitive
continuous assignment force … release module port
74
Değişkenler Aşağıdakilerin içinde atama yapılır.
Procedural statement Task Function Kulanılmadığı durumlar: input inout
75
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
76
Port Tanımlama Port Tipleri: input output inout
77
Port Bağlantı Kurallar
Named association Positional association
78
Port Tanımlama
79
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
80
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
81
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
82
Hierarchical Design
83
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
84
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 y, c_in) // or or y or c_in) #5 {c_out, sum} = x + y + c_in; endmodule
85
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 c2) // c_out = c1 | c2; endmodule
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.