4 adet CM3 arasında veri paylaşımı

Başlatan z, 14 Haziran 2016, 05:54:43

z

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?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761

#1
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

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ş.

z

#2
4 ayrı çip.

CAN kullanmadığım için CAN'de durum nedir bilmiyorum. Belki de CAN en ideali denecek bilemiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

10Mbit hızda veri aktarsam bile 150us zaman gerekiyor. Hiç işime yaramıyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan


z

#5
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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

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

z

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)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

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

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

#10
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

AsHeS

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 ?

z

#12
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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yldzelektronik

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?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com