Vhdl'de component kullanımı

Başlatan yamak, 09 Kasım 2011, 12:31:08

yamak

Merhaba arkadaslar.
Vhdl 'de component kullanirkerken componentte tanimladigimiz cikis pinleri componentin tanimladigi modulde giris pini olarak kullaniliyo bildigim kadariyla. Bu cikis pinlerini ucf dosyasinda tanimlarlen fpga in kullanilmayan herhangi bir pinine atayabilir miyiz?Mesela k15 pini kullanilmiyo ve hem input hem de output olarak kullanilabilen bir pinse bu pini componentin cikis, componentin kullanildigi modul icin giris olarak tanimlayabilir miyiz?Eger boyle ise bu tehlikeli bisey değil mi? Disardan istenmeden yapilan bi etki sistemin calismasini etkilemez mi?

yamak

Arkadaslar bu konu hakkinda bi fikri olan yok mu?

pic365

Alıntı yapılan: yamak - 09 Kasım 2011, 12:31:08
Merhaba arkadaslar.
Vhdl 'de component kullanirkerken componentte tanimladigimiz cikis pinleri componentin tanimladigi modulde giris pini olarak kullaniliyo bildigim kadariyla. Bu cikis pinlerini ucf dosyasinda tanimlarlen fpga in kullanilmayan herhangi bir pinine atayabilir miyiz?Mesela k15 pini kullanilmiyo ve hem input hem de output olarak kullanilabilen bir pinse bu pini componentin cikis, componentin kullanildigi modul icin giris olarak tanimlayabilir miyiz?Eger boyle ise bu tehlikeli bisey değil mi? Disardan istenmeden yapilan bi etki sistemin calismasini etkilemez mi?
Yanlış anlamadıysam şöyle bir şey demek istiyorsunuz. A modülünün içinde B modülü var. B'nin çıkış pinleri doğrudan A'nın giriş pinlerine bağlı. Böyle bir şey syntax kontrolünü bile geçmez bence.

yamak

#3
Soruyu yanlis sormusum kusura bakmayin. Sorun aslinda soyle:
İki adet modul tasarladim bu modullerini ikisini de baska bor modulde komponent olarak kullacam. Bu komponentler A ve B olarak adlandirilsin. Mesea A komponentinde fpga nin k15 pini output olarak kullanilsin. Ben bu k15 pinini A komponentinde input olacak sekilde kullanabilir miyim?Tabi daha sonra bu iki komponenti baska bi modul icinde kullanacam. Buna benzer bir uygulama gordum de o yuzden soruyorum

pic365

Şimdi sorunun şekli değişti. "Tri-state buffer" kullanarak böyle bir şey yapabilirsiniz. K15 pini input olarak kullanılacağı zaman B modülünün output'a yüksek empedans ('Z') vermesi gerekir. Bunu bir şekilde halledersiniz ama bu pini dışarıdan sürecek olan şey ne, asıl sorun o.

yamak

Benim bunu kullanmak istedigim yer suradi: Vga monitor surmeyle ugrasiyorum sadece tek bir modul kullanarak yapti ama daha moduler olmasini istedigim icin boyle yapmak istiyorum.Senkronizasyonu saglamak icin ayri bir modul ekran renk basmak icin ayri bir modul tasarlamak istiyorum. Senkronizasyon modulunden pixellerin x ve y koordinatlarini bir cikis pinine verip rgb modulunden de bu pinleri input olarak tanitip koordinat bilgilerini almak istiyorum. Soylediginiz seyi biraz daha acabilirseniz guzel olur.

pic365

Bir pin hem input hem de output için kullanılıyorsa onu süren en az iki modül vardır. Ama sürme işlemi aynı anda olmaz. Biri sürerken diğeri pine yüksek empedans verir ki çakışma olmasın. Aksi halde simülasyon ya da sentez programı "multiple driver" hatası verir zaten.

Tri-state buffer'ları aratırsanız bir şeyler bulabilirsiniz, benim şu an fazla vaktim yok ne yazık ki.

yamak


yamak

Arkadaşlar kafamı karıştıran bi nokta var.
Şimdi yukarıda anlattığım gibi 2 adet modülüm var bunlardan biri vga senkronizasyonunu sağlamaya diğeri ise ekrana istenilen yerlere renk basmaya yarıyo.Şimdi senkronizasyon modulunde pixel_x,pixel_y adında output olarak tanımladığım değişkenlerim var. Bu çıkışlar da renk basma modülünün girişine bağlı.Bu iki modülü de ayrı bi modül içinde komponent olarak kullanıyorum.Şimdi bu herbir modul için ayrı ayrı ucf dosyası hazırlamam mı gerekiyo yoksa sadece bu iki modülü komponent olarak kullandığım modül için hazırlasam yeter mi? "fpga prototyping by vhdl examples" kitabın şu şekilde bi kullanım var: Her bir modülü yukarıda anllatığım gibi hazırlamış sonra bu modülleri başka bi modül içinde çağırırken portmap lerini tanımlarken ara bağlantılar oluşturup o ara bağlantılar aracılığı ile bağlamış birbirine.Yani benim anladığım kadarıyla portmap leri tanımlarken pixel_x ve pixel_y yi fpga nın pinlerine değil de bu ara bağlantılara bağlamış.Bu yüzden de sanki herbir modül için ucf dosyası hazırlamamış da sadece ana modül için hazırlamış gibi geldi bana.Biraz karmaşık oldu ama ancak bu kadar anlatabildim :).Şimdi bu düşündüğüm şey doğru mu yani illaki modülleri birbirine bağlamak için fpga nın pinlerini mi kullanmak gerekeyi yoksa yazılımda bu şekilde ara bağlantılar oluşturup yapabiliyoruz mu?

Ersin

Nasıl kullanıyorsun bilmiyom ama ben vhdl / verilog ta yaptıgım modulleri bir schematic top page te birleştiriyom, boylece bir nevi blok diagram gibi bişey de olmuş oluyo.Yaptığın modılleri proje içinde direk baglaıyosun , ucf dosyan tek arabirimlerdeki pinler için.Orneğin:    640x480 ile 800x600 çozunurluk arasında seçim yapacaksın, bu bir modul ise ve o modulun çıkışndaki sayacların değerleri seçime göre değiştiyse vga daki modulu kontrol eder.Burda ucf te sadece switch hangi pinde fiziksel baglı ise onu tanımlayacaksın.

Daha fazla araştırma yapmalısın google , pdf , datasheet, örnek gibi şeyler ile üzerine gitmelisin.Burda çıkış nasıl olur giriş nasıl olur her defa sorarsan fazla ilerleyemezsin.
www.fpga4fun.com sitesi örnekleri tek tek anlatarak gösteren güzel bir sitedir.

pic365

Alıntı yapılan: yamak - 11 Kasım 2011, 13:54:46
Arkadaşlar kafamı karıştıran bi nokta var.
Şimdi yukarıda anlattığım gibi 2 adet modülüm var bunlardan biri vga senkronizasyonunu sağlamaya diğeri ise ekrana istenilen yerlere renk basmaya yarıyo.Şimdi senkronizasyon modulunde pixel_x,pixel_y adında output olarak tanımladığım değişkenlerim var. Bu çıkışlar da renk basma modülünün girişine bağlı.Bu iki modülü de ayrı bi modül içinde komponent olarak kullanıyorum.Şimdi bu herbir modul için ayrı ayrı ucf dosyası hazırlamam mı gerekiyo yoksa sadece bu iki modülü komponent olarak kullandığım modül için hazırlasam yeter mi? "fpga prototyping by vhdl examples" kitabın şu şekilde bi kullanım var: Her bir modülü yukarıda anllatığım gibi hazırlamış sonra bu modülleri başka bi modül içinde çağırırken portmap lerini tanımlarken ara bağlantılar oluşturup o ara bağlantılar aracılığı ile bağlamış birbirine.Yani benim anladığım kadarıyla portmap leri tanımlarken pixel_x ve pixel_y yi fpga nın pinlerine değil de bu ara bağlantılara bağlamış.Bu yüzden de sanki herbir modül için ucf dosyası hazırlamamış da sadece ana modül için hazırlamış gibi geldi bana.Biraz karmaşık oldu ama ancak bu kadar anlatabildim :).Şimdi bu düşündüğüm şey doğru mu yani illaki modülleri birbirine bağlamak için fpga nın pinlerini mi kullanmak gerekeyi yoksa yazılımda bu şekilde ara bağlantılar oluşturup yapabiliyoruz mu?
Alt modüllerin pinlerini FPGA'in fiziksel pinlerine bağlamak zorunda değilsiniz. Kitapta okuduğunuz doğru. Bütün modülleri bir modülün içinde toplarsınız, sadece o modülün pinlerini fiziksel pinlere bağlarsınız. Örneğin clock ve reset FPGA'in dışından geliyorsa onları bağlarsınız, ledlere giden sinyalleri bağlarsınız vs. Onun dışında modüllerin FPGA'in dışına çıkması gerekmeyen sinyallerini kitaptaki şekilde kendi arasında bağlarsınız.

yamak

Cevaplariniz icintesekkur ederim. Anladim simdi ne demek istediginizi.