VHDL İle Floting point dizi işlemleri

Başlatan OrhanYaman, 08 Kasım 2012, 08:56:50

OrhanYaman

Merhaba arkadaşlar
    FPGA cyclone 3 setim var. Quartus programı kullanıyorum. Yapmam gereken bir diziye kayıtlı floting point sayılar üzerinden işlem yapmak. Ama bi türlü yapamadım. Yardım edebilir misiniz ?

Xn = (Xn-1) + a*((Xn-8)  - (Xn-9)^2 )

X0 = 0,1
X1 = 0,1
X2 = 0,1
X3 = 0,1
X4 = 0,1
X5 = 0,1
X6 = 0,1
X7 = 0,1
X8 = 0,1
X9 = 0,1   ve a =0,1  bir clock geldiğinde X10 u hesaplayacak bu şekilde hesaplama yapacak. Daha floting point sayıları dizi mantığını çarpma işlemlerini bile bilmiyorum. Lütfen yardım eder misiniz ?

yamak

FPGA ile direkt olarak floating point işlem yapamazsınız.Ancak 2 ve 2 nin kuvvetlerine bölme işlemi yapabilirsiniz. Floating point işlem yapmak istiyorsanız bu iş için tasarlanmış IP ler var.Onları kullanabilirsiniz.

OrhanYaman

En ilk yukarıdaki denklemde floating point sayı kullanmadan yani normal sayılarmış gibi yapmaya çalıştım. Kare alma ve çarpma işlemlerini yapamadım. Elinizde bu tür örnekler varsa gösterebilir misiniz

speak48

fpga demiyelimde hdl ile direct floating point işlem yapılmaz ip veya kütüphane gerekir yada kendin yaz
float şartmı fixed point fpgaya daha uygundur.
bide o işlem ne öyle filitre desen değil convülosyon enkoder desen değil
böyle bir işlemi neden fpgada hesaplatırsınızki matlab varken
nerede kullanılacak bu

OrhanYaman

Bu sadece bir ödev. Bunu floating point sayılar değilde normal sayılar ile yapsam zor olur mu? Yani çarpma veya bir sayının karesini almak zor mu? Bu işte yeni olduğumdan kodunu nasıl yazacağımı da bilmiyorum  :(

yamak

Alıntı yapılan: speak48 - 08 Kasım 2012, 11:20:49
fpga demiyelimde hdl ile direct floating point işlem yapılmaz ip veya kütüphane gerekir yada kendin yaz
Bence denilebilir sonucta FPGA mimarisinin gerektirdiği bişey.Yani bu kısıtlamayı aslında FPGA getiriyo.

berat23

kısıtlama fpga mantığına ters birşey,böyle bir işleme fpga nın kısıtlama getirmesi mümkün değil. neticede sayısal olarak yapılan herşey fpga ile yapılabilir. hazır ip ler veya fpu olan işlemcilerde de farklı bir logic yapı yok nihayetinde. mesele sayısal sistemlerin fixed point çalışmaya daha uygun olması.

speak48

fpga neyi kısıtlıyorki,
"FPGA ile direkt olarak floating point işlem yapamazsınız" deyince sanki fpga float işlem yapılmaz gibi bir anlam çıkıyo ek bi parça lazım gibi..
sonuçta iş hdl sentezleyicide bitiyor.yarın adam ben floata destek veriyorum derse fpga değişmediği halde direct float kullanılıyor olunacak.
a=b+c; da nasıl adder devresini sentezleyici koyuyorsa biz half adder fulladderı yazmıyorsak yarın reg a; float a; tanımı yapıp a=b+c; işleminede float işlem yapan devreyi koyabilir.
ha şu doğru şuan hdlde yazdığımız float işlemleri direkt fpgaya atamayız ama simulatorler destekliyo ayrı.

salih18200

Yaklaşık 4 sene önce kendi yazdığım floating ve fixed point kütüphanelerini ekliyorum. Belki işinize yarar, içerisinde toplama çıkarma çarpma ve bölme modülleri olması lazım.

floating
http://www.robolab.com.tr/wp-content/uploads/2012/11/float.rar

fixed
http://www.robolab.com.tr/wp-content/uploads/2012/11/fixed.rar

yamak

#9
Alıntı yapılan: speak48 - 08 Kasım 2012, 11:51:39
fpga neyi kısıtlıyorki,
"FPGA ile direkt olarak floating point işlem yapamazsınız" deyince sanki fpga float işlem yapılmaz gibi bir anlam çıkıyo ek bi parça lazım gibi..
sonuçta iş hdl sentezleyicide bitiyor.yarın adam ben floata destek veriyorum derse fpga değişmediği halde direct float kullanılıyor olunacak.
a=b+c; da nasıl adder devresini sentezleyici koyuyorsa biz half adder fulladderı yazmıyorsak yarın reg a; float a; tanımı yapıp a=b+c; işleminede float işlem yapan devreyi koyabilir.
ha şu doğru şuan hdlde yazdığımız float işlemleri direkt fpgaya atamayız ama simulatorler destekliyo ayrı.
Benim ne demek istediğimi berat23 daha iyi açıklamış.
Alıntı Yapmesele sayısal sistemlerin fixed point çalışmaya daha uygun olması.
Sonuçta hdl sentezleyicilerin direkt olarak böyle bi destek vermemesi bununla alakalı bişey.Bize de fixed point işlemleri kullanarak floating point işlem yapmak kalıyo. Ayrıca madem olaya sadece hdl sentezleyicide bitiyo.Neden şimdiye kadar böyle bi destek verilmemiş.

pic365

Tamamen doğru olduğunu iddia etmiyorum ama ben de tartışılan konu hakkında bildiklerimi paylaşmak istiyorum.

- VHDL ve Verilog'da floating point için tanımlanmış bir operatör veya fonksiyon yok, yani FP'ye doğal destek verilmiyor.
- FPGA mimarisi hiçbir şekilde floating point işlemleri kısıtlamaz. Doğrudan FP işlem yapamıyor oluşumuz yukarıda söylediğim gibi dillerden kaynaklanıyor.
- Sayıları sadece ikinin kuvvetlerine bölebilmemiz FPGA'den veya dilden kaynaklanmaz, bunun sebebi sentez programıdır. Zaten sentez, FPGA'in mimarisinden bağımsız bir işlemdir. Xilinx için bir örnek verecek olursam; XST haricinde bir programla sentez yapıp, Map ve P&R işlemlerini Xilinx ISE'ye yaptırabilirsiniz. Eğer sentez programı destekliyorsa her sayıya bölme yapılabilir.

Kısacası floating point işlem yapmak için bir kütüphane ya da hazır modül kullanmanız gerekiyor. IEEE-754 gibi standartlara hakimseniz bu işlemleri kendiniz de yazabilirsiniz ama bu konuda fazla tecrübeniz yoksa bir de o işlemle uğraşmanızı tavsiye etmem.

Floating point'e doğal destek verilmemesiyle ilgili kendi yorumuma gelecek olursam; FP'yi spesifik bir uygulama olarak görüyorum, bu sebeple destek verilmemesi normal.

speak48

kakalive de anlatmış.
ayrıca bluespec systemverilog sentezleyicisi float desteği veriyomuş yapmışlar yani.
http://www.xilinx.com/products/design_tools/logic_design/advanced/esl/bluespec.htm

Alıntı yapılan: OrhanYaman - 08 Kasım 2012, 11:25:43
Bu sadece bir ödev. Bunu floating point sayılar değilde normal sayılar ile yapsam zor olur mu? Yani çarpma veya bir sayının karesini almak zor mu? Bu işte yeni olduğumdan kodunu nasıl yazacağımı da bilmiyorum  :(
mesaj arada kaynamış
nebilim güzel anlamlı bir ödev olmamış.
çarma işlemi için fpgada çarpıcı bloklar var.karesi demek zaten sayıyı kendisiyle çarpmak.
ama sayılar tamsayı olmadığında işemlerin sonuçlarında  virgülleri dikkate almak gerekir.
birde formülü yazış biçimin ayrık sinyal foksiyonunu andırıyor.bu dizimi sinyalimi hangisi

E_Kk

#12
Ben şuan floating point kütüphanesi olarak http://www.vhdl.org/fphdl/ adresindeki kütüphaneyi kullanıyorum. Fakat tam istediğimi gerçekleştiremiyorum. XST yazdığım kodu sentezlemiyor. Orhan hocam sen dene istersen belki Quartus sentezler. Ben araştırırken bir kaçtane kütüphane buldum ama kullanamadım. Bu işinizi görmezse onlarıda verebilirim.

@kakalive: Xilinx için yazdığım VHDL kodunu hangi sentezleyici de sentezleyebilirim? Synplicity de olur mu? Olursa synplicity yi nasıl temin edebilirim?

@salih18200: Hocam sizin kütüphanede x := 3.1415; gibi giriş yapabilir miyiz?

Benim yapmak istediğim işlem:

                x := to_float (3.1415, 32); -- Uses "x" for the sizing only
      y := to_float (2, 32); -- Uses "y" for the sizing only
      z := x * y;

bu konuda yardım edebilecek var mı?
"Meselâ: Hendese bir fendir. Onun hakikatı ve nokta-i müntehası, Cenab-ı Hakk'ın İsm-i Adl ve Mukaddir'ine yetişip, hendese âyinesinde o ismin hakîmane cilvelerini haşmetiyle müşahede etmektir."Sözler

OrhanYaman

Bütün arkadaşlara ilgilendikleri ve üşenmeyip yorum yazdıkları için çok teşekkür ederim. İyi ki bu foruma üye olmuşum. Hepinizden Allah razı olsun. Çok teşekkür ederim. 

muuzoo

Alıntı yapılan: E_Kk - 08 Kasım 2012, 17:02:12
Ben şuan floating point kütüphanesi olarak http://www.vhdl.org/fphdl/ adresindeki kütüphaneyi kullanıyorum. Fakat tam istediğimi gerçekleştiremiyorum. XST yazdığım kodu sentezlemiyor. Orhan hocam sen dene istersen belki Quartus sentezler. Ben araştırırken bir kaçtane kütüphane buldum ama kullanamadım. Bu işinizi görmezse onlarıda verebilirim.

@kakalive: Xilinx için yazdığım VHDL kodunu hangi sentezleyici de sentezleyebilirim? Synplicity de olur mu? Olursa synplicity yi nasıl temin edebilirim?

@salih18200: Hocam sizin kütüphanede x := 3.1415; gibi giriş yapabilir miyiz?

Benim yapmak istediğim işlem:

                x := to_float (3.1415, 32); -- Uses "x" for the sizing only
      y := to_float (2, 32); -- Uses "y" for the sizing only
      z := x * y;

bu konuda yardım edebilecek var mı?

Ekk o kodun sentezlenmesi için biraz düzenlemesi gerekiyor. Ya da o kütüphanenin bulunduğu sayfada xilinx ise 11.1 icin düzenlenmis paketi var onu dene
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...