Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: z - 14 Haziran 2016, 05:54:43

Başlık: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 05:54:43
Ozel bir ram kullanmama ya da paralel iletisim yapmama şartı var.

Her işlemci ramındaki 64 byte veriyi diğerleri ile paylaşmak zorunda.

İşlemcilerin adları S1,S2,S3,S4 olsun.

Ramlarında

1'inci    64  byte S1 işlemcisinin verileri
2'inci    64  byte S2 işlemcisinin verileri
3'üncü  64  byte S3 işlemcisinin verileri
4'üncü  64  byte S4 işlemcisinin verileri

Paylaş sinyali geldiğinde 4 işlemci tak tak tak veri değiş tokuşu yapacak ve bu işlem en kısa sürede bitirilecek.
Paylaşım bittiğinde her işlemci, diğerleri ile aynı verilere sahip olacaklar.

Bu amaçla hangi iletişimi tercih edersiniz? Kabaca bu işlem kaç CPU clock zamanı alır?

Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: fatih6761 - 14 Haziran 2016, 06:11:10
Hocam bunlar bir işlemcinin 4 ayrı core'u mu yoksa ayrık 4 mikrodenetleyici gibi mi?

Eğer ayrık mikrodenetleyiciler ile yapılacaksa ve yalnızca seri iletişim olacaksa dairesel tarzda 3 x 64 x 8 x (bir bitin seri hattan gönderilme süresi) kadar zamanda yapılabilir.

Şu şekilde: http://sketchtoy.com/67139485 (http://sketchtoy.com/67139485)

Paylaş sinyali geldiğinde önce her işlemci kendi 64 byte verisini önündekine postalayacak. O arada arkadan gelen 64 byte'ı hafızaya atıp kendi 64 ü bittikten sonra 2 kez arkadan gelen 64 ü ileri yollayacak.

Edit: Başta 4 kez ilerlemesi gerekir diye düşünmüştüm, 3 kez yetiyormuş.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 06:21:23
4 ayrı çip.

CAN kullanmadığım için CAN'de durum nedir bilmiyorum. Belki de CAN en ideali denecek bilemiyorum.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 09:32:08
10Mbit hızda veri aktarsam bile 150us zaman gerekiyor. Hiç işime yaramıyor.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: muhittin_kaplan - 14 Haziran 2016, 09:33:50
hocam tam DMA lık proje aslında.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 09:41:59
Yok hocam ARM'ın DMA'ini bir ara tartışmıştık. Beş para etmez. DMA ile CPU aynı anda çalışamıyor. Çalışmaya kalktıklarında hız düşüyor. Halbuki "bus"ı aynı zamanda (Fazları kayık) kullanan mimariler var.

CM3 ile yaptığım PC monitörünü kullanma projesinden biliyorum ot yoldurmuştu.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: ErsinErce - 14 Haziran 2016, 09:44:22
CAN kullanmanızın vakti gelmiş o zaman hocam,
buffera veriyi yükelyeceksiniz ve gönder diyeceksiniz bu arada başka işlerle uğraşabilirsiniz.
3. veri giriş sinyalini aldıktan sonra bufferı gerekli yerlere boşaltarak hepsi birbirine eşitlenmiş duruma getirebilirsiniz
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 09:45:50
yukarıdaki örnek soru için hesaplayacak olursak değiştokuş sinyali aktif olunca verilerin değiş tokuşu ne kadar zaman alır? (Mesela 72Mhz ST CM3 için)
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: ErsinErce - 14 Haziran 2016, 09:56:19
http://www.esacademy.com/en/library/calculators/can-best-and-worst-case-calculator.html (http://www.esacademy.com/en/library/calculators/can-best-and-worst-case-calculator.html)

worst case scenario: 1mbps - 158us with arbitration delay for 8 byte

5.056 ms sonunda herşey eşitlenmiş oluyor
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 10:00:01
Hocam bana hiç yaramıyor.

20us lik döngüm var. Bu döngü içinde verilerin çoktan değiş tokuş olması gerekiyor. Bunu daha aşağılara nasıl çekerim diye çözüm arıyorum. Çok çekirdek ya da FPGA dışında çözüm yok gibi o zaman.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: ErsinErce - 14 Haziran 2016, 10:06:07
işlemciler aynı kartta ise spi kullanarak o hıza çıkma ihtimaliniz olabilir (18mbps e kadar çıkabiliyor diyor datasheet te)

paralel iletişim sorunu olmasaydı sdio arayüzü ile daha da yüksek hızlara belki çıkılabilirdi, 48 mhz * 8 bit aktarım
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: AsHeS - 14 Haziran 2016, 10:14:02
Alıntı yapılan: z - 14 Haziran 2016, 10:00:01
Hocam bana hiç yaramıyor.

20us lik döngüm var. Bu döngü içinde verilerin çoktan değiş tokuş olması gerekiyor. Bunu daha aşağılara nasıl çekerim diye çözüm arıyorum. Çok çekirdek ya da FPGA dışında çözüm yok gibi o zaman.
NXP'nin LPC43xx Cortex M4 + Cortex M0 multicore çözümleri var bunlar iş görmez mi ?
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 10:18:39
M0'a gıcık oldum.

@gerbay ile zamanında MIPS konusunda çok atışmıştık. CM3lerle hiç sıkıntım yok ama CM0'a ASM ile kod yazmak tam bir delilik ve dedikleri cm0'a harfiyen uyuyor. . Hayatımda böyle iğrenç işlemci görmedim.

CM4 de bana lüks kaçıyor  üstelik yapmak istediğim çalışmalarda fazla avantaj da sağlamıyor.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: yldzelektronik - 14 Haziran 2016, 11:11:33
Alıntı yapılan: z - 14 Haziran 2016, 10:18:39
M0'a gıcık oldum.

@gerbay ile zamanında MIPS konusunda çok atışmıştık. CM3lerle hiç sıkıntım yok ama CM0'a ASM ile kod yazmak tam bir delilik ve dedikleri cm0'a harfiyen uyuyor. . Hayatımda böyle iğrenç işlemci görmedim.

CM4 de bana lüks kaçıyor  üstelik yapmak istediğim çalışmalarda fazla avantaj da sağlamıyor.

Neden?Biraz bilgi verir misiniz?
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 11:34:20
1. Komut seti CM3'e kıyasla çok çok az.
2. Adresleme komutlarında ofset yanlış hatırlamıyorsam en fazla 32 byte. CM3 de 4K idi.
3. Direk adreslemeye dayalı lojik komutlar yok. Örneğin bir register içeriği ile 0x1F i AND işlemine tabi tutacaksan 1F'i illaki bir başka registere yükleyip ardından AND işlemi yapmak zorunda kalıyorsun.
4. CM3'de herhangi bir register üzerinde lojik yada aritmetik işlem yapabilirken CM0'da işlem yapabileceğin register sayısı çok sınırlı.
5. Memory erişimlerinde adres hizalaması istiyor.

Durum böyle olunca kod yazmak iyice zorlaşıyor.

Bu sebeplerden dolayı CM0'a ASM kod yazmak kesinlikle hamallık ötesi bir şey. Zaten tek bir proje yaptım ardından hemen bıraktım bu seriyi. (https://www.youtube.com/watch?v=FfTRQo4rhsk)
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: fatih6761 - 14 Haziran 2016, 14:40:20
Alıntı yapılan: z - 14 Haziran 2016, 09:32:08
10Mbit hızda veri aktarsam bile 150us zaman gerekiyor. Hiç işime yaramıyor.

Hocam eğer bu kadar zaman kısıtı varsa koşulları daha açık belirtmeniz lazım.

1) Parallel iletişim yok dediniz, dolayısıyla seri iletişim kullanılacak, kaç seri iletişim modülü kullanabiliyoruz? İstediğimiz kadar serbest mi?
-> Eğer böyleyse en iyisi her çipte kombinasyon (4, 2) = 6 tane SPI modülü kullanarak her 2 çip arasında bir duplex SPI kurarız. 10MBit SPI ile yaklaşık 51 uS de olur.
-> 20 uS yi yakalamak için en az 26 MBit bir seri hat kullanmanız gerekir. Kısa mesafede imkansız değil ama güvenilirliği tartışılır.

2) Bu istediğiniz 20uS içinde işlemci boşta mı? Öyle olacaksa işlemcilerin MCLK pinlerini senkronlayıp software bir seri iletişim uygularsanız ciddi hızlara ulaşabilirsiniz. Pratikte uygulaması nasıl olur, uğraştığınıza değer mi bilemem.

3) Sanırım multicore işlemci kullanma fikrinden bahsedilmiş. Bunlarda aslına bakarsak özel RAM kullanma durumuna girmiyor mu? 2 işlemci var tek RAM i paylaşan. Böyle yapacağımıza 1KBit lik DRAM koyalım işlemciler sadece data paylaşmak için kullansın.

4) Bu kadar hız illaki lazımsa USB 2.0 HS kullanın 480Mbit/s. F407 de vardı sanki :)

Şahsi fikrim: Hocam ya şartlarınızda bir fazlalık var ya da karşılaştığınız problemin daha değişik bir çözümü var. Bu tarz bir veri aktarımını neden ve nasıl istediğinizi tam anlarsak daha doyurucu cevaplar gelebilir belki.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: yamak - 14 Haziran 2016, 14:56:37
Hocam quad Spi kullanabilirsiniz ya da ethernet de olabilir.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: ErsinErce - 14 Haziran 2016, 16:29:39
SPI Chain 18 mbps de 10.7us 85.6 us de 192 byte transferi tamamlayabilir.

Edit: hesap hatası
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: yamak - 14 Haziran 2016, 17:15:58
Hocam şöyle yapsanız nasıl olur?
Tüm mikro ların spi enable pinlerini birbirine bağlayın.

İlk hamlede S2 ve S3 ün MOSI ve MISO pinlerinin ikisini de kendi yazdığınız soft SPI in MOSI pini yapın.(Soft spi ın SCK sını Hard SPI ın SCK sı besleyecek).S1 ise SPI master,S4 ü de SPI slave olarak ayarlayın.Daha sonra S1 ve S4 data larını kendi aralarında paylaşırken S2 ve S3 den de o dataları okuyun.Yani ilk hamlede

S1'deki datalar:(S1,S4)
S2'deki datalar:(S2,S1,S4)
S3'deki datalar:(S3,S1,S4)
S4'deki datalar:(S4,S1)

İkinci hamlede de yukarıdaki durumun tersini yapın.
Bu durumda iki hamlede tüm mikrolar birbirlerinin datalarını alımış olur.
Yeterince hızlı bi SPI ile işiniz görülebilir.Stm32f4 ün SPI ı 36 MHZ e kadar çalışabiliyor.(Gerçi 36 mhz de yetmiyor size :) )Tabi bu frekanstaki bi sinyal kablo ile aktarılablir mi denemek lazım.
Yani uygulaması biraz zor gibi ama işe yarayabilir.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: z - 14 Haziran 2016, 19:22:43
Alıntı yapılan: fatih6761 - 14 Haziran 2016, 14:40:20
....Hocam ya şartlarınızda bir fazlalık var ya da karşılaştığınız problemin daha değişik bir çözümü var. Bu tarz bir veri aktarımını neden ve nasıl istediğinizi tam anlarsak daha doyurucu cevaplar gelebilir belki...

Bir döngü içinde işletilmesi gereken ve tek işlemci ile yapılan işi çok işlemciye paylaştırmak istiyorum.

Amaç döngü süresini kısaltmak. Hızlı işlemci ile bu süre kısalıyor fakat çip sayısını artırınca hem döngü süresi kısalıyor hem de  ADC, Pwm vs sayısınız artıyor. Bu da daha fazla nesneyi kontrol etme imkanı sağlıyor. Modüler yapı mümkün oluyor.

Fakat çok çipte de böyle haberleşme ihtiyacı çıkıyor.

Paralel haberleşme ve özel ram tabiki işi yokuşa sürmek. Pahalı çözümlerin önünü tıkamak için bu şartları getirdim.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: MC_Skywalker - 14 Haziran 2016, 20:02:40
hocam tam size göre bir kart Parellella. ARM çerkdekli ZYNQ FPGA ve 18 çekirdekli yardımcı işlem birimi içeriyor.

https://www.parallella.org (https://www.parallella.org)

kickstarter projesi olarak görmüştüm şimdi satışa geçmişler.
Başlık: Ynt: 4 adet CM3 arasında veri paylaşımı
Gönderen: engerex - 14 Haziran 2016, 23:22:17
Çok (32) çekirdekli xcore varmış.

(http://www.xmos.com/files/images/cXE216.png)


(http://www.xmos.com/files/images/why-io-response.png)