23 Mart 2019, 19:00:42

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


Zynq Uart'tan gelen veriyi DMA ile DDR'a yazma.

Başlatan Emre_Tuncay_, 26 Ekim 2018, 02:26:36

Emre_Tuncay_

26 Ekim 2018, 02:26:36 Son düzenlenme: 26 Ekim 2018, 02:27:38 Emre_Tuncay_
Uart'tan gelen veriyi DMA ile DDR hafızaya yazmak istiyorum.Zynq kullanıyorum.Kafama tam oturmadı.uarttan gelen veriyi dma'ye nasıl bağlayacağım bilmiyorum.Bunun nedeni zynq dma'e AXI portundan giriş yapılabiliyor.Ama UART'ın axı çıkışı yok.Forumda Zynq kullanan varmı bilmiyorum varsa veya fikir yürütebilecek varsa yardımcı olabilirmi.
Aşağıda zynq in mimarisini paylaşıyorum.

https://forums.xilinx.com/t5/Xcell-Daily-Blog-Archived/Meet-the-Zynq-MIO-Adam-Taylor-s-MicroZed-Chronicles-Part-9/ba-p/386661

OptimusPrime

FPGA den anlamam ama Zynq uzerindeki ARM-A9 ile ugrasmisligim var.  8-)

Hatirladigim kadariyla ARM uzerindeki uartin AXI ye baglantisi yok. Bu yuzden ARM in UARTi alsin PL nin DMA i DDR a tasisin diyemiyorsun. Bu olayi ya PS tarafinda yada PL tarafinda cozmen gerekiyor.

Mesela PL icin dusunursek; PL deki UART IP si veriyi alacak ve buna bagli AxiDMA in olacak. AxiDMA aldigi veriyi DDR a tasiyacak. AxiDMA yi ARM da konfigure edebilir PL de.

Veya PS icin dusunursek; PS UART veriyi alacak ARM in DMA yi DDR a tasiyacak. 

 ;)

Emre_Tuncay_

Hocama sordum uart'tan dma'ye bir bağlantı olmadığını söyledi. Çözüm olarak uart'tan gelen veriyi bir fifo'ya dolduramamı ve fifo'yuda dma ile ddr'a bağlayarak çözüme ulaşabileceğimi söyledi.Şuan bu mimari üzerinde çözüme ulaşmaya çalışıyorum.
Zynq ve SoC üzerine Türkçe kaynağı bırakın ingilizce kaynak bile bulmak zormuş.Tek kaynak datasheet'ler. İşi kavramaya başladıktan sonra bu konuda Türkçe bir blog yazmayı hedefliyorum.

OptimusPrime

Xilinx Docnav i yuklemen gerekiyor. Her turlu bilgiyi orada bulabilirsin. Google da arama.  ;)

Emre_Tuncay_

Orası öyle docnav yüklü. Zynq'i yeni yeni öğreniyorum. Mesela fifo için döküman okuyorum. Diyorki Axi lite şu işe yarar axi s2mm şu işe yarar. Ben daha bunların de olduğunu bilmiyorum.Daha sonra açıp axi ile ilgili döküman okuyorum. İş böyle uzuyor. STM32 'dede böyle bir şey yaşamıştım ilk öğrenir iken örnekler ile öğrendim daha sonra bir işi yapmak için datasheet yetmeye başladı. Ama datasheet'i anlamak içinde bir miktar işin içine girmiş olmak gerekiyor.Şuan o işin içine girme aşamasındayım.

OptimusPrime

Dogrudur  ;)

Adam Taylor diye bir amca var. Bu seriyi yalamis yutmus. Her konu hakkinda ufak yazilari var. Buna da goz atabilirsin.

http://adiuvoengineering.com/microzed-chronicles/

iboibo

Fpga içinde bir uart tanımlayıp basit bir şekilde ile Ramin istediğiniz bölgesine  gönderebilirsiniz,


AlıntıUART'ın axı çıkışı yok

Nereye gidiyor peki bu,  direk cpu bağlantısı mı var ? Öyle olursa daha iyi stm32/pic vs   gibi kullanırsın.



Burada logic bölge ile bağlantı var görünüyor?. Sadece fpga ile ilgili pinleri bağlantı yapmak kalıyor .






Emre_Tuncay_

ARM ile fpga tarafının arasındaki tek bağlantı axi diye biliyorum.Uart lojik bölgeye bağlı ama axi interconnect'e bağlı değil.

OptimusPrime

Iki farkli yaratik olan ARM ve FPGA ayni kiliftalar sadece ARM in UART ina FPGA den ulasmak mumkun degil.

iboibo

Ben pdf ye baktım yukarıdaki resimde bağlantı var gözüküyor ,

Bu bağlatılara isim vermişlerdir örnek  [7:0]Uart_out_TX ,UartCLK_TX vsvs , fpga ile bu girişleri alır axi porta bağlarsın.


Direk cpu ile uart bağlantılı fpga bağlantısı yok ise işin daha kolay stm32 de nasıl yapılıyorsa o şekilde  fmc özelliği olan external ram bağlanan stm32 de dma ve ram iletişimi mümküm .

Tek yapman gereken mcu kodlar gibi kodlamak fpga ya hiç dokunman gerekmez böyle.

OptimusPrime

@iboibo

 ::) haklisin baglanti var diyor datasi. Aklimda yanlis kalmis. Yinede bu durumu Zynq kullanan bir arkadasa sordum o da baglanti var dedi.  :-[  :-[

Emre_Tuncay_

18 Aralık 2018, 02:50:50 #11 Son düzenlenme: 18 Aralık 2018, 02:57:27 Emre_Tuncay_
Merhaba
Projemi belli bir noktaya getirdim son durumu paylaşmak istedim belki birinin işine yarar.
UART kullanmaktan vazgeçtim ethernet kullanıyorum ve LWIP stack ini kullandım. Kısaca projem ethernet ile yolladığım bir resime veri damgalama yapma.Ethernet ile gelen veriyi BRAM0'a gizlenecek veriyi ise BRAM1'e yüklüyorum .BRAMlerden  otomatik verileri alıp resim üzerine gizleyen bir ip tasarladım.Bu ip BRAM 0 'dan resimi BRAM 1'dende veriyi alıp resime damgalama yapınca BRAM 2'ye yüklüyor.En son damgalanmış veri DDR'a CDMA vasıtasıyla BRAM2'den yükleniyor.
FPGA ile uğraşanlara HLS 'i araştırmasını şiddetle tavsiye ederim.C++ ile fpga donanımı tasarlayabileceğiniz bir ortam.
En son tasarladığım blok şemam şu şekilde.


SDK tarafında ZYNQ kodu tamamlanınca projenin tamamını buradan paylaşacağım.
NOT:
Yeşil veri yolu:ZYNQ Master Axi
Mavi Veri Yolu:CDMA Axi portu
Kırmızı veri yolu:HLS ile tasarladığım veri gizleme IP'nin BRAM portları