Laboratuvar Föy Kitapçığı - Ondokuz Mayıs Üniversitesi Bilgisayar

Transkript

Laboratuvar Föy Kitapçığı - Ondokuz Mayıs Üniversitesi Bilgisayar
O NDOKUZ M AYIS Ü N İVERS İTES İ
B İLG İSAYAR M ÜHEND İSL İ Ğ İ B ÖLÜMÜ
B İLG İSAYAR M İMAR İS İ L ABORATUVARI
Föy Kitapçığı
Düzenleyenler:
Doç. Dr. Erdal KILIÇ
Erdem ALKIM
10 Ocak 2013
İçindekiler
Lab1: Altera’nin Nios II Islemci Kullanimi . . .
Lab2: Altprogramlar Ve Yığınlar . . . . . . . .
Lab3: Mantık Talimatlarının Kullanımı . . . . .
Lab4: Giriş / Çıkış Organizasyonu . . . . . . . .
Lab5: Bilgisayar Sistemi Uygulamaları . . . . .
Lab6: UART ve Zamanlayıcı Devreler kullanma
Lab7: UART ve Timer Devreleri Uygulamaları .
Lab8: Ses Kodeği . . . . . . . . . . . . . . . .
Lab9: Grafik ve Animasyon . . . . . . . . . . .
Lab10: Bus Communication . . . . . . . . . . .
Lab11: Çoklu İşlemciler Ve Çekişme yönü . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
13
15
19
23
33
39
47
53
63
71
ii
Laboratuvar Çalışması 1
Altera’nin Nios II Islemci Kullanimi
Bu egzersiz altera Nios II işlemcisini ve assembly dilinin tanıtımını içermektedir. Nios II islemcisini içeren DEseries Basic Computer denilen , basit bir bilgisayar sistemini kullanir . Bu sistem Altera DE-serileri kartina FPGA
yongasinin içine yuklenmiş bir devredir . Bu egzersiz Nios II assembly dilinde yazilmiş programların DE-serisi
uzerinde nasıl çalıştığını göstermektedir Bu uygulamalardaki programları derlemek , yüklemek ve çalıştırmak için
Altera Monitor programı kullanılacaktır.
Bu çalışmaları yapabilmek için Nios II işlemci mimarisi ve assembly dilini bilmeniz gerekir ;Gerekli bilgileri
öğrenmek için Altera Nios II işlemcisinin tutorial tanıtıcı kısmını okuyun.Ayrıca monitör programına aşina olmalısınız ; Altera Monitor Programı öğretici kısmını okuyun. Her ikiside Altera Üniversitesi Programı web sitesinde
mevcuttur. Monitor tutorial Altera Monitör ıda içermektedir. Program paketi – Help > Tutorial monitor penceresinden ulaşabilirsiniz.
Part I
Bu bölümde FPGA yongasının içine DE-serisi Temel Bilgisayar devresi yüklemek ve örnek bir programı çalıştırmak için Altera Monitor programı kullanılacaktır. Aşağıdakileri gerçekleştirin:
1. Altera DE-serisi kurulum gücünü açın
2. Şekilde gösterildiği gibi Altera Monitor Programını açın
Şekil 1: Altera izleme Programı penceresi.
1
Run bir uygulama programi ve yeni bir proje olusturmak icin gereklidir. File > New Project yolunu seçerek
Sekil 2 içindeki pencereyi açarız Projeye bir ad verin ve proje için dizin gösterin; Şekilde gosterildigi gibi
proje adini part1 sectik, dizinide lab1_part1 olarak belirledik .Sekil 3’teki pencereye geçmek için Next’e
tiklayın.
3. Şimdi,(eger varsa) kendi ozel sisteminizi seçebilirsiniz veya (Altera tarafından) onceden tasarlanmış bir sistem seçebilirsiniz. Basic computur’ı seçin. işlemleri uygulayarak dosyaların bulundugu pencereyi ekranda
gösterebiliriz. Bu sadece bilgi amaçlıdır;Eger Altera’nin Quartus II yazilimini kullanılarak tasarlanmış bir
sistemi kullanmak istiyorsanız, bu tur dosyalari saglaman gerekir. Next’e tiklayın.
4. Çalistirmak istediğiniz uygulama programlarını türünü şekil 4’te ki pencerede belirtebilirsiniz. Uygulamalarr Nios II assembly dili yada c dili ile yazilmiş olabilir . Eğer assembly dili kullanılacaksa assembly dilini
seçin. Altera Monitor Programi birçok örnek program paketini icererir. proje ile örnek bir programi ekleyin
kutusunu seçin. Ardindan, sekilde gosterildi gibi Test Basic computer programini secin ve Next’e tiklayin.
5. Şekil 5 deki pencere uygulama programının kaynak kodlarını içerir. Test Basic Computer programını seçtiğimizde , bu pencere program tarafından kullanılan dosyaları gösterir.
6. Şekil 6 ’daki pencere bazı sistem parametrelerini gösterir . USB-Blaster DE-serisi kartı ve ana bilgisayar
arasında bağlantı sağlaması için seçilir. Next’e tıkla.
Şekil 2: Dizinin ve projenin adını belirtin.
2
Şekil 3: Sistemin spesifikasyonu.
Şekil 4: Bir uygulama programının seçimi.
3
Şekil 5: Uygulama programı tarafından kullanılan kaynak dosyaları.
Şekil 6: Parametreleri belirleme sistemi.
4
Şekil 7: Program bellek ayarlarını belirtme.
7. Şekil 7’deki pencere DE-series Basic Computerın seçilmiş bileşenleri gösterilmektedir.Bellek cihazı kullanırken SDRAM seçili olduğunu emin olun. Ofset başlangıç adresi (hex 400) ise bu 400 bellek konumundaki
uygulama programı yüklenecektir anlamına gelir . Bu seçim örnek programın tasarımcısı tarafından yapılmış olduğundan, Şekil 7 de ki seçimi değiştiremezsiniz. Yeni projenin özelliklerini tamaladıkdan sonra
Finish’e tıkla.
8. Eğer DE-serisi kartı üzerine bu proje ile ilgili sistemi yüklemek istiyorsanız yeni bir projeyi belirtikten sonrabir pop-up kutu sorgusu görünecektir. DE-serisinin açık olduğundan emin olun ve ’Yes’e tıklayın. Bir
pop-up kutusu devresi başarıyla indirildi bildirisi görünce tamama tıklayın. Eğer devre başarılı bir şekilde
yüklenmezse, ana bilgisayar tarafından kurulan ve tanınan USB bağlantısının USB-Blasterile iletişim kurduğudan emin olun.( Eğer olasıbir bir sorun çıkarsa USB kablosunu çıkarın ve sonra geri takın bu bir çözüm
olabilir.).
9. DE-serisi kartında ki FPGA yongası içine DE-serisi Basic Computer yüklüyse, istediğimiz programı bu
bilgisayara yükleyip ve çalıştırabiliriz. Ana monitör penceresinden FPGA yongasının içine seçilen bir örnek
program yüklemek için Şekil 8’de gösterildiği gibi Actions > Compile & Load seçmeliyiz. Örnek program
yüklendikten sonra Şekil 9 daki gibi monitör penceresini gösterir.
10. Actions > Continue Seçerek yada araç çubuğundaki simgesine tıklayarak programı çalıştırın. LED’ler
ve 7-segment ekran çıktılarını gözlemleyin. Bu program DE-serisi kuruluysa düzgün bir çıktı sağlar.
11.
Ikonuna tıklayarak örnek programın yürütülmesini durdururuz ve
landırabiliriz .
5
ikonuna tıklayarak bu oturumu son-
Şekil 8: Monitör penceresinde bir eylem belirtin.
Şekil 9: Yüklenen programı gösteren örnek monitör penceresi.
6
Part II
Şimdi, Nios II assembly dilinde yazılmış basit bir uygulama programını kullanarak Altera İzleme Programının
bazı özelliklerini inceleyeceğiz. Şekil 10 daki programı ele alalım ,bu program belleğinde saklanan 32-bit tamsayı
listesinden en büyük sayıyı bulur. Bu program lab1 _part2.s dosyasında mevcuttur.
/*Tamsayılar listesinde büyük sayıyı bulan Programı */
.equ LIST, 0x500
/* */
.global _start
_start:
movia r4, LIST
ldw
r5, 4(r4)
addi
r6, r4, 8
ldw
r7, (r6)
LOOP:
subi
r5, r5, 1
beq
r5, r0, DONE
addi
r6, r6, 4
ldw
r8, (r6)
bge
r7, r8, LOOP
add
r7, r8, r0
br
LOOP
DONE:
stw
r7, (r4)
STOP:
br
STOP
.org 0x500
RESULT:
.skip 4
N:
.word 7
NUMBERS:
.word 4, 5, 3, 6, 1, 8, 2
.end
*R4 listenin başlangıç noktası */
* r5 n ile başlatılan bir sayac */
/* r6 İlk sayı için değer */
/* r7 Şimdiye kadar bulunan en büyük sayıyıı tutar */
/*Sayaç azalt*/
/*R5 0 eşitse bitir */
/*Liste göstericisini artır */
/* Sonraki sayıyı alr */
/*sayıları kontrol et */
/*Bulunan en büyük sayı güncelle */
/*Sonuç olarak en büyük sayı tutar */
/*Bulunursa burada kalır */
/*En büyük sayı için yer bulundu*/
/*Listesini giriş sayısı */
/* Listedeki Numaralar */
Figure 10:Büyük sayıyı bulan Assembly-dili programı.
Bazı örnek verilerin bu programa dahil olduğunu unutmayın. Liste assembler direktif.org tarafından belirlenen
hex 500 adresinden başlar. İlk sözcük (4 bayt) bulunan en büyük numaranın sonucunu depolamak için ayrılmıştır.
Sonraki kelime listedeki girişlerin sayısını belirtir. Listedeki gerçek sayıyıları verir.
Figure 10’daki programı ve her bir komutun anlamını anladığınızdan emin olun. Programdaki yorumların kullanımına dikkat edin. Yazacağınız programların anlaşılabilmesi için yorum satırları ekleyin.
7
Aşağıdakiler uygulanacak:
1. Yeni dizin oluşturun; biz lab1_part2 isimli dizini seçmişiz . Bu dizine lab1_part2.s dosyalarını kopyalayın.
2. Bu dizinde yeni proje oluşturmak için Altera Monitor Program’ı kullanın; biz proje adını part2 seçmişiz.
Figure 4’deki pencereye ulaştığınızda Assembly Program seçin ama Figure 11’de görüldüğü gibi örnek
program seçmeyin. Next’e tıklayın
3. Figure 5’teki pencereye ulaştığınızda program belirtmek zorundasınız. Add’ye tıklayın ve çıkan kutuda istediğiniz dosya adını, lab1_part2.s ve konumunu belirleyebilirsiniz.Bu Figure 12’deki resme yönlendirmelidir. Figure 6’daki pencereyi elde etmek için Next’e tıklayın. Figure 7’deki pencereye geçmek için tekrar
Next’e tıklayın. Bellek aygıtı seçeneklerinin SDRAM olduğundan emin olun. Start offset in device’nin 0
olacağını unutmayın, çünkü Figure 10’daki program varsayılan yeri 0’dan farklı olan yerlere yükleneceğini
göstermez. Finish’e tıklayın. Click Finish.
4. Programınızı karta yükleyin ve derleyin.
Şekil 11: Assembly programlama dilinin seçilmesi
8
Şekil 12: Kaynak programın seçilmesi.
5. Monitor Program, şekil 13’te belirtildiği gibi, bellekte yüklü olan kodun yüksek dile çevrilme görüntüsünü
gösterecek. movia sözde talimatının orjinal programda iki 16-bit bölümde r4 yazmacının içine 32-bit LIST
adresi yüklü olan (çünkü acil işlenen değeri 16-bite kadar sınırlıdır) orhi ve addi gibi iki makine talimati ile
değiştirileceğini unutmayın. Orjinal kaynak program ile karşılaştırıldığında farkını görmek için yüksek dile
çevrilmiş kodu inceleyin. Her komutun anlamını öğrendiğinizden emin olun. Ayrıca programında 0 başlangıç adresi ile bellek konumlarının da yüklenmiş olduğunu gözlemleyin. Bu adresler sistem parametreleri
belirlendiğinde seçilen SDRAM belleğe karşılık gelir. DE2 Media Computer’in DE2 kartındaki SRAM çipi
ve on-chip memory (yani FPGA çipindeki bellek) olmak üzere iki belleği vardır. Tüm bilgiler için Media
Computer System for Altera DE2 Board dökümanına bakın. Bu dokümana Figure 3’teki Documentation
butonuna tıklanarak erişilebilir.
6. 5. Monitor Program, Figure 13’te belirtildiği gibi, bellekte yüklü olan kodun yüksek dile çevrilme görüntüsünü gösterecek. movia sözde talimatının orjinal programda iki 16-bit bölümde r4 yazmacının içine 32-bit
LIST adresi yüklü olan (çünkü acil işlenen değeri 16-bite kadar sınırlıdır) orhi ve addi gibi iki makine talimati ile değiştirileceğini unutmayın. Orjinal kaynak program ile karşılaştırıldığında farkını görmek için
yüksek dile çevrilmiş kodu inceleyin. Her komutun anlamını öğrendiğinizden emin olun. Ayrıca programında 0 başlangıç adresi ile bellek konumlarının da yüklenmiş olduğunu gözlemleyin. Bu adresler sistem
parametreleri belirlendiğinde seçilen SDRAM belleğe karşılık gelir. DE2 Media Computer’in DE2 kartındaki SRAM çipi ve on-chip memory (yani FPGA çipindeki bellek) olmak üzere iki belleği vardır. Tüm
bilgiler için Media Computer System for Altera DE2 Board dökümanına bakın. Bu dokümana Figure 3’teki
Documentation butonuna tıklanarak erişilebilir.
9
Şekil 13: The disassembled view of the program in Figure 10.
7. ikonuna tıklayarak programın başına dönebilirsiniz . ikonuna tıklayarak programı tek tek adımlayabilir
böylece komutların işlemcinin yazmaçlarındaki veri değişimini izleyebilirsiniz .
8. Program sayıcıyı 0’a ayarlayın .Bu eylemin
yın..
restart ikonuna tıklanmasıyla aynı etkiyi yaptığını unutma-
9. Bu kez 0x28 adresinde bir kesme noktası eklenir (bu adresin solundaki gri çubuğa tıklayarak), ki bu konumdaki dallanma komutları yürütüldüğünde program otomatik olarak duracak. Programı çalıştırılır ve r7
yazmaç içeriğinin her seferinde bu kesme noktasına ulaştığı gözlemlenir
10
10. Kesme noktasını silin (tıklayarak). Sonra Program Counter’i 0x8’e ayarlayın, r4 yazmacı içine yüklenen
LIST adresi ilk iki komutu Ayrıca r4 yazmacındaki değeri 0x504’e ayarlayın . ikonuna tıklayarak programı çalıştırın. Bu uygulamanın sonucu ne olacak?
Bölüm III
Altyordam biçiminde Figure 10’daki programı yeniden yazarak Part II’deki görevi uygulayın. Altyordam,LARGE,
listedeki en büyük sayıyı bulmak zorundadır. Çağrılan program girişlerinin sayısı ve r7 ve r8 yazmaçları üzerinden
altyordam parametreleri olarak listedeki birinci sayının adresi geçmesi gerekir. Altyordam r7 yazmacı üzerinden
çağrılan programa en büyük sayının değerinin geçmesi gerekir. Yeni dizin ve programınızı derlemek ve yüklemek
için yeni Monitor Program oluşturun. Monitor Program dizin başına sadece bir projeye sahip olabilir. Doğruluğunu
sınamak için programı çalıştırın.
Aşağıdaki gerçekleştirin:
1. Talimat sf blt R7, r8, LOOP ve makine kodu gösterimi türet. Yılında it Nios II İşlemci Referans El Kitabı
Altera web sitesinde, biz bf blt talimat Şekil 14’de gösterildiği biçimde bulabilirsiniz. r7 ve r8 sayıcılarını
yadaas A ve B, sırasıyla kullanabilirsiniz ve determine the branch offset needed to branch to the instruction
at location LOOP.
31
27 26
A
22 21
B
6 5
IMMED16
0
0x16
Şekil 14: Format for the blt instruction.
2. Orjinal programınızı tekrardan yükleyin (by selecting Actions > Load). Sonra programı çalıştırın ve sonunda durdurun.
3. Bellek konumu 0x24 içine türetilmiş bf blt talimat yerleştirmek için Altera İzleme Programı bellek doldurma işlevini kullanın. Biz Monitor Programı demontaj görünümünde güncellenen talimat görmezsiniz
dikkat etmelisiniz. 0x0 program sayacı ayarlayın ve programı çalıştırın. Sonuç nedir? Kayıt it R7 ve hafıza
konumu 0x500 değerleri nelerdir?
Bölüm IV
Bu bölümde, Fibonacci serisinin ilk n sayılar üreten Nios II assembly program yazmak için gerekli bilgiler verilecektir.Bu dizi, ilk iki sayı 0, 1, ve her bir sonraki numarası önceki iki numaraları eklenerek oluşturulan. Örneğin,
n = 8,dizisi için
0, 1, 1, 2, 3, 5, 8, 13
Programınız 0x1000 başlayarak ardışık hafıza sözcüğü yerlerde numaraları kaydetmek gerekir. N konuma 0xffc
bir test değeri yerleştirin.
11
Perform the following:
1. Yeni bir dizin oluşturun, lab1_part4.
2. İstediğiniz Fibonacci serisi hesaplar bir assembly dili programı yazın ve dizindeki dosyaya yerleştirin
lab1_part4.
3. Sonra, it part4, yeni bir proje oluşturmak için İzleme Programı kullanarak ve programınız DE-serisi Temel
Bilgisayar üzerinde çalıştırılması gerektiğini belirtin.
4. Programı çalıştırın.
5. Programınızın doğru olduğunu doğrulamak için 0x1000 başlayan bellek adreslerini inceleyin.
Hazırlık
Kişisel hazırlanmanız aşağıdakileri içermelidir:
1. Introduction to the Altera Nios II Soft Processor ve Altera Monitor Program Öğreticiler Oku.
2. Öğretim için makine kodu gösterimi sağla blt r7, r8, LOOP.
3. Bölüm IV için assembly dilinde program yaz.
12
Laboratuvar Çalışması 2
Altprogramlar Ve Yığınlar
Bu egzersizin amacı Nios II ortamında altprogramlar ve altprogram bağlantısı hakkında bilgi vermek.Bu parametre geçişini ve parametre yığınlarının kavramlarını içerir
(Bu egzersizi yapmak için gerekli bilgileri Altera web sitesinin Üniversitesi Programı bölümünde Altera Nios
II Soft Processor ’a giriş yaparak öğrenebilirsiniz. DE-series Basic Computer ile SDRAM belleğe yüklenen uygulama programları kullanılacaktır
Bölüm I
Azalan 32-bit işaretsiz sayıların listesini sıralama. Bu liste ilk 32 bit kayıt listesinin şeklini(parçaların sayısını)
veren ve kayıtların dayanaklarının sınıflandırılmış numaralarından oluşan bir dosya formu şeklinde tedarik edilmiştir. Nios II assembly dili kullanılarak, istenen işlevi aşağıdaki gibi elde edebilirsiniz:
1. Yüklü bir dosya içinde bulunan bir listeyi sıralayabilen bir program yazın LIST_FILE. Kullanılacak bellek
ihtiyacı karşılayacak kadar olmalı çünkü sonradan alan değiştiremeyiz. Bu nedenle, sıralama işlemi yapılan
yerde sıralanacak liste ve özgün liste aynı hafıza konumlarında bulunmalıdır.
2. Altera’nın DE-serisi kartına DE-serisi Basic Computer yüklü olduğundan Lab 1yapılabilir.
3. Altera Monitor Programını kullanarak programınızı karta yükleyin ve programınızı derleyin .
4. Örnek bir liste oluşturun ve belleğe yükleyin. (Program kodunuzun ve listenin bellekte çakışmadığından
emin olun.)
Not: Monitor Programı kullanılarak listeyi içeren dosya belleğe yüklenir,gerekli bilgileri Altera Monitor
Programı bölüm 11’de bulabilirsiniz.
5. Programı çalıştırın ve düzgün çalışıp çalışmadığını kontrol edin.
Bölüm II
Bu bölümde, sıralama işlevini gerçekleştirmek için bir program kullanılacaktır.Programı genelleştirmek için, alt
program tarafından kullanılan kayıt içeriğini girdikten sonra yığına kaydedilir ve programdan ayrılmadan önce restore edilmesi gerekir. Kayıt başlatılıyor tarafından oluşturulan yığın ,yığın işaretçisi olarak kullanılır yada r27ve
sp assembly dilinde kod olarak da ifade edilebilir . Bu belleğin yüksek adresten düşük adrese doğru büyütmek için
kullanılan yaygın bir işlevdir.Bir veri girildiğinde ya da yığından çıkarıldığında yığın gösterici kesinlikle ayarlanmalıdır. Yığın oluşturma yüksek adreslerdendüşük adreslere doğru gelişir,yığın noktasına yeni bir kayıt yığına
yerleştirlmeden önce 4 azaltılmalı ve bu kayıt yığından çıkarıldıktan sonra bu 4 artırılmalı. Bellekde 4 değeri kullanılabilir ve 4 byte-adreslenebilir ;çünkü 32-bit kelime içine organize edilmiştir, dolayısıyla bir kelimede 4 byte
vardır
13
Birinci bölümdeki program aşağıdaki adımlarla güncellenebilir :
1. Bellekte rastgele bir adrese yerleştirilmiş herhangi bir boyuttaki listeyi sıralayabilen SORT adında bir alt
program yazınız. Listenin yeri ve şeklinin kayıt defteri yoluyla aynı programdan geçen parametreler olduğu
varsayılmaktadır
• Parametre boyutu Nios II kayıt içeriği tarafından belirlenir r2.
• Listedeki ilk giriş adresi kayıt içeriğini tarafından belirlenir r3. ( Adres ve dosyasının başlangıçı aynı
olmamalıdır LIST_FILE. )
2. Yığın işaretçisni başlatan ana programı yazın, kayıt içine gerekli parametreleri yerleştirin ve daha sonra
SORT alt programını çağırın . Liste LIST_FILE da belleğe yüklenir. Altprogram, yığını kullanmak ,kayıtların içeriğini kaydetmek ve ana programa geri dönmeden önce bu kayıtları geri yüklemek için vardır.
3. Programınızı karta yükleyin ve çalıştırın.
4. Örnek bir liste oluşturun, belleğe yükleyin ve programınızı çalıştırın.
Bölüm III
Ana programdan parametrelere yığın ile değil, kayıtlar üzerinden geçirilir böylece Part II programı değiştirilir.
Programınızı karta yükleyin,derleyin ve çalıştırın.
Bölüm IV
Bir Nios II işlemci ra register (R31) dönüş adresini tutmak için bir altprogram çağrıldığında kullanır.Bir altprogram başka bir iç içe altprogramların çağrıları durumunda, yeni bir dönüş adresi ra kayıt içine yerleştirildiğinde
orijinal dönüş adresinin kaybolmamasını sağlamak için gereklidir.Bu yığın orijinal dönüş adresini saklar ve daha
sonra it ra ikinci programa dönüşünde kayıt içine yeniden yükleyebilir.
İç içe program kavramını göstermek için Fibonaci sayılarını hesaplamayı kullanacağız nth Fibonacci sayı
olarak hesaplanmıştır
F ib(n) = F ib(n − 1) + F ib(n − 2)
Fib(0) = 1 ve Fib(1) = 1 olduğunu unutmayın.
Fibonacci sayılarını özyineli olarak hesaplayan bir program yazın nth . Bu program istediğimiz FİBONACİ
sayısını bulana kadar kendi kendine özyineli olarak programı çağırması gerekir. Ana program yığının üzerine yerleştirerek nprogramabirparametreolarak geçmelidir.Her işlem sonucunubelli bir yere kaydederek işlem daha
kolay olabilir
Programı derleyin karta yükleyin ve çalıştırın.Farklı değerler kullanarak programın doğruluğunu kontrol edin
n.
Preparation
Laboratuvara gelmeden önce bütün uygulamarın assembly kodunu hazırlamanız gerekmektedir.
14
Laboratuvar çalışması 3
Mantık Talimatlarının Kullanımı
Bu çaılşmada mantık talimatlarının Nios II komut setinde ki kullanışını inceleyeceğiz. Mantık talimatları bit dizeleri manipülasyonu ve birkaç özel ilgi çekebilecek bit düzeyinde verilerle uğraşmak için yararlıdır. Giriş / çıkış işlevleri ile ilgili gerekli bilgiler laboratuvar çalışması 4 de örneklendirilmiştir.Altera Nios II Soft işlemcisine
girişle ilgili bu çalışmayı yapmak için gereklibilgileri , Altera web sitesinin Üniversitesi Programı bölümünde
bulabilirsiniz.
SDRAM de kullanılacak programları ve DE- serisi Basic Computerları kullanacağız
Bölüm I
Şekil 1 deki Nios II assembly dili ile yazılmış programı ele alalım . Verileri kelime kelime inceler ve arka arkaya
maxsimum uzunluktaki 1’lerin sayısını i belirler. Örneğin,bu kelime de 0x937a (1001001101111010) arka arkaya
4 adet 1 vardır.Şekilde ki 0x90abcedf kod için birbirini takip eden 1’lerin sayısını hesaplar.Bu kod lab3_part1.s
dosyasında mevcuttur. Sayıyı bit bit kontrol eder 1 gördükçe sayıcıyı artırır ama eğer sıfır gelirse sayıcının değerini
belleğe kaydeder ve sayıcıyı sıfırlar.Daha sonra tekrar 1 görürse sayıcıyı artırır ve en son da bellekteki değerleri
karşılaştırır en büyük değeri ekrana basar
.include “nios_macros.s"
.equ TEST_NUM, 0x90abcdef /*test edilecek sayı */
.global _start
_start:
movia r8, TEST_NUM
mov
r9, r8
/* Test edilecek sayıyı r8’e yükle */
/* Sayıyı r9’a kopyala */
STRING_COUNTER:
mov
r10, r0
/* Sıfırsa sayıcıyı temizle */
STRING_COUNTER_LOOP:
beq
r9, r0, END_STRING_COUNTER /*l r9 en fazla 1 içerene kadar döndür*/
srli
r11, r9, 0x01
/* Sayıyı kaydırarak 1 sayısını hesaplayın */
and
r9, r9, r11
/* Sonuç ile yer değiştirdi.
*/
addi
r10, r10, 0x01
/* Sayacı arttırır */
br
STRING_COUNTER_LOOP
END_STRING_COUNTER:
mov
r12, r10
/*sonucu r12’ye kayded */
END:
br
.end
END
/*Program tamamlandığında burada bekle */
Şekil 1.. Ardışık 1’leri sayan Assembly-dili programı.
Aşağıdakileri gerçekleştirin:
15
1. lab3 ve lab3_part1 adında iki dizin oluşturun.Dizin dosyalarını buraya koplayın.
2. Altera Monitor Programını kullanarak, lab3_part1 dizininde, part1 adında yeni bir proje oluşturun. DEseries Basic Computer olarak belirlenen ve Lab 1 de anlatılan assembly dili prosedürü kullanarak lab3_part1.s
içindeki programı kullanabiliriz.
3. Programı yükleyin ve derleyin.
4. Monitor Programı bellekte yüklü olan kodun görüntüsünü gösterir. Orijinal programda pseudoinstruction
movia makine talimatları, orhi ve ori çiftlerinden biri ile değiştirildiğini unutmayın . Bu movia psudoinstruction çifti orhi ve addin tarafından değiştirildi. Lab 1 Bölüm 2’de ki alıştırma farklıdır. ori komutu yerine
addin kullanmak daha mantıksal bir seçimdir.
5. Programı çalıştırın .Program çalışırken monitör pencerelerinde herhangi bir değişiklik (örneğin, kayıtları
veya hafıza konumları içeriği gibi) görmek mümkün olmayacaktır , çünkü monitör programı DE-serisi kartındaki işlemci sistemi ile iletişim kuramıyor.Eğer ,programı durdurursanız bileşenlerin mevcut durumunu
görüntüleyebilirsiniz . Programın bellekte 0x28 adresine yüklenen son daldaki açıklamada yürürlüğe konulması engellendiği gözlemlenmiştir ve bunlar yapılmıştır: Ayrıca kayıt it r12 içeriğini belirtildiği gibi test
sayımızda 4 tane ardışık 1 olduğunu unutmayın.
6.
Simgesine tıklayarak programın başına dön. Şimdi
verilerini nasıl değiştiğini izleyin.
simgeye tıklayın. Talimatların işlemcinin kayıt
7. Program sayacı 0x08 sayısını r8 kaydedicisine yükleyebilmesi için bu iki adımı atlayacak şekilde ayarlayın.Ayrıca kayıt değerini 0xabcdef90 olarak ayarlayın.Arka arkaya kaç tane 1s vardır ? Doğru olup olmadığını görmek için programı çalıştırın.
Bölüm II
Bu bölümde, talimatları nasıl şekillendiğini bir kez daha inceleyeceğiz.
Aşağıdakileri gerçekleştirin:
1. Aşağıdaki derleme dili komutlarının makine-kodunu nasıl temsil ettiğini anlamak için Altera web sitesinde
bulunan Nios II İşlemci Referans El Kitabı ’nı oku.
2. Eylemler > Yük seçerek programınızı yükleyin . Daha sonra son bir kez daha programınızı çalıştırın ve
işlemi sonlandırın.
3. 0x0 ve 0x4 adreslerini belleğe yerleştirmek için Altera Monitor Programı bellek-dolgu işlevini kullanın.
Monitör programının bellek görünüşünde bu değerlerin yüklenmiş olduğunu ; ama parçalara ayrılmış olarak
göreceğini unutmayınız.
4. Program sayacıyı 0x0 olarak ayarlayın.Bu ne zaman olacak? 0x0 ve 0x4 yerleştirildiği de etkilerini görmek
için programın dayanağını yürürlüğe koymaktır.
5. Bellek konumunu kullanarak kendisi yerine program başlangıç noktasını başka bir değerle değiştir. Bu talimatlara bir kesme noktası yerleştirin.Programını çalıştırın ve kesme ulaşıldığında kayıtların durumu gözlemleyin. Kullanılan veri de 1’lerin sayıysı sabit kalana kadar programı tekrar çalıştrın.Son durumu nedir?
6. Şimdi adım 1 ,5 tekrarlayın, ancak sf srl r8, r8, r13 talimatı yerine sf SRA r8, r8, r13 kullanın .Bu programı
yeniden yükleme , assembly dili açıklamalarının makine kodu simgesine and r13, r8, r12 ve srl r8, r8, r13
0x0 ve 0x4 belleklerine yüklenmesidir.Davranışlarında ki farklılık nedir? Gözlemlerinizi yazınız .
Bölüm III
16
Şekil 1’deki programın test verilerini ardışık 1’lerin sayısını belirlemek için Anding kaydırmalı versiyonu ile
akıllıca bir fikir kullanır .Aynı görevi gerçekleştiriren fakat bu algoritmayı kullanmayan başka bir program yazınız
. Programı çalıştırın ve test edin.
Bölüm IV
1 ve 0 ’lardan oluşan her hangi bir alternatif uzun dize ilginizi çekebilir. Örneğin 101101010001bu ikili sayımızda 6 adet 1 ve 0 mevcuttur, burada vurgulananmak istenen : 101101010001 budur. Varsayalım iki uç bitten
uzun dize bir parçası olabilir.Örneğin, 1010 1s ve 0s alternatif arka arkaya 4 bit vardır
32 bitlik bir kelimede aşaığıdaki işlemleri yapan programı yazın:
• En uzun 1 sayısını r12 kaydedicisine yazan
• En uzun 0 sayısını r14 kaydedicisine yazan
• En uzun alternatif 1 ve 0 sayısını r16 kaydedicisine yazan İpucu: Bir n-bit sayı 0 ve 1 alternatif n-bit dize
ile XOR’lanırsa ne olur?
Programınızı çalıştırın ve test edin
Bölüm V
Bu bölümde sizden her basamağı dört bit olan ASCII-kodlanmış karakterler olarak depolanan 8 haneli bir ikili
kodlu onlu (BCD) formatına dönüştürmeniz isteniyor. Ondalık ASCII koduiçin 0x3ın üst dört baytını sayıyı temsil etmek için kullanırsak alt dört byt say değerini temsil eder.8 haneli ASCII-kodlanmış numarası en az anlamlı
rakama en anlamlı gelen veri ( 8 bayt olduğunu varsayalım klavye giriş cihazından as adreslerde onlar) saklanır.
Elde edilen 32-bit paketlenmiş BCD sayının adres muhafaza edilmelidir
Istenilen dönüşümü gerçekleştiren bir program yazın.Programı çalıştırın ve bazı örnek veriler ile test edin
Hazırlanma
Aşağıda ki gibi hazırlanın:
1. Bölüm II deki üç talimat için makine kodu gösterimi belirleyin
2. Bölüm için gerekli assembly dili programı yazın
17
18
Laboratuvar Çalışması 4
Giriş / Çıkış Organizasyonu
Bu çalışmanın amacı, bir işlemci için giriş ve çıkış yetenekleri sağlayan cihazların kullanımını araştırmaktır.
Giriş-çıkış programlarını ,kesme odaklı yakşalımı inceleyeceğiz. DE-serisi Temel Bilgisayar sisteminden bu uygulamayla bir Altera DE-serisi kartı üzerine paralel portta arabirimler kullanılacak hale gelecek. Bu çalışmayı
yapmak için gerekli bilgileri: Introduction to the Altera Nios II Soft Processor ve Basic Computer System for Altera DE-series Board dan elde edebilirsiniz.
DE-serisi Temel Bilgisayar paralel port arabirimi ( Lab 5 kullanacağız) Altera’nın SOPC Builderı kullanılarak
üretildi.Bir paralel bağlantı noktası giriş veya çıkış yönünde veri transferi sağlar.SOPC Builder paralel portın bir
PIO (Paralel Giriş / Çıkış) bileşeni şeklinde uygulanır. Transfer paralel olarak yapılır ve 1 ila 32 bit içerebilir.Bit
sayısı, n, ve transfer türü SOPC Builder bir Nios II tabanlı sistem aracılığıyla kullanıcı tarafından belirlenir. PIO
arayüzü Şekil 1’de gösterildiği gibi, dört kayıt içerebilir.
Address offset
(in bytes)
0
(n-1)
0
Input/Output data
(a) Data register
4
Direction control for each input/output line
(b) Direction register
8
Interrupt enable/disable control for each input line
(c) Interrupt-mask register
12
Edge detection for each input line
(d) Edge-capture register
Figure 1. PIO arayüzü Yazmaçları.
Her kayıt n bit uzunluğundadır. Kayıtların aşağıdaki bir amacı vardır
• Veri kaydedici PIO arayüzü ve Nios II işlemci arasındaki n bit veri transferini tutar. Bu bir SOPC Builder
tarafından giriş, çıkış ya da çift yönlü bir kayıt olarak uygulanabilir.
• Yön yazmacı çift yönlü bir arayüz oluşturulur, n bitlik her veri için transfer doğrultusunda tanımlanır.
• Kesme-maskesi yazmacıPIO’a bağlı giriş hatlarından kesmeleri sağlamak için kullanılır
19
• kenar-yakalama sayıcısı PIO hatları üzerinde mantık değeri değişikliğine bağlı giriş sinyalleri tespit edildiğinde onu gösterir..
Bu kayıtların hepsi belirli bir PIO arabirimi içinde oluşturulamabilir.Örneğin; yön sayıcı sadece çift yönlü bir ara
birim belirtilirse dahil edilir. Kesme-maskesi ve Kenar-yakalama yazmaçları sadece kesme güdümlü giriş / çıkış
kullanıldığında dahil edilir.
Eğer onlar bellek konumları olsalardı PIO yazmacı ile erişilebilirlerdi. Anlamlı en az dört bit olan herhangi
bir taban adresi (zamanında SOPC Builder tarafından uygulanan) bir PIO olarak atanabilir. Bu Veri register adresi
olur. Diğer üç yazmacın adresi 4 , 8 veya 12 bayt (1, 2, 3 ya da sözcükleri) uzaklığa sahiptir.
DE-serisi . Basic Computer çeşitli kullanımlar için yapılandırılmış olan birkaç PIO’lar içerir. Bu PIO’lar hakkında ayrıntılı bilgi Basic Computer System for Altera DE-series Board’da anlatılmıştır.
Bu uygulamada, uygulama amacı, Altera’nın DE2 kartı geçiş anahtarları ile imzalanan 8 bitlik sayı dizisinin
araya eklenmesini içerir. .Çıkan toplamı LED’ler ve 7-segment görüntülerle gösterilir
Bölüm I
SW7−0 , gibi numaraları girmek için 8 geçiş anahtarları kullanılır . Birikmiş toplamını görüntülemek için , LEDG
yeşil ışıklar kullanın. Tüm bu bileşenler DE serisi Basic Computer paralel portları üzerinden bağlanır.
Nios II assembly dili kullanılarak istenen görevi aşağıdaki gibi gerçekleyin:
1. Anahtarları içeriğini okuyan, birikmiş olan bir miktar sayıyı toplayan, yeşil LEDlerin toplamını gösteren
Nios II assembly dilinde bir programyazın.
2. Yeni bir dizin oluşturun . Bu dizine programınızı koyun.
3. part1 Bu dizine yeni bir proje oluşturmak için Altera Monitor Program kullanın.Programınızı seçin ve DEserisi kartı FPGA cihazın içine DE-series Basic Computer indirin.Programınızın kullanacağı bellek olarak
SDRAM seçin. Programınızı toparlayın ve karta yükleyin
4. Birkaç numara girerek programın doğru çalışıp çalışmadığını denetleyin .Program sayesinde tek-adımla
aynı numarayı birden çok kez okumadan giriş numaralarını değiştirebildiğimizi unutmayın.
Bölüm II
Bu bölümde, sürekli uygulama programı çalıştırın ve yeni bir numara okunmaya hazır olduğunda kullanıcı tarafından aktif bir basma düğmesi ile sayıların okunması kontrol etme yeteneğini eklemelisiniz. Kullanıcı istediği
işleme göre, geçiş anahtarları ayarlayarak ve daha sonra bir buton düğmesine basarak bir sonraki sayı sağlamasıdır.Okumaya hazır olduğunu belirtmek için KEY 1 değerini almalıdır.
Bu görevi yerine getirmek için bu sayı girişinde kullanılan devre durumunu izleyen bir mekanizma uygulamak
gerekir. Yaygın olarak kullanılan I / O düzeni başlangıçta 0 durum bayrağı kullanmaktır. I / O aygıt arabirimi
sonraki veri transferi için hazır olduğunda bayrak daha sonra kısa sürede 1 olarak ayarlanır.Veri aktarımı bitmesi
üzerine, bayrak yeniden temizlenir.Böylece, işlemci bir I / O veri transferi yapılabilirken belileyicietken durum
bayrağı olur.
20
I/O ara yüzü DE-series Basic Computerın içinde ki bir paralel porttur.Bir durum bayrağı sağlamak için,hangi
bit konumunu b1 KEY 1 . kullanıcaksak . O tuşla Paralel Porta bağlanılacaktır..
Aşağıdaki adımları uygulayın:
1. Bu parça için yeni bir dizinde yeni bir proje oluşturun.
2. Ayarlanan butona basıldığında yeni bir numara kabul edecek şekilde bölüm I deki programı güncelleyiniz.Bu eylemde ’1’ kenar yakalama “ durum bayrağı” biti olacaktır. Toplama sayı ekledikten sonra, program
kenar yakalama kayıt içine ’ 0’ yazarak bayrağı temizlemek zorundadır.
3. Programınızı belleğe yükleyin çalıştırın ve doğru çalışıp çalışmadığını kontrol edin.Programı sürekli çalıştırmak gerekir ve basma düğmesine KEY 1 her basıldığında bir rakam eklenmelidir.
Bölüm III
Daha önceki bölümlerde birikmiş toplamı yeşil LED’leri görüntüleyin.Şimdi, 7-segment görüntüleri HEX3-HEX0
bir onaltılık sayı olarak bu toplamını görüntüleyecek şekilde güncelleyin. 7-segment görüntülerin ayrıca DE-serisi
Basic Computerda bir paralel porta bağlı olduğunu unutmayın
Bölüm IV
Kesme yerine seçme işlevi programını tasarlayın.Bir kesme isteği buton KEY 1 basıldığında yükseltilmesi gerekmektedir.Kesme hizmet yordamı birikmiş toplamını hesaplamak ve göstermek zorundadır. Ana program sonsuz
bir döngü içinde kesmeleri için gerekli tüm kayıtları kurmak ve sonra beklemek zorundadır.
Hazırlık
Laboratuvara gelmeden önce bu bölümle ilgili tüm çalışma sorularının hazırlanmış olması gerekmektedir.
21
22
Laboratuvar Çalışmas 5
Bilgisayar Sistemi Uygulamaları
Bu çalışmanın amacı, bir bilgisayar sistemi oluşturmayı öğrenmek ve bunu FPGA cihazına uygulamak .Sistem
bir Altera Nios II işlemci anahtarlarına bağlı giriş / çıkış arayüzü ve Altera DE-serisi kartı arabirimlerinden oluşmaktadır. Bu sistemin donanım kısmını oluşturmak için Quartus II ve SOPC Builder yazılımı kullanacaktır. Uygulama programlarını yüklemek, çalıştırmak ve derlemek için Altera Monitor Program’ı yazılımını kullanacağız. Bu
çalışmayı yapmak için gerekli bilgileri aşağıda ki adreslerden öğrenebilirsiniz: Introduction to the Altera Nios II
Soft Processor ve Altera web sitesinin Üniversitesi Programı bölümünde bulunan Introduction to the Altera SOPC
Builder
Bu çalışmada,DE-serisi Temel Bilgisayarda daha basit bir sistem oluşturacağız, ancak paralel I / O benzer
yetenekleri vardır. İstenen sistem Lab 4 gördüğümüz paralel giriş / çıkış arabirimleri (PIO) kullanımı uygulama
görevleriyle desteklenmelidir.PIO arayüzü SOPC Builder kullanılarak oluşturulan bir bileşen olduğunu Lab 4 ten
hatırlıyoruz. Bu giriş veya çıkış (veya her iki) yönde veri transferi sağlar . Veri transferi paralel olarak yapılır ve 1
yada 32 bit içerebilir. Bit sayısı, n, ve veri transfer yönü Altera’nın SOPC Builder aracılığıyla kullanıcı tarafından
belirlenir. PIO arayüz Şekil 1’de gösterildiği gibi, dört kayıt içerebilir.
Address offset
(in bytes)
0
(n-1)
0
Input/Output data
(a) Data register
4
Direction control for each input/output line
(b) Direction register
8
Interrupt enable/disable control for each input line
(c) Interrupt-mask register
12
Edge detection for each input line
(d) Edge-capture register
Şekil 1.. PIO arayüzü Yazmaçları.
Her kayıt n bit uzunluğundadır. Kayıtların aşağıdaki gibi işlevleri vardır:
• Veri yazmacı PIO arayüzü ve Nios II işlemci arasındaki n bitlik veri transferini tutar.Bu SOPC Builder
tarafından giriş, çıkış ya da çift yönlü bir kayıt olarak uygulanabilir.
• Yön yazmacı bir çift yönlü arayüz oluşturulur n bitlik her bir veri için transfer doğrultusunda tanımlar.
23
• Kesme-maskesi Yazmacı PIO bağlı giriş hatlarında kesmeleri sağlamak için kullanılır..
• Kenar-yakalam yazmacı PIO bağlı giriş hatları üzerinde mantık değeri değişikliği sinyalleri tespit edildiğinde gösterir..
Bu kayıtların hepsi belirli bir PIO arabirimi oluşturmayabilir.Örneğin, çift yönlü bir arabirim belirtilirse sadece
Yön sayıcı dahiledilir. Kesme-güdümlü giriş / çıkış kullanılırsa Kesme-maskesi ve Kenar-yakalama kayıtları dahiledilir.
Eğer bellek konumları olurlarsa PIO sayacı onlara erişilebilir. Anlamlı en az dört bit olan herhangi bir taban
adresi (zamanında SOPC Builder tarafından uygulanan) bir PIO olarak atanabilir. Bu Veri register adresi olur.Diğer
üç yazmacın adresleri bu temel adresten 4 , 8 veya 12 bayt (1, 2 veya 3 kelime) uzaktır.
Lab 4’te olduğu gibi, bu uygulamanın amacı, Altera’nın DE2 kartı geçiş anahtarları ile imzalanan 8 bitlik sayı
dizisinin araya eklenmesini içerir. Çıkan toplamı LED’ler ve 7-segment görüntülerle gösterilir
Bölüm I
Bu bölümde biz DE-serisi kartına SOPC Builder kullanarak , FPGA uygulanabilir bir Nios II tabanlı sistem tasarımı yapacağız. DE-serisi kurulu giriş ve çıkış cihazları üzerinde anahtarlar ve LED’leri kullanacağız SW7−0
gibi numaralarını girmek için 8 geçiş anahtarları kullanacağız. Toplamın hepsini görüntülemek için yeşil , LEDG
kullanın. HEX3-HEX0 toplamını onaltılı sayı olarak görüntülemek için 7-segment görüntüler kullanın. Bizim çalışmamız için gereken donanım dört PIO arabirim içeren Nios II sistemidir. Geçiş anahtarları bağlı bir PIO devresi,
işlemci tarafından okunabilir veri girişi sağlayacaktır. Yeşil LED’ler ve HEX ekranlara bağlanmış PIO devreleri,
birikmiş toplamını görüntülemek için çıkış arabirimleri olarak görev yapacak.
Gerekli donanımı ağağıdaki gibi gerçekleştirin
1. Bir Quartus II projesi oluşturun. DE-serisi kartı için FPGA Aygıtı seçin. Tablo 1 DE-serisi anakart cihazlarının bir listesi için ’e bakını
Kart
DE0
DE1
DE2
DE2-70
DE2-115
Cihaz Adı
Cyclone III EP3C16F484C6
Cyclone II EP2C20F484C7
Cyclone II EP2C35F672C6
Cyclone II EP2C70F896C6
Cyclone IVE EP4CE115F29C7
Tablo 1: DE-serisi FPGA aygıt isimleri
2. Nios sistem devresi üretmek için SOPC Builder kullanın:
• On-chip hafıza - RAM modu ve boyut olarak 32 Kbyte ( ayarında varsayılan diğer tüm seçenekler
bırakın)
• JTAG Debug Modül Seviye 1 ile Nios II / s işlemci
– Donanım Çarp ve Donanım Divide seçenekleri seçmeyin
– Reset ve İstisna vektörler için konum olarak on-chip hafıza seçin, Şekil 2’de gösterilen
– İşlemci için varsayılan ayarlarındaki seçenekleri bırakın
24
2. Nios II işlemci SOPC Builder özellikleri
• 8-bit PIO giriş devresi geçiş anahtarlarına bağlı olacak PIO bileşenleri Çevre Birimleri > Mikrodenetleyici Çevre Birimleri > PIO seçerek bulunur.
• 8-bit PIO çıkış devresi Yeşil LED bağlı olacak
• 32-bit PIO çıkış devresi HEX görüntüler bağlı olacak
• Hizmet verecek bir tek-bit PIO devre it KEY 1 olarak durum bayrağına bir buton anahtarı ile bağlı
olacak , . Giriş noktasnı bir bit genişliğinde olarak yapılandırın Ayrıca, Giriş Seçenekler sekmesinde
aşağıdakileri seçin:
– Kenar yakalama için Düşüyor kenarı yazmacı tarafından Eş zamanlı yakalama özelliğini aktive etmek.
– Kenar üzerinde Generate IRQ kesme etkinleştirin
ŞEkil 3 te gösterildiği üzere
25
Şekil 3. Durumu-bayrağı PIO için özellikler.
3. SOPC Builder PIO tür bileşenlerine otomatik olarak pio, pio1, pio2 bu gibi isimler atar. Belirli bir tasarım
bağlamında daha da anlamlı olan bir şey için bu isimler değiştirilmelidir. Örneğin,biz isimleri new_number,
green_LEDs, hex_displays ve status_flag gibi seçebiliriz.
4. status_flag PIO bir kesme isteği artırabilir belirttisi olması için , bu kesme için seviye IRQ belirlemek gereklidir.Şekil 4 ’de gösterildiği gibi, bu ana SOPC penceresinde yapılır. En sağdaki sütündaki IRQ etiketinin
sevitesini 1 olarak atayın.Tabi ki, seviye 1 seçimi keyfidir. Bu secim b1 kontrol yazmacının konumu etkiler
ctl3 (enable) ve ctl4 (pending) status_flag PIO ile ilgili.
Şekil 4, sonuçta elde edilen sistemin özellikleri gösterir.
5. Kayıt için başvururken atanan adresleri gözlemek ve belirtilen sistemi oluşturmak için Generate düğmesine
tıklayın.
6. Oluşturulan bir Verilog veya VHDL dosyada dolaşan nios_system ve DE-serisi kartı anahtarlarinin ve
LED’lerin gerekli bağlantılarını tanımlayan bir örnek yaz. Dosyayı simple_computer.v/vhd dizininde aratacağız. Dosyadan Nios II sisteminin sıfırlamak için it KEY 0 düğme anahtarına basın. PIO durumu-bayrağı
girdi olarak buton it KEY 1 kullanın. Butonla etkinleştirmenin biraz zor olduğunu unutmayın
26
7. Kendi yönetim kurulu için SKIF pin-atama dosyasını alarak, gerekli bağlantıları yapması için gerekli pini
atayın.
8. Quartus II projesi derleyin.
Şekil 4. SOPC Builder tarafından uygulanan Nios II sistemi.
Assembly dil kodu için yazdığımız her Altera Monitor Program çalıştırıp kullanacağız. Her bölümü için, monitör
programında yeni bir proje oluşturmak gerekir.
Bölüm II
Bu bölümde durum bayrağı kullanılmayacaktır . Aşağıdakileri yapın.
1. Anahtarları içeriğini okuyan, birikmiş toplamı HEX ekranında göteren bir program tasarlayın
2. Altera Monitor Program yazılımını açın ve Şekil 5 de gösterildiği gibi, yeni bir proje oluşturun.
3. Şekil 6’da gösterildiği gibi Specific System seçerek tasarladığı donanım kullanmak istediğinizi belirtin. tasarlanmış Nios II sistemi temsil eden Nios system.ptf dosyasını bulun . Ayrıca, seçtiğiniz dosya simple
computer.sof DE-serisi kartının FPGA yonga içine tasarlanan sistemini indirmek için gerekli bilgileri sağlar.
4. Kullanılacak olan Assembly dil programı sırasıyla 7 ve 8’deki Şekillerde gösterildiği gibi verilmiştir .
5. USB-Blaster DE-serisi kurulu olduğundan ve Şekil 9’da belirtilen ana bilgisayarla arasında bağlantı sağladığından emin olun.
27
6. Program Şekil 10 ’de gösterildiği gibi, çip üzerinden belleğe yükleyin .Sisteme başka bir bellek dahil olmadığından, bu seçenek varsayılan olarak yapılacaktır.
7. Şekil 10 pencerede bir pop-up kutusu size DE-serisinin sisteminizde kurulu olmasını isteyip istemediğinizi
soara,eğer yüklemesini istiyorsanız Evet veSon’u tıklayın
Şekil 5 Monitör programında yeni bir proje oluşturun .
28
Şekil 6. Özel Nios II sistemini seçin eğer tasarladığınız proje buysa.
Şekil 7. Assembly dil programı kullanıldığını belirtin.
29
Şekil 8. Uygulama programını içeren dosyayı belirtin.
Şekil 9. Sistem parametrelerini belirtin.
30
Şekil 10. Program bellekte nerede yüklü olacağını belirtin.
31
8. Şimdi programı ve belleğe yüklemek için monitör penceresindeki Actions > Compile & Load. seçin
9. Programı aracılığıyla tek adımda ve birkaç numara girerek onun doğruluğunu kontrol edin.Program sayesinde tek-adımla aynı numarayı birden çok kez okumadan giriş numaralarını değiştirir
10. Şimdi, programı çalıştırın ve sonlandırın. Ne olduğunu gözlemleyin ve gözlenen davranış açıklayın.
11. Programı tekrardan çalıştırn ve reset butonuna basın KEY0 Bu durumda ne olur?
Bölüm III
Bu bölümde, geçiş anahtarları ile girilen sayıları okumak için yoklama yaklaşım kullanacağız. Kullanıcının istediği işleme göre geçiş anahtarları ayarlama ve düğmeye basarak bir sonraki sayısı sağlamasıdır .Sayısının okumak
için hazır olduğunu belirtmek içinKEY 1 olmalıdır. Bu görevi yerine getirmek içins veri girişini denetleyen bir
mekanizma olması gerekir . yoklama olarak bilinen yaygın kullanılan I / O düzeni, başlangıçta 0 temizlenir bir
durum bayrağı kullanmaktır. I / O aygıt arabirimi sonraki veri transferi için hazır olduğu gibi bu bayrak daha sonra
kısa sürede 1 olarak ayarlanır.Veri aktarımı üzerine, bayrak yeniden temizlenir 0. Böylece, işlemci bir I / O veri
aktarımı yapılmalıdığında durumu belirlemek için bayrak secimi yapabilir. Bizim durumumuzda, G / Ç aygıt elle
geçiş anahtarları ve presler buton anahtarı ayarları kullanıcı tarafından belirlenir. Bölüm I oluşturulan ,hangi kenar
yakalama kapasitesine sahip bir bit durumlu bayraklı PIO devresi arabirimi istediğiniz kontrolü sağlar ve Şekil
1’de kayıt haritasına uygundur.
Aşağıdaki gerçekleştirin:
1. Düğme it KEY 1 basıldığında yeni bir numara kabul edecek şekilde bölüm II programınızı güncelleyin.
Bu işlem edge-capture sicilinde durumu-bayrağı biti 1 olacaktır. Yeni numarayı okuduktan sonra, program
edge-capture kayıt içine bir 0 yazarak bayrağı temizlemek zorundadır.
2. programınızı belleğe yükleyin ve düzgün çalıştığını göstermek için deneyin programınızı belleğe yükleyin
ve düzgün çalıştığını göstermek için deneyin. Programı sürekli çalıştırmak gerekir ve yeni bir rakam it KEY
1 tuşuna basıldığında eklenmelidir.
Part IV
Bunun yerine geçiş anahtarları yeni numaraları okumak için yoklama yaklaşım kullanarak, şimdi aynı amaç için
kesmeleri kullanmak istiyorum. Bunu gerçekleştirmek için, biz düğme it KEY 1 basıldığında bir kesme yükseltmek için durum-bayrağı PİO yeteneğini kullanacak.
Kesme yaklaşımı kullanılarak istenen görevi gerçekleştirmek için assembly dil ile yazılmış programı değiştirin.
Final Note: Bu laboratuvar çalışmasının her yerinde tasarladığı sistem DE-serisi Temel Bilgisayar ile pek çok
benzerlikleri vardır, ama aynı değildir. Bu Lab 4 için yazdığı assembly dili programlarını sisteminize başarıyla
çalıştırmak için bazı değişiklikler gerekebilir anlamına gelir.
Hazırlıklar
Sizin hazırlık şunlar olmalıdır:
1. Bölüm I için sistem tasarımı
2. Bütün bölümler için assembly dil programlarının hazırlanması
32
Laboratuvar Çalışması 6
UART ve Zamanlayıcı Devreler kullanma
Bu çalışmanın amacı„bir UART devrenin G / Ç aygıtlarna nasıl veri gönderdiğini ,aldığını ve nasıl bir zamanlayıcı devre kullandığını öğrenmek .Altera DE-serisi kartına yüklenen DE-serisi Basic computer kullanılacaktır.
DE-serisi Basic computerr gerekli UART ve zamanlayıcı devreleri içerir.
Özgeçmiş
Bir işlemci ve bir G / Ç aygıt arasında veri aktarımı için basit ve yaygın olarak kullanılan şema Evrensel Eşzamansız Alıcı Verici (UART) olarak bilinir. Bir UART arayüzü (devre) işlemci ve G / Ç aygıt arasında yer alır.Bir
defasında 8-bit bir veri karakteri işler.Ayrı yollar kullanılarak bir karakterin tüm bitler aynı zamanda aktarılır.
UART ve işlemciarasında veri aktarımı paralel bir tarzda gerçekleştirilir, Ancak, UART ve G / Ç aygıt arasında
veri transferi seri şekilde yapılır, aynı anda bit bir transferedilir.
Altera’nın Quartus II yazılımı FPGA aygıtlarında Nios II sistemleri uygulamak için kullanılabilir SOPC Oluşturucu aracı içerir. Bu araç, DE-serisi Basic computer uygulamak için kullanılır.UART tipi bir arayüz, Nios II
işlemci ve DE-serisi kartına bağlı ana bilgisayar arasında bağlantı kurar buna JTAG UART denir. Şekil 1 JTAG
UART devresinin bir blok diyagramını göstermektedir. Bir tarafta JTAG UART Nios II işlemci, bellek yongaları
ve I / O arabirimleri birbirine Avalon anahtar yapısıyla bağlanır.Diğer tarafta da USB-Blaster arabirimi üzerinden
ana bilgisayara bağlanır. JTAG UART çekirdekli iki yazmaç içerir: Veri ve Kontrol, olarak işlemci tarafından erişilen hafıza konumları. Kontrol register adresi Veri kayıt atanan adres 4 byte daha yüksektir. Çekirdek aynı zamanda
iki depolama tampon görevi FIFOlar, ana bilgisayardan alınan verileri ve diğer aktarılacak verileri bir kuyruk için
içerir. Şekil 2 kayıtların biçimini sağlamaktadır.
JTAG UART Core
Registers
Avalon
switch
fabric
Write
FIFO
JTAG
interface
Data
IRQ
Control
Read
FIFO
Şekil 1 JTAG UART devresinin bir blok diyagramıdır
33
Host
computer
Address
31
...
0x10001000
RAVAIL
0x10001004
WSPACE
16
14 . . . 11 10
15
RVALID
9
8
Unused
Unused
7 ... 1
0
DATA
AC WI RI
WE RE
Data register
Control register
Şekil 2. JTAG UART içinde Yazmaçlar
Veri yazmacında ki alanları aşağıdaki gibi kullanılır
• B7−0 (DATA) bir alış veriş işlemi işlemci tarafından gerçekleştirildiğinde FIFO içine yerleştirilmek üzere
8-bitlik bir karakter yaz ya da bir yük işlemi gerçekleştirildiğinde bu FIFO dan okunan bir karakter Oku
• B15 (RVALID) DATA alan işlemci tarafından okunabilir bir karakter olup olmadığını gösterir. VERİ alanı
geçerli ise, bu bit 1 olarak ayarlanır, aksi takdirde 0 ile temizlenir
• B31−16 (RAVAIL) Oku FIFO (Bu salt sonra) kalan karakter sayısını gösterir.
Kontrol kayıt alanlarını aşağıdaki gibi kullanılır:
• B0 (RE) 1 olarak okuma kesmeler sağlar.
• b1 (WE) yazma kesmeler sağlar.
• B8 (RI) değeri 1 ise bir okuma kesmesinin beklemede olduğunu gösterir. Data sayacı biti 0 ise temizler.
• B9 (WI) değeri 1 ise bir yazma kesmesinin beklemede olduğunu gösterir.
• B10 (AC) 1 Yazma 0 temizleme olarak (böyle bir bağlantının var olduğunu doğrulamak için ana bilgisayar
yoklama JTAG UART gibi) JTAG faaliyeti gösterir.
• B31−16 (WSPACE) Yazılacak mevcut alanların FIFO sayısını gösterir.
JTAG UART hakkında daha fazla bilgi it Altera Gömülü Çevre Birimleri Elkitabı Bölüm 5 de bulunabilir.
Bu çalışmada DE-serisi kartına uygulanan bir Nios II işlemci ve ana bilgisayar arasında ASCII-kodlanmış
karakterlerin aktarımında JTAG UART kullanılacaktır. Ayrıca, sabit bir gecikme sağlamak için bir “ aralık sayacı
"devresinin kullanacaktır Kullanılacak bu donanımının bir blok diyagramı Şekil 3 ’de gösterilmiştir. Bu donanıma
DE-serisi Basic Computer dahildir.
34
Host computer
USB-Blaster
interface
Nios II processor
JTAG Debug
module
JTAG UART
interface
Cyclone II
FPGA chip
Avalon switch fabric
Interval
Timer
Memory
Şekil 3. İstenen Nios II sistemi Cyclone II FPGA
Bölüm I
Altera Monitor programına ascı karakterleri gönderebilirsiniz.Programda bir kontrol kısmı olması gerekir. Yazılacak alana olduğu sürece asci karakterlerini yazmamızı sağlayacak bir program olması gerekir. Kontrol bölümü
yazılacak boş alanı kontrol eder. Monitör Programı terminal penceresinde yaklaşık her yarım saniyede bir " Z "
harfi görüntülemek için bir Nios II assembly-dil programı yazın. Aşağıdaki gibi programı oluşturun ve yürütün:
1. Nios II assembly dili kullanarak, Kontrol JTAG UART kayıt okuyan ve mevcut bazı yazma alan kalmayıncaya kadar döngü içinde yazan .
2. Data yazmacına Z harfi yazın
3. Monitor Programını kullanarak, assembly dili ile yazılmış programı yükleyin ve derleyin.
4. Sadece tek adım özelliğini kullanarak bu programı çalıştırın. Eğer Devam modunu kullanarak bu programı
çalıştırırsanız,Monitor programı karakteri daha hızlı işleyebilir daha hızlı terminal penceresi gönderilecektir.
5. Assembly-dil kodu, her yarım saniyede yaklaşık bir karakter yazdırılır, böylece bir gecikme döngüsü oluşur.
6. Programı yeniden yükleyin ve derleyin.
35
Bölüm II
JTAG UART terminal penceresinden ASCII karakterleri alabilir, hem de bunları yazabilirsiniz.RVALID bit, b15 ,
Veri yazmacı içinde geçerli alınan bir ASCII karakteri VERİ alanında geçerli bir değer olup olmadığını gösterir.Daha fazla okunabilen halde bekleyen karakter varsa, RAVAIL alanı olmayan bir sıfır değere sahip olacaktır.
Bir “ daktilo gibi "görev uygulayan bir program yazın;, ana bilgisayardan JTAG UART tarafından alınan her karakter okunacak ve sonra İzleme Programı terminal penceresinde görüntülenecek. Yeni bir karakterin JTAG UART
tarafından kullanılabilir olup olmadığını belirlemek için yoklama yöntemini kullanın.
Bölüm III
Yoklama JTAG UART UART’ların durumunu belirlemek için kendi saklayıcılarındaki okuma yükü nedeniyle,
verimsizdir. Yeni bir karakter varsa belirlenmesi yükü anlamlı programın performansını etkiler.Bunun yerine ,
bunun gerçekleşmesi için bir I / O aktarım beklerken işlemci yararlı işler yapmak için kesme mekanizmasını,
kullanmalıdır.
Ana bilgisayardan JTAG UART tarafından aldığı karakterleri okuması için bir kesme hizmet yordamı oluşturun. DE-serisi Basic Computer istisna eylemcisi için atanan konumu hex 0x20 adresine , rutin kesme hizmet
yerleştirin.
Ayrıca, ienable olarak Nios II kontrol sayıcı ctl3, bireysel olarak kesmeleri sağlar. DE-serisi Basic computer
JTAG UART kesme seviyesi 8 olarak atanır. Bu kayıt kontrolü ctl3, bit ctl3 8 JTAG UART’lar kesmeleri etkinleştirmek için 1 olarak ayarlanması gerekir anlamına gelir. Buna ek olarak, kayıt kontrölü ctl0,aynı zamanda b ctl0 0
1 Olmalıdır Bu işlemci kesme-enable bit 1 olarak ayarlayarak harici kesmeler kabul edilmesini sağlar.
Aşağıdakileri gerçekleştirin:
1. JTAG UART bir karakter okumak için bir kesme hizmet yöntemi yazın Note that
• Kesme hizmet yordamı belleğin 0x20 adresine yerleştirilmelidir.
• Kesmelerini etkinleştirmek için, uygun değerler Kontrol JTAG UART yazılır ve Nios II kayıt kontrölü
ctl0 ve ctl3 gerekir.
2. Kesme hizmet yordamı olarak, İzleme Programı terminal penceresinde ana bilgisayardan alınan karakterleri
görüntülemek için seçme yaklaşımını kullanın
3. Programınızı belleğe yükleyin ve derleyin
Programınız ilk denemede hiç çalışmıyorsa, bunun hatalarını ayıklamak veı düzeltmek zorunda kalacaksınız.
Kesmeleri söz konusu olduğunda bir program adımlarını kesmeler otomatik olarak devre dışı bırakılır Ancak, bu
yaklaşım, kullanılamaz. Bu nedenle, bir hata giderme yardımcısı olarak kesme noktaları kullanılmalı
Kesmeler, rutin bir kesme hizmeti otomatik yürütülmeye başladığında devre dışı bırakılır ve bu rutinden çıkıldıktan dan sonra yeniden etkin olur. Bu, bazı uygulama İç içe kesme gerektiriyorsa, kesmelerin rutin kesme servisi
içinde yeniden etkin olması anlamına gelir.
Bölüm IV
Bu bölümde ana bilgisayara JTAG UART tarafından alınan karakterleri okumak için kesmeleri kullanacağız ve
son alınan karakteri tekrar tekrar her 500 milisaniye görüntüleyeceğiz.Bölüm I de yaklaşık bir zaman aralığı
üretmek için bir gecikme döngüsü kullanılmıştık. Şimdi, bu amaçla Aralık Zamanlayıcı devresini kullanacağız.
Altera Monitor programının terminal penceresine her 500 ms bir karakter yazılmalıdır.Aralık zamanlayıcı bunu
sağlar. Zaman aralıklı çekim belirtilen bir değere ayarlanır ve sonra her saat döngüsünde sayac azaltılır.Sayaç 0’a
36
ulaştığında, bir “ zaman aşımı "olayı meydana geldiği söyleniyor.Bu noktada Zaman aralıklı çekim kesme isteği
artırabilir ve sayaç belirtilen değeri sıfırlanır aman aralıklı çekim JTAG UART benzer bellek yeri olarak erişilebilinen 16 Bit kayıt kümesi vardır. Bu kayıt birimleri Şekil 4 ’de gösterilmiştir. Zaman aralıklı çekim atanan taban
adresi Durumu yazmaç adresi 0x10002000 . Kontrol kayıt adresi 0x10002004 yer almaktadır.Sayaç için baslangıc
değerleri 0x10002008 (değerin alt sıra 16 bit) ve 0x1000200 (yüksek-sipariş değeri 16 bit) olarak kayıt belirtilir.
Address
31 . . .
17
16
15
...
3
0x10002000
Unused
0x10002004
0x10002008
0x1000200C
Unused
Not present
(interval timer has
16-bit registers)
1
0
RUN
TO
2
STOP START CONT ITO
Status register
Control register
Counter start value (low)
Counter start value (high)
0x10002010
Counter snapshot (low)
0x10002014
Counter snapshot (high)
Şekil 4. Zaman aralıklı çekim içinde Yazmaçlar
It Durumu kayıt bitleri aşağıdaki gibi kullanılır:
• B0 (TO) zaman aşımı biti.Zaman aralıklı çekim iç sayacı 0 ulaştığında bunu 1 olarak ayarlar. Açıkça mevcut
bir kesme isteği için yapılması gereken ona bir 0 yazma işlemci tarafından temizlendi kararını vermek.
• Dahili sayacı çalışırken b1 (RUN) 1 eşittir, aksi halde 0 eşittir. Bu Durum biti bu kayıt için bir yazma işlemi
ile değişmez.
Kontrol kayıt bitleri aşağıdaki gibi kullanılır:
• b0 (İTO) 1 Zaman aralıklı çekim kesmeler sağlar.
• B1 (CONT) 0’a ulaştığında dahili sayacı nasıl davranacağını belirler. CONT = 1 ise, belirtilen başlangıc
değeri 0’a ulaştığınd a sayaç tarafından sürekli olarak çalışır; aksi halde durur.
• B2 (START) bir yazma işlemi ile 1 set çalıştırmaya başlamak için dahili sayacı neden olur.
• B3 (STOP) bir yazma işlemi ile 1 olarak ayarlanmış dahili sayacı durdurur.
Zaman aralıklı çekim hakkında daha fazla bilgi Altera Gömülü Çevre Birimleri Elkitabı bölüm 12 bulunabilir.
37
Aralık Zamanlayıcı ve JTAG UART karakter okumak için kesmeleri kontrol eder (Bölüm III), ve bit b8 ctl3
1 olarak ayarlanması için b0 etkinleştirmek gerekir Ayrıca, ipending sayıcı kontrölüı ctl4, hangi kesmenin oluştuğunu belirlemek için kullanılabilir.Bir kesme kayıt kontrölü ctl3 kullanarak devre dışı bırakılırsa ,bu kesme hizmet
yordamı çalıştırmaya neden olsada ,kayıt kontrölü ctl4 olarak 1 olarak tetiklense bile 1 kesme istek hattı olamaz.
Aşağıdaki adımları uygulayın:
1. , Bölüm III Ana program Zaman aralıklı programı değiştirirerk, kesmeler sağlanır ve sonra sonsuz bir döngü
içinde bekler.
2. Zaman aralıklı çekim ve JTAG UART’lar okumayı , kesmeleri işlemek için kesme servis rutini değiştirin.
3. Zaman aralıklı çekim ve Nios II kontrol kayıtlarını, JTAG UART kayıt it ctl0 ve it ctl3 Kesmelerini etkinleştirmek için, uygun değerler it Kontrol yazılmalıdır it Kontrol
4. Programınızı belleğe yükleyip ,derleyin ve çalıştırın
Hazırlık
Gerekli assembly dili programlarını yazınız
38
Laboratuvar Çalışması 7
UART ve Timer Devreleri Uygulamaları
Laboratuvar çalışması 6 da DE serisi Basic computer da uygulanan UART ve Timer devrelerin kullanımı araştırılmıştır.Bu çalışma kullanıcın Altera DE-serisine SOPC Builder tarafından oluşturulan bir sistemin uygulanabilir
hale getirmektir . Nios II modülü örneğini sağlamak için, Verilog veya VHDL donanım dillerinin tanımlanması
için yeterli bilgi gerektirir. SOPC Builder aşina olmayan bir kullanıcı Altera web sitesinin Üniversitesi Programı
bölümünde gerekli bilgileri bulabilir Altera SOPC Builder Giriş, okumalısınız. Çalışmanın amacı, UART devre
kullanarak G / Ç aygıtları için nasıl veri gönderip , alacağını ve zamanlayıcı devre kullanarak zaman olaylarını
öğretmektir.
Bir işlemci ve bir G / Ç aygıt arasında veri aktarımı için basit ve yaygın olarak kullanılan şema Evrensel Eşzamansız Alıcı Verici (UART) olarak bilinir. Bir UART arayüzü işlemci ve G / Ç aygıt arasında yer alır.Bir defasında
8-bit veri gönderilir.UART ve işlemci arasında veri aktarım paralel yapılır ayrı yollar kullanılarak tüm karakter
bitleri aynı zamanda aktarılır . Ancak, UART ve G / Ç aygıt arasında veri transferi seri şekilde yapılır aynı anda
bir bit transfer edilir.
Altera’nın Quartus II yazılımı SOPC Oluşturucu aracı içerir, FPGA aygıtlarında Nios II sistemleri uygulamak
için kullanılabilir .Kullanıcının istediği bir sistemi tasarlamak için dahil edilebilir . Nios II işlemci ve DE-serisi
kartına bağlı tek bileşenli UART tipi bir arayüz ana bilgisayar arasında bağlantı kurmayı sağlar buna JTAG UART
denir. Şekil 1 JTAG UART devresinin bir blok diyagramını göstermektedir. Bir tarafta JTAG UART Nios II işlemci,
bellek yongaları ve I / O arabirimleri birbirine Avalon anahtar yapısıyla bağlanır. Diğer tarafta da USB-Blaster
arabirimi üzerinden ana bilgisayara bağlanır. JTAG UART çekirdekli iki yazmaç içerir: bellek yerleri gibi işlemci
tarafından erişilen Veri ve Kontrol. Kontrol register adresi Veri kayıt atanan adres 4 byte daha yüksektir. Çekirdek
aynı zamanda iki depolama görevi FIFOlar vardır, ana bilgisayardan alınan verileri kuyruk için depolar ve diğer
aktarılacak verileri için depolar.Şekil 2 kayıtların biçimini sağlamaktadır.
JTAG UART Core
Registers
Avalon
switch
fabric
Write
FIFO
JTAG
interface
Data
IRQ
Control
Read
FIFO
Şekil 1. JTAG UART devrenin blok diyagramı
39
Host
computer
Address
31
...
Base address
RAVAIL
Base + 4
WSPACE
16
14 . . . 11 10 9
15
RVALID
8
7 ... 1
Unused
Unused
0
DATA
AC WI RI
WE RE
Data register
Control register
Şekil 2. JTAG UART içinde Yazmaçlar
Veri sayacı alanları aşağıdaki gibi kullanılır:
• B7−0 (DATA) bir alışveriş işlemi işlemci gerçekleştirildiğinde .Yaz FIFO içine yerleştirilmek üzere 8-bitlik
bir karakter ya da bir yük işlemi gerçekleştirildiğinde bu Oku FIFO okunan bir karakter .
• B15 (RVALID) DATA alan işlemci tarafından okunabilir bir karakter içermediğini gösterir.VERİ alanı geçerli ise, bu bit 1 olarak ayarlanır, aksi takdirde 0 ile temizlenir.
• B31−16 (RAVAIL) Oku FIFO (Bu salt sonra) kalan karakter sayısını gösterir.
Kontrol kayıt alanlarını aşağıdaki gibi kullanılır
• B0 (RE) 1 olarak okuma kesmelerini sağlar
• b1 (WE)1 olursa yazma kesmelerini sağlar.
• B8 (RI) değeri 1 ise bir okuma kesmesini beklemede olduğunu gösterir. 0 Veri kayıt Okuma biti temizler
• B9 (WI) değeri 1 ise bir yazma kesmesinin beklemede olduğunu gösterir.
• B10 (AC) biraz temizlenmesinden beri (böyle bir bağlantının var olduğunu doğrulamak için ana bilgisayar
yoklama JTAG UART gibi) JTAG faaliyeti olmuştur gösterir.AC 1 olarak Yazma 0 temizler.
• B31−16 (WSPACE) Write FIFO mevcut alanların sayısını gösterir.
TAG UART hakkında daha fazla bilgiyi Altera Gömülü Çevre Birimleri Elkitabı Bölüm 5 de bulunabilirsiniz.
Bu egzersiz de bir Nios II işlemci ve ana bilgisayar arasında ASCII-kodlanmış karakterler aktarmak için JTAG
UART kullanacağız. Ayrıca sabit gecikmeler sağlamak için bir “ aralık sayacı "devre kullanımı yapacaktır. istediğiniz bu kullanım donanım bir blok diyagramı Şekil 3 ’de gösterilmiştir. Bölüm I,II ve sonrada V, bu donanım
tasarımı yapılan, bazı programlamaların çalışmasını uygulamak için tasarlanmış bir sistem kullanacağız.
Bölüm I
Bir Nios II işlemci, JTAG UART, çip üzerinde bellek bloğu ve Zaman aralıklı çekim oluşur. Şekil 3sistem oluşturmak için SOPC Builder kullanın.
40
H ostcom puter
Reset_n
U SB-Blaster
interface
Clock
JTA G D ebug
m odule
N ios IIprocessor
JTA G U A RT
interface
Cyclone II
FPG A chip
Avalon sw itch fabric
Interval
Tim er
O n-chip
m em ory
Şekil 3. Bir Cyclone II FPGA yongası üzerinde istenilen Nios II sistemi
Sistem aşağıdaki gibi i uygulayın:
1. Yeni bir proje oluşturun . DE-serisi kartı için Cyclone serisi cihaz ailesi seçin Kullanılabilir aygıtlar listesinden, kurulu DE serisi için uygun aygıt adı seçin.DE-serisi anakartlarda cihazların isim listesi tabloda
mecuttur tablo: cihaz.
Kart
DE0
DE1
DE2
DE2-70
DE2-115
Aygıt Adı
Cyclone III EP3C16F484C6
Cyclone II EP2C20F484C7
Cyclone II EP2C35F672C6
Cyclone II EP2C70F896C6
Cyclone IVE EP4CE115F29C7
Tablo 2: DE-serisi FPGA aygıt isimleri
2. Nios II sisteminde aşağıdaki bileşenleri içeren bir sistem oluşturmak için SOPC Builder kullanın :
• On-chip bellek - RAM modu ve boyutu 8 Kbyte
• JTAG Debug Modül Seviye 1 ile Nios II işlemcisini secin
41
– Donanım Çarp ve Donanım Divide seçenekleri seçmeyin
– Reset ve İstisna vektörü Bütünleşik bellek seçin
• JTAG UART - bileşen bölümünde Arayüz Protokolleri > Seri bulunan; varsayılan ayarları kullanabilirsiniz
• Zaman aralıklı çekim - bulunan Çevre Birimleri > Mikrodenetleyici Çevre Birimleri
– Donanım Seçenekleri için - Presets Basit periyodik kesme seçin
– Zaman Aşımı Süresi 500 msec bir Sabit Dönem tercih edin
Şekil 4’te gösterilmektedir.
Şekil 4. Zaman aralıklı çekim için özellikler
3. Sistemi menüsünden zamanlayıcıya Auto-Assign IRQ seçin JTAG UART ve IRQ 1 IRQ 0 atar. Şimdi,
Şekil 5’te gösterilen sisteme sahip olmalıdır.
4. SOPC Builderdan çıkın ve Quartus II yazılımı dönün Sistemi oluşturun.
5. Oluşturulan Nios II sistemi KEY 0 başlatır ve saat için bağlantı kuran bir Verilog / VHDL modülü yazın.
6. Tabloya ?? bakarak pin bağlantıları atayın.
42
Bileşen
CLOCK50
KEY0
DE0
PIN_G21
PIN_H2
DE1
PIN_L1
PIN_R22
DE2
PIN_N2
PIN_G26
DE2-70
PIN_AD15
PIN_T29
DE2-115
PIN_Y2
PIN_M23
Tablo 3: Pin Assignments
• clk to CLOCK50
• reset_n to KEY0
7. Quartus II projesini derleyin.
Şekil 5 . Bir Cyclone II FPGA yongası üzerinde SOPC Builder tarafından uygulanan Nios II sistemi
Bölüm II
Altera İzleme Programına ASCII karakterleri gönderebilir JTAG UART kendi terminal penceresinde bu karakterleri görüntüler. Kontrol JTAG UART kayıt içinde WSPACE boş alan varsa, JTAG UART Altera İzleme Programına yazılacak yeni bir karakter kabul edilir.İzleme programın kayıt alanı dolana kadar yazmak için karakter
okur. JTAG UART Veri kayıt alanı olduğunda bir ASCII karakteri içine yazılabilir.Monitör Programı terminal
penceresinde yaklaşık her yarım saniyede bir "Z" harfi görüntülemek için bir Nios II assembly-dil programı yazın.
Aşağıdaki gibi program oluşturun ve çalıştırın:
1. tr Türkçe
Nios II assembly dili kullanarak, Kontrol JTAG UART mevcut bazı yazma alan kalmayıncaya kadar yazma
işlevi yapan bir döngü oluşturun .Daha sonra veri sayacına Z harf yazın
43
2. İzleme Programı kullanarak, bu bölüm için yeni bir proje oluşturun. Özel Sistem ve Sistem Detayları
altında Bölüm I. sistemi için . Sof dosyaların tasarlanmış olduğu . Ptf vermek için seçin DE-serisi Kurulu
FPGA halinde sisteme indirin.
3. Assembly diliyle yazılmış programınızı yükleyin ve derleyin
4. Sadece Tek adım özelliğini kullanarak bu programı çalıştırın.Eğer Devam modunu kullanarak bu programı
çalıştırırsanız,İzleme Programı karakteri daha hızlı işleyebilir ve dahahızlı terminal penceresine gönderilecektir.
5. Assemblyl-dili kodu, karakter sadece saniyenin yarısı kadar süred basılır, böylece bir gecikme döngü oluşur.
6. Tekrardan derleyin ve çalıştırın.
Bölüm III
Ayrıca JTAG UART terminal penceresinden ASCII karakterleri alabilirsiniz. RVALID bit, b15 , Veri kayıt içinde
VERİ alanına bir değerin ASCII karakterin geçerli olup olmadığını gösterir.Yinede okunmayı bekleyen daha fazla
karakter varsa, RAVAIL alanı olmayan bir sıfır değere sahip olacaktır
Bir daktilo gibi işlev gören bir program yazınız. Yeni bir karakterin JTAG UART da kullanılabilir olup olmadığını belirlemek için yoklama kullanın.
Bölüm IV
Durumunu belirlemek için JTAG UART Yoklama verimsiz olur . Yeni bir karakter varsa belirlenmesi yükü anlamlı programın performansını etkiler.Bunun yerine , bunun gerçekleşmesi için bir I / O aktarım beklerken işlemci
yararlı işler yapmak kesme mekanizmasını, kullanmalıdır.
Ana bilgisayardan JTAG UART tarafından aldığı karakterleri okuması için bir kesme hizmet yordamı oluşturun. DE-serisi Temel Bilgisayar istisna eylemcisi için atanan konumu hex adresine 0x20 , rutin kesme hizmet
yerleştirin. Ayrıca, ienable olarak Nios II kontrol sayıcı ctl3, bireysel olarak kesmeleri sağlar. Sisteminizde JTAG
UART kesme seviye 0 olarak atanmışsa , kayıt kontrolunden sonra ctl3, bit ctl3 0 JTAG UART’lar kesmeleri etkinleştirmek için 1 olarak ayarlanması gerekir. Set durumun da kontrol biti 0 durumıundan 1 durumuna geçmek
zorundadır. Harici kesmeler kabul etmesi için işlemcinin kesme-enable biti 1 olarak ayarlayarlanmalı.
Aşağıdaki gerçekleştirin:
1. JTAG UART bir karakter okumak için bir kesme hizmet yordamı yazmayı Unutmayın
• Kesme hizmet yordamı bellek adresi 0x20 yerleştirilmelidir.
• JTAG UART kesmelerini etkinleştirmek için, uygun değerler sayıcıya yazılır ve Nios II kontrol kaydı
ctl0 ve ctl3 gerekir.
2. Kesme hizmeti olarak, İzleme Programı terminal penceresinin ana bilgisayardan alınan karakterleri görüntülemesi için rutin yoklama yaklaşım kullanın.
3. Programınızı belleğe yükleyin ve çalıştırın
Programınız ilk denemede çalışmıyorsa hatalar ve eksiklikler vardır bunları ayıklamalısınız.Program kesmeleri söz konusu olduğunda bir kesmel otomatik olarak devre dışı bırakılır Ancak, bu yaklaşım kullanılamaz. Bu
nedenle, bir hata giderme yardımcısı olarak kesme noktaları kullanılmalı.
44
Kesmeler otomatik olarak devre dışı bırakılır ve rutinden çıkıldığında bir kesme hizmeti rutin yürütme başladığında yeniden etkinleşir. Bu, bazı uygulamalar İç içe kesme gerektiriyorsa, kesmeler,rutin kesme servis içinde
yeniden etkin olması anlamına gelir.
Bölüm V
Bu bölümde biz ana bilgisayardan JTAG UART tarafından alınan karakterleri okumak için kesmeleri kullanır
ve son alınan karakteri tekrar tekrar her 500 milisaniye görüntüleriz.Bölüm II bu uzunlukta yaklaşık bir zaman
aralığı üretmek için bir gecikme döngüsü kullanılmıştır.Şimdi, bu amaçla Aralık Zamanlayıcı devresi kullanılacaktır. Her noktada 500 ms, kesme gerektiren Zaman aralıklı çekim işlemci bir karakter İzleme Programı terminal
penceresine yazılır.
Zaman aralıklı çekim belirtilen bir değere ayarlanır ve sonra her saat döngüsünde sayaç azaltılır.Sayaç 0’a
ulaştığında, bir “ zaman aşımı "olayı meydana geldiği söyleniyor. Bu noktada Zaman aralıklı çekim bir kesme
isteği artırabilir ve sayaç belirtilen değeri sıfır olabilir Zaman aralıklı çekim JTAG UART benzer bellek yeri olarak
erişilebilir 16 Bit kayıt kümesi vardır.Bu kayıt birimleri, Şekil 6’da gösterilmektedir Bölüm I dizayn edilen sistem
zaman Durumu register adresi Zaman aralıklı çekim atanan taban adresi.Kontrol register adresi dört bayt yüksektir.
Şekilde gösterildiği gibi sonraki iki kelime adresleri sayaç için başlangıç degerini belirtmek için kayıtlar ile atanır.
Address
31 . . .
17
16
15
...
Base address
Base + 12
2
Unused
Base + 4
Base + 8
3
Unused
Not present
(interval timer has
16-bit registers)
1
0
RUN
TO
STOP START CONT ITO
Status register
Control register
Counter start value (low)
Counter start value (high)
Base + 16
Counter snapshot (low)
Base + 20
Counter snapshot (high)
Şekil 6. Zaman aralıklı çekim içinde Yazmaçlar
Durumu kayıt bitleri aşağıdaki gibi kullanılır:
• B0 (TO) zaman aşımı biti.
• Dahili sayacı çalışırken b1 (RUN) 1 eşittir, aksi halde 0 eşittir. Bu Durum bit bu kayıt için bir yazma işlemi
ile değişmez.
Kontrol kayıt bitleri aşağıdaki gibi kullanılır:
• b0 (İTO) 1 oluras Zaman aralıklı çekim kesmeler sağlar
• B1 (CONT) 0’a ulaştığında dahili sayacnını nasıl davranacağını belirler. Sayacın belirtilen başlangıc değeri
CONT = 1 ise sürekli olarak çalışır; aksi halde 0’a ulaştığında durur.
• B2 (START) bir yazma işlemi çalıştırmaya başlamak için dahili sayacı 1 t olmalıdır
• B3 (STOP) bir yazma işlemi ile 1 olarak ayarlanmış dahili sayacı durdurur.
Zaman aralıklı çekim hakkında daha fazla bilgiyi Altera Gömülü Çevre Birimleri Elkitabı Bölüm 12 de bulabilirsiniz.
Okuma karakterleri için Aralık Zamanlayıcı ve JTAG UART her ikisi de kesmeleri (Bölüm III), bit b8 ve
kontrol kayıt ctl3 hem de b0 etkinleştirmek için 1 olarak ayarlanması gerekir . Hangi kesme oluştuğunu belirlemek
45
için ctl4 denetimi kayıt aygıtını kullanır . Bir kesme kontrol kayıt ctl3 kullanarak devre dışı bırakılırsa Cihazı
görünür olsa bile, bu kesme hizmet yordamı çalışmaz, 1 olan kesme istek hattı ctl4 kontrol kayıt olarak tetiklenir .
Aşağıdaki adımları uygulayın:
1. İstenen çekim Zaman aralıklı süre sayımıyapacak şekilde bölüm 3 deki programı düzenleyin , ana program
böylece sonsuz bir döngü içinde kesmeler sağlar ve sonra bekler.
2. Zaman aralıklı çekim ve JTAG UART’lar kesmeleri hem okumak hemde işlemek için kesme servis rutini
değiştirin.
3. Zaman aralıklı çekim ve Nios II kontrol kayıtların kesmelerini etkinleştirmek için, uygun değerler Kontrol
yazılmalıdır Kontrol kayıt, JTAG UART kayıt ctl0 ve ctl3 .
4. Programınızı belleğe yükleyin ve derleyin
Hazırlık
Soruların cevaplarını hazırlayın:
1. Şekil 3 ’de sistem tasarımı
2. Bütün soruların assembly kodunu hazırlamış olarak gelin
46
Laboratuvar Çalışması 8
Ses Kodeği
Bu çalışmanın amacı, Altera DE-serisi Kurulu Ses kodlayıcı / kod çözücünün (CODEC) nasıl kullanılacağını
öğrenmek. DE-serisi ne tümleşik bir mikrofon ve hoparlör bağlayarak ses kaydını oynatmaya izin verilecek. Mikrofon ve hoparlör manuel erişmek için Altera DE-serisi Kurulu DE-serisi Medya Bilgisayar DE-serisi Medya
Bilgisayar, kullanılacaktır.
Bu tür konuşma ve müzik gibi Seslerin zamanla sinyalleri değişecektir . Bir sinyali amplitüdde duyulan sesin
hacmi belirler. Zamanla sinyal değişiklikleri duyduğumuz seslerin türünü belirler. Örneğin, bir "ah"sesİ Şekilde
gösterilen bir dalga ile temsil edilir
Şekil 15: Bir "ah" sesi için dalga.
Dalga zaman içinde belli noktalarda analog değerleri temsil eden örneklerine anispeten az sayıda analog sinyal
kullanarak dijital ortamda saklanabilir .Bu tür dijital sinyalleri üretilmesi işlemi bir örnekleme olarak adlandırılır.
Şekil 16: Bir "ah" sesi için bir örnek dalga.
Şekil noktaları Bir örnek dalga formu sağlamak için . Tüm noktaları zaman içinde eşit aralıklı ve orijinal dalgalarla
takip edilir.
47
Sesleri kaydetmek ve oynatmak için DE-serisi Medya Bilgisayar kullanılacak. DE-serisi Basic Computer multimedya programlarını çalıştırmak için faydalı birkaç ek bileşenleri içerir . Özellikle, bir bilgisayar ekranı ve
DE-serisi kuruluysa bir klavye ya da fareyi doğrudan bağlamak için bir PS / 2 Port grafikleri görüntülemek için
mikrofon ve hoparlör, Video-Out Liman erişmek için bir Audio Liman içerir.Bu çalışmada, kayıt yapmak ve kaydı
oynatma için Audio CODEC kullanıalacaktır. audo CODEC’e erişmek için DE-serisi Medya Bilgisayar kullanılacaktır. Şekil kullanacağımız DE-serisi Medya Bilgisayar bölümünü gösterir.
Host
Computer
USB-Blaster
interface
FPGA chip
Nios II
processor
JTAG UART
interface
JTAG debug
module
Avalon switch fabric
Audio
Port
Memory
Audio
CODEC
Microphone
Speakers
Şekil 17: Bu uygulamada kullanılan DE-serisi Medya Bilgisayar Kısmı.
Şekil gösterildiği gibi Audio Port, Nios II işlemci , harici mikrofon ve hoparlör sistemine bağlı Audio CODEC
tarafından yürütülen bir program arasında bir bağlantı sağlar . Nios II işlemci tarafından çalıştırılan bir kullanıcı
programı kaydedebiliyor ve Ses portu kullanarak sesleri çalabilirsiniz.
Ses, bir mikrofon sistemi kullanılarak kaydedilebilir. Şekilde gösterildiği gibi Mikrofon içine ses bir analog
dalga olarak dönüştürülür . Kod çözücü örnekleri arasında, her bir 1/48000th ikinci dalga ve kayıt FIFOlar Örnekleri içinde depolanır.Kayıt FIFOlar sonra işlemci tarafından okunabilir.Bir çıkış dalga üretmek için, Ses Liman
işlemci bir girdi olarak bir örnek dalga kabul eder ve Oynatma FIFOlarında saklar. CODEC sonra analog bir dalga
haline FIFOlar verileri dönüştürür ve hoparlörler gönderir
48
Audio Port
Record
Left FIFO
Microphone
Right FIFO
Nios II
processor
Audio
Registers
Audio
CODEC
Playback
Left FIFO
Speakers
Right FIFO
Şekil 18: Ses alt sistemi.
Kullanıcı programları DE serisi Medya Bilgisayar I / O arayüzü ile Ses Liman erişebilirsiniz. Arabirimi, dört
bellek eşlemeli yazmaç içerir. Şekil kayıtları ve bellek adres alanının kendi konumunu göstermektedir.
Address
31 . . . 24 23 . . . 16 15 . . .
0x10003040
0x10003044
Unused
WSLC
WSRC
10
9
8
WI
RI
7 ... 3
2
1
0
CW CR WE RE
RALC
RARC
Control register
Fifospace register
0x10003048
Left data
Leftdata register
0x1000303C
Right data
Rightdata register
Şekil 19: Ses erişim DE-serisi Medya Bilgisayar üzerine kaydeder.
Kontrol kayıt Ses Liman kontrol etmek için kullanılan altı adet bit içerir:
• RE ve WE (RE) Kayıt FIFO 75 % dolduğunda Ses Liman kesme isteği oluşturmak için bit sağlar, veya
oynatma FIFO olup az 25 % tam (We), ya da her ikisi
• CR ve CW bit sırasıyla Kayıt ve Playback FIFO tampon temizleyin.
• Kesme istekleri yükseldiği zaman RI ve WI bit 1 ayarlanır. RI Kayıt FIFO en az 75 % dolu olduğunda 1
olur; Oynatma FIFO az 25 % dolduğunda WI bit 1 olur.
Fifospace kayıt FIFOlar her birinin durumunu gösterir.Her FIFO da 128 örnek için yer var. Sağ / Sol Kayıt
FIFO mevcut numune sayısı RALC / RARC alanında okunabilir.Benzer şekilde, Sol / Sağ Oynatma FIFO numuneler için kullanılabilir alan miktarını WSLC / WSRC alandan okunabilir.
Leftdata ve Rightdata kayıt kayıtlar yazarak Oynatma FIFOlar (sol veya sağ) veri yüklemek için, ya da bu
kayıtların okuyarak Record FIFOlardan ses almak için ya kullanılır.Kullanıcılar, okuma veya Leftdata yazmadan
önce Kayıt ve Playback FIFOlar durumunu kontrol etmek için Rightdata kaydeder.Kayıt FIFOlar boşsa, daha
sonra Leftdata ve Rightdata kayıtların içeriği geçersiz olur. Ayrıca eğer, Oynatma FIFOlar doluysa daha sonra
Leftdata yazar ve Rightdata kayıtlar Ses Liman tarafından göz ardı edilecektir.
49
Bölüm I
Bu bölümde yapacağınız çalışma 3-İkinci kayıt oluşturmak ve oynatmak için.Bunu yapmak için, mikrofon ve
hoparlör DE-serisi kuruluna bağlı olması gerekir.Konuşmacılar yeşil jack girişine bağlanmış olması gerektiğini,
MIC LINE-OUT etiketli ve mikrofon pembe jack girişine bağlı olmalıdır.
Sesleri kaydetmek ve oynatmak için Ses Liman kullananan bir C programı yazın. KEY 1 buton bastığında
Programınız Ses Port veri okuma ve hafıza saklayın gerektiği zaman kararı kullanıcıya bırakmalı . Kayıt Ses Liman
hafızadan yazma örnekleri tarafından oynatılması gerektiği zaman kullanıcının it KEY 2 butonuna basmalı.
Kayıt oynatma da kaydırıcı anahtarlar tarafından kontrol edilmelidir 1−0 GB. Kayıt oynatırken anahtarı 1 1 GB
zaman, çalma, her diğer örnek atlayın.0 1 GB Eğer çalma kayıt tekrar ediniz. Aksi takdirde, kaydedilen ses normal
oynatılması gerekir. ÇAlışmanın bu bölümü tamamlamak için şu adımları izleyin:
1. Yukarıda açıklanan bir C programı yazın.
2. Altera İzleme Programı başlatın ve yeni bir proje oluşturun. Projeniz için sistemi seçerken, açılan listeden
DE-serisi Medya Bilgisayar seçin.
3. DE-serisi karta DE-serisi Medya Bilgisayar indirin ve programı derleyin.
4. Sistemine programı indirin ve çalıştırın.
5. Anahtarları etkisini test edin1−0 it GB.
Bölüm II
Echo yaptığımız bir sesin büyük salonlarda veya mağaralarda, etkisi biraz gecikmeli de bize geri döner .Çünkü ses
bize duvarları sekerek döner ve bu etki oluşur.Yansıyan ses biraz zayıflamış olur.Bu bölümde mikrofondan sesleri
okuyan ve hoparlörlerden sesi geri üreten bir C programı yazın. Ancak, bir yankı etkisini simüle etmek için yine
birkaç dakika sonra aynı ses daha düşük ses seviyesinde tekrar edilir..Yankı etkisi mikrofon aracılığıyla sağlanan
sesin herhangi bir ses (üstüne eklendi) üzerine eklenmiş olmalıdır.
Bölüm III
Ses tonları da Ses portları kullanılarak oluşturulabilir. Örneğin, bir piyanoda dördüncü oktavda ses frekanslarına
sahip:
C = 262 Hz
C# = 278 Hz
D = 292 Hz
D# = 310 Hz
E = 328 Hz
F = 348 Hz
F# = 370 Hz
G = 392 Hz
G# = 416 Hz
A = 440 Hz
A# = 466 Hz
B = 494 Hz
Belli bir frekansta bir sinüs dalga formu oluşturmak için zamanla sinüs dalgasına değer vermek gerekir.Bu it
math.h kütüphaneden yapılabilir.
t
v(t) = A · sin(2 · π · )
T
A sinüs dalgasının genliği, T periyot, ve t süre.Böylece, bir sinüs dalga formu v(t) değerleri Deltat aralıklarla
oluşturulan Ses portuna, giriş olarak v(t) sağlayarak oluşturulabilir.
50
Dördüncü oktav seslerini çalan bir piyano çalma programı oluşturun. Kullanıcılar klavyedeki tuşlara basarak
piyanoyu çalabilecek. a,w,s,e,d,f,t,g,y,h,u ve j harflerini sırasıyla her bir ses tonunu temsil edecek şekilde kullanın.
Bu tuşlardan herhangi birisine basıldığında programınız ikinci yarısına karşılık gelen tonu çalabilmeli.
Aşağıdakileri yapın:
1. Dördüncü oktav sesleri temsil eden on iki tablo ile tones.h adında bir bağlantı dosyası oluşturun. Her çizelge
24000 girişli belirli bir dalga çizecek şekilde oluşmalıdır. Her dalga genliği( 2x10000000) olmalıdır.
2. Programı C dilinde yazın. Programınızın tones.h isimli dosyayı içerdiğinden emin olun..
3. DE serisi medya bilgisayar için projenizi Alter izleme Programı içerisinde oluşturun. Pencerede derleyici
seçenekleri belirtileceği zaman gösterildiğinde, ek derleyici bayrakları denilen alanda bir değişiklik yapın.
Şekilde gösterildiği gibi O1 parametresi en yüksek optimizasyon seviyesini kullanmak nedeniyle C derleyicisiyle yapılandırmak için O3 ile değiştirilmeli. Bu değişiklik programınıza klavye tuşlarını yeteri kadar
hızlı kullanmak ve birkaç sesi aynı anda çalabilmek için imkan sağlayacak.
Şekil 20: Program Details screen in Altera Monitor Program.
4. Programınızı derleyin ve Altera Monitor Programını kullanarak çalıştırın.
Hint:Hint: UART kesmelerine ve müzik kesilmeden tuşlara basabilmek için doğrudan UART kullanmaya ihtiyaç
duyacaksınız. Tuş vuruşlarını okumak için scanf gibi C fonksiyonlarını kullanmamalısınız.
51
Hazırlık
Bu laboratuar egzersizleri için önerilen hazırlıklar:
1. Bölüm 1 için C kodu.
2. Bölüm 1 için C kodu.
3. Bölüm 3 için bağlantısı dosyası olan tones.h çağırılmasıyla birlikte her ses tonu için 12 sayı tablosu. Her
tabloda dördüncü oktav seslerinden birine karşılık gelen bir dalga formu izleyen 24000 eleman olmalıdır.
52
Laboratuvar Çalışması 9
Grafik ve Animasyon
Bu egzersizin amacı görüntülerin ve animasyonların nasıl gerçekleştirileceğini öğrenmektir.DE series Medya Bilgisayar ve Altera DE-serisi Kurulu Video Graphics Array (VGA) Dijital-Analog Dönüştürücü (DAC) kullanılacaktır. Bu laboratuvar DE1, dE2, dE2-70 ve dE2-115 kartları içindir.
DE-serisi Media Bilgisayar VGA, DAC ve gösterimini kontrol, çekirdek olarak adlandırılan devrelerin bir dizi
ekrandaki görüntülerini kullanır . Bu bir VGA Piksel Tampon ve ekranda ekran görüntüleri oluşturmak için Nios
II işlemci tarafından yürütülen programlara izin veren SRAM bellek ve SRAM kontrolörü ile birlikte kullanılan
bir VGA denetleyici devre içerir. DE-serisi Media Bilgisayar gerekli kısmı Şekil 1 ’de gösterilmiştir.
Host
Computer
Altera DE-series Board
USB-Blaster
interface
FPGA chip
Nios II
processor
JTAG debug
module
JTAG UART
interface
Avalon switch fabric
SRAM Controller
SDRAM Controller
VGA Pixel Buffer
VGA Controller
SRAM
SDRAM
VGA DAC
Screen
15-pin VGA cable
Şekil 21: Bu örnekte kullanılan DE-serisi Medya Bilgisayar bölümü
VGA piksel tampon Nios II işlemci ve VGA denetleyicisi tarafından yürütülen programlar arasında bir arabirimdir.
53
Bu SRAM bellekte görüntülenmesi için bir görüntü saklandığı ekranın boyutunu ve konumunu verir . Ekrandaki
bir görüntüyü VGA piksel tampon bellek alır ve VGA denetleyicisini gönderir. VGA denetleyicisini ekrana VGA
kablosu üzerinden görüntü verisi göndermek için VGA sonra DAC kullanır. Bir görüntü resim elemanları, bir dizi
dikdörtgen piksel oluşturur. Her piksel ekranda bir nokta olarak görünür ve Şekil 2’de gösterildiği gibi tüm ekran,
240 satır 320 sütun pikselden oluşur.Ekran alanının üst sol köşesindeki ; (0 0) piksel koordinat ile, dikdörtgen bir
tablo içinde düzenlenir.
x
0 1 2 3
...
319
0
1
2
...
...
...
...
y
...
239
Şekil 22: Pixel array.
Kırmızı, yeşil ve mavi: Her pikselin rengi bu üç ana rengin bir kombinasyonudur.Her bir birincil renk yoğunluğunun farklılaştırılmasıyla, başka bir renk oluşturulabilir. Biz bir pikselin rengini temsil etmek için bir 16-bit
halfword kullanırız. Bu halfword içinde beş biti en anlamlı ve en az anlamlı kırmızı ve mavi bileşenlerin yoğunluğunu gibi temsil eder , sırasıyla kalan altı biti, yeşil renkli bir bileşenin yoğunluğunu temsil eder.Şekil 3a’da
gösterildiği gibidir.Örneğin, kırmızı renk (F 800)16 değeriyle gösterilir ,mor renk(F 81F )16 değeriyle gösterilir,
beyaz (F F F F )16 değeriyle gösterilir ve gri renk de (8410)16 değeriyle gösterilir.
15 . . . 11 10
red
...
5
4
green
...
0
blue
(a) Pixel color
31
...
18 17 . . . 10 9
00000000000000
y
...
1
x
0
0
(b) Pixel (x,y) offset
Şekil 23: Pixel color and offset.
Her bir resim de yer alan pikselin renginin bir karşılık gelen SRAM hafızadaki bir adreste saklanır. Bir piksel
adresi bir taban adresi bir arada (x,y) şeklinde bulunur. DE-serisi Media Bilgisayar SRAM bellek başlangıç adresinin bir tampon adresinde (08000000) 16 olarak yer alır.(x, y) Çifti olarak Şekil 3b de gösterildiği gibi, 9-bit x 1.
bit kordinatı ile başlayan ve 8-bit y 10. bit kordinatı başlayan noktalar birleştirerek hesaplanır Bu hesaplama sol
kaydırma operatörü kullanılarak C programlama dilinde yapılır:
denkletirme = (x << 1) + (y << 10)
Taban adresine denk , her pikselin hafıza konumunu belirlemek için, (y x) ekleyin. Bu şema için şu adresleri ele
alalım (0, 0)pikseli için(08000000)16 , (1, 0) pikseli tabanı + (00000002)16 adresleri elealalım = (08000002)16 ,
54
(0, 1) piksel adresi tabanı + (00000400)16 = (08000400)16 , ve piksel konumu (319, 239) piksel adresi tabanı +
(0003BE7E)16 = (0803BE7E)16 .
DE-serisi Medya Bilgisayar üzerinde çalışan bir programın görüntülerini görüntülemek için, VGA piksel tampon modülü VGA piksel tampon bilgilere erişmek ve onun işleyişini kontrol etmek için kullanılan bellek eşlemeli
yazmaç içerir.• Başlangıç adresini (10003020)16 bulunan bu kayıt birimleri, Şekil 4’te sıralanmıştır.
Address
31 . . . 24 23 . . . 16
15 . . .
8 7 ... 4
3
2
1
0
0x10003020
front buffer address
Buffer register
0x10003024
back buffer address
Backbuffer register
0x10003028
0x1000302C
Y
m
Resolution register
X
n
Unused
B
Unused
A
S
Status register
Şekil 24: VGA pixel buffer memory-mapped registers.
Buffer ve Backbuffer sayaçlarının bulunduğu bellek konumunda iki tampon görüntü bulunmaktadır. Ön tampon
olarak adlandırılan ilk geçici bellek, ekran üzerinde görünür görüntünün depolandığı bir hafızadır Ikinci bir tampon
back buffer görüntülenmesi için çağrılan sonraki resim çizmek için kullanılır.Başlangıçta, her iki (08000000)16
değeri kaydedicilerde saklanır.Bu çalışmadaki bölüm IV bu konuyu ele alacağız. Çözünürlük kaydedicisi piksel
açısından ekranın genişliği ve yüksekliği tutar. 16 en az anlamlı bit ekranın yatay çözünürlük verirken,16 enanlamlı bit ekranın dikey çözünürlük vermektedir. Status kaydedicisi VGA piksel tamponu hakkındaki bilgileri
tutar.
Bölüm I
Bu bölümde basit bir çizgi çekme algoritması uygulamayı öğreneceksiniz. (x1 , y1 ) ve (x2 , y2 ) gibi iki nokta
arasında bir çizgi çizilecek .
(1,1)
(12,5)
Şekil 25: (1, 1) ve (12, 5) Noktaları arasında çizilmiş bir çizgi örneği
(1, 1) and (12, 5) noktaları arasında bir çizgi çizmek istiyorsak .Kareler renkli olan pikselleri temsil eder. Pikseller
kullanarak bir çizgi çizmek için bir çizgi takip edip ve her sütun için en yakın renk piksel hattı buluruz. Ve (12; 5);
noktaları (1 1) arasındaki bir hattın oluşturulması için bu şekilde piksel renklerini gölgeleriz
Kullanmak istediğimiz gengi belirlemek için cebri kullanabiliriz. Bu uç noktaları ve çizginin eğimi kullanılarak
yapılır.Hattının eğimi = (y2 − y1 )/(x2 − x1 ) = 4/11. Noktasından (1, 1)balayarak biz x ekseni boyunca hareket
ederek y hattı için kordinatı hesaplayabiliriz:
y = slope × (x − x1 ) + y1
Böylece sütunu için x = 2, pikselin y konumu f rac4ise11 + 1 = 1 f rac411. x1 ve x2 arasında her sütun
için bu hesaplamayı gerçekleştirin. X ekseni boyunca hareket yaklaşımı için bir çizgi dik bir dezavantajı vardır.
Her sütun için y koordinatını hesaplamak için x ekseni boyunca hat-çizim algoritması hamle hattında boşluklar
55
olacak eğer öyleyse dik bir çizgi, daha fazla sütun ve satır kapsamaktadır. Örneğin, dikey bir çizginin tek bir
sütununda tüm noktaları vardır, bu nedenle algoritma düzgün çizgi çizmek için başarısız olur. Sorunu çözmek için
bir çizgi dik olduğunda y ekseni boyunca taşımak için algoritmayı değiştirebilirsiniz .Bu değişiklik ile, Bresenham
algoritması olarak bilinen bir çizgi-çizim algoritması uygulayabilirsiniz.Algoritması için Sözde-kodu Şekil 6’da
gösterilmektedir
1 draw_line(x0, x1, y0, y1)
2
boolean is_steep = abs(y1 - y0) > abs(x1 - x0)
3
if is_steep then
4
swap(x0, y0)
5
swap(x1, y1)
6
if x0 > x1 then
7
swap(x0, x1)
8
swap(y0, y1)
9
int deltax = x1 - x0
10 int deltay = abs(y1 - y0)
11 float error = 0
12 float slope = deltay / deltax
13 int y_step
14 int y = y0
15 if y0 < y1 then y_step = 1 else y_step = -1
16 for x from x0 to x1
17
if is_steep then draw_pixel(y,x) else draw_pixel(x,y)
18
error = error + slope
19
if error >= 0.5 then
20
y = y + y_step
21
error = error - 1.0
Şekil 26: Bir çizgi çekme algoritması için pseudo-code.
Bu algoritma doğrultusunda her pikselin konumu hesaplamak için kayan nokta işlemleri kullanır. Kayan nokta
işlemi genellikle tam sayı işlemleri gerçekleştirmek için çok daha yavaş olduğundan, bu algoritmanın en uygulamaları tam sayı işlemleri kullanabilmesi için değiştirilir
Bu algoritma kullanarak ekranda bir kaç çizgi çizen bir C-dili program yazın. Yalnızca tam sayı işlemleri
kullanarak algoritma optimize etmeye çalışırlar
1. Çizgi algoritması uygulayan bir C-dili program yazın.
2. Altera İzleme Programı kullanarak DE-serisi Medya Bilgisayar için yeni bir proje oluşturun..
3. DE-serisi karta DE-serisi Medya Bilgisayar indirin.
4. DE-serisi kartı ve monitörü VGA bağlantı için bir 15-pin VGA kablosu bağlayın.
VGA kablosu iki şekilde ekrana bağlanabilir.Ekran çoklu VGA giriş portu varsa, kullanılmayan bir portla
VGA kablosu bağlayabilirsiniz.Daha sonra, ekrandaki düğmeleri kullanarak ilgili port için video kaynağını
değiştirin.Ekranda sadece tek bir VGA bağlantı noktası varsa, bir KVM (Klavye-Video-Mouse) switch gereklidir. KVM switch kullanarak, tek bir ekrandan birden fazla video kaynağı bağlayabilirsiniz.Bu cihaz
video kaynağı olarak görüneceği için seçmenize izin verecek
5. Programınızı derleyin ve çalıştırın
56
Bölüm II
Animasyon grafik bilgisayarın heyecan verici bir parçasıdır. Görüntülenen bir nesneyi taşımak ekranda farklı yerlerde aynı nesneyi göstermenin yarattığı bir yanılsamadır. Ekrandaki bir nesneyi taşımak için ilk önce bir pozisyonda başında görüntüler ve daha sonra da başka bir yerde görüntülemek gerekir. Bunu başarmak için bir
pozisyonda bir nesne çizin ve sonra onu silin ve daha başka bir pozisyonunda tekrar çizin
Bunu gerçekleştirmek için belirli zaman aralıklarında görüntününn silinip başka nonumlarda çizilmesi gerekir.
Bunun içinde belirli bir zaman kontrölü gerekir.
Her saniyade ekranda görüntü sağlamak için bir döngü oluşturmak gerekir.VGA denetleyicisinin yeniden çizmek döngüsü ile DE-serisi Medya Bilgisayar üzerinde çalıştırmak bir program eşitlemek için VGA piksel tampon
kullanın Ekranın üst ve alt kenarlarını dikey ekran boyunca yatay hareket edebilecek bir C dili programı yazınız.Programınız ilk siyah renkli tüm pikseller ayarlayarak, ekranı temizleyecek ve sonra tekrar tekrar çizecek ve
(siyah renk kullanarak aynı çizgi çizin) her yeniden çizilecek döngü sırasında çizgileri silmek gerekir.Ekranın alt
hattı üzerine ulaştığında tersi yönünde yol alacaktır
Bölüm III
Nesneleri döndürme animasyonun başka ilginç bir parçasıdır. Bir nesneyi döndürmek için döndürülmüş bir nesnenin görüntülerinin bir yolu önceden hesaplamak , depolamak, ve daha sonra bunları ekranda göstermektir. Bu
yöntem, bir nesnenin ekran zamanından daha hızlı oluşturulmasına izin verir, ama çok fazla bellek gerektirir ve
bu nedenle, modern uygulamaları için pratik değildir. Bir nesne döndürmenin için bir başka yolu, gerçek zamanlı
olarak da her nokta için yeni bir konum hesaplamak gerekir.
y
(x’, y’)
r
r
α
(x, y)
β
x
Şekil 27: Eksen etrafında dönme merkezi bir örneği.
Bir nokta (x;; y) döndürmek için bir açı ile bir eksen etrafında (y0 x 0) konumu hesaplamalı. Bu, Şekil 7
’de gösterilmiştir.X noktası ekseninden saat yönünün tersine bir açıyla uzak kökenli bir mesafe vardır.Dönme
nokta kaynaktan sonra gelen bir mesafe kalır ve r olacaktır bir açı alarak; trigonometri kullanarak (x0 y0) yerini
hesaplayabilir.
r
=
x0
=
y
x
=
,
sinβ
cosβ
r × cos(α + β), and
0
=
r × sin(α + β)
y
X0 için işlemi kolaylaştırabilirsiniz
x0
= r × (cosαcosβ − sinαsinβ)
x
y
=
× (cosαcosβ) −
× (sinαsinβ)
cosβ
sinβ
= x × cosα − y × sinα
y 0 için :
y0
= x × sinα + y × cosα
57
Bu denklemlerin kökleri çevresinde bir noktaya döndürün.Ekran koordinat sisteminde orijin sol üst köşesinde olduğundan, her noktasının konumunu temsil etmek için ekranın merkezinde kökleri bir kartezyen koordinat sistemi
oluşturun. Sonra ekrana kartezyen koordinat sistemi noktasının konumunu eşler ekranda noktaya çekin. Bunu yapmak için pikselde (160, 120) yerleştirin, bir birim olarak ekrandaki her 20 piksel y ekseni noktasını yukarı doğru
olarak görün. (Xpixel; ypixel) yerde ekrana; herhangi bir noktada (yw xw) eşleştirmek için, denklemleri kullanın
xpixel
=
160 + xw × 20
ypixel
=
120 − yw × 20
Ekranın merkezi etrafında uzunluğu beş satır döndüren bir C-dil programı yazın. Her yeni döngü sırasında,
programın tersine iki derece hattı dönmelidir.Şunları yapın:
1. Bir satır döndürmek için bir C-dil programı yazın. sin ve cos fonksiyonlarını kullanabilmek için kodunuzda
math.h kütüphanesi içerdiğinden emin olun.
2. • Altera İzleme Programı yeni bir proje oluşturun. Programınızı derlerken matematik kütüphanesi dahil
Şekil 8’de gösterildiği gibi ek bağlayıcı Flags alanına--lm bayrağı ekleyin .
Şekil 28: Programınızda matematik kütüphanesini eklemek için bağlayıcı talimat bayrak-lm ekleme.
3. Programınızı karta yükleyin,derleyin ve çalıştırın.
58
Bölüm IV
Şimdiye kadar, 2B nesneleri ve animasyonları nasıl görüntüleyeceğimizi konuştuk. Ancak, çevremizdeki nesnelerin genişlik , yükseklik ve ek olarak derinliğe sahip doğal 3D olduğunu. Ayrıca, bir nesne yakınken onu uzakta
olduğunda daha büyük görünür. Biz perspektif projeksiyonu kullanarak bir bilgisayar ekranında bu etkileri taklit edebiliriz. Fikri Şekil 9 içerisinde gösterilmiştir. 2D üzerine bir 3D nesne yansıtmak için, nesne ve gözlemci
üzerindeki her nokta arasında noktalı bir çizgi çizin.Çizgi projeksiyon düzlemini geçtiği hangi konumu gözlemci
noktası olarak algılayacağı konumdur.
Object
Projection plane (screen)
Observer
Şekil 29: Visualization of the perspective projection.
3D dünyasından bir nokta (z;; y x) ekranda nokta görülecektir ; ekranına z ekseni noktaları, (ys xs) noktasının
konumunu hesaplamak gerekir .Sorun Şekil 10 ’de gösterilmiştir
Projection plane (screen)
Point (x,y,z)
y
Point (xs,ys)
d
z
Observer
Şekil 30: Visualization of the perspective projection.
(; y; x z) Noktasının konumu göz önüne alındığında; geometriden benzer üçgenler kavramını kullanarak ve gözlemci ekranından bir mesafe (ys xs) noktasının koordinatları hesaplanır. Biz ys koordinat hesaplayacağız: :
y
z+d
=
ys
=
59
ys
d
y×d
z+d
For xs we have:
xs
=
x×d
z+d
Bölüm 3 deki programı iz düşüm görüntüsünü içerecek şekilde güncelleyin. Programda, her yenileme döngüsünde en az iki derece z ekseni (bölüm III ile aynı dönme denklemleri) dönmelidir.. Ayrıca,çizgilerin iki
düzlem arasında sıçraması gerekir z = 100 ve z = 5 gibi.Gözlemci konumunu ekrandan 20 birim olarak ayarlayın.Programınızı derleyin ve çalıştırın.
Bölüm V
3D kökenli Nesneleri çevresinde döndürme sadece marjinal yararlıdır. Pratik uygulamalarda her yerde nesnelerin
hareket ve yönünü değiştirebiliriz, her nesne için bir yerel koordinat sistemi tanıtmak gerekir , nesneleri yerinde
döndürmek için izin vermeniz gerekir. To do this we need Nesne bulunduğu yere ortalanan hariç yerel koordinat
sistemi, dünya koordinat sistemi ile aynıdır. Bu düşünce Şekil 11 de gösterilmiştir.
Local
y
z
World
x
y
z
local coordinate system offset
x
Şekil 31: Yerel ve dünyanın koordinat sistemi arasındaki ilişki.
Şekilde küp yerel koordinat sistemi, 3D normal kordinat sistemine biraz uzakta merkezli .Küp yönde herhangi
bir değişiklik yerel koordinat sistemi içinde bir dönme tarafından gerçekleştirilebilir,normal hareketlerinin yerel
kordinat sistemi hareketinde gerçekleşir.Nesnenin her noktasının konumu dolayısıyla 3D dünyanın kökenli yerel
koordinat sisteminin yerinden toplamı ve yerel koordinat sisteminde noktanın konumudur.
Bu bölümde bir tel çerçeve nesne (çizgilerden oluşan nesne) çizecek ve ekranda animasyon için bir C-dil
programı yazmak zorundasınız . Nesne göstermek için Şekil 12’de t 3 boyutlu tel kafes nesne ve t 3D nokta veri
yapıları kullanın
T 3 boyutlu tel kafes nesne yapısını bir köken alan oluşur bu 3D dünya kökenli açısından, yerel koordinat
sistemi konumunu belirtir.Noktalarının dizi nesnesi temsil noktalarını tanımlayan ve sayıları num puan alan tarafından belirlenir. num_line_segments nesne hattı segmentlerini 2×num_line_segments dizi elemanları içerir.
Altıgen bir tabanı olan bir koni şeklinde bir tel çerçeve nesne döndüren bir C-dil programı yazın. Nesne kendi
yerel koordinat sisteminde eksenleri etrafında dönmelidir. Dönme yönü DE-serisi kartıı SW2−0 anahtarlar tarafın60
typedef struct s_3D_point {
float x,y,z;
} t_3D_point;
typedef struct s_3D_wireframe_object {
t_3D_point origin;
t_3D_point *points;
int num_points;
int *line_segments;
int num_line_segments;
} t_3D_wireframe_object;
Şekil 32: Wire-frame object data structures.
dan belirlenecektir .Switch SW2 AÇIK olduğunda, nesne, x ekseni etrafında dönmelidir.SW1 nesne ON iken y
ekseni etrafında dönmelidir ve SW0 nesne ON olduğunda z ekseni etrafında dönmelidir.Eksenlerinin her biri ilgili
dönme denklemleri Şekil 13 ’de verilmiştir
Rotation about the x axis:
x0 = x
y 0 = y × cosα − z × sinα
z 0 = y × sinα + z × cosα
Rotation about the y axis:
x0 = x × cosα + z × sinα
y0 = y
z 0 = z × cosα − x × sinα
Rotation about the z axis:
x0 = x × cosα − y × sinα
y 0 = x × sinα + y × cosα
z0 = z
Şekil 33: Rotation equations in 3D
Bölüm VI
Bölüm V için yazılmış program titreşmiş veya görünmüş olabilir.konisi tamamlanmamış bir resim çizin. Bir bilgisayar ekranında yeni bir imaj oluşturmak çok fazla zaman alır . Bu kötü görünüyor ve bilgisayar ortamında pek
de hoş olmaz.
Double buffering denilen yaygın olarak kullanılan teknik bu sorunu çözebilir. Çift tamponlama ekranda bir
görüntü oluşturmak için sadece bir yerine, iki tampon kullanır.Tamponlar biri ekranda görünür ve diğeri gizlenir.Görünür tampon ön tampon olarak adlandırılır ve gizli tampon arka tampon olarak adlandırılır. Biz arka tamponunda bir görüntü çizen iki Tampon kullanan bir animasyon oluşturmak için.Görüntü hazır ve VGA olduğunda
denetleyici hakkında ekranda yeni bir imaj çizmek için ön ve arka tamponlar takas edilir.
DE-serisi Medya Bilgisayar VGA piksel tampon double buffering destekler. Bellekte tamponların konumu şekil de gösterilen Buffer ve Backbuffer kaydedicilerde tutulur.Başlangıçta iki tamponların konumu aynı olduğundan,
tek bir tamponu kullanılmış olur . Double buffering etkinleştirmek için, biz elle kayıt backbuffer (08040000)16
ayarlayarak ön ve arka tamponlar ayırmamız gerekiyor. Bu ön tampon için kullanılmak üzere DE-serisi Media
Bilgisayar SRAM bellek yarısı ve arka tampon için diğer yarısı olacaktır. Iki tampon elde ettikten sonra, arka
tampon görüntüyü göstermek için ne yapılmalıdır. Bu durum swapları tamponlar Şekil 14, içerisinde fonksiyonu
ile gerçekleştirilir..
61
volatile int *vga_pixel_buffer_buffer_reg = (int *) 0x10003020;
volatile int *vga_pixel_buffer_status_reg = (int *) 0x1000302C;
volatile int *vga_screen_front_buffer = (int *) 0x08000000;
volatile int *vga_screen_back_buffer = (int *) 0x08040000;
void swap_buffers() {
register int status;
// Display the back buffer
*vga_pixel_buffer_buffer_reg = 1;
// Swap the addresses for the back and front buffers
register int *temp = vga_screen_front_buffer;
vga_screen_front_buffer = vga_screen_back_buffer;
vga_screen_back_buffer = temp;
// Wait until the buffer swap is completed by the VGA pixel buffer.
status = *vga_pixel_buffer_status_reg;
while( (status & 0x01) != 0 ) {
status = *vga_pixel_buffer_buffer_swap_status_reg;
}
}
Şekil 34: Swapping front and back buffers.
Fonksiyonu çalıştırıldığında, arka tampon içinde görüntü görüntülenir , ön ve arka tampon takas edilecektir. Bu
durum, ekran üzerinde görüntülenen görüntü bozmadan arka tampon içinde bir başka resim çizmek için olanak
sağlar Her iki belleği kullanmak için Bölüm V C-dil programı güncelleyin. Sizin programda sadece arka tampon
nesneleri çekilmeli ve her tampon takas edilmeli sonra arka tampon silinmeli.
Preparation
Bu bölüm için istenen C kodlarını Bölüm altı içerir.
62
Laboratuvar Çalışması 10
Bus Communication
Bu egzersiz Altera’nın DE1, DE2 ve DE2-115 kartları içindir..
Bu egzersizin amacı bus(yol) kullanılarak iletişimin nasıl sağlanacağını öğrenmektir. Altera’nın SOPC Builder
kullanılarak üretilen tasarımlarında, Nios II işlemci Avalon Anahtar Yapı vasıtasıyla çevresel cihazlara bağlanmıştır. Cihaza anahtar yapısı ile bağlanmak için bir SOPC Builder bileşeni gereklidir.Özel cihaz bileşeni kullanmak
yerine, daha genel Avalon harici yol köprüsünün sağladığı bir veriyolu arayüzü gibi, bir veya daha fazla bağımlı
çevre birimleri kullanılır. Köprü tasarımcının oluşturduğu çevre-aygıt arayüzü, veri yolu ve Nios II sistemine bağlanmasına olanak verir.
Şekil 1 bus sinyalleri ve 16-bit veri genişliği kullanılan dış veri yolu için zamanlama bilgilerini gösterir. Genel
olarak, veri yolu genişlikleri 8,16,32,64 veya 128 bit kullanmak üzere yapılandırılmıştır.
Nios II System
Avalon to
External Bus Bridge
Address
BusEnable
R/W
ByteEnable
WriteData
IRQ
Acknowledge
ReadData
k
2
Slave
Peripheral
16
16
(a) External Bus Signals
Clock
Address k – 1 – 0
Read Address
Write Address
BusEnable
R/W
ByteEnable 1 – 0
WriteData 15 – 0
Write Data
Acknowledge
Read Data
ReadData 15 – 0
(b) External Bus Timing Diagram
Şekil 35: 16-bit veri genişliği için Harici Veri Yolu.
63
Gerekli sinyalleri şunlardır:
• Adres: k bit (32 bite kadar): Tranfer edilmiş verinin adresi. Adres verinin boyutuyla(size) uyumludur. 32 bit
veri için adres biti 1-0 olup 0’a eşittir. Bayt-aktif (byte-enable) sinyalleri en az 4 biti aktarmak için kullanılır..
• BusEnable – 1 bit. Diğer tüm sinyallerin geçerli olduğunu ve bir veri transferi oluşması gerektiğini belirtir.
• RW – 1 bit.Veri tranferinde okumanın(1) yazmanın (0) olduğunu gösterir.
• ByteEnable – 16, 8, 4, 2 veya 1 bit olabilir. Her bitin verilen bite(R-W) göre erişimin olup olmadığını
gösterir. Bu sinyallerin aktif olma zamanı yüksektir.(aktifdir.)
• WriteData – 128, 64, 32, 1 veya 8 bit olabilir. Veriler, bir yazma aktarımı sırasında çevresel aygıta yazılır.
• Acknowledge – 1 bit.Veri aktarımının tamamlanmış veya tamamlanmamış olduğunu belirtmek için çevresel
aygıt tarafından kullanılır.
• ReadData – 128, 64, 32, 16 veya 8 bit olabilir. Veri çevresel aygıtın okuma transferi sırasında okunur.
• IRQ – 1 bit.1 bittir. Çevresel aygıt tarafından Nios II işlemcide kesme yapmak için kullanılır. İsteğe bağlıdır.
Şekilde gösterilmemiştir.
Çevresel aygıt tüm veri yolu sinyalleri saatin yükselen kenarında okumak zorundadır. Transfer Adresi, RW, ByteEnable ve muhtemelen WriteData sinyalleri uygun değerler ile ilklenir. Sonra BusEnable biti 1 e ayarlanır.
RW sinyali 1 ise, Oku işlemidir ve çevresel aygıt uygun değerlere read data sinyalleri ayarlamanız ve Acknowledge 1’e ayarlamanız gerekir. Acknowledge sinyal sadece bir saat çevrimi için 1 kalmalıdır. Acknowledge
sinyalleri başlatılırken readdata sinyalleri sabit olmalıdır. Sinyal Acknowledge nedeni tam olarak bir saat çevrimi
için yüksek olması gerektiğini unutmayın, bu sinyali iki veya daha fazla döngü yayılan eğer başka bir işlem karşılık olarak Avalon Anahtar Yapı tarafından yorumlanabilir olmasıdır.
RW sinyali 0 ise, transferi Yazma işlemi ve çevresel aygıt WriteData hatlarındaki uygun konuma değeri yazılmalıdır. Çevresel aygıt Yaz aktarım tamamlandıktan sonra, bir saat döngüsü için Acknowledge sinyallerini ortaya
koyar.
Bölüm I
Şekil 2 bize tasarlamak ve uygulamak istediğimiz sistemi gösterir. Sistemin bu partında Nios II / s işlemci, JTAG
UART, çip üzerinde bellek bloğu ve bir Avalon oluşan sistemin parçası Harici Veri Yolu Bridge için bir SOPC
Builder kullanılarak üretilir.Tasarlayacağınız bağımlı çevre birimi bir Verilog / VHDL modülü olacaktır. Sadece
dört 16-bit kayıt artı DE serisi kartı üzerindeki 7-segment ekranlarda bu kayıtların içeriğini görüntülemek için
gerekli bazı devresi oluşur.Kayıt Nios II işlemci bunları içine veri yazmak, böylece bellek yerleri gibi erişilebilir.
64
Host computer
Reset_n
USB-Blaster
interface
Clock
Nios II processor
JTAG Debug
module
JTAG UART
interface
Cyclone II
FPGA chip
Avalon switch fabric
Avalon to
External Bus
Bridge
On-chip
memory
External Bus
Slave
Peripheral
Şekil 36: İstenen Nios II sistemi
Geliştirilmesi istenen çevresel birim, Verilog/VHDL içinde tanılı 3 modül ile sağlanır. Bu modüllerin bir full
sağlar.(*?:S) Diğer ikisi iskelet formudur ve verilen egzersizi tamamlarsınız. Bu modüller:
• Lab10 Part1 (provided in full)
• Peripheral on External Bus (skeleton is provided)
• Seven Segment Display (skeleton is provided)
Bu modüller için Verilog / VHDL kodu Altera Üniversitesi Programı sitesinde sağlanmaktadır:
http://www.altera.com/education/univ/materials/comp_org/labs/unv−labs.html
Lab10 Part1 modülünü inceleyin ve üç diğer modüller örneğini görmekteyiz. SOPC kullanacaksız. Dış yön sinyallerini bağlamak için Periferik on External Bus modülü değiştirmek zorundasınız. Ayrıca, bu modül dört 16-bit
65
kayıt belirtmek zorundadır. Bu kayıtların herbiri SOPC Builder tarafından Dış Otobüs Köprüsü sf Avalon atanan
adres alanının dörtte biri aktarılması gerekir.Bu kayıtların içeriğini görüntülemek için 7-segment görüntüler it
HEX 3 − 0 kullanın.(İpucu: Bu modülde Yedi Segment Display 7-segment bit kalıpları halinde dört-bit onaltılık
sayı dönüştürmek için ayrı bir modül kullanır.) Sadece bir kayıt 7-segment ekranlarda bir anda görüntülenebilir
yana gösterilecek kayıt seçmek için it GB 0 ve 1 it GB, iki geçiş anahtarları kullanın. Bu modüller, SOPC Builder
tarafından oluşturulan modülleri ilave olarak, Şekilde istenen sistemi üretmek gerekir ref şek: sistemi.
Aşağıdaki gibi istenen sisteminin uygulanması:
1. Lab10 Part1 adında yeni bir Quartus II projesi oluşturun. Kullanılabilir aygıtlar listesinden, sizin DE-serisi
kurulu için uygun aygıt adı seçin Tablo listelenen ref tab: cihaz. Bu laboratuar belge onlar için geçerli
değil çünkü DE0 ve dE2-70 kartları listelenen unutmayın.
Board
DE1
DE2
DE2-115
Device Name
Cyclone II EP2C20F484C7
Cyclone II EP2C35F672C6
Cyclone IVE EP4CE115F29C7
Tablo 4: DE-serisi FPGA aygıt isimleri
2. Nios system Adlı bir sistem oluşturmak için SOPC Builder kullanın aşağıdaki bileşenleri içerir:
• JTAG Debug Modül Seviye 1 ile Nios II / s işlemci - Donanım Çarp ve Donanım Divide seçenekleri
seçmezseniz
• On-chip bellek - RAM modu, 32-bit veri genişliği, ve 8 Kbyte boyutunu seçin
• JTAG UART - bileşen kütüphanesi sf Arayüz Protokolleri > Seri bulunan; varsayılan ayarları kullanabilirsiniz
• Dış Yön Köprüsü Avalon - sf Üniversitesi Programı > Köprüler bileşenleri kitaplığında bulunan,
16-bit veri genişliği ve adres aralığının 512 Kbyte DE1 ve dE2 panoları için, ya da 2 Mbyte seçim
için dE2- 115 yönetim kurulu. Bu parametreler, bu egzersizin Bölüm II SRAM yongasında, bağlantı
basitleştirmek için seçilir.
Not: 512 Kbyte adres aralığı seçimi k = 19 adres hatları otobüs uygulanacak anlamına gelir. DE2-115
yönetim kurulu için 2 Mbyte adres aralığı k = 21 adres hatları otobüs uygulanacak anlamına gelir.
3. Nios II Harici Yön Köprüsü Avalon bağlayın data master liman değil, talimat master noktasına. SOPC Builder penceresinde bağlantı yolu tıklayarak köprü ve talimat ana liman arasındaki bağlantıyı kaldırabilirsiniz.
4. Sf Sistemi menüsünden, sf Auto-Assign IRQ izledi sf Auto-Ata Temel Adresleri seçin. Bu görüntülenebilir adres atama hakkında herhangi bir hata iletileri kaldıracaktır. Şimdi sistem Şekil de gösterildiği sahip
olmalıdır 37 (note that the Device Family alanı görüntülemek gerekir Cyclone IV if a DE2-115 board
is being used). Bu egzersiz için verilen modülleri tasarımında kullanılan adları için rakam (i.e. clk, cpu,
onchip_memory, jtag_uart, and external_bus_bridge)gösterilen isimleri bileşenleri yeniden adlandırın.
5. Edit the cpuayarını böylece reset vektörü ve istisna vektör kullanımı onchip_memory. Şekil gösterildiği
gibi cpu artık belirtilmelidir 38.
6. Sistemi oluşturun, SOPC Builder çıkın ve Quartus II yazılımına dönün.
7. Oluşturulan Nios II sistemi verilen Verilog / VHDL modül içinde doğru örneği olduğunu kontrol edin
Lab10_Part1.
8. Lütfen Quartus II projesi için yukarıda belirtilen üç Verilog / VHDL modülleri ekleyin.
9. DE-serisi kartı için pin atamaları dosyasını import edin. Belli bir DE-serisi panosu için dosya Altera’nın
DE-serisi web sayfalarında bulunabilir.
66
10. Quartus II Projesini derleyin.
11. Her 4 kaydedici içine 16 bit farklı numara yazmak için bir Nios II assembly dili ile program oluşturunuz.
12. DE-serisi kartı içinde üretilmiş sistemi indirmek için Altera Monitor Programı kullanın Sonra, Programınızı
derleyin ve çalıştırın. Register SW1−0 . geçiş anahtarları kullanarak görüntü için seçilebilir
Şekil 37: SOPC Builder belirtilen Nios II sistemi.
67
Şekil 38: SOPC Builder belirtilen Nios II işlemci.
Bölüm II
Bu bölümde farklı bağımlı çevre birimini geliştireceğiz. Çevre birimi, DE-serisi kartı üzerindeki SRAM yongasında, erişim sağlayan bir denetleyici olarak hizmet etmektir- SRAM yongası Avalon Switch Fabric e bağlanır..
SRAM yongasında, şu sinyalleri kullanır:
• SRAM_ADDR17−0 – 18 bitdir(giriş).DE1 ve DE2 kartı kullanılıyorsa, ardesin 16 biti veri kelimesidir. OR SRAM_ADDR19−0 – 20 bitdir(giriş).DE2-115 kartı kullanılıyorsa,adresin 16 biti veri kelimesidir.
• SRAM_CE_N – 1 bittir.(giriş) Diğer sinyanllerin uygun olup olmadığına bakar.
• SRAM_WE_N – 1 bit,Yazma işleminde veri yolu transferinin olup olamdığına bakar (Write Enable)
• SRAM_OE_N – 1 bit, Okuma işleminde veri yolu transferinin olup olamdığına bakar. (Output/Read Enable)
• SRAM_UB_N – 1 bit, Üst (yükselen) bitin okuma bitimi yoksa yazma biti mi olup olmadığına bakar. .
(Upper Byte Enable)
• SRAM_LB_N – 1 bit,Akt (azalan) bitin okuma bitimi yoksa yazma biti mi olup olmadığına bakar. (Lower
Byte Enable)
68
• SRAM_DQ15−0 – 16 bit çift yönlü. Bu hatlar aktarılan verileri taşırlar. Onlar okuma işlemleri sırasında
SRAM yongasında tarafından ve yazma işlemleri sırasında denetleyici tarafından denetlenmektedir
Şekil 5’de SRAM sinyalleri için zamanlama göstermektedir. Not:SRAM yongası, bir döngü içinde veri transferi
tamamlar. Ayrıca, tüm kontrol sinyalleri aktif düşük olduğuna dikkat edin. SRAM Write Data sinyali eşdeğer bir
SRAM DQ iç sinyalidir ama sadece transfer yazma kullanılır. Bu sinyali yazılmış verileri ayarlanmış bir yazma
aktarım sırasında hariç, yüksek empedans olarak ayarlanması gerekir.
Clock
SRA M _A D D R 17 – 0
SRA M _CE_N
SRA M _O E_N
SRA M _W E_N
SRA M _U B_N
SRA M _LB_N
SRA M _W rite_D ata15 – 0
SRA M _D Q 15 – 0
Şekil 39: The SRAM signals timing diagram
SRAM yongasında, bir 50 MHz saat döngüsü içinde bir 16-bit değerini okuyabilir ve yazabilir, SRAM yongasında, tüm sinyaller sadece her transfer için o bir saat döngüsü için ileri sürülebilir. SRAM denetleyicisi Şekil
1’de 35 çevre birimi bağımlı olarak hareket edecektir.
Aşağıdaki adımları uygulayın:
1. Lab10_Part2 adında bir porje oluşturun.. SOPC Builder projesindeki aynı yarları kullanın. Şekil 3 37. e
göre Nios II sistemini üretin.
2. İstenen denetleyicisi üretmek için projenize üretilen sistemi ilklendirir. İki Verilog / VHDL modüller, Lab10
Part2 ve SRAM Kontrolör sağlanmaktadır.
3. Pin atamalarını import edin ve projenizi derleyin.
4. SRAM yongasında, bazı örnek veri yazmak ve sonra işlemci yazmaçları geri bu verileri okumak için bir
Nios II assembly-dil programını yazın.
5. Altera Monitor Programı ile üretilmiş sistemi indirin ve derleyin sonra programı açın.
6. Tasarım doğruluğunu doğrulamak için programı çalıştırın.Ayrıca Altera İzleme Programı hafıza penceresini
kullanarak SRAM denetleyicisi test edebilirsiniz.
69
Bölüm III
Bu bölümdeki amacımız Bölüm I ve II tasarımları birleştirmek olacak. Harici Yön kullanmak ve iki bağlayıcı
çevre birimlerini bağlamak istiyoruz. Periferal Bir SRAM denetleyicisi ve diğer periferal I. gelen görüntü ile ilişkili devresi ile dört kayıt olacaktır
Perform the following steps:
1. Lab10_Part3 Adında yeni bir proje oluşturma.
2. Şekil 37 sistemi oluşturmak için SOPC Builder kullanın , ancak Harici Bus Avalon dE2-115 pano için DE1
ve dE2 panoları, ya da 4 Mbyte için 1024 Kbyte adres aralığı, seçim Köprü bileşeni kullanın Note that this
will change the base addresses that the SOPC Builder will auto-assign to the components of the system.
3. Nios II sistemi başlatır bir Verilog / VHDL dosya hazırlayın ve öyle ki iki bağlayıcı çevre uygular
• SRAM denetleyici DE1 ve dE2 levhalar için 1024-Kbyte adres alanının 512 Kbyte alt sıra kullanır
- Ve Ya SRAM denetleyici dE2-115 kartı için 4 Mbyte adresi düşük mertebeden 2 Mbyte kullanır
• Dört kayıt kalan adres alanı kullanabilirsiniz
4. Buna göre Bölüm I ve II’de kullanılan diğer Verilog / VHDL dosyaları değiştirin.
5. Projenizi derleyin.
6. SRAM yongasında, bazı örnek veri yazıyor ve sonra periferik bağlayıcı dört kayıtlarından bu verileri okuyan
bir Nios II montaj-dil programı yazın.
7. Oluşturulan sistem yükleyin ve sonra programı derleyin ve çalıştırın.
8. Örnek verileri doğru 7-segment görüntülerin olduğunu göstermek için programı çalıştırın.
70
Laboratuvar Çalışması 11
Çoklu İşlemciler Ve Çekişme yönü
Bu egzersiz Altera’nın DE1, dE2 ve dE2-115 kartalrı içindir
İki işlemci bir sisteme dahil edildiğinde Çalışmanın amacı Çekişme yönü ve kullanım kavramı incelemektir.
Çalışmalar doğal olarak labaratuar 10 daki gibidir fakat aynı zamanda bağımsız olarak da yapılabilir.
Altera’nın SOPC Builder kullanıcısını periferik çeşitli cihazlara bağlayabilirsiniz bir yön benzeri bir yapı uygulamak için Dış yön Köprüsü bileşeni Avalon kullanabilirsiniz Köprü tasarımcısı Quartus II yazılımı bir Nios II
sistemine bir çevresel aygıta bağlanmasını sağlar. Bu bir veya daha fazla "ikincil" çevre birimleri bağlanabilir bir
yön arayüz sağlar.
Şekil 1 yön sinyalleri ve 16-bit veri genişliği kullanılan dış veri yolu için zamanlama bilgi gösterir. Genel
olarak, yön veri 8 genişlikleri, 16, 32, 64 veya 128 bit kullanmak üzere yapılandırılabilir
Nios II System
Avalon to
External Bus Bridge
Address
BusEnable
R/W
ByteEnable
WriteData
IRQ
Acknowledge
ReadData
k
2
Slave
Peripheral
16
16
(a) External Bus Signals
Clock
Address k – 1 – 0
Read Address
Write Address
BusEnable
R/W
ByteEnable 1 – 0
WriteData 15 – 0
Write Data
Acknowledge
Read Data
ReadData 15 – 0
(b) External Bus Timing Diagram
Şekil 40: Dış Yön Köprüsü sinyalleri Avalon.
71
The required signals are:
• Adres - k bit (32). Aktarılacak olan veri adresi.Adres veri boyutu hizalanır. 32-bit veri, adres bitleri Adres
1−0 0 eşittir.Byte-enable sinyalleri az 4 byte aktarmak için kullanılabilir
• BusEnable – 1 bit. Diğer tüm sinyalleri geçerli olduğu ve bir veri transferi oluşması gerektiğini belirtir.
• RW – 1 bit.Veri transferi, bir okuyun (1) ya da Write (0) işlem olup olmadığını gösterir
• ByteEnable – - 16, 8, 4, 2 ya da 1 bit. Her bir bit karşılık gelen bayt (okuma veya yazma) erişilmelidir olup
olmadığını gösterir. Bu sinyaller aktif yüksektir.
• WriteData – 128, 64, 32, 16 ya da 8 bit.Veriler, bir yazma aktarımı sırasında çevresel aygıt yazılması.
• Acknowledge – 1 bit. , Veri aktarımı tamamlanmış belirtmek için harici bir aygıt tarafından kullanılır.
• ReadData – 128, 64, 32, 16 ya da 8 bit.Bir Oku aktarım sırasında çevresel aygıt veri okur .
• IRQ – 1 bit. Nios II işlemci durdurmak için harici bir aygıt tarafından kullanılır. Bu şekilde gösterildiği gibi,
isteğe bağlı sinyal vardır
Çevresel aygıt tüm yön sinyalleri saatin yükselen kenarında okumak gerekir. Bir transfer ByteEnable ve muhtemelen WriteData sinyalleri RW başlatmak için adres uygun değerlere ayarlanır . Sonra, BusEnable sinyal 1 olarak
ayarlanır.
W sinyali 1 ise, o zaman transferi Oku işlemi gerçekleşir ve çevresel aygıt uygun değerlere readdata sinyalleri
ayarlayarak Acknowledge sinyali 1 olarak ayarlamanız gerekir.
Acknowledge sinyal sadece bir saat çevrimi için 1 kalmalıdır.Acknowledge sinyal iddia edilirken readdata
sinyalleri sabit olmalı.Sinyal Acknowledge nedeni tam olarak bir saat çevrimi için yüksek olması gerektiğini
unutmayın, bu sinyali iki veya daha fazla döngü yayılan başka bir işleme karşılık olarak Avalon Anahtar Yapı
tarafından yorumlanabilir olmasıdır
RW sinyali 0 ise, transferi Yazma işlemi ve çevresel aygıt uygun konuma WriteData hatlarında değeri yazmak
gerekir.Çevresel aygıt Yaz aktarım tamamlandıktan sonra, bir saat döngüsü için Acknowledge sinyal gerekir.
Bölüm I
Bu bölümünde, bir Nios II işlemci DE-serisi kartına SRAM yongası bağlamak istiyoruz. Şekil 2 tasarlamak ve
uygulamak istediğiniz sistemi gösterir Dış Yön Köprüsü için bir Nios II işlemci, JTAG UART, çip üzerinde bellek
bloğu ve bir Avalon oluşan sistemin parçası SOPC Builder kullanılarak oluşturulabilir.SRAM yongasında tasarlanacak bir SRAM Kontrolörü Verilog / VHDL modül oluşturarak, periferik olarak eklenecektir. Dış Yön Köprüsü
Avalon Nios II sistemi Avalon Anahtar Yapı için daha önce tartışılan dış veriyolu bağlanır.Yapı anahtarı SOPC
Builder tarafından oluşturulan bir sistem içerisinde çevre birimleri için ana ara bağlantı ağdır.
72
Host computer
Reset_n
USB-Blaster
interface
Clock
Nios II processor
JTAG Debug
module
JTAG UART
interface
Cyclone II
FPGA chip
Avalon switch fabric
Avalon to
External Bus
Bridge
On-chip
memory
External Bus
SRAM
Controller
SRAM
chip
Şekil 41: İstenen Nios II sistemi
SRAM yongasında bir 256K def a 16 bit bellek olarak düzenlenmiştir. Her 16-bit kelime bir 18-bit adres
belirterek erişilir. Bireysel byte (üst byte) UB ve LB (düşük baytı) kontrol sinyalleri belirterek erişilir. SRAM
yongasında, şu sinyalleri kullanır:
• SRAM_ADDR17−0 – 18 bit, giriş. DE1 veya dE2 kartı kullanılıyorsa, bir 16-bit veri kelime Adres. - OR SRAM_ADDR19−0 – 20 bit, giriş.DE2-115 kartı kullanılıyorsa, bir 16-bit veri kelime Adres.
• SRAM_CE_N – 1 bit,giriş. Diğer tüm sinyalleri geçerli olduğunu gösterir. (Chip Enable)
• SRAM_WE_N – 1 bit,giriş.yön transferi bir yazma işlemi olduğunu belirtir. (Write Enable)
• SRAM_OE_N – 1 bit,giriş.yön transferi bir okuma işlemi olduğunu belirtir. (Output/Read Enable)
• SRAM_UB_N – 1 bit giriş.Üst bayt okunur veya yazılı gerektiğini belirtir. (Upper Byte Enable)
73
• SRAM_LB_N – 1 bit,giriş.Düşük bayt okunur veya yazılı gerektiğini belirtir. (Lower Byte Enable)
• SRAM_DQ15−0 – 16 bits„ çift yönlü. Bu çizgiler aktarılan veri taşırlar. Onlar okuma işlemleri sırasında
SRAM yongasında tarafından ve yazma işlemleri sırasında kontrolör tarafından tahrik edilmektedir.
şekil 3 SRAM sinyalleri için zamanlama göstermektedir.SRAM yongasında, bir döngü içinde veri transferi tamamladığını unutmayın. Ayrıca, tüm kontrol sinyalleri aktif düşük olduğuna dikkat edin.Sinyal SRAM yazma
Veri SRAM DQ eşdeğer bir iç sinyali, ancak, sadece transfer yazma kullanılır. Bu sinyali yazılmış verileri ayarlanmış bir yazma aktarım sırasında hariç, yüksek empedans olarak ayarlanması gerekir
Clock
SRAM_ADDR 17 – 0
SRAM_CE_N
SRAM_OE_N
SRAM_WE_N
SRAM_UB_N
SRAM_LB_N
SRAM_Write_Data 15 – 0
SRAM_DQ 15 – 0
Şekil 42: SRAM sinyaller zamanlama diyagramı
SRAM yongasında, bir 50 MHz saat döngüsü içinde bir 16-bit değerini okuyabilir ve yazabilir, SRAM yongasında, tüm sinyaller sadece her 16-bit transfer için bu bir saat döngüsü için ileri sürülebilir .SRAM kontrolörü
Şekil 2’de periferik olarak hareket edecek
İstenen sisteminin uygulanması kolaylaştırmak için, Verilog / VHDL tanımlanan iki modülleri sunulmaktadır.
Bu modüllerin bir tam sağlanır.Diğer bir iskelet şeklinde verilir ve bu tatbikatın bir parçası olarak tamamlanmak
üzere sahiptir. Bu modüller:
• Lab11_Part1 (Tam olarak verilen)
• SRAM_Controller (Iskeleti sağlanır)
Bu modüller için Verilog / VHDL kodu Altera Üniversitesi Programı sitesinde sağlanmaktadır
http://www.altera.com/education/univ/materials/comp_org/labs/unv−labs.html
Aşağıdaki gibi istenen sisteminin uygulanması:
1. Lab11 Part1 adlı bir Quartus II projesi oluşturun. Kullanılabilir aygıtlar listesinden, Tablo 1’de listelenen
DE-serisi panosu için uygun aygıt adı seçin. Bu laboratuar belge onlar için geçerli değil çünkü DE0 ve
dE2-70 panoları listelenen unutmayın.
74
Board
DE1
DE2
DE2-115
Device Name
Cyclone II EP2C20F484C7
Cyclone II EP2C35F672C6
Cyclone IVE EP4CE115F29C7
Tablo 5: DE-serisi FPGA aygıt adları
2. Aşağıdaki bileşenleri içeren Nios sistemi adlı bir sistem oluşturmak için SOPC Builder kullanın::
•
•
•
•
JTAG Debug Modül Seviye 1 ile Nios II / s işlemci
On-chip bellek - RAM modu, 32-bit veri genişliği ve 4K bayt boyutu seçin
JTAG UART - varsayılan ayarları, 32-bit veri genişliği, kullanmak,
Dış Yön Köprüsü Avalon - dE2-115 pano için DE1 ve dE2 panoları, veya 2 Mbyte için 512 Kbyte
16-bit veri genişliği ve adres aralığı seçin.SOPC Builder penceresinde İstenen köprü Dış Yön Köprüsü
Üniversitesi Programı> Köprüler> Avalon seçerek bulunur .
Not: 512 Kbyte adres aralığı seçimi k = 19 adresi willbe otobüs uygulanan anlamına gelir.DE2-115
yönetim kurulu için 2 Mbyte adres aralığı k = 21 adres hattı yön uygulanacak anlamına gelir.
3. Nios II veri ana portu Harici Yön Köprüsü için değil, öğretim ana noktasına Avalon bağlayın. Sen SOPC
Builder penceresinde bağlantı yolu tıklayarak köprü ve talimat ana liman arasındaki bağlantıyı kaldırabilirsiniz. Sistem menüsünden, Otomatik-Ata Base Auto-Assign IRQ takip adresler seçin. Bu görüntülenebilir
adres atama hakkında herhangi bir hata iletileri kaldıracaktır. Şimdi, Şekil 4’te gösterilen sisteme sahip
olmalıdır.. Bu egzersiz için verilen tasarım modülleri kullanılan adları için gösterilen isimleri bileşenleri
yeniden adlandırın. 2 Mbyte bir adres aralığı Harici Yön Köprüsü Avalon seçildi çünkü dE2-115 pano için
adres değerlerini Şekil 4’te farklılık unutmayın. 2 Mbyte bir adres aralığı Harici Otobüs Köprüsü Avalon
seçildi çünkü dE2-115 pano için adres değerlerini Şekil 4’te farklılık unutmayın
Şekil 43: Bölüm I SOPC Builder Nios II Sistem belirtilen.
75
4. cpu ayarını düzenleyin böylece reset vektörü ve istisna vektör kullanımı onchip_memory.
5. Sistemi oluşturun, SOPC Builder çıkın ve Quartus II yazılımına dönün
6. Lütfen Quartus II projesi için yukarıda bahsedilen iki Verilog / VHDL modülleri ekleyin
7. Oluşturulan Nios II sistemi verilen Verilog / VHDL modülü Lab11 Part1 içinde doğru örneği olup olmadığını kontrol edin.
8. SRAM Denetleyici tasarımını tamamlamak - Verilog / VHDL dosyası SRAM Controller iskelet tasarımı ile
başlangıç
9. DE-serisi kartı için pin atamaları dosyasını alma. Belirli bir DE-serisi panosu için dosya Altera’nın DE-serisi
web sayfalarında bulunabilir.
10. Lütfen Quartus II Projesi derleyin.
11. SRAM yongasında birkaç yerde bazı veri yazmak ve sonra işlemci yazmaçları tekrar bu verileri okumak
için bir Nios II assembly-dil programı yazın DE-serisi Kurulu içine oluşturulan sistem indirmek için Altera
İzleme Programı kullanın. Sonra,Programınızı yükleyin çalıştırın. Sistem düzgün çalıştığını doğrulayın.
Bölüm II
Bölüm I de tek bir ana, Nios II Veri Belirleyicisi, yön bağlı bir bağımlı ile iletişim kuran bir sistemi inceledi.
Bu bölümde belirleyicileri bir bağımlı bağlı durumda dikkate alacaktır. Her iki belirleyici aynı zamanda bağımlı
erişim isteyebilir bu yana, bir seferde sadece bir ana periferik bağımlı erişim izni olacak bir tahkim devre sağlamak
için gereklidir..
mesajları değiş tokuş ederek birbirleri ile iletişim kurmak zorunda olan iki Nios II işlemcileri içeren bir sistem
düşünün.Iletişim yeteneği sağlamanın bir yolu, hem de işlemci tarafından erişilebilen bir bellek modülü kullanmaktır. Her işlemcinin bellek modülüne bir mesaj yazabilir ve diğer işlemci bu modülü de bulabilirsiniz Biz ortak
bellek olarak DE-serisi gemide SRAM yongasında kullanacaktır.İstenen sistemi Şekil 5 ’de verilmiştir. Iki işlemci
olduğu için, her bir işlemci I. olduğu gibi, dış Bus Köprü bir Avalon yoluyla SRAM bellek erişebilir, Avalon anahtarı iki örneğini olacaktır Şekildeki gibi kumaş ve Dış Yön iki Avalon köprüdür.Hakem devre tek isteği her zaman
servise sağlayan işlemciler istekleri Okuma ve Yazma işlemesi gerekir. SRAM Denetleyici I. ana bilgisayara bir
bağlantı her işlemci için ayrı bir JTAG UART arayüzü birleştiren tarafından sağlanan Bölüm kullanılan devredir.
Bu arabirimler USB-Blaster arabirime JTAG Hub ile bağlanır.
Sisteme basit bir uygulama olarak, bir "sohbet odası" benzer bir iletişim yeteneği uygulamak istiyoruz.Altera
Monitör Programı ayrı bir sürüm her işlemci için aktif olacaktır. Bir uygulama programı kullanıcı bir İzleme Programı ve bu mesajı kullanarak bir ileti terminal görünecektir yazın sağlayacak.Diğer Monitör Programı penceresi.
76
Host computer
USB-Blaster
interface
JTAG
Hub
Nios II
Processor 0
JTAG Debug
module 0
JTAG UART
interface 0
Nios II
Processor 1
Avalon switch fabric 0
On-chip
Memory 0
JTAG Debug
module 1
JTAG UART
interface 1
Avalon switch fabric 1
Avalon to
External Bus
Bridge 0
Avalon to
External Bus
Bridge 1
External Bus 0
External Bus 1
On-chip
Memory 1
Arbiter
SRAM
Controller
Cyclone II
FPGA chip
SRAM
chip
Şekil 44: Bölüm II sistemi.
Aşağıdaki adımları uygulayın:
1. Lab11_Part2 Adında yeni bir proje oluşturma.
2. Şekil 5 ’de verilen modülleri uygulayan Şekil 6, sistem oluşturmak için SOPC Builder kullanabilir. : Sistemini içermektedir, her biri iki alt sistemleri kapsar
• JTAG Debug Modül Seviye 1 ile Nios II / s işlemci
• On-chip bellek - RAM modu ve 4 Kbyte boyutunu seçin
77
• JTAG UART - varsayılan ayarları kullanabilirsiniz
• Dış Yön Köprüsü Avalon - 16-bit veri genişliği ve dE2-115 pano için DE1 ve dE2 panoları, veya 2
Mbyte için 512 Kbyte adres aralığı seçin.Nios II için veri ana bağlantı noktası köprü bağlayın
3. Sistem menüsünden, Otomatik-Ata Base Auto-Assign IRQ takip adresler seçin. Şimdi, Şekil 6’da gösterilen
sistem sahip olmalıdır. Bu egzersiz için verilen tasarım modülleri kullanılan adları için gösterilen isimleri
bileşenleri yeniden adlandırın..
Şekil 45: SOPC Builder belirtilen Bölüm II için Nios II sistemi.
4. Cpu 0 ve 1 için ayarlarını düzenleyin,sırasıyla kendi reset vektör ve bellek çip 0 ve bellek çip 1 istisna vektör
kullanımı öyle olacak.Sistemi oluşturun, SOPC Builder çıkın ve Quartus II yazılımına dönün
5. Dış Yönler hem transferler kolları arbiter modülü geliştirin. Her iki yön aynı saat döngüsünde transfer olmak
isterse ilk yanıt vermek için hangi istek seçtiğiniz için makul bir plan tasarlayın.İstenilen tasarım bir iskelet
verir Verilog / VHDL dosyası Yön arbiter, başlamanıza yardımcı olmak için sağlanmıştır.
6. Oluşturulan Nios sistemi ve arbiter düzgün Verilog / VHDL dosyası Lab11 Part2 örneği emin olun.
7. lütfen Quartus II projesi için Verilog / VHDL dosyaları ekleyin ve DE-serisi kuruluna dosyasını alarak pin
atamaları belirtin
8. Lütfen Quartus II Projesi derleyin.
78
9. Bir sohbet odası benzer işlevselliğini uygulamak iki uygulama programları yazın. Her program ayrı bir
İzleme Programı kullanılarak yürütülecek. Programı bir aşağıdaki işlevleri gerçekleştirmelidir:
• JTAG UART üzerinden bir karakter (ana bilgisayarın klavyeden girilen) okur.
• İzleme Programı terminal penceresine geri okumak karakterini yansıtıyor.
• Bir SRAM yeri LOC içine salt karakteri yerleştirir ve aynı zamanda yeni bir karakter kullanılabilir
olduğunu göstermek için SRAM yeri LOC +4 bir durum bayrağı 1 ayarlar. Bu yerlerde diğer işlemci
(diğer Monitor Programı) tarafından yürütülen Programı B tarafından okunacaktır
• Bu durum bayrağı 1 olarak ayarlanırsa programı B. gelen bir karakter olup olmadığını gösteren durum
bayrağı tutan SRAM yeri LOC +12, kontrol eder, sonra SRAM yeri LOC +8 karakter okuma ve İzleme
Programı terminal penceresine iletilmesi zorunludur.
A Programı B Programı aynıdır , girdi amaçlı çıkış amaçları ve LOC ve LOC +4 için SRAM konumları
LOC +8 ve LOC +12 kullanması dışında.
10. FPGA yonga içine oluşturulan sistem indirmek için İzleme Programı kullanın. Sonra A programını yükleyin
ve derleyin. Sf. Metin ve sf. Veri bölümünde işaretçiler on-chip belleğe işaretlendiğinden emin olun.
11. İzleme Programı ikinci bir örneğini açın. Yeni bir proje oluşturmak ve Şekil 7’de belirtilen işlemci, işlemci
olarak 1 seçin. Yeniden oluşturulan iki işlemcili devreye yüklemeden, Program B yükleyin ve derleyin.
Şekil 46: Monitör Programı ikinci örneğinde cpu_1 seçin
12. Her iki program çalıştırın ve sohbet odası özelliğini göstermelidir. Bir Monitör Programı terminal penceresi
üzerine tıklayarak aktif hale unutmayın.
79

Benzer belgeler