Category: Courses
Exams and Sample Questions
Project
Engel Kaldırıcı Sumo Robot: Sumo robot gerçeklenip, verilecek 5 adet hedefin 60 saniye içerisinde platformdan atabilecek bir sumo robot algoritması geliştirilecektir. Robot’un diğer bir modu ise çizgi izlemektir. Bu modda ise kensine bağlı olan sensörleri kullanarak çizgi üzerinde takip etmesi beklenmektedir.
Proje detayları için tıklayınız.
Homeworks
Lecture Notes
Syllabus
| Hafta | Konu | Tarih |
|---|---|---|
| 1 | Giriş | |
| 2 | MCU Architecture | |
| 3 | Interfaces | |
| 4 | Sensors | |
| 5 | Motor Control | |
| 6 | Robot Kit Assembly | |
| 7 | Sumo Robot Algorithm | |
| 8 | Vize | Sınav Haftası |
| 9 | Simulator I | |
| 10 | Simulator II | |
| 11 | Control Algorithms I | |
| 12 | Control Algorithms II | |
| 13 | FPGA Based Control I | |
| 14 | FPGA Based Control II | |
| 15 | Final ve Proje Sunumları | Sınav Haftası |
Embedded Systems (Undergrad Course)
Course Description: Bu ders kapsamında gömülü sistemlerde kullanılan bir Linux dağıtımı olan Petalinux ile çalışılacaktır. Ders’te Xilinx’in PYNQ Z2 geliştirme kartlar kullanılacaktır. Dönem projesi olarak CORDIC (COordinate Rotation DIgital Computer) IP’si kullanıldığı ve işlemcinin hesap yükünü donanım hızlandırıcıya aktardığı bir proje yapılacaktır. Petalinux Ortamından Uart arayüzü üzerinden yakalanan veriler CORDIC IP’sile iletilip, sonuçları Uart üzerinden PC’e iletilecektir.
Microcontrollers
Course Description: Bu ders kapsamında mikrokontrolör mimarisi kullanılarak robot kontrol algoritmaları geliştirilecektir. Ders kapsamında bir sumo robot kiti üzerinde deneyler gerçekleştirilecektir. Dönem projesi olarak sumo robot gerçeklenip, verilecek 5 adet hedefin 60 saniye içerisinde platformdan atabilecek bir sumo robot algoritması geliştirilecektir.
Interfaces II
- lwIP kütüphanesi ile UDP haberleşme örneği aşağıdaki linkte verilmektedir.
https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_apps/lwip_udp_perf_server/src/udp_perf_server.c
bu kod parçacığında 162-260. satırlar arasında UDP paketi yakalandığında çağrılan callback fonksiyonu bulunmaktadır. Fonksiyonu modifiye ederek, Ethernetten içerisinde ‘S,’E’,’L’,’A’,’M’ byte’ı barıdıran bir paket geldiğinde, geriye ‘M,’E’,’R,’H,’A,’B’,’A’ byte’larını gönderen bir uygulama geliştiriniz. - MAC adresi nedir?
- TCP ve UDP arasındaki farklar nedir?
Microblaze
- Aşağıda Microblaze, uartlite ve AXI Interconnect IP’lerinin giriş ve çıkış arayüzleri verilmiştir.



Bu üç IP’i birbirlerine bağlayarak microblaze’in UART paketleri gönderebileceği sistemi oluşturunuz. Diğer (Örn, DLMB, ILMB) bağlantıların çizilmesine gerek yoktur. - Aşağıda blok diyagramda tasarlanmış olan bir microblaze tabanlı sistemin Adress Editor pencere görüntüsü bulunmaktadır.

Microblaze’e bağlı olan GPIO IP’sinin giriş bölümüne 8 bitlik bir switch bağlanmış, çıkış bölümüne ise LED’ler bağlanmıştır. AXI GPIO’nun saklayıcı listesi aşağıda verilmektedir.
Bu sistem için, CPU üzerinde switch’lerden alınan değerin bir fazlasını LED’lerde gösterecek bir kod parçacığı geliştiriniz. - AXI Interrupt Controller IP’sinin görevi nedir?
- Microblaze gibi softcore bir işlemci hangi durumlarda kullanılması tercih edilebilir? Hardcore bir işlemciye göre avantaj ve dezavantajlarını sıralayınız.
Performance Profiling and Debugging
- Breakpoint nedir? Ne amaçla kullanılır?
- Profiler Tool nedir?
- Bir yazılımda en yavaş çalışan fonksiyonu bulmak için izlenebilecek stratejiler nedir?
QEMU
- QEMU nedir?
- Bir emulatör kullanmanın avantaj ve dezavantajları nedir?
Final Sample Questions
Donanım Doğrulama Metodları (DDM): Sınıflar
- patternGenerator isminde bir sınıf oluşturunuz. Sınıfın UML Diagramı aşağıda verilmektedir.

Sınıfta 2 adet 32 bitlik pattern ve currentSeed isimli saklayıcı bulunmaktadır. Sınıfın constructor’u int türünde initSeed isminde bir argüman almakta ve aldığı argümanı currentSeed saklayıcısına yazmaktadır. setSeed fonksiyonu currentSeed değerini sabit olarak 32’h1234 değerine atamaktadır. randomGenerator fonksiyonu ise aşağıda verilen operasyonu gerçekleştirmektedir.
void randomGenerator() {
pattern = currentSeed;
pattern = pattern ^ ( pattern << 13);
pattern = pattern ^ ( pattern >> 17);
pattern = pattern ^ ( pattern << 5);
currentSeed = pattern;
}
patternGenerator sınıfından testbench modülünde bir obje türetip, constructor’una 1234 decimal sayısını veriniz. Ardından pattern degiskenini $display ile ekrana gösteriniz. randomGenerator fonksiyonunu çağırıp pattern değişkenini $display ile ekrana gösteriniz.
- aluTest isimli bir sınıf geliştiriniz. Bu sınıfın UML diyagramı aşağıda verilmektedir.

Bu sınıf içerisinde arg1, arg2, operation ve result isminde 4 adet saklayıcı barındırmaktadır. arg1, arg2 ve result 32 bitlik, operation ise 2 bitliktir. Sınıftın constructor’u bir argüman almamakta ve constructor çalıştığında sınıfta bulunan tüm değişkenlere sıfır değerini atamaktadır. setOper fonksiyonu bir argüman alıp, aldığı argümanı operation değişkenine atamaktadır. setArgs fonksiyonu iki argüman alıp, aldığı argümanları arg1 ve arg2 değişkenlerine atamaktadır. doOperation fonksiyonu argüman almaktadır. Bu fonksiyon sınıfın içindeki operation saklayıcısının değerine göre aşağıda verilen işlemleri yapmaktadır.
operation == 0 –> result = arg1 + arg2
operation == 1 –> result = arg1 – arg2
operation == 2 –> result = arg1 * arg2
operation == 3 –> result = arg1 & arg2
aluTest sınıfını tasarladıktan sonra, aluTest sınıfını kullanan bir testbench hazırlayınız. Bu testbench ile aluTest sınıfının yapabildiği 4 farklı operasyonu test etmelidir.
DDM: Kalıtım
- aluTest sınıfından kalıtım yapılarak aluTestPlus isminde bir sınıf oluşturunuz. Bu sınıfın içerisinde ek bir fonksiyon olarak doOperations2 isimli bir fonksiyon bulunmalıdır. Sınıfın UML diyagramı aşağıda verilmekedir.

doOperations2 fonksiyonu operation değişkenine bakarak aşağıda verilen operasyonları yapmaktadır.
operation == 0 –> result = arg1 | arg2
operation == 1 –> result = arg1 ^ arg2
operation == 2 –> result = arg1 + 1
operation == 3 –> result = arg2 + 1
aluTestPlus sınıfını tasarladıktan sonra, aluTestPlus sınıfını kullanan bir testbench hazırlayınız. Bu testbench ile aluTestPlus sınıfının yapabildiği 8 farklı operasyonu test etmelidir.
DDM: Değişken Türleri
- aluTestPlus sınıfından aluTestPlus2 isimli bir sınıf kalıtım yapınız. Bu sınıfın içerisinde void doOperation3(string argIn1, string argIn2, string operationIn) isimli bir fonksiyon bulunmaktadır. Bu fonksiyon aldığı string argIn1 ve argIn2 argümanlarından herhangi biri floating point ise (yani string’in içinde nokta işareti varsa) aşağıda verilen operasyonları yapmaktadır.
operationIn == 0 –> result = argIn1 * argIn1
operationIn == 1 –> result = argIn1+ arg2
operationIn == 2 –> result = argIn1 – 1
operationIn == 3 –> result = arg2 + 1
eğer string argIn1 ve argIn2 argümanları floating point değiller ise (yani string içinde nokta işareti yok ise) aşağıda verilen operasyonları yapmaktadır.
operationIn == 0 –> result = argIn1 – argIn2
operationIn == 1 –> result = argIn1* arg2
operationIn == 2 –> result = argIn1 – 5
operationIn == 3 –> result = arg2 + 5
aluTestPlus2 sınıfını tasarladıktan sonra, aluTestPlus2 sınıfını kullanan bir testbench hazırlayınız. Bu testbench ile aluTestPlus sınıfının yapabildiği 8 farklı operasyonu test etmelidir.
DDM: Arayüzler
- modul1 ve modul2 isminde iki modül tanımlaması yapınız. Bu modüllere ortak olarak giren ve çıkan sinyaller aşağıda verilmektedir.
* clk
* rst
* data[31:0]
* wrEn
verilen 4 sinyali gruplayarak myIntf isimli bir interface tanımlaması yapınız. Bu interface’i her iki modül için kullanınız. Ayrıca modul2 için out isminde bir bitlik çıktı vardır. modul1 her clock cycle data sinyalinin değerini bir arttırarak dışarıya sürmektedir. wrEn sinyalini ise sabit olarak 1 olarak sürmektedir. rst geldiği zaman ise data sinyalini 0’a atamaktadır. Modül 2 wrEn sinyali aktif iken kendine gelen data sinyalinin değeri 100 ise, out çıkışından 1 sinyali çıkartmaktadır. Eğer rst sinyali aktif ise out çıktısı 0 olmalıdır.
Bir testbench ortamı geliştirip modul1 ve modul2’in sahip olduğu myIntf interface’ini birbirine bağlayınız. Clock’u interface’e testbench’ten besleyiniz. - Modport nedir? Ne amaçla kullanılmaktadır?
DDM: Rasgeleleştirme
- rand ve ranc nedir? Aralarındaki fark nedir? Örnek vererek açıklayınız.
- randomUretici isimli bir sınıf tasarlayınız. Bu sınıfta 2 bitlik bir rand türünde rasgele isimli bir saklayıcı tanımlayınız. Bu değişkenin rasgele üretimi esnasında 0 sayısının üretilmemesi için bir constraint tanımı yapınız. randomUretici sınıfından bir obje türetip, initial/begin bloğu içerisinde randomize fonksiyonunu 10 defa döngü ile çağırıp üretilen rasgele değerleri $display ile ekranda gösteriniz.
