fpga uzmanı

Başlatan speak48, 09 Eylül 2012, 23:20:06

muuzoo

#15
Alıntı yapılan: gerbay - 11 Eylül 2012, 20:48:16
@muuzoo,

hocam askerde matris tersi mi alıyorsun :)
Bir şeylerle uğraşmam lazım yoksa şafak atmıyor :). Kah ARM ile kah FPGA ile uğraşıyorum :)

speak48 : Tersini alacağım matris kalman filtresinde kullanılıyor. Belli sabit bir boyutu yok. Uygulamaya göre değişebilir boyutu uygulamaya göre değişkenleri ayarlıyorum. Ona göre sentezleniyor. ufak matrislerde sıkıntı yok fakat iş 4 ün üzerine çıktığında daha iyi bir çözüme ihtiyaç var. Hem hız açısından hem de kaynak tüketimi açısından. 2 boyutlu bir sinyal olarak tanımlı matrisler. Şunun gibi :

type    matris is array (natural range <>, natural range <>) of fp_tipi
signal k_matris : matris(0 to m, 0 to n)
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

speak48

matris sabit boyutlu olsaydı uğraşalım dicektimde değişken olunca baya bi aşıyo.
matrisi kalman filitresinde kullancanda kalman filitresini nerde kullancan
belki konu güzel olursa örnek bir sistemi tasarım yöntemlerini tartışarak tasarlayabiliriz.

anlaşılan kimsenin bildiği bir yöntem yok bunu bunu yapıyoz diye yazıyor ama nasıl yapıyon copy-paste? hazır ip?

muuzoo

Alıntı yapılan: speak48 - 11 Eylül 2012, 22:50:00
matris sabit boyutlu olsaydı uğraşalım dicektimde değişken olunca baya bi aşıyo.
matrisi kalman filitresinde kullancanda kalman filitresini nerde kullancan
belki konu güzel olursa örnek bir sistemi tasarım yöntemlerini tartışarak tasarlayabiliriz.

anlaşılan kimsenin bildiği bir yöntem yok bunu bunu yapıyoz diye yazıyor ama nasıl yapıyon copy-paste? hazır ip?

Bölme konusunda açıkçası mecbur kalmadıkça kullanmıyorum, kullanmama gerekirse de hazır ip kullanıyorum. açıkçası uğraşmak gelmiyor içimden.

Boyut değişken olması tamamen probleme bağlı aslında. Yoksa boyut sabit kalıyor. Mesela basit bir eğik atış probleminde sorun olmuyor çünkü 2x2 lik bir matris oluşuyor :) Ama ben probleme özel bir çözümden ziyade daha genel kullanılabilir bir şey tasarlamanın peşindeyim. Tabi bazı yerlerde ister istemez duruma özel alt modüller yazmak gerekiyor. İsterseniz örnek bir problem seçip üzerinde kafa yorabiliriz. Benim ilk yaptığım uygulama basit bir eğik atış problemi idi. Daha sonraki adım ise EKF uyarlamak. Onun için de örnek problem olarak SLAM (simultaneous localization and mapping)'ın basit bir türünü kullanmak. Tabi arka planda çeşitli yaklaşımlar oluşturmak gerekiyor doğrusal olmayan ifadeler için.


gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

speak48

bölme nerden çıktı yaw
biri bi taş atıyo  konuyu tamamen değiştiriyo.

yöntem sistem tasarım yöntemi.
modül tasarımı,modüller arası iletişim,kontrolcü tasarımı bunların detayları..
mesela iki modül arası kontrol nasıl olcak elsıkışarak mı,zamana bağlımı herkesin kendi kontrolcüsümüm olcak yoksa tekbir mastır olacak.
problemden algoritmaya algoritmadan dijitale hangi adımlarla geçilmeli
bu işlerin standartı ne şirketler nasıl yaklaşıyor.

fractal

benim anladığım şey şudur bu forumdan yanlızca işin terminolojisini öğrenebilirsiniz.eğer birşeyler yapmak isterseniz o sır bu gizli şu ticari haricinde işe yarar bir bilgi yok.ne araştıracağınızı burdakilerden öğrenmemi yoksa  google sorup öğrenmekmi arasındaki farkı daha iyi anlatack cümle bu cümlemidir.
Restantum cogniscutur Quantum deligutur

speak48

Alıntı yapılan: fractal - 11 Eylül 2012, 23:31:19
benim anladığım şey şudur bu forumdan yanlızca işin terminolojisini öğrenebilirsiniz.eğer birşeyler yapmak isterseniz o sır bu gizli şu ticari haricinde işe yarar bir bilgi yok.ne araştıracağınızı burdakilerden öğrenmemi yoksa  google sorup öğrenmekmi arasındaki farkı daha iyi anlatack cümle bu cümlemidir.
farkındayım ama gene bi kurcalayalım belki bişi çıkar dedik.
hayır bu bu ülkenin her yerinde var
geçenlerde mentor graphicsin konferansına  katılmıştım adam soruyo bunu kullanıyonuzmu cevap yok şunu duydunuzmu cevap yoq
adamada şaşırıyo ben bunlara ne anlatayım diye

muuzoo

Alıntı yapılan: speak48 - 11 Eylül 2012, 23:22:36
bölme nerden çıktı yaw
biri bi taş atıyo  konuyu tamamen değiştiriyo.

yöntem sistem tasarım yöntemi.
modül tasarımı,modüller arası iletişim,kontrolcü tasarımı bunların detayları..
mesela iki modül arası kontrol nasıl olcak elsıkışarak mı,zamana bağlımı herkesin kendi kontrolcüsümüm olcak yoksa tekbir mastır olacak.
problemden algoritmaya algoritmadan dijitale hangi adımlarla geçilmeli
bu işlerin standartı ne şirketler nasıl yaklaşıyor.

Mevzu bölmeden gelince konuyu ben karıştırdım :)..

Uzman biri değilim ama izlediğim adımları elimden geldiğince anlatayım. İlk olarak problemimize hakim oluyoruz. Benim örneğimde eğik atış diyelim. Bunun matematiksel modelini çıkarıyoruz. Bu durumda eğik atış denklemleri.

Daha sonra matlab ortamında bir deneme yapıyorum. Algoritmam doğru mu, işlem basamaklarım doğru mu şeklinde. Bu bizim referansımız oluyor. VHDL'de gerçeklediğim devrenin sonuçlarının da birebir matlab ortamında yazdığım kodla tutması lazım. Bir nevi test için referans noktamız oluyor matlab ortamı.

Daha sonra elimdeki problemin bileşenlerine bakıyoruz.

Predict_Aşaması:
Xpred = A*Xest;
Ppred = A*P*A' + Q;
Zpred = C*Xest;

Observation Aşaması
innov = Z - Zpred;
S = C*Ppred*C' + R;

Update_Aşaması
W = Ppred*C'*S^-1;
Xest = Xpred + W*innov;
P = Ppred - W*S*W';

Bu haliyle yazınca pek bir şey ifade etmediğinin farkındayım. Bunlar Kalman Filtresinin yapıları. Elimdeki bu denklemleri nasıl paralel hale getirebilirim diye bakıyorum. Öncelikle bağıntılar arasındaki ilişkiyi inceliyorum. mesela predict aşamasındaki 3 işlem aynı anda başlatılabilir çünkü birbirlerine bağımlı değiller. Fakat Observation aşamasındaki işlemler bir önceki işlemlerin tamamlanmasına bağlı. Yani observation aşaması bir önceki işlemleri beklemeli gibi...

Update aşamsındaki ilk terime bakarsanız bir önceki işlemdeki bir adımın bir kısmını kullanıyor yani o kısmın değeri doğrudan bir önceki işlemden çekilebilir.

Bunun gibi değerlendirmeler yapıp hangi işlemin hangisini beklemesi gerektiğini ortaya çıkarıyorum. Aslında bunu şekil çizerek yapınca daha anlaşılır oluyor.

Sıra geldi bu işlemlerin birbirini takip etmesine yani kontrolüne. Bu amaçla tüm işlem sırasını kontrol eden bir kontrol modülü kullanıyorum . Tasarlanan tüm alt birimlerin birer enable ve rdy sinyali var. İlgili işlem tamamlandığında rdy işareti çalışması gereken bir sonraki işlemi başlatıyor. Bir nevi domino etkisi. Ana kontrolcü de enable sinyalleri ile bu modüllerin çalışmasını düzenliyor. Bir çevrimde değer hesaplandıktan sonra ana kontrol modülü işlemleri başa alıyor ve bir önceki değerler kullanılarak yeni değerler hesaplanıyor.

Peki filtre böyle çalışıyor. Filtreye giren değerleri nasıl üretiyorum.? Bir modlümüzde sahte ölçüm verileri üretiyor. Bu ölçüm verilerinin gürültülü olması gerektiği için rastgele sayı üretip ondan gürültü elde ediyorum. Rastgele sayı üretmek için 3 kaynağım var. Biri fpga'nın kendi içinde bulunan status modülünden  besleme voltajının sayısal değerinin en düşük değerlilikli kısmını lfsr'a girdi vererek sayı üretmek. Diğeri deney kartı üzerindeki ses girişinden gürültü alarak lfsr girdisi kullanıp gürültü üretmek diğeri ise, mersenne sayılarını kullanarak (kendi sitesinde vhdl kodları mevcut) gürültü üretmek.

Artık elimde hem filtre var hem de sahte ölçüm değerleri üretecek mdül var. Sıra bunları benzetim ortamında test etmek ve sonuçlarını almak için bir testbench yazmakta. Bu şekilde elde ettiğim değerleri bilgisayar ortamında kaydediyor ve matlab kodu ile kıyaslayıp sonucu görebiliyorum.

Peki sentez ne olacak? Benzetim hata ayıklama- benzetim hata ayıklama döngüsünden sonra en son sentez aşamasına geçiyorum çünkü tasarımın boyutuna göre işlem çok uzun sürebiliyor.

Xilinx üretimi fpga kullandığım için xilinx in bana sağladığı olanakları kullanıyorum. Benzetim için ISIM, fpga üzerinde debug için chipscope gibi.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...