FPGA, ASIC ve Genel Mikrodenetleyiciler arasındaki farklar ve benzerlikler nelerdir?


25

Okuduğum var bu yazı ve bütünüyle soruma cevap vermez:

Bir mikrodenetleyiciyi biraz hafızası olan, kaydeden ve LOAD, STORE ve ADD gibi bir dizi talimatı işleyebilen herhangi bir şey olarak düşünüyorum. Mantık geçitleri ve rolünü yerine getirecek şekilde içeriyor, ancak asıl görevi evrensel bir bit işlemcisi olmak. Bir Mikrodenetleyiciyi, talimatları saklamak ve işlemek için bir araya getirilmiş ASIC tasarımlarının bir sistemi olarak düşünüyorum.

Bir ASIC cihazını, mantıksal ve elektriksel bileşenler kullanarak tek bir görevi yerine getirmek için özel olarak inşa edilmiş bir devre olarak düşünüyorum, başka bir görev de göz önünde bulundurulmadan ek donanım dahil edilmedi.

Bir FPGA cihazını bir ASIC cihazı (düşük seviye bir cihaz) + belirli bir doğruluk tablosunu uygulamak için kullanılan bir sürü kullanılmamış malzeme olarak düşünüyorum.

İsmine rağmen, bir FGPA çok "uygulamaya özel" hissediyor, çünkü yeni ve farklı bir görev yerine getirilmesi gerekiyor. Bu ASIC ile karışıklığa yol açar. Bir FPGA'nın yeniden bağlanması durumunda, gerekli tüm donanım mevcut olmalıdır. Ayrıca, FPGA'ların programlanabilir olması amaçlanmıştır, ancak bir Mikrodenetleyicinin ne anlama geldiği bu değildir?

Yukarıda bahsettiğim gönderide tanıdık olduğum HDL'den de bahsediyor. HDL hem ASIC hem de FPGA için ve bütün bir mikrodenetleyiciyi tasarlamak için proxy tarafından kullanılamaz mı?


1
Sorunun ne olduğu tam olarak belli değil. ASIC vs FPGA ilgili soruları okudunuz mu? HDL aslında ASIC'leri ve FPGA uygulamalarını tasarlamak için kullanılır ve HDL'de bir mikrodenetleyici tasarlayabilirsiniz.
pjc50

3
Altera, FPGA'lar, ASIC'ler ve mikrodenetleyiciler arasındaki farkı iyi açıklayan, Aptallar için FPGA'lar adlı ücretsiz bir e-kitap sunuyor .
kkrambo

@kkrambo Bana kukla mı diyorsun? :) Üzgünüm, karşı koyamadım ... Kontrol edeceğim.
user58446

Soru başlığına 'benzerlikler' kelimesini ekledim, çünkü üç farklı cihazın birbiriyle olan ilişkisini karıştıran birkaç teknik jargon detayı var gibi görünüyor: örneğin bir cihaz diğer iki cihazdan birini içerebilir veya çok sayıda içerebilir. benzer bileşenler ancak bazı önemli yönleriyle farklılık gösterir. Bu konuya mevcut cevapların bazıları tarafından dokunulmuştur. Teşekkür ederim.
user58446

Yanıtlar:


28

ASIC vs FPGA

Sahaya Özel Programlanabilir Kapı Dizisi, Uygulamaya Özel Entegre Devrelerin prototipleme aşaması olarak görülebilir: ASIC'lerin üretimi çok pahalıdır ve bir kez geri dönüş yapılmaz (en pahalı sabit maliyet maskeler [üretim şekli "şablonudur) "] ve onların gelişimi). FPGA'lar birçok kez yeniden programlanabilir, ancak hedefinize ulaşmak için genel bir kapı dizisinin bağlı olması nedeniyle, ASIC'ler gibi optimize edilmemiştir. Ayrıca, FPGA'lar doğal olarak dinamik cihazlardır, çünkü onu kapatırsanız, sadece mevcut durumu değil, yapılandırmanızı da kaybedersiniz. Artık yapılandırmayı başlangıçta yüklemek için bir FLASH yongası ve / veya bir mikrodenetleyici eklemekle birlikte panolar var, bu yüzden daha az önemli bir argüman olacak. Hem ASIC'ler hem de FPGA'lar Donanım Tanımlama Dilleriyle yapılandırılabilir, ve bazen son ürün için FPGA'lar kullanılır. Ancak genel olarak ASIC'ler, tasarım sabitlendiğinde devreye giriyor.

FPGA vs mikrodenetleyici

Bir mikrodenetleyici ve bir FPGA arasındaki fark gelince, bir mikrodenetleyiciyi, temelde FLASH / ROM'daki kodu sırayla işleyen bir ASIC olarak düşünebilirsiniz. Mikroişlemcileri FPGA'larla optimize edilmiş olmasa bile tam tersi yapabilirsiniz. FPGA'lar tıpkı elektronik devreler gibi bağlanır, böylece işlemcinin yeterince iyi bir paralelliği simüle etmek için bir kod parçasından diğerine atladığı bir mikrodenetleyici gibi değil, gerçekten paralel devrelere sahip olabilirsiniz. Ancak, FPGA'lar paralel görevler için tasarlandığından, bir mikrodenetleyicideki gibi sıralı kod yazmak kolay değildir.

Örneğin, tipik olarak "C'ye A XOR B olsun" sözde kodunda yazarsanız, "çevrilecek olan bir FPGA üzerine" lego tuğlaları içeren bir XOR geçidi inşa edin (arama tabloları ve mandalları) ve A / B'yi giriş olarak bağlayın ve C olarak kullanılmasına bakılmaksızın her saat döngüsünde güncellenecek olan çıkış olarak C. "Talimatın okunması - A adresindeki ve X adresindeki B adresindeki değişkenlerin XOR değeri" olarak çevrilecek olan mikrodenetleyicide ise, C adresindeki değerin kaydedilmesi, aritmetik mantık birimlerinin kaydedilmesi ve ardından ALU'dan bir XOR yapması istenir. çıkış yazmacını RAM adresinin C adresinde kopyalayın ". Kullanıcı tarafında ise, her iki komut da 1 satır kod idi. Bunu yapacak olsaydık, THEN'de başka bir şey yaparsak, HDL'de dizileri yapay olarak yapmak için bir süreç denilen şeyi - paralel koddan ayrı olarak tanımlamamız gerekir. Oysa bir mikrodenetleyicide yapacak bir şey yok. Öte yandan, bir mikrodenetleyiciden "paralellik" (gerçekten giriş ve çıkış yapmak) elde etmek için önemsiz olmayan konulara dokunmanız gerekir. Farklı çalışma biçimleri, farklı amaçlar.

Özetle:

ASIC vs FPGA: az sayıda ürün için daha pahalı, daha pahalı (daha yüksek hacimlerde daha ucuz), ancak daha da optimize edilmiş.

ASIC vs mikrodenetleyici: kesinlikle bir aleti çekiçle karşılaştırmak gibi.

FPGA vs mikrodenetleyici: sıralı kod işleme için optimize edilmemiştir, ancak gerçekten de çok kolay şekilde paralel işler yapabilir. Genellikle FPGA'ler HDL'de, C / Assembly'de mikrodenetleyicilerde programlanır.

Paralel görevlerin hızı ne zaman bir sorun olursa, bir FPGA alın, tasarımınızı geliştirin ve uzun vadede (seri üretim) sizin için daha ucuzsa bir ASIC yapın. Sıralı görevler tamamsa, bir mikroişlemci alın. Sanırım uzun vadede sizin için daha ucuzsa, bundan daha fazla uygulamaya özel bir IC yapabilirsiniz. En iyi çözüm muhtemelen her ikisinden de biraz olacaktır.

Bu yazdıktan sonra ne hızlı bir arama bana verdi: görüntü tanımını buraya girin görüntü tanımını buraya girin

FPGA vs Mikrodenetleyiciler, bu forumda


14

FPGA'lar yeniden programlama ile "yeniden bağlanabilir". Bir FPGA yapılandırmasını, çalıştırıldığında yapılandırılabilir mantık hücrelerine yükler . Bu, donanımda hiçbir değişiklik yapılmadan yeniden programlanabileceği anlamına gelir.

ASIC'ler sadece silikon dökümhanesindeki fotolitografik maskeleri değiştirerek yeniden bağlanabilir.

Bir mikrodenetleyici, bir programı yürüten ve bunun sonucunda genel şeyler yapabilen bir ASIC türüdür . Bununla birlikte, komut setini değiştirmek veya benzer bir şey yapmak istiyorsanız, gerçek silikon IC düzenini değiştirmeniz gerekir.


Bir FPGA ve bir MCU arasındaki fark daha bulanık. Temel olarak, bir FPGA'nın donanım düzeyinde, hepsi yoğun bir çoklayıcı matrisine bağlı olan birçok küçük SRAM hücresidir. Temel olarak, bir FPGA, sadece çoklayıcıları ve SRAM hücrelerini yeniden programlayarak elektronik olarak "yeniden bağlanabilir" ** bir bütün ayrı mantık yığınıdır .

Bu nedenle, aslında içinde bir MCU uygulayabilirsiniz. bir MCU sadece belirli bir mantık hücresi konfigürasyonu olduğundan, bir FPGA . Aslında, FPGA'lar MCU'ların tasarım sürecinde çok yaygın olarak kullanılmaktadır.

Bir mikrodenetleyici, belirli bir mantık yapılandırmasının bir uygulamasıdır. Onlara sahip olmamızın nedeni, bir MCU'yu doğrudan silikonun içine uygulayarak, gereken toplam silikon kalıp boşluğu miktarının büyük ölçüde optimize edilebildiği ve bir FPGA'nın istenen "jenerikliğinin" yasakladığı belirli performans optimizasyonlarının yapılabilmesidir. Bu, bir MCU’nun üretim maliyetlerinin önemli ölçüde azaltılmasını sağlar ve sonuç olarak, ortak MCU, eşdeğer mantığı içerebilen bir FPGA’dan daha ucuzdur.


FPGA vardır onlar MCU'lar olamaz şekilde mantık yapılarını uygulayabilirsiniz çünkü belirli uygulamalarda yararlıdır. Örneğin, eğer X1 + Y1, X2 + Y2, X3 + Y3 ve X4 + Y4 eklemeniz gerekirse, MCU her işlemi * sırayla yapmak zorunda kalacaktır . Bir FPGA , aynı anda 4 ayrı ALU'ya sahip olabilir , böylece aynı işlemi çeyrek saatte yapabilir (iki cihazın aynı oranda saatlendiği varsayılarak).

Bu, FPGA'ların (veya aynı görev için tasarlanan ASIC'lerin) gerçekten parlayabildiği, aynı anda birçok şeyi, aynı anda tek bir işlemin sıralı olarak yapabileceği gerçeği ile parlayabildiği yerdir .

* (not: Burada SIMD gibi bazı şeyleri görmezden geliyorum)


FPGA / ASIC ayrımının bulanık olduğunu sanmıyorum; Bir FPGA'da "kabloları" değiştirilebilen devreler aynı anda ve bağımsız olarak çalışır. Bir MCU'da, kabloları değiştirilemeyen, davranışları programlanabilir bir bellek dizisinden parça parçalara erişilen bilgilerle kontrol edilen çok sayıda devre vardır. Herhangi bir zamanda, bir CPU genellikle yalnızca birkaç bin ile birkaç milyar arasında değişen bir seçim listesinden tek bir işlemi gerçekleştirebilir, ancak MCU bu gibi işlemleri sırayla bir araya getirmeyi mümkün kılacak şekilde tasarlanır. faydalı iş.
supercat

Teşekkür ederim. Cevap olmaya çok yakın ... 10 ay sonra da olsa. +1 değişiklik yapmak için.
user58446

6

Bu iyi bir soru

Temel olarak bir mikro denetleyici ve bir ASIC, taşa yerleştirilmiş ve değiştirilemeyecek donanıma (çoğunlukla silikon denir) sahiptir. Bir FPGA birçok farklı donanım türünü temsil edecek şekilde yapılandırılabilir (bu, mikro denetleyicileri içerebilir).

Bir mikro denetleyicinin birçok farklı şey yapmak için yapılabileceğini düşünebilirsiniz, ancak bu tamamen farklı programlar çalıştırarak yapılır - teknik olarak yazılım, ancak bazen ürün yazılımı olarak da adlandırılır - donanımın kendisi esasen aynı işlemleri yapmaz; farklı girdilerle farklı siparişler.

FPGA'lar genellikle ASIC'lere adanmış tasarımları üretmek için kullanılır; aralarındaki fark, bir FPGA'nın iç çalışmalarını güncellemek veya işlevsel bloklar eklemek / kaldırmak istiyorsanız, yapmanız gereken tek şey kendi yazılımını güncellemektir. ASIC'lerde yapılacak içsel çalışmalar silikona bağlı olduğu için yeniden yapılandırılamaz.

Kısacası, bir mikro işlemciyle farklı programları çalıştırmak için aynı donanımı kullanıyorsunuz, bir FPGA ile farklı işlevleri yerine getirmek için donanımı yeniden yapılandırıyorsunuz ve ASIC'ler bir donanımın değiştirilemeyeceği ancak genellikle gerçekleştirmek üzere tasarlandıkları bir mikro denetleyici gibi Tek bir işlev son derece verimli.

Hem ASIC'ler hem de FPGA'lar mikro denetleyiciler içerebilir ve eğer yaparlarsa kendileri için bağımsız bir mikro denetleyici gibi programlar yazabilirsiniz, bunun bir örneği Altera'nın NIOS II yerleşik işlemcisidir.

Bu hala kafa karıştırıcıysa, ne olduğunu netleştirmeyin ve cevabımı netleştirmek için elimden geleni yapacağım.

çingene


3

Eh, belirli bir kapı koleksiyonu gibi davranırsa, hiçbir FPGA elektrik sinyalleri tarafından programlanmaz, bazı FPGA'lar bu yapılandırmayı saklamak için flash bellek içerir, bazıları her güç sıfırlamasından sonra yeniden programlanmalıdır.

Bir ASIC önceden yapılandırılmış olan üretim hattından çıkar.

FPGA hataları bir donanım yazılımı güncellemesiyle düzeltilebilir, ASIC hataları ekonomik olarak tamir edilemez.


2

İsmine rağmen, bir FGPA çok "uygulamaya özel" hissediyor, çünkü yeni ve farklı bir görevi yerine getirmesi gerekiyor.

“Uygulamaya özgü” ifadesinin tam tersi bu. Bir FPGA'yı, birden fazla uygulama için, onu yeniden doldurarak kullanabilirsiniz. Bir ASIC'i değiştiremezsiniz, bu yüzden yalnızca bir göreve uygulanabilir (bu görev bir mikrodenetleyici uyguluyor olabilir).

Bir FPGA'nın yeniden bağlanması durumunda, gerekli tüm donanım mevcut olmalıdır.

Bunun ne anlama geldiğinden emin değilim. Genellikle bir FPGA'yı yeniden programlamak için bir yazılım arayüzü bulunur. Milyonlarca [para birimi] donanım gerektiren bir ASIC.

FPGA'lar programlanabilir olmak içindir, ancak bir Mikrodenetleyicinin ne anlama geldiği değil mi?

Bir mikrodenetleyici, sabit bir donanım için ardışık yazılımı programlamanıza izin verir. Tıpkı normal bir bilgisayar gibi, ancak çok küçük ve kaynak sınırlı. Bir FPGA, bir HDL kullanarak istediğiniz herhangi bir donanımı programlamanıza izin verir.

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.