FPGA's vs Mikrodenetleyiciler [kapalı]


36

Arduino ailesi (özellikle Sanguino) üzerinde çalıştım, birkaç basit cihaz ve basit bir fototrop yaptım. Bu nedenle mikrodenetleyicilerle oldukça rahatım - özellikle de Atmel. FPGA'nın standart mikrodenetleyicilerden nasıl farklı olduğunu bilmek isterim. Teknik bir altyapıya sahip (C / C ++ programlama) ve bu nedenle teknik cevapları çok isterim. Sadece elektronik alanında yeni biri olduğumu (s / w deneyimime göre) olduğumu unutmayın. :)

Bu sorguyu gözden geçirdim ve çok iyiydi ancak daha ayrıntılı bilgi arıyorum.

Teşekkürler! Sushrut.


Zeyilname - Gerçek dünyada hibrit mimarileri kullanan, yani fpga'ları mikrodenetleyicilerle birleştiren iyi örnekler var mı?
Sushrut J Mair 17:10

Sushrut J Mair - Bir FPGA varsa ve Mikro gerektiğinde Genellikle, mikro uygulanan alır içinde FPGA.
Connor Wolf

Evet, Sahte İsim, kabul etti. Ancak, hem FPGA hem de MCU'ların bir sistemi tasarlamak için kullanıldığı gerçek dünya vakalarını bulmak istiyordum. Tasarımın FPGA kısmının, çekirdek mantıksal işleme MCU tarafından yapılırken, sisteme değişen girdilere göre yanıt veren ve değiştiren 'değişebilir' s / b'yi uygulamak olduğu fikridir.
Sushrut J Mair

Yanıtlar:


48

Bir FPGA için Tasarım, bir Donanım Tanımlama Dili (HDL) gerektirir. HDL'ler kesinlikle C gibi hiçbir şey değildir. Bir C programının sıralı bir talimatlar dizisi olduğu ve paralel yürütmeyi sağlamak için kendisini çarpıtması gerektiğine rağmen, bir HDL eşzamanlı bir devreyi açıklar ve sıralı yürütmeyi elde etmek için kendisini çarpıtması gerekir. Bu çok farklı bir dünya ve bir yazılım geliştiricisi gibi düşünürken FPGA'de bir devre kurmaya çalışırsanız zarar görecektir.

Bir MCU zaman sınırlıdır. Daha fazla iş başarmak için daha fazla işlemci döngüsüne ihtiyacınız var. Saatlerin frekansları için gerçek sınırları var, bu yüzden bilgisayarlı bir duvara çarpmak çok kolay. Ancak, bir FPGA alanı sınırlıdır. Daha fazla iş yapmak için, yalnızca daha fazla devre eklersiniz. FPGA'nız yeterince büyük değilse, daha büyük bir tane satın alabilirsiniz. En büyük FPGA'ya sığamayan bir devre oluşturmak çok zordur ve bunu yapsanız bile FPGA'ların birlikte nasıl zincirleneceğini açıklayan uygulama notları vardır.

FPGA'lar paralel yürütmeye daha fazla odaklanır. Bazen, MCU’nuzun ISR’sinin bu kesintiye hizmet etmesi için ne kadar zaman alacağı ve zor gerçek zamanlı limitlerinizi elde edip edemeyeceğiniz konusunda endişelenmelisiniz. Bununla birlikte, bir FPGA'da her zaman çalışan çok sayıda Sonlu Durum Makinesi (FSM) vardır. "Femto-kontrolörleri" gibidirler, küçük kontrol mantığı bulutları gibi. Hepsi aynı anda çalışıyor, bu yüzden bir ara vermeyi kaçırmaktan endişe duymuyorsunuz. Bir ADC'ye arabirim için bir FSM, bir mikrokontrolörün adres / veri yoluna arabirim için başka bir FSM, bir stereo kodeğe veri akışı için başka bir FSM, ADC'den kodek için veri akışını tamponlamak için başka bir FSM olabilir ... Tüm FSM'lerin uyum içinde şarkı söylediğinden emin olmak için bir simülatör kullanmanız gerekir.

FPGA'lar bir PCB düzeni tasarımcısının ıslak rüyasıdır. Son derece yapılandırılabilirler. Çok farklı mantık arayüzlerine (LVTTL, LVCMOS, LVDS, vb.), Değişken gerilimlere ve hatta sürücü güçlerine sahip olabilirsiniz (böylece seri sonlandırma dirençlerine gerek yoktur). Pimler değiştirilebilir; pinlerin çipin etrafına dağıldığı bir MCU adres veriyolu gördünüz mü? PCB tasarımcınız muhtemelen tüm sinyalleri doğru bir şekilde birleştirmek için bir sürü viyana düşürmek zorunda. Bir FPGA ile, PCB tasarımcısı daha sonra sinyalleri uygun olan herhangi bir sırayla çip içine aktarabilir ve daha sonra tasarım FPGA alet zincirine geri eklenebilir.

FPGA'larda ayrıca çok hoş, süslü oyuncaklar var. Favorilerimden biri, Xilinx çiplerindeki Dijital Saat Yöneticisi. Bir saat sinyalini beslersiniz ve çok çeşitli frekans çarpanları ve bölücüler kullanarak dört% 'den daha fazla türetebilir, hepsi saf% 50 iş çevrimi ve% 100 faz fazında bile olabilir. yonganın dışına yayılma gecikmelerinden doğar!

EDIT (ekine cevap):

Bir FPGA'ya "yumuşak bir çekirdek" yerleştirebilirsiniz. Kelimenin tam anlamıyla bir mikrodenetleyici devresini birbirine bağlıyorsunuz veya daha doğrusu Xilinx'in PicoBlaze veya MicroBlaze veya Altera'nın Nios'u gibi başka birinin devresini tasarımınıza düşürüyorsunuz. Fakat C-> VHDL derleyicileri gibi, bu çekirdekler de bir FSM ve veri yolu veya gerçek bir mikrodenetleyici kullanmaya kıyasla biraz şişirilmiş ve yavaş olma eğilimindedir. Geliştirme araçları ayrıca, FPGA'lar zaten son derece karmaşık çipler olduğunda, kötü bir şey olabilen tasarım sürecine önemli bir karmaşıklık ekleyebilir.

İçlerinde gömülü "sert çekirdeğe" sahip bazı FPGA'lar da var, Xilinx'in çevresinde FPGA kumaşlı gerçek, özel bir IBM PowerPC'ye sahip Virtex4 serisi gibi.

EDIT2 (Yoruma cevap):

Sanırım şimdi görüyorum ki, ayrık bir MCU’yu bir FPGA’ya bağlamayı soruyorsunuz; yani iki ayrı çip. Bunu yapmak için iyi nedenler var; Sert çekirdekli olan ve iyi yumuşak çekirdeği destekleyecek kadar büyük olan FPGA'lar, genellikle bir PCB tasarlama zorluğunu 10'luk bir faktörle kolayca artıran bir BGA paketi gerektiren yüzlerce iğneye sahip canavarlardır.

C, çok daha kolaydır, bu yüzden MCU'lar kesinlikle bir FPGA ile aynı hizada çalışmaktalar. C yazmak daha kolay olduğu için, MCU’da “beyinleri” veya merkezi algoritmayı yazabilirsiniz, FPGA ise hızlandırılması gerekebilecek alt algoritmaları uygulayabilir. Değişen şeyleri C koduna koymaya çalışın, çünkü değiştirmesi daha kolaydır ve FPGA'yı sık sık değişmeyecek daha özel tür şeyler olarak bırakın.

MCU tasarım araçlarının kullanımı da daha kolaydır. Tasarım araçlarının FPGA bit dosyasını oluşturması, birkaç basit tasarım için bile olsa birkaç dakika sürer, ancak karmaşık MCU programları genellikle birkaç saniye sürer. MCU'da yanlış giden çok daha az şey var, bu yüzden hata ayıklamaları daha kolay ... FPGA'ların ne kadar karmaşık olabileceğini anlayamıyorum. Elinizde olanın veri sayfasını almanız gerekiyor ve her sayfasını okumayı denemelisiniz. Biliyorum, birkaç yüz sayfa ... yine de yap.

Onları bağlamanın en iyi yolu, harici bir adres ve veri yolu olan bir MCU kullanmaktır. Daha sonra FPGA devrelerini MCU’ya kaydedebilir ve her biri kendi adreslerine sahip olan kendi “kayıtlarınızı” ekleyebilirsiniz. Şimdi FPGA, 8 bitlik okumalar arasındaki taşmaları önlemek için ilk byte okunduğunda 4 baytın tümünü aynı anda tutabilen 32 bitlik bir zamanlayıcı gibi özel çevre birimleri ekleyebilir. Ayrı bir ADC gibi, diğer yongalardan daha fazla çevre birimini hafızaya almak için yapıştırıcı mantığı olarak da kullanabilirsiniz.

Son olarak, bazı MCU'lar, FPGA gibi bir "harici ana" ile kullanım için tasarlanmıştır. Cypress, içinde 8051 olan birkaç USB MCU'su üretiyor ancak bunun amacı, örneğin bir FPGA tarafından üretilen / tüketilen USB verilerinin kullanılmasıdır.


Bu iyi bir bilgi, teşekkürler. C / C ++ to HDL derleyicilerini duydum. Onları hiç denedin mi?
Sushrut J Mair 17:10

Onlar tamam ... konum. Tek bir mantık bloğu için çok da kötü değil. Ancak bu tür bir derleyici aracılığıyla bir tasarım yazmam. Çok verimli değiller çünkü diller inanılmaz derecede farklı ... özel kurallar kullanmanız gerekiyor, sadece herhangi bir eski ANSI C kodunu almıyorlar.
ajs410

Teşekkürler, bu faydalıdır. Kafes Semiconductor'ın XP2 Brevia cihazını sipariş ettim. Temel FPGA tasarım konseptlerinden memnun kaldığımda bazı HDL - C derleyicilerini denemek istiyorum.
Sushrut J Mair

Zeyilnamemin cevabını orjinal sorguda gördüm. Teşekkürler - yani standart bir MCU + a FPGA hibrit mimarisinin pratik olarak konuşmasının (en azından günümüz teknolojisiyle) gerçek dünya koşullarında gerçekten kullanılabilir olması için çok az katma değerinin olduğunu mu söylüyorsunuz?
Sushrut J Mair

Muhteşem. Teşekkürler ajs410. Heyecan verici melez kemer olanaklarına girmeden önce kendimi fpga'nın içine sokmak için birkaç hafta harcamayı umuyorum!
Sushrut J Mair 24:10

10

"gerçek dünyadaki örnekler ... FPGA'ları mikrodenetleyicilerle birleştiriyor mu?"

Prensip olarak, yeterince büyük bir FPGA tek başına bir FPGA artı bir mikrodenetleyicinin yapabileceği her şeyi yapabilir - belki de FPGA içine yumuşak bir CPU uygulayarak. Uygulamada, belirli bir performans seviyesi genellikle daha düşük parça maliyetlerine sahiptir ve bir FPGA artı ayrı bir mikrodenetleyici ile uygulandığında yalnızca FPGA'lardan (veya yalnızca MCU'lardan) daha düşük güç gerektirir. Burada hem FPGA hem de mikrodenetleyici bulunan en ünlü cihazlardan birkaçı:


4

Genellikle FPGA'lar, özellikle çok paralel veya düşük gecikmeli işlemler, birden fazla saat alanında çalışan veya donanım hızında özel mantık yapmak gibi mikrodenetleyicilerin verimli bir şekilde yapamayacağı işleri yapmak için kullanılır. Bu nedenle, ağır kaldırma işlemini gerçekleştirecekler ve tasarımın merkezinde olması için nadiren bir MCU'ya ihtiyacınız olacak - yapılandırma veri akışını yükleme gibi yönetim konumlarına taşınabilirler. Bunun bir örneği, Minimig'deki depolama arabirimini uygulayan PIC veya ARM'dir .

Ancak birkaç ürün çizgileri bulanıklaştırıyor. Bazı örnekler:

  1. Daha büyük FPGA'lar, yerleşik RAM'lere ve çoğaltıcı bloklara sahip oldukları gibi (daha büyük projeler genellikle onlara ihtiyaç duyar) yerleşik CPU'lara sahip olma eğilimindedir.
  2. Bazı mikrodenetleyiciler paralel işlemlere yöneliktir (XMOS XS1, Atmel Xmega, GreenArray, Paralaks Pervanesi)
  3. Bazı cipsler melez olarak tasarlanmıştır (Cypress PSoC, Atmel FPSLIC)

Bir zorunlu programlama arka planından gelince, FPGA'ların avantajlarını kazanmanız için donanımda tasarım yapmak için oldukça uygun bir ayardır. Bununla birlikte, deneyimi başka bir yerde de faydalı bulacaksınız.


1

AVR gibi bir MCU ile bir FPGA’ya programlanmış arasında bir fark yoktur. OpenCores sitesi, FPGA'da kullanılabilecek bir AVR için VHDL koduna sahiptir . Çalışabilir ve nasıl çalıştığını görebilir ve hatta uygun bir FPGA kartı satın almadan bir simülatörde kendiniz deneyebilirsiniz.


1
Genellikle, FPGA'ların aynı MCU için daha yavaş bir saat hızında çalışması gerektiğini düşünüyorum, aksi takdirde çok daha pahalı olurlar. Daha pahalı durumda, denetleyici ve dış pimler arasında ekstra donanım kolayca uygulayabilirsiniz, genellikle buna değer.
Kortuk

Yine de sistemde bir FPGA gerekliyse, MCU "serbesttir".
Leon Heller

1

Mikrodenetleyiciler, program belleğindeki komutları birbiri ard arda bir komutla yerine getiren dijital devrelerdir. Bir mikrodenetleyicinin dijital donanım devresi sabittir ve dijital devreyi oluşturan farklı kapılar arasındaki ara bağlantılar kalıcıdır ve silikon üzerinde kazınır. FPGA'ların, programlanabilir ara bağlantılara sahip dijital kapıların bir havuzu olarak düşünülebildiği yerlerde (gerçekte yerine lutlar bulunur). Artık fpga üzerinde ara bağlantı programlanarak herhangi bir dijital devre (hatta bir mikroişlemci bile) yapılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.