1- Xilinx ISE Webpack Nedir?

Xilinx ISE Webpack Xilinx firmasının bedava dağıttığı ve Xilinx FPGAlarının üzerinde çalışılmasını sağlayan bir yazılımdır. Verilog veya VHDL ile yazılan kod sentezlenebilir ve Webpack aracılığıyla FPGA geliştirme ortamına yüklenebilir.

Xilinx ISE Webpack yazılımını indirmek için http://www.xilinx.com/ise/logic_design_prod/webpack.htm adresine gitmeniz ve
kaydolmanız gerekmektedir. Kayıt olduktan sonra yazılımı indirip bilgisayarınıza
kurabilirsiniz.

Yazılımı bilgisayarınıza kurduktan sonra gerekli ISE Webpack yazılım güncellemelerini yapmayı unutmayınız.

2- Xilinx ISE Webpack Kullanımı – Sentez

Yazılımın kullanımını göstermenin en iyi (ve kolay) yöntemi bir örnek olacağından bu bölümde Verilog dili ile bir kod yazıp sentezleyeceğiz. Yazdığımız kod Spartan S3E Starter Kit üzerindeki LED’leri açıp kapamaya yarayacak.

Öncelikle bilgisayarımıza kurduğumuz ISE Webpack yazılımını açalım. Aşağıdaki pencere ile karşılaşacağız:

s0_3_1.JPG

Herhangi bir kod yazmadan önce bir proje oluşturmamız gerekmektedir. Bunu yapmak için pencerenin yukarısındaki menüden File -> New Project i seçelim. Seçtiğimiz zaman aşağıdaki pencere ile karşılaşacağız.

s0_3_2.JPG

Bu pencerede Project Name kutucuğuna istediğimiz proje adını girelim. Ardından sağdaki Project Location kutucuğuna da proje dosyalarımızı konumlandıracağımız klasörü belirtelim. Top-Level Source Type için ise HDL‘i seçelim. Şimdi Next’e basabiliriz. Aşağıdaki pencere ile karşılaşacağız:

s0_3_3.JPG Bu pencerede kullandığımız FPGA’nın özelliklerini seçeceğiz. Product Category olarak General Purpose seçelim. Bu seçimi yapmamızın nedeni Xilinx firmasının Spartan 3E‘yi
general purpose
kategorisine koymasıdır. Ardından Family olarak Spartan3E‘yi seçelim. Eğer elinizde başka bir FPGA var ise uygun olan FPGA’yı listeden seçiniz. Ardından Device kutucuğuna Spartan3E‘nin hangi tipini kullandığımızı yazmamız gerekiyor. S3E Starter Kit üzerinde bulunan S3E XC3S500E‘dir. Bu yüzden bu kutucuk için XC3S500E seçimini yapalım. Package kutucuğuna ise FG320 girelim. Eğer elinizdeki S3E Starter Kit değilse bu seçimi de farklı yapmanız gerekebilir. Speed olarak ise -4 seçimini yapalım. Synthesis
tool
olarak Webpack ile beraber gelen XST (VHDL/Verilog) seçimini yapalım. Eğer elinizde farklı bir sentez programı var ise onu da kullanmanız mümkün. Simulator olarak da yine Webpack ile beraber gelen ISE Simulator (VHDL/Verilog)‘u seçelim. Preferred Language olarak ise Verilog seçelim. Diğer ayarları da yukarıdaki resimdeki gibi yaptıktan sonra Next‘e basalım. Aşağıdaki pencere ile karşılaşıyoruz:

s0_3_4.JPG

Bu pencere bizim proje dosyalarımız için
bir kaynak dosya oluşturmamızı sağlıyor. Eğer bir şey değiştirmeden Next
derseniz kaynak dosyalarınızı sonradan da oluşturabilirsiniz. Biz burada örnek
teşkil etmesi açısından yukarıdaki New Source… düğmesine basarak kaynak
dosyamızı oluşturalım. Aşağıdaki pencere ile karşılaşıyoruz:

s0_3_5.JPG

Soldaki listeden Verilog Module‘ü seçtikten sonra File Name kutucuğuna dosyamızın adını girelim. Ardından da dosyamızın konumunu Location kutucuğuna girelim (eğer bir terslik yok ise zaten sizin için proje klasörünüzün adresi bu kutucuğa otomatik olarak yazılacaktır). Bu penceredeki Next’ etıklayalım ve bir sonraki pencereye geçelim:

s0_3_6.JPG

Bu pencere yardımıyla tasarımımızdaki
iğneleri belirtebiliyoruz. Bu aşamada boş bırakıp geçmemizin herhangi bir
sakıncası yok ama yine örnek teşkil etmesi için bu pencerede saat darbemizi ve
LED çıkışımızı belirtelim. İlk olarak saat darbesi iğnesini belirtelim. Bunun
için Port Name kutucuğuna SAAT yazalım. İstediğiniz başka bir adı
da girebilirsizin. Direction yani iletim yönü için input yani

girdi‘yi seçelim. Diğer ayarları (Bus, MSB,LSB) boş bırakabiliriz.
Ardından kullanacağımız LED’in iğnesini belirtelim. Bunun için Port Name‘e
LED yazalım ve Direction olarak output yani çıktı‘yı
seçelim. Yine diğer alanları boş bırakabiliriz. Yukarıdaki anlatılanları
yaptığımızda penceremiz aşağıdaki hali alıyor.

s0_3_7.JPG

Şimdi Next‘e tıklayarak diğer
pencereye geçelim.

s0_3_8.JPG

Bu pencerede az önce oluşturduğumuz kaynak
dosyamız ve kapı bilgileri hakkında bilgi veriliyor. Finish‘e
basabiliriz. Finish‘e bastığımızda eğer proje klasörünüz gerçekte yok ise
olmadığına ama oluşturulacağına dair bir uyarı alacaksınız. Aksi takdirde
herhangi bir uyarı almayacaksınız. Aşağıdaki pencere ile karşılaşıyoruz:

s0_3_9.JPG

Oluşturmuş olduğumuz Verilog kaynağını listede görebiliyoruz. Bu örnekte daha fazla modül oluşturmak istemediğimizden

Next‘e basarak bir sonraki pencereye geçelim.

s0_3_10.JPG

Yukarıdaki pencere ile karşılaşıyoruz.
Eğer önceden oluşturduğunuz bir kaynak dosyasını oluşturmakta olduğunuz projeye
eklemek isterseniz bunu buradan yapabilirsiniz. Biz bu örnekte bunu yapmayacağız
ve Next’e basacağız. Projenize yeni dosya ekleme ve var olan dosya ekleme
işlemlerini sorunsuz olarak projenizi oluşturduktan sonra da yapabilirsiniz,
unuttuğunuz herhangi bir şey var ise panik yapmayın sonra da ekleyebilirsiniz.
Next’e tıklayalım.

s0_3_11.JPG

Yukarıdaki pencerede projemizin genel
özellikleri hakkında bilgilendiriliyoruz. Eğer önceki aşamalarda yaptığınız
ayarlardan emin değilseniz bu pencere yardımıyla bunları kontrol edebilirsiniz.
Finish‘e tıklayalım. Ana penceremiz aşağıdaki hali alıyor:

s0_3_12.JPG

Yukarıdaki resimde 1 ile işaretlenmiş kısımda proje dosyalarınızı ve dosyalarınız arasındaki bağlantıları görebilirsiniz. Eğer projenizin genel özelliklerinde değişiklik yapmanız gerekirse xc3s500e-4fg320 seçeneğine sağ tıklayıp Properties‘i seçip ayarlarınızı değiştirebilirsiniz.

Resimde 2 ile işaretlenmiş bölümde ise 1′de seçtiğiniz dosya üzerinde yapabileceğiniz işlemler listelenmektedir. Buraya biraz sonra döneceğiz.

Resimde 3 ile işaretlenmiş kısım ise dosyanızı içeriğinin görüntülendiği yerdir. Dikkat edecek olursanız şu an Design Summary dosyasını görmekteyiz. Bu Webpack ISE‘ın bize otomatik olarak oluşturduğu bir penceredir. Bu pencerede tasarımımız hakkında detaylı
bilgi edinebileceğiz. Buraya da az sonra geri döneceğiz.

“ana.v” dosyasını seçelim. Penceremiz aşağıdaki şekli alıyor.

s0_3_13.JPG

Gördüğünüz gibi Webpack otomatik
olarak girdi çıktı kapılarımızı ayarlamış ve modül tanımlamamızı yapmış. Bunun
nedeni projeyi oluştururken gerekli bilgileri girmemizdir. Girmeseydik bize boş
bir dosya verecekti. Yorum satırlarını silelim ve dosyayı kaydedelim. Ardından
sol üstteki kısımdan ana‘yı seçelim. Sol alttaki kısmın otomatik olarak
değiştiğini göreceğiz:

s0_3_14.JPG

User Constraints, Synthesize – XST,
Imlement Design, Generate Programming File
gibi seçeneklerin çıktığını
görüyoruz. Kodumuzu sentezleyebilmek için Synthesize – XST‘ye çift
tıklamamız yeterli olacaktır. Bu aşamada tıklamamızın herhangi bir anlamı yok
çünkü modülümüz herhangi bir şey yapmıyor. Birkaç satır kod yazmaya geçelim.

Bir tane yazmaç tanımlayalım. Bu yazmacı sayaç olarak kullanacağız. Kodumuz aşağıdaki şekli alıyor:

  1. </p>
  2. <p align=”justify”> <code>`timescale 1ns / 1ps</code>       module ana(SAAT, LED);
  3. // girdi kapıları
  4. input SAAT;
  5. // çıktı kapıları
  6. output LED;// yazmaçlar
  7. reg [25:0] sayac;endmodule
  8. <p align=”justify”>

Gördüğünüz gibi sayacımızı 26 bitlik
tanımladık. Bunu yapmamızın nedeni sayacımızın 50 000 000 sayısına kadar
saydırmak istememizdir. Bunu yapmamızın nedeni ise saat darbemizin 50Mhz
olmasıdır. Şimdi de yazmacımızın ilk değerini belirtmek için initial
komutunu kullanalım.

  1. </p>
  2. <p align=”justify”> </p>
  3. <code>`timescale 1ns / 1ps</code>       module ana(SAAT, LED);
  4. // girdi kapıları
  5. input SAAT;// çıktı kapıları
  6. output LED;
  7. // yazmaçlar
  8. reg [25:0] sayac;// yazmaçlara ilk değerlerş vereliminitial begin
  9. sayac <= 26’b00000000000000000000000000;
  10. end
  11. endmodule
  12. <p align=”justify”>

Şimdi de kodumuzun asıl işlevli kısmını
kodlayalım. Öncelikle her pozitif saat darbesinde bir bir işlem yapılması
gerektiğini belirtmek için always komutunu posedge ile beraber
kullanalım.

  1. </p>
  2. <p align=”justify”> </p>
  3. <code>`timescale 1ns / 1ps</code>       module ana(SAAT, LED);
  4. // girdi kapıları
  5. input SAAT;
  6. // çıktı kapıları
  7. output LED;// yazmaçlar
  8. reg [25:0] sayac;// yazmaçlara ilk değerlerş verelim
  9. initial begin
  10. sayac <= 26’b00000000000000000000000000;end// her pozitif saat kenarında tetiklen
  11. always @ (posedge SAAT) begin
  12. // Kodumuzu buraya yazacağız
  13. end
  14. endmodule
  15. <p align=”justify”>

Şimdi de always bloğunun içine sayacımızı ve karşılaştırmalarımızı kodlayalım.

`timescale 1ns / 1ps module ana(SAAT, LED);
// girdi kapıları
input SAAT;// çıktı kapıları
output LED;
// yazmaçlar
reg [25:0] sayac;// yazmaçlara ilk değerlerş vereliminitial begin
sayac <= 26′b00000000000000000000000000;
end// her pozitif saat kenarında tetiklen
always @ (posedge SAAT) beginif(sayac == 26′b10111110101111000010000000) begin // 50M e ulaştık mı?
// evet sayacı sıfırla
sayac <= 0;
// kodumuzu buraya yazacağız
//
//end
else begin // 50M e ulaşamadık o zaman arttırmaya devam
// sayac değerini arttır
sayac <= sayac + 1;
end
endendmodule

Yukarıdaki kod ile sayacın 50000000
değerine ulaşıp ulaşmadığını kontrol ediyoruz ve uygun işlemleri
yaptırıyoruz. Şimdi LED’imizi açıp kapayacak kodu yazalım. LED çıkış
iğnesine direk olarak veri yazdıramadığımızdan bir yazmaç daha tanımlayalım
ve bu yazmacı LED’e bağlayalım. Yazmacımızın adı ledim olsun. Her
50000000′da bir ledim yazmacı terslensin. Diğer sayaç değerlerinde
değeri sabit kalsın.

`timescale 1ns / 1ps module ana(SAAT, LED);
// girdi kapıları
input SAAT;// çıktı kapıları
output LED;
// yazmaçlar
reg [25:0] sayac;
reg ledim;// yazmaçlara ilk değerlerş verelim
initial begin
sayac <= 26′b00000000000000000000000000;
end// her pozitif saat kenarında tetiklenalways @ (posedge SAAT) begin
if(sayac == 26′b10111110101111000010000000) begin // 50M e ulaştık mı?
// evet sayacı sıfırla
sayac <= 0;
// ledim yazmacını tersle
ledim <= ~ledim;end
else begin // 50M e ulaşamadık o zaman arttırmaya devam
// sayac değerini arttır
sayac <= sayac + 1;
// ledim yazmacı değerini korusun
ledim <= ledim;end
endendmodule

Şimdi son olarak yapmamız gereken LED
çıkışına ledim yazmacını bağlamak. Bunun için assign komutunu
kullanalım.

`timescale 1ns / 1ps module ana(SAT, LED);
// girdi kapıları
input SAAT;// çıktı kapıları
output LED;
// yazmaçlar
reg [25:0] sayac;
reg ledim;// yazmaçlara ilk değerlerş verelim
initial begin
sayac <= 26′b00000000000000000000000000;
end// her pozitif saat kenarında tetiklenalways @ (posedge SAAT) begin
if(sayac == 26′b10111110101111000010000000) begin // 50M e ulaştık mı?
// evet sayacı sıfırla
sayac <= 0;
// ledim yazmacını tersle
ledim <= ~ledim;end
else begin // 50M e ulaşamadık o zaman arttırmaya devam
// sayac değerini arttır
sayac <= sayac + 1;
// ledim yazmacı değerini korusun
ledim <= ledim;end
end// LED çıkışına ledim yazmacını bağla
assign LED = ledim;endmodule

Kodumuz şu an hazır. Herhangi bir hata
olup olmadığını kontrol edebilmek için kodumuzu sentezleyelim. Bunun için
soldaki listeden Synthesize‘a çift tıklayalım (yada sağ tıklayıp
Run
‘ı seçelim). Aşağıdaki resimde tıklamamız gereken seçenek kırmızı ile
çerçevelenmiştir.

s0_3_15.JPG

Çift tıkladıktan sonra alttaki konsol penceresinden işlem akışını görebiliriz.

s0_3_16.JPG

Herhangi bir hata veya uyarı oluşmadı.
Aslında bir uyarı oluştu ama Webpack ISE ile alakalı olan önemsiz bir uyarı
olduğundan aldırış etmesek de olur. Şimdi konsol çıktısını biraz inceleyelim
çünkü istediğimiz sonucu alıp almadığımız hakkında bilgi edinebilmek için bu
verileri kullanabiliriz. Konsol çıktısını parça parça inceleyelim.

Reading design: ana.prj===========================* HDL Compilation *
=======================================================Compiling verilog file “ana.v” in library work
Module <ana> compiledNo errors in compilation
Analysis of file <”ana.prj”> succeeded.

Yukarıdaki kısımda hangi dosyaların
derlendiği ve derleme sonuçları hakkında bilgi veriliyor. Görüldüğü gibi burada
herhangi bir sorun yok. Bir sonraki bölüme geçelim:


=========================================================================
* Design Hierarchy Analysis *
=========================================================================
Analyzing hierarchy for module <ana> in library <work>.

Bu kısımda proje içindeki verilog
modülleri ile sentezlenen modül arasındaki bağlantılar inceleniyor. Tek kaynak
dosyamız ve tek modülümüz olduğundan burada herhangi bir şey göremiyoruz.


==================================
* HDL Analysis *==========================
Analyzing top module <ana>.
Module <ana> is correct for synthesis.

Bu kısımda ise modülümüzün
sentezlenebilir olup olmadığı kontrol ediliyor. Unutmayın verilog ile
yazılan her kod sentezlenebilir değildir ve bu da bazen sorunlar
yaratabilir. Zaten kod sentezlenebilir değilse Webpack kodu
sentezleyemeyecektir ve bundan haberiniz olacaktır. Buna dikkat etmemiz
gerekiyor.


====================================================================
* HDL Synthesis *
===================================================Performing bidirectional port resolution…Synthesizing Unit <ana>.Related source file is “ana.v”.
Found 1-bit register for signal <ledim>.
Found 26-bit up counter for signal <sayac>.
Summary:inferred 1 Counter(s).
inferred 1 D-type flip-flop(s).
Unit <ana> synthesized.=====================================================HDL Synthesis ReportMacro Statistics
# Counters : 1
26-bit up counter : 1
# Registers : 11-bit register : 1=====================================================

Bu kısımda HDL sentezi yapılıyor.
Modülümüz hakkındaki bilgileri burada görebiliriz. Mesela 1 bitlik ledim
yazmacı, 26 bitlik sayac yazmacı, sayacımız ve d tipi flip flobumuzun
olduğu buradan anlaşılabiliyor. Konsol çıktısını incelemeyi bitirdiğimizde
sentezlenmiş modülümüzün şemasına bakacağız. Bir sonraki kısma bakalım:


=========================================================================
* Advanced HDL Synthesis *
=========================================================================
Loading device for application Rf_Device from file ‘3s500e.nph’ in
environment C:\Xilinx91i.=======================================================Advanced HDL Synthesis ReportMacro Statistics
# Counters : 126-bit up counter : 1
# Registers : 1
Flip-Flops : 1

Burada ise daha detaylı bir sentez
raporu yer alıyor. Modülümüz mümkün olabilecek en basit modüllerden biri
olduğu için herhangi bir fark görmememiz normal.


=========================================================================
* Low Level Synthesis *
=========================================================================
Optimizing unit <ana> …Mapping all equations…
Building and optimizing final netlist …
Found area constraint ratio of 100 (+ 5) on block ana, actual ratio is
0.Final Macro Processing …=====================================================Final Register ReportMacro Statistics# Registers : 27
Flip-Flops : 27=====================================================

Bu kısımda ise alt seviye sentez
hakkında bilgiler yer alıyor. Eniyileme işlemi ve benzeri işlemler hakkında
bilgiyi buradan edinebiliriz.


=========================================================================
* Partition Report *
=========================================================================
Partition Implementation Status
——————————-No Partitions were found in this design.——————————-

Yukarıdaki kısımda bölümlendirme raporu
bulunuyor. Herhangi bir bölümlendirme kullanmadığımızdan burada da herhangi
bir şey göremiyoruz. Zaten raporda da herhangi bir bölümlendirme
bulunamadığına dair bir ibare yer alıyor.


=========================================================================
* Final Report *
=======================================================Clock Information:
——————
———————————–+————————+——-+Clock Signal | Clock buffer(FF name) | Load |
———————————–+————————+——-+
SAAT | BUFGP | 27 |
———————————–+————————+——-+Asynchronous Control Signals Information:—————————————-
No asynchronous control signals found in this designTiming Summary:
—————
Speed Grade: -4Minimum period: 5.179ns (Maximum Frequency: 193.101MHz)
Minimum input arrival time before clock: No path found
Maximum output required time after clock: 4.310ns
Maximum combinational path delay: No path found=======================================================WARNING:ProjectMgmt – “D:/scozturk_projeler/s0_3/proje_1/ana.ngr” line 0
duplicate design unit: ‘Module|ana’Process “Synthesize” completed successfully

Bu kısımda ise son rapor var. Burada saat darbesi hakkında bilgiler veriliyor ve FPGA’nın çalışabileceği frekanslar belirtiliyor. Burada dikkat edilmesi gereken bir detaydan
bahsedeyim. Diyelim ki modülünüzde bir saat darbesi kullanıyorsunuz. Eğer
saat darbeniz yukarıda listelenmemişse (dikkat ederseniz SAAT iğnemizin
listelenmiş olduğunu görürsünüz) modülünüzde bir sorun vardır. Webpack böyle
bir durumda hata veya uyarı vermeyebilir ama her şeye rağmen kodunuzda bir
hata veya terslik olabilir ve bu durum kodunuzun düzgün çalışmamasına neden
olabilir. Böyle bir durum ile karşılaşırsanız kodunuzu tekrar kontrol edin.
Yazılıma çok fazla güvenmeyin.

Şimdi Synthesize‘ın solundaki + işaretine tıklayalım ve View RTL Schematic‘e çift tıklayalım. Açılan pencerede modülümüzün oluşturulmuş şemasını görebiliriz:

s0_3_17.JPG

SAAT girişini ve LED çıkışını görebiliyoruz. Daha detaylı olarak şemamızı görebilmek için şemanın üzerine çift tıklayalım.

s0_3_18.JPG

Yukarıdaki resimde devre elemanlarımızı daha rahat bir şekilde görebiliyoruz. Eğer sentezlediğiniz modülünüz için bir şema oluşturulmuyorsa kodunuzda hata var demektir. Webpack bu konuda da sizi uyarmayabilir. Bu yüzden sentezledikten sonra RTL şemanızı kontrol ediniz. Şemaya dikkat edecek olursak sayacımızı, karşılaştırıcımızı ve flip
flopumuzu görebiliyoruz. Burada bazı elemanların üzerine çift tıklayarak bu
elemanlar hakkında daha detaylı bilgi elde etmemiz mümkün olabilir. Mesela bu
modül için karşılaştırıcımıza çift tıklarsak içeriğini görebiliriz.

Şemayı kapatabiliriz.

3- Xilinx ISE Webpack Kullanımı – Gerçekleştirim

Bu bölümde sentezlemiş olduğumuz modülü
gerçekleştireceğiz. Modülümüzü gerçekleştirebilmek için soldaki seçeneklerden

Implement Design seçeneğine çift tıklayalım (yada sağ tıklayıp Run‘ı
seçelim).

s0_3_19.JPG

İşlem bittiğinde konsoldan işlemin bittiğine dair bir mesaj alacağız. Tabii ki şimdi bir sorunumuz var. Biz fiziksel olarak FPGA’nın hangi iğnelerine LED ve SAAT iğnelerini atadığımızı belirtmedik. Bunu belirtmek için UCF dosyasını doldurmamız gerekiyor.
UCF
dosyasını doldurmak için soldaki seçeneklerden User Constraints‘in
solundaki + işaretine tıklayalım ve Edit Constraints (Text)‘e çift
tıklayalım. Webpack size UCF dosyasının oluşturulup projeye eklenmesini isteyip
istemediğini soracak (eğer önceden eklemediyseniz). Evet dedikten sonra
aşağıdaki pencere ile karşılaşıyoruz:

s0_3_20.JPG

Şimdi Spartan S3E Starter Kit kullanım kılavuzundan saat darbesi için ve LED için UCF bilgilerine bakalım. Clock Sources başlığının altındaki UCF Constraints alt başlığına
gelelim:

s0_3_21.JPG

Burada saat darbeleri ile alakalı
aşağıdaki UCF bilgilerini görüyoruz:


NET "CLK_50MHZ" LOC = "C9" | IOSTANDARD = LVCMOS33 ;

NET “CLK_SMA” LOC = “A10″ | IOSTANDARD = LVCMOS33 ;
NET “CLK_AUX” LOC = “B8″ | IOSTANDARD = LVCMOS33 ;
NET “CLK_50MHZ” PERIOD = 20.0ns HIGH 40%;

Biz sadece 50Mhz’lik saat
darbesini kullanmak istediğimizden sadece 50Mhz’lik UCF bilgilerini
alıp UCF dosyamıza yazalım. Yazarken CLK_50MHZ etiketini

SAAT etiketiyle değiştirmeyi unutmayınız.

Bunun ardından yine kullanım kılavuzundan
Switches, Button and Knob başlığından Discrete LEDs alt başlığını
seçelim ve buradan UCF Location Constraints alt başlığına geçelim.

s0_3_22.JPG

Biz yukarıdaki sekiz LED çıkışından sadece tekini kullanacağız. Bu yüzden LOC=”F9″ (F9 iğnesindeki) LED çıkış bilgisini UCF dosyamıza yazalım. LED<7> olarak girilmiş olan
etiketi LED olarak değiştirmeyi unutmayınız.

UCF dosyamız üzerinde değişiklikleri tamamlayınca dosyamızı kaydettiğimizden emin olalım. UCF dosyamızın son şekli aşağıdadır:

s0_3_23.JPG

Yukarıdaki resimde kırmızı ile işaretlenmiş yerde bir soru işaretinin oluştuğunu göreceksiniz. Bunun nedeni UCF dosyası oluşturup bunu kaydetmiş olmamızdır. Gerçekleştirme işleminde bir UCF dosyası var ise UCF dosyasındaki bilgileri kullanarak sentezlenmiş kod gerçekleştirilir, yok ise rastgele iğneler kullanılır. Yani bu aşamada yapmamız gereken şey kodumuzu yeniden gerçekleştirmektir.

Eğer herhangi bir hata yapılmamış ise gerçekleştirme işlemi başarı ile sonuçlanacaktır. Tabii ki yukarıdaki resimdeki UCF dosyasına dikkat ederseniz etiket olarak LED yazmam gerekirken yanlışlıkla LCD yazmışım. Bu yüzden konsoldan aşağıdaki hataları aldım:

ERROR:NgdBuild:755 – “ana.ucf” Line 4: Could not find net(s) ‘LCD’ in
the
ERROR:Parsers:11 – Encountered unrecognized constraint while parsing.
ERROR:NgdBuild:19 – Errors found while parsing constraint file “ana.ucf”.

UCF dosyasında gerekli düzeltmeyi yaptıktan sonra yeniden gerçekleştirme yaparsak herhangi bir sorun kalmayacaktır. UCF dosyamızın gerçek son şekli aşağıdadır:

s0_3_24.JPG

Kodumuz başarı ile gerçeklendi. Bundan bir sonraki aşama Bitstream dosyasının Generate Programming File‘a çift tıklanarak oluşturulması ve FPGA geliştirme kartına yüklenmesidir. Tabii ki bundan önce Spartan S3E Starter Kit’i biraz tanımamız gerekiyor.

Bu makalede yapacaklarımız bu kadar. ISE Webpack kullanımını en basit şekliyle görmüş olduk. Webpack kullanarak devremizin simülasyonunu yapmak ve Spartan S3E Starter Kit‘e verileri göndermek hakkında bilgi için lütfen sonraki makaleleri inceleyiniz.

4- Proje Dosyaları (ISE)

İndirmek için buraya tıklayınız.