Buradasın
VHDL FPJ Programlama Dersi: Ödev Kod İncelemesi ve UART Protokolü
youtube.com/watch?v=VGkZO4So1YkYapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan VHDL programlama dersinin 36. bölümüdür. Eğitmen, öğrencilerin ödev olarak gönderdikleri VHDL kodlarını inceliyor ve analiz ediyor.
- Videoda, UART protokolü ile çalışan bir RX receiver projesinin kodları detaylı şekilde inceleniyor. Eğitmen, kodlarda bulunan syntax hatalarını düzeltiyor, block RAM kullanımı, state makinesi, data buffer kullanımı ve header kontrolü gibi konuları ele alıyor. Ayrıca, RAM'e yazma ve okuma işlemlerinin simülasyonla test edilmesi ve test bench oluşturma süreci gösteriliyor.
- Video, ödev kodlarının profesyonel olduğu, parametrik tanımlamaları ve yorumları sayesinde değiştirilebilir olduğu vurgulanarak sonlanıyor. Eğitmen, müşteri taleplerinin nasıl karşılanması gerektiği konusunda önemli bilgiler veriyor ve gereksinimlerin dışına çıkmamanın önemi üzerinde duruyor.
- 00:01VHDL Proje Ödevi Tanıtımı
- Öğretmen, bir önceki videoda Arrow Orix kart için bir proje ödevi hazırladığını ve ilk doğru yapana kartı hediye edeceğini belirtiyor.
- Öğrencilerin gönderdiği kodları inceleyecek ve isimleri yerine tarihlerini kullanarak kodları değerlendirecek.
- Proje, UART verilerini alarak block RAM'a yazma veya okuma işlemlerini gerçekleştirmeyi içeriyor.
- 01:57Proje Detayları
- Bilgisayardan FPGA'ya gelen komutlar altı byte'lık olup, "ABCD" header, komut (1 yazma, 2 okuma), adres, data ve checksum içeriyor.
- Top modülü, gelen verileri kontrol ederek header, komut, adres ve data'ları ayrıştırıyor ve checksum'ı doğruluyor.
- Doğru checksum ile yazma komutu geldiğinde adresi ve datayı kaydediyor, okuma komutu geldiğinde ise adresi okuyup bilgisayara cevap veriyor.
- 04:18Kod İncelemesi
- Öğretmen, kodları Mivodo'a aktararak syntax hatalarını incelemeye başlıyor.
- Port tanımlamalarında ve generic kısımlarında noktalı virgül kullanımı hataları düzeltiyor.
- "open" anahtar kelimesinin kullanımı ve input portlarının "open" bırakılamaması açıklanıyor.
- 06:12Mod İşlemi Sorunu
- Mod 256 işlemi için VHDL'de doğrudan mod operatörü kullanılamıyor, bunun yerine son sekiz bit alınması gerekiyor.
- "rem" operatörünün sentezlenebilir olduğu belirtiliyor.
- Kodda "open" bırakılan input portları düzeltildikten sonra syntax hataları kurtarılmış oluyor.
- 11:23Veri İşleme Hataları
- Data buffer'ın ilk byte'a veri geldiğinde, önce header kontrolü (ABCD) yapılması gerekiyor, ancak bu kodda kontrol yapılmamış.
- Header gelmiş mi kontrolü yapılmadan direkt komut (yaz/oku) kontrolüne geçilmiş, bu hatalı bir yaklaşım.
- Header geldiyse komut, adres, data alınıp checksum kontrol edilmeliydi.
- 12:55Kod Hataları ve Doğruluk
- Kodda adres eşitliği kontrolü yapılmış, ancak datain iki byte olarak gösterilmişken, data bir byte olarak gelmeliydi.
- RAM 8 bitlik tanımlanmışken, data 16 bitlik (16'down 0) olarak gösterilmiş, bu sentezde hata verir.
- Data buffer 32 bitlik bir vector tanımlanmışken, state sinyaline atama yapılmış, bu doğru bir ifade değildir.
- 13:59Kod Tasarım Hataları
- Oku komutunda adres eşitliği kontrolü yapıldıktan sonra counter bir arttırılıyor.
- Counter bir ise data buffer'a iki byte yazılmaya çalışılmışken, data buffer bir byte'lık bir yapıdır.
- Kodun mantığı fena değil ancak detaylarda hatalar bulunmaktadır.
- 14:51Kütüphane Kullanımı
- Numeric sdd ve std_logic_unsigned kütüphanelerinin aynı anda kullanılması tavsiye edilmiyor.
- Numeric sdd yerine std_logic_arith kütüphanesi kullanılabilir.
- Google'da "numeric sdd vs std_logic_unsigned" araması yapıldığında, bazı kullanıcılar numeric sdd'yi kullanmamayı öneriyor.
- 17:32Kod Tasarım Alternatifleri
- Data buffer 6 byte'lık bir buffer, data out sinyali, ram için arix, antic, word sinyalleri tanımlanmış.
- Idle, komut, oku-yaz, transmit, checkson state'leri ve bir byte'lık counter oluşturulmuş.
- Component deklarasyonu yapmadan doğrudan entity work kullanarak bileşenler çağrılabilir, bu daha kısa bir gösterimdir.
- 19:01Yazılım Tasarımında Müşteri İhtiyaçları
- Yazılım tasarımda müşteriye sadece belirttiği ihtiyaçları yerine getirmek gerekir, gereksinimin dışına çıkarak ek özellik eklemek doğru değildir.
- Ek özellikler tasarım aşamasında, toplantılar veya review süreçlerinde müşteriye önerilebilir ve onaylanabilir.
- RAM'e sürekli yazma işlemi (writeable) gereksiz güç tüketimi ve gürültü oluşturacağı için mantıksal olarak doğru değildir.
- 20:39Veri İşleme ve Kontrol Süreci
- RX'ten gelen byte'lar kontrol edilerek data buffer signal'a aktarılır ve checksum ile karşılaştırılır.
- Eğer checksum tutarlıysa komut işlemine geçilir, tutarsızsa hatalı durum olarak işlenir.
- Transmit işlemi sırasında counter değeri kontrol edilerek veriler gönderim için hazırlanır.
- 25:28Test Bench Oluşturma
- Tasarımın doğruluğunu kontrol etmek için test bench oluşturulması gerekiyor.
- Test bench'te clock sinyali 5 nano saniye bekleyip 45 nano saniye bekleyerek 50 nano saniyelik periyoda sahip şekilde üretilir.
- UART sinyali için bit süresi 8,68 mikrosaniye olarak hesaplanır ve hex AB, CD gibi veriler için constant tanımlanır.
- 36:35Simülasyon ve Sonuçlar
- Simülasyon sonucunda gönderilen verilere cevap dönmüş ve komut işlemine geçilmiştir.
- Yazma işlemi başlamış ve RAM'e yazma işlemi gerçekleştirilmiştir.
- Simülasyon sonuçları incelenerek tasarımanın doğru çalıştığı kontrol edilmiştir.
- 38:47Veri Aktarımı ve Kod Testi
- Üçüncü adrese 67 yazılması ve 15 değerinin okunması için kod test ediliyor.
- ABCD 2023 ve checksum değerleri ile veri gönderimi yapılıyor.
- Hatalı checksum değeri (9E yerine 9D) gönderilerek hata durumu test ediliyor.
- 41:00Kodun Çalıştırılması ve Değerlendirilmesi
- Test kodu değiştirildikten sonra simülasyon başlatılıyor ve hata mesajı alınıyor.
- Kodun doğru çalıştığı, verilerin doğru şekilde okunduğu ve hatalı verilerin tespit edildiği görülmüyor.
- Kodun yazanın (Muhammed Kocaoğlu) çalışmasını etkilemediği belirtiliyor.
- 43:27Kodun Yapısı ve Değerlendirme
- Kodda parametrik tanımlamalar yapılarak kodun değiştirilebilirliği artırılmış.
- Timeout değeri 12 bit olarak tanımlanmış ve veri gelmezse timeout'a düşmesi sağlanmış.
- Kodun profesyonel bir sayısal tasarımcı tarafından yazıldığı ve öğrenciyse bile başarılı olacağına inanıldığı belirtiliyor.
- 47:25Diğer Kodların İncelemesi
- Diğer kodlarda da benzer component tanımları ve data buffer'lar bulunuyor.
- Header kontrolü yapılmadığı için kodun tam olarak doğru çalışıp çalışmadığı kesin olarak belirlenemiyor.
- Checksum hesaplaması için 11 bit kullanılmış, ancak 8 bit yeterli olabilirdi.
- 51:07Dersin Kapanışı
- Test bench kodunun real time olarak yazıldığı belirtiliyor.
- Kodlar GitHub'a "ders otuzaltı" olarak yüklenecek.
- Bir sonraki derste görüşmek üzere veda ediliyor.