8086 ve PIC’den sonra bu uygulamada S3E SK yı kullanarak bir karaşimşek efekti uygulaması yapacağız. Sanırım karaşimşek efekti yapma olayı takıntı haline geldi.
B- Uygulama:
Teknik olarak bundan önceki fpga uygulamalarına yeni bir şey katmadığından burada fazla açıklama yapmayacağım. Daha doğrusu açıklama yapmayacağım :D. Aşağıda uygulamanın vidyosunu, kodları ve proje dosyasını bulabilirsiniz.
Tavsiyem öncelikle vidyoyu izledikten sonra bu uygulamayı yapmayı bir denemenizdir. Sorun yaşarsanız kodlara bakabilirsiniz. Hala sorun yaşıyorsanız proje dosyasını bilgisayarınıza indirip bir de öyle deneyin.
C – Kod (Verilog):
- `timescale 1ns / 1ps
- module ana(SAAT,LED);
- // Girdi-Çıktı kapıları
- input SAAT;
- output [7:0] LED;
- // Yazmaçlar
- reg [24:0] saat_sayac;
- reg [7:0] ledler;
- reg yon;
- initial begin // İlk değerleri yazmaçlara ver
- ledler <= 8’b00000001;
- saat_sayac <= 25’b0000000000000000000000000;
- end
- always @ (posedge SAAT) begin
- if( saat_sayac == 25’b1011111010111100001000000)
- begin
- if(yon == 1’b0) begin // Sola kaydır
- if(ledler == 8’b10000000) begin
- ledler <= ledler >> 1;
- yon <= 1’b1;
- saat_sayac <= 25’b0000000000000000000000000; // Sayacı sıfırla
- end
- else begin
- ledler <= ledler << 1;
- saat_sayac <= 25’b0000000000000000000000000; // Sayacı sıfırla
- end
- end
- else begin // Sağa kaydır
- if(ledler == 8’b00000001) begin
- ledler <= ledler << 1;
- yon <= 1’b0;
- saat_sayac <= 25’b0000000000000000000000000; // Sayacı sıfırla
- end
- else begin
- ledler <= ledler >> 1;
- saat_sayac <= 25’b0000000000000000000000000; // Sayacı sıfırla
- end
- end
- end
- else begin
- ledler <= ledler;
- saat_sayac <= saat_sayac + 25’b0000000000000000000000001; // Sayacı 1 arttır
- end
- end
- assign LED = ledler;
- endmodule // modülü sonlandır
D- UCF Dosyası:
- NET “SAAT” LOC = “C9” | IOSTANDARD = LVCMOS33 ;
- NET “SAAT” PERIOD = 20.0ns HIGH 40%;
- NET “LED<7>” LOC = “F9” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
- NET “LED<6>” LOC = “E9” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
- NET “LED<5>” LOC = “D11” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
- NET “LED<4>” LOC = “C11” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
- NET “LED<3>” LOC = “F11” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
- NET “LED<2>” LOC = “E11” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
- NET “LED<1>” LOC = “E12” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
- NET “LED<0>” LOC = “F12” | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
E- Proje Dosyası (Xilinx ISE):
Elinizdeki FPGA kitine göre kodda bazı değişiklikler yapmanız gerekebilir.
F- Vidyo: