FPGA Günlükleri – Clock Division

  • 6 ay önce, Baran EKREM yazdı.
  • 0 Yorum
  • 404 Kişi Okudu

Bir önceki yazılarda dijital temelleri hatırlarken artık zamanlama işlerine de girmem gerekiyor diye düşünüyordum. Artık vakit geldi. Olayın teorisi oldukça basitmiş. Bildiğiniz sayıcı tasarlıyoruz. Her arttırma 1 Clock’da yapılsın. Bunu yükselen kenar olarak yapalım. Her yükselen kenarda sayıcıyı 1 arttıralım. 50 MHz kristal için 50 milyona kadar saydığımızda 1 saniye geçmiş olacak. Bu sayma işlemlerini farklı sayaçlarda yaparak farklı zamanlama çıktıları elde edeceğiz. Hadi zamanı bükelim!

Öncelikle VHDL ortamında Toplama, Çıkarma, Büyük – Küçük Kontrol gibi işlemler için şu kütüphaneyi eklememiz gerekiyor.

Yapacağımız zamanlama için referansımız Clock girişi olacak bunu entity kısmında şu şekilde belirtiyoruz.

Sayma işlemi için bir adet sayıcıya ve bir adet sabit değere ihtiyacımız var. Sabit değer üst limitimiz olacak. Son olarak uygulama için LED’i toggle edecek bir değişkene ihtiyacımız var.

Bu değişkenleri ve sabitleri VHDL ile tanımlamak normal yazılımlardan çok farklı gözüküyor diyebilirim. Örneğin bir sabit tanımlayalım.

Bu tanımlamada sabit olduğunu “constant” ifadesi ile belirtiyoruz. Sabitin ismi ise “COUNT_1HZ” olarak tanımlanıyor. Değeri ise “:= 25000000” bu şekilde atanıyor ve yazılımda olduğu gibi noktalı virgül ile satır son buluyor. Son olarak NATURAL ifadesi vardır ve bu da sabitin doğal sayılar kümesinde olduğunu belirtir. POSITIVE olsaydı sıfır dahil olmazdı.

Bunun dışında 2 adet “Signal” tanımlaması olacak.

İlk tanımlama LED durumunu tutan toggle değişkeni olacak. Bit ataması için tek tırnak kullanılıyormuş.

İkinci sinyal ise 0 dan “COUNT_1HZ” sabitine kadar sayacak olan değişken olacak ama bu signal olarak tanımlı. RTL çıktısında daha iyi anlaşılıyor. Gerisini temel MCU ve yazılımdan hatırlayacaksınız.

Algoritma ise şöyle olacak :

  1. Yükselen kenarı algıla.
  2. Sayac istenen değere ulaştı mı ?
  3. Evet ise sayacı sıfırla ve biti tersle.
  4. Hayır ise 1 arttır.
  5. LED çıkışına toggle bitini yükle. (VAL_TOGGLE_1HZ)

RTL Çıktısı : 


Eğer birden çok zamanlama gerekirse şu şekilde yapılabilir.

RTL Çıktısı : 


Logic Analyzer Çıktısı :


Çıktılara bakacak olursak her şey yolunda gözüküyor. Şimdilik bu kadar.

Esen kalın.

Bir Yorum Yazın