FPGA nedir?


38

Daha önce FPGA'lardan bahseden pek çok insan görmüştüm ve bunun sahada programlanabilir kapı dizisi anlamına geldiğini biliyorum ama nasıl çalışıyor ve bir FPGA kullanmanın amacı nedir?

Yanıtlar:


30

Devrelerinize mantık katan elektronik bileşenlerdir (bu nedenle mikro kontrolörlere benzerler). Ancak tasarım yaklaşımı daha sonra uC'den (mikro kontrolör) tamamen farklıdır. Bir uC'de, dahili uC tasarımını değiştiremezsiniz; Bunun üzerine sadece “klasik” programları çalıştırabilirsin. FPGA'ları programlamak, daha çok yeni donanım oluşturmak gibidir. Mantıksal kapılar arasında yeni bağlantılar yaratır ve yeni, özel bir işlemci yaratırsınız. Ve hepsini evinizde, masanızda ve bilgisayarınızda yapabilirsiniz.

Kulağa hoş geliyor mu? Evet, ama bazı dezavantajlar var. Örneğin, fiyat (ancak bunu karşılaştırmanın zor olduğunu düşünüyorum), daha yüksek güç tüketimi ve daha düşük saat hızları (ancak uygulamanızı akıllı bir şekilde tasarlayabilir ve bir saat döngüsünde daha fazla işlem yapabilirsiniz).

Kullanışlı bağlantılar:

Örnek kullanım: http://nsa.unaligned.org/


3
Birçok FPGA'nın birden fazla CPU çekirdeği içerecek kadar büyük olduğunu ve bu sayede FPGA'nın başlı başına bir bilgisayar olmasına izin vereceğim.
Craig Trader,

3
Bir not olarak, düşük saat hızlarının yanıltıcı olabileceğini düşünüyorum. PC ile karşılaştırıldığında, evet. Bir pic16 ile karşılaştırıldığında, daha hızlı olabilir, ancak maliyete bağlıdır. Daha ucuz olanların çoğu ellerimi 40MHz'de çalıştırıyorlardı, ancak yine üründen ürüne değişiyorlardı.
Kortuk

23

Bir FPGA kelimenin tam anlamıyla alanda programlanabilen bir mantık kapısı dizisidir. C-benzeri bir dil (Verilog) kullanarak istediğiniz şekilde bağlanabilen flip flop, multiplexer, 4-bit arama tabloları vb.

AVR gibi bir uC de benzer mantık kapılarından yapılır, ancak cihaz yapıldığında yapılandırılırlar. Tabii, RAM ve Flash'ı içeriyor, böylece girişleri okumak ve çıkışları kontrol etmek için yazılım yazabiliyorsunuz, ancak kapıların gerçek düzenlemelerini değiştiremiyorsunuz. Kapılar her zaman bir ALU, bir bellek denetleyicisi, bir seri bağlantı noktası vb. Şeklinde düzenlenir.

UC'nin faydası, C gibi bir kullanımı kolay, tanıdık, üst düzey bir dille sahada (masanızda) programlayabilmenizdir. Sorun, yazılımın "yavaş" olmasıdır. Bir girişin bir çıkışı kontrol etmesi için, en basit durumda, şunu yazabilirsiniz:

void loop () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

Bu, bir düzine montaj talimatına dönüştürülecekti, böylece bir girişi bir girdiden kontrol etmek için döngü bir mikrosaniye alacaktır. Ve tüm uC yongasını bu kadar hızlı yapmak gerekiyor. Tabii ki, çok daha fazlasını yapabilirsiniz, ancak daha sonra bu çıkışı kontrol etme yeteneğiniz, uC başka şeyler yapmakla meşgulken yavaşlar.

Bir FPGA'da, girişleri 1 saatte bir çıkışı kontrol edecek şekilde yapılandırabilirim. Böylece çıktı, girişi belki 25 nanosaniye gecikmeyle takip eder. Aynı saat periyodunu kullanarak 40X daha hızlı. Ve FPGA'daki kapıların geri kalanı, bu küçük işlevin hızını etkilemeyecek birçok şey yapabilir.

FPGA'nın kodu basit bir flip flop olacaktır:

her zaman @ (pozlama saati) ledPin <= buttonPin;

Bu sadece bir FPGA hücresinde, onbinlerce kişiden sadece 40 FPI hücresi alacaktır.

FPGA'mı başka bir şey yapmak için yeniden programlayabilirim; örneğin, hala bir saat içinde hala bu 1 FPGA hücresini kullanarak dört girişin kombinasyonuna dayanan led'i kontrol edebilirim. Veya girişdeki seri akıma bağlı olarak ledleri, birkaç FPGA hücresinde, 100'ün kapıları olacaktır. Böylece seri verilere göre, "ON" veya "OFF" diyen LED'i seri akışı çok yüksek bir hızda (kolayca 20 MHz) kontrol edebilir ve hala FPGA'nın kapasitesinin küçük bir kısmını kullanabilirim.

Bu yüzden bir FPGA'nın avantajı açıkça hızdır. Bir uC'nin yapabileceği her şeyi yapabilir ve paralel olarak yapılan her şeyle çok daha hızlı bir şekilde yapabilir. Bir uC'nin milisaniye alacağı karmaşık şeyler, bir FPGA mikrosaniye veya daha azına yapabilir. FPGA'da kalan kapılar olduğu sürece, FPGA'daki önceki fonksiyonların hızını veya çalışmasını etkilemeden ona daha fazla fonksiyon ekleyebilirim. Bu arada, bir FPGA 20MHz'lik bir saat hızını çok kolay bir şekilde çalıştırabilir.

Maliyet farklılaştırıcı değildir. Arduino AVR yongası ile aynı olan yaklaşık 5 $ 'lık gördüğüm hemen hemen her Arduino tasarımını uygulayabilen bir FPGA satın alabilirim. FPGA'lar için ücretsiz araç zincirleri (IDE, derleyici, hata ayıklayıcı) da vardır.

Güç farklılaştırıcı değil. Bir FP ile aynı işlevi elde etmek için FPGA'yı çok daha düşük bir saat hızında çalıştırabildiğimden ve geçitlerinin küçük bir kısmını kullanabildiğimden (kullanılmayan kapılar sadece kaçak güç kullanır), bir FPGA neredeyse tüm UC tabanlı güçleri yenebilir tasarlamak.

Bir FPGA'nın en büyük dezavantajı, bir uC programından çok önemsiz bir FPGA tasarımını tanımlamanın, kodu yazmanın ve hata ayıklamanın çok daha karmaşık ve zaman alıcı olmasıdır. Akşamları yapabileceğiniz tipik bir uC projesi FPGA'de günler sürebilir.

Diğer, potansiyel olarak çözülebilir problemler çoğu insanın yazılım programlaması konusunda eğitilmiş olmasıdır, ancak çok az kişi donanım programlamasını anlar. Verilog'u oldukça kolay bir şekilde öğrenebilirsiniz. Ancak, yazılım tasarımı yerine donanım tasarımı açısından da düşünmeniz gerekir. Tasarım desenleri çok farklı.

Diğer bir husus ise FPGA'ların 8 ila 20 pin DIP paketlerinde gelmemesidir. 100-pin veya daha büyük yüzeye montaj paketlerine girme eğilimindedirler, bu yüzden tahtaları yapmak daha zordur.

Ve son problem şu ki, kullanımı kolay uC'lerde çok sayıda ilginç projenin iyi bir şekilde uygulanabileceği, öyleyse neden bir FPGA ile uğraşmıyorsunuz?


2
“5 $ civarında gördüğüm neredeyse tüm Arduino tasarımlarını uygulayabilen bir FPGA satın alabilirim” Üzgünüm, ama hvæt? Nerede?
saat

9

Temel mantık kapılarına aşina iseniz, bunların neredeyse anında olduklarını bilmelisiniz. A ve B OR C işlemi, A, B veya C değiştiğinde anında değişir.

Bir FPGA (tür) bir programlanabilir lojik kapı matrisidir. Girişleri ve çıkışları tanımlayabilirsiniz (girişlerin bir kombinasyonu olarak).

Bir uC'de, A + B / C * sqrt (D) birkaç saat döngüsü ve bir miktar hafıza alacaktır. Bir FPGA'da, sonuç neredeyse anında gerçekleşir.

Video, DSP, kriptografi için harikalar ...

Asıl avantaj bu. Modern FPGA'lar şimdi hafızaya uygun ve uC / FPGA melezleri var.


Yıllarca süren deneyime sahip ve çoğu zaman bir FPGA üzerinden tasarıma alışkın olduğunuz uC yerine tasarıma girecek pek çok pratik EE'yi biliyorum. Arayüz kullanımı için harika olduklarını düşünüyorum.
Kortuk

Evet, bunun güzel bir örnek olduğunu düşünüyorum: armadeus.com/english/index.html . Benim için özellikle ilginç olan servo kontrol örneği: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki

2
Ayrıca, "C - VHDL" veya "C - Verilog" dönüştürücülerinin gittikçe daha fazla olduğu unutulmamalıdır. Henüz en verimli şeyler değiller, ancak daha önce yazılmış bir kodu hız iyileştirme için kullanılabilecek donanıma dönüştürebilirsiniz. Bana sorarsanız çok hoş (ve bunun için hamur varsa).
Chris Gammell

5

Genel amaçlı bir bilgisayarın yapabileceğinden çok daha hızlı şifreleme anahtarlarını kırmak için kullanılırlar. : D


1
Haha, çok fonksiyonel tanımlamandan zevk aldım. Paralel işleme konusunda kesinlikle harikalar.
Kortuk

Bir Codebreaker projesi: copacobana.org
hhh

2

ASIC'e karşı para ve riskten tasarruf etmek. Sensiz

  1. Güç veya
  2. Bunlardan bir demet inşa ediyorlar (>> 10k birim)

ASIC yapmanın sabit (NRE) maliyetleri, maliyeti engelleyici kılar.

Bir FPGA'yı kolayca değiştirebildiğiniz için, tasarımı daha az simüle edebilir ve laboratuara daha hızlı girebilirsiniz. Ayrıca kısmi bir tasarım yapabilir ve yazılımda olduğu gibi üzerine inşa edebilirsiniz.

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.