FPGA ile (Sahada Programlanabilir Mantık Dizeleri) gerçekleştirilen bu örnek uygulamamızda deneme kartımız üzerinde bulunan 12 adet tümleşik LED’i kullanarak 4 adet örnek uygulama yapacağız. Bu uygulamalar sırası ile;

1. LED FLAŞÖR
2. FLİP-FLOP
3. POLİS ÇAKAR
4. LED ANİMASYON

İlk örnek uygulamamızda, PİN_83’e bağlı olan D7 ile etiketlenmiş LED’i bir süre yakıp söndüreceğiz.
LED’in yanık kalma ve süresini ise, kart üzerinde tümleşik olarak bulunan 50 MHz’lik kristalin osilasyon frekansının bölünmesi ile elde edilen frekans ile buluyoruz.

Kristal osilatörden gelen saat darbesi aşağıdaki kod ile bölünerek bulunmaktadır;

reg [25:0] sayac;
.
.
.
.
always @ (posedge saatDarbesi)
begin
sayac <= sayac+1;
end

Kristal Osilatörün salınım frekansı 50 MHz (50,000,000 Hz), reg tipindeki sayac değişkeni ise 26 bit uzunluğunda;

50,000,000 / 2^26 = 0,745 Hz

T = 1/f olduğundan,

1 / 0,745 = 1,342 sn, LED’in yanık ve sönük olduğu süre toplamı,

0,671 sn LED Yanık, 0,671 sn LED Sönük olur.

Diğer örnek uygulamalarda da, benzer bir şekilde hassasiyet listesinde, saatDarbesine duyarlı olduğu belirtilen daima(always) blokları LED kontrol ve animasyon frekanslarını oluşturmak için kullanılmışlardır.

Uygulamalar ile diğer açıklamalar program kodlarının arasındaki yorum satırlarında yapılmıştır.

Örnek uygulamalarımızda; FPGA çipi olarak ALTERA Firmasının Cyclone IV ailesinden EP4CE6E22C8 model bir FPGA ve geliştirme kartına tümleşik olan LED’leri kulandık. Bu FPGA çipinin gelişmiş özellikleri için modelin datasheet’i(bilgiSayfası) incelenmelidir. Ama kabaca olarak kullandığımız FPGA çipi; 6272 Lojik Elementli, 270Kbit Gömülü Hafızası, 91 adet I/O (Giriş/Çıkış) Pini bulunan, 144 ayaklı bir çiptir.

ALTERA firmasının üretmiş olduğu FPGA’ları programlayabilmek için, “Quartus” Derleyicisini kullanıyoruz. Quartus Derleyicisinin kurumsal internet sitesinden indirdiğimiz “Demo” versiyonu ile bu örnek uygulamayı gerçekleştirdik.

FPGA’ları programlayabilmek için yaygın olarak kullanılan iki dil; VDHL ve Verilog içerisinden, “C” söz dizimine daha yakın geldiği için “Verilog” ile programlamayı tercih ettik.

Not:

Ben karta donanımsal bir müdahale de bulunurken, PİN_72 ye bağlı bulunan D3 etiketli LED’i bozdum. Dolayısı ile animasyonlarda bu LED benim kartım üzerinde çalışmazken sizin uygulamalarınızda çalışacaktır, kodda bir sorun yoktur. E.Ç

FPGA ve LED’lerin arasındaki Pin Bağlantıları :

led

LED Kontrol ve Animasyon Pin Tanımlama & Bağlantıları

Çıkış Pinleri
LED_D3 PIN_72 4. Uygulama
LED_D4 PIN_73 4. Uygulama
LED_D5 PIN_74 4. Uygulama
LED_D6 PIN_80 4. Uygulama
LED_D7 PIN_83 1,2,3,4. Uygulama
LED_D8 PIN_84 4. Uygulama
LED_D9 PIN_77 4. Uygulama
LED_D10 PIN_76 4. Uygulama
LED_D11 PIN_75 4. Uygulama
LED_D12 PIN_71 4. Uygulama
LED_D13 PIN_70 2,3,4. Uygulama
LED_D14 PIN_69 4. Uygulama
Giriş Pinleri
saatDarbesi PIN_23 1,2,3,4. Uygulama

1.Uygulama: LED FLAŞÖR Verilog Program Kodu

/*******************************************************************************
* @dosya Flasor Uygulaması
* @yazar Erkan ÇİL
* @sürüm V0.0.1
* @tarih 26-Temmuz-2016
* @özet Cyclone IV EP4CE6 FPGA Flasor Uygulaması
*
* Bu örnek uygulamada, Cyclone IV EP4CE6 FPGA kartını ile LED'in yakılıp
* sondurulmesi kontrol edilecektir.
******************************************************************************
*
* Bu program özgür yazılımdır: Özgür Yazılım Vakfı tarafından yayımlanan GNU
* Genel Kamu Lisansı’nın sürüm 3 ya da (isteğinize bağlı olarak) daha sonraki
* sürümlerinin hükümleri altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
*
******************************************************************************/
module flasor (saatDarbesi, rst, LED);
// flasor MODÜLÜ TANIMI
//-------------Giriş Portları-----------------------------
input saatDarbesi, rst;
//-------------Çıkış Portları-----------------------------
output LED;
//-------------Çıkış Portları Veri Tipleri------------------
// Çıkış portları bellek elemanı(reg-yazmaç) veya bir tel olabilir
reg [25:0] sayac;
reg [0:0] LED;
//------------Kod Burada Başlamaktadır-------------------------
// Ana döngü bloğu
// Bu sayaç yükselen kenar tetiklemeli olduğundan,
// Bu bloğu saatin yükselen kenarına veya,
// reset butonun alçalan kenarına göre tetikleyeceğiz.
always @ (posedge saatDarbesi)
begin
sayac <= sayac+1;
end
always @ (posedge saatDarbesi, negedge rst)
begin
case(sayac[25:25]) //1 bitlik döngü
0: LED <=1'b0; // LED'i söndür.
1: LED <=1'b1; // LED'i yak.
endcase
end
endmodule // flasor MODÜLÜ SONU

 

2.Uygulama: Flip-Flop Verilog Program Kodu

/*******************************************************************************
* @dosya Flip Flop LED Uygulaması
* @yazar Erkan ÇİL
* @sürüm V0.0.1
* @tarih 26-Temmuz-2016
* @özet Cyclone IV EP4CE6 FPGA Flip Flop LED Uygulaması
*
* Bu örnek uygulamada, Cyclone IV EP4CE6 FPGA kartını ile LED'in yakılıp
* sondurulmesi kontrol edilecektir.
******************************************************************************
*
* Bu program özgür yazılımdır: Özgür Yazılım Vakfı tarafından yayımlanan GNU
* Genel Kamu Lisansı’nın sürüm 3 ya da (isteğinize bağlı olarak) daha sonraki
* sürümlerinin hükümleri altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
*
******************************************************************************/
module flipFlopLED (saatDarbesi, rst, LED);
// flipFlopLED MODÜLÜ TANIMI
//-------------Giriş Portları-----------------------------
input saatDarbesi, rst;
//-------------Çıkış Portları-----------------------------
output [1:0]LED;
//-------------Çıkış Portları Veri Tipleri------------------
// Çıkış portları bellek elemanı(reg-yazmaç) veya bir tel olabilir
reg [25:0] sayac;
reg [1:0] LED;
//------------Kod Burada Başlamaktadır-------------------------
// Ana döngü bloğu
// Bu sayaç yükselen kenar tetiklemeli olduğundan,
// Bu bloğu saatin yükselen kenarına veya,
// reset butonun alçalan kenarına göre tetikleyeceğiz.
always @ (posedge saatDarbesi)
begin
sayac <= sayac+1;
end
always @ (posedge saatDarbesi, negedge rst)
begin
case(sayac[25:25]) //1 bitlik döngü
0: LED <=2'b01; // LED'i söndür.
1: LED <=2'b10; // LED'i yak.
endcase
end
endmodule // Flip Flop LED MODÜLÜ SONU

 

3.Uygulama: Polis Çakar Verilog Program Kodu

/*******************************************************************************
* @dosya Polis Çakar LED Uygulaması
* @yazar Erkan ÇİL
* @sürüm V0.0.1
* @tarih 26-Temmuz-2016
* @özet Cyclone IV EP4CE6 FPGA Polis Çakar LED Uygulaması
*
* Bu örnek uygulamada, Cyclone IV EP4CE6 FPGA kartını ile LED'in yakılıp
* sondurulmesi kontrol edilecektir.
******************************************************************************
*
* Bu program özgür yazılımdır: Özgür Yazılım Vakfı tarafından yayımlanan GNU
* Genel Kamu Lisansı’nın sürüm 3 ya da (isteğinize bağlı olarak) daha sonraki
* sürümlerinin hükümleri altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
*
******************************************************************************/
module polisCakar (saatDarbesi, rst, LED);
// polisCakar MODÜLÜ TANIMI
input saatDarbesi, rst;
//-------------Çıkış Portları-----------------------------
output [1:0]LED;
//-------------Çıkış Portları Veri Tipleri------------------
// Çıkış portları bellek elemanı(reg-yazmaç) veya bir tel olabilir
reg [25:0] sayac;
reg [1:0] LED;
//------------Kod Burada Başlamaktadır-------------------------
// Ana döngü bloğu
// Bu sayaç yükselen kenar tetiklemeli olduğundan,
// Bu bloğu saatin yükselen kenarına veya,
// reset butonun alçalan kenarına göre tetikleyeceğiz.
always @ (posedge saatDarbesi)
begin
sayac <= sayac+1;
end
always @ (posedge saatDarbesi, negedge rst)
begin
case(sayac[25:22]) //1 bitlik döngü
0: LED <=2'b01;
1: LED <=2'b01;
2: LED <=2'b00;
3: LED <=2'b01;
4: LED <=2'b01;
5: LED <=2'b00;
6: LED <=2'b01;
7: LED <=2'b01;
8: LED <=2'b10;
9: LED <=2'b10;
10: LED <=2'b00;
11: LED <=2'b10;
12: LED <=2'b10;
13: LED <=2'b00;
14: LED <=2'b10;
15: LED <=2'b10;
endcase
end
endmodule // Polis Çakar LED MODÜLÜ SONU

 

4.Uygulama: LED Animasyon Verilog Program Kodu

/*******************************************************************************
* @dosya LED Animasyon Uygulaması
* @yazar Erkan ÇİL
* @sürüm V0.0.1
* @tarih 26-Temmuz-2016
* @özet Cyclone IV EP4CE6 FPGA LED Animasyon Uygulaması
*
* Bu örnek uygulamada, Cyclone IV EP4CE6 FPGA kartını ile LED'in yakılıp
* sondurulmesi kontrol edilecektir.
******************************************************************************
*
* Bu program özgür yazılımdır: Özgür Yazılım Vakfı tarafından yayımlanan GNU
* Genel Kamu Lisansı’nın sürüm 3 ya da (isteğinize bağlı olarak) daha sonraki
* sürümlerinin hükümleri altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
*
******************************************************************************/
module ledAnimasyon (saatDarbesi,rst,bilgiCikis);
// LED Animasyon MODÜLÜ TANIMI
//-------------Giriş Portları-----------------------------
input saatDarbesi,rst; //saatDarbesi, rst giriş olarak tanımlanmıştır
//-------------Çıkış Portları-----------------------------
output [11:0] bilgiCikis; //bilgiCikis 12 bitlik çıkış olarak tanımlanmıştır
//-------------Çıkış Portları Veri Tipleri------------------
// Çıkış portları bellek elemanı(reg-yazmaç) veya bir tel olabilir
reg [11:0] bilgiCikis; //bilgiCikis register(kayıtcısının oluşturulması)
reg [29:0] sayac; //sayac register(kayıtcısının oluşturulması)
//------------Kod Burada Başlamaktadır-------------------------
// Ana döngü bloğu
// Bu sayaç yükselen kenar tetiklemeli olduğundan,
// Bu bloğu saatin yükselen kenarına veya,
// reset butonun alçalan kenarına göre tetikleyeceğiz.
always @ ( posedge saatDarbesi )
begin
sayac<=sayac+1;
end
always @ ( posedge saatDarbesi or negedge rst)
begin
case ( sayac[29:26] ) //case döngüsünün sayaç ile döndürülmesi
// case ( sayac[25:22] )
// 12 bitlik LED çıkış değerlerinin registere ve oradanda çıkışa aktarılması
0: bilgiCikis<=12'b111000111000;
1: bilgiCikis<=12'b000111000111;
2: bilgiCikis<=12'b110110110110;
3: bilgiCikis<=12'b101101101101;
4: bilgiCikis<=12'b011011011011;
5: bilgiCikis<=12'b000000000000;
6: bilgiCikis<=12'b010000010000;
7: bilgiCikis<=12'b111000111000;
8: bilgiCikis<=12'b111101111101;
9: bilgiCikis<=12'b111111111111;
10:bilgiCikis<=12'b111101111101;
11:bilgiCikis<=12'b111000111000;
12:bilgiCikis<=12'b010000010000;
13:bilgiCikis<=12'b000000000000;
14:bilgiCikis<=12'b111110000011;
15:bilgiCikis<=12'b000011111110;
endcase
end
endmodule // LED Animasyon MODÜLÜ SONU

 

LED Kontrol ve Animasyon Görseli :

Jpeg

LED Kontrol ve Animasyon PDF Dosyası :

İndir (PDF, 1.05MB)


e-posta : erkancil@gmail.com

ek: Uygulama Videoları: