İçindekiler:

Ucuz Bir Breadboard Olarak Arduino FPGA: 5 Adım (Resimlerle)
Ucuz Bir Breadboard Olarak Arduino FPGA: 5 Adım (Resimlerle)

Video: Ucuz Bir Breadboard Olarak Arduino FPGA: 5 Adım (Resimlerle)

Video: Ucuz Bir Breadboard Olarak Arduino FPGA: 5 Adım (Resimlerle)
Video: Pro Micro ATMEGA32U4 Arduino Pins and 5V, 3.3V Explained 2024, Kasım
Anonim
Ucuz Bir Breadboard FPGA Olarak Arduino
Ucuz Bir Breadboard FPGA Olarak Arduino

Donanım mantık devreleri tasarlamak eğlenceli olabilir. Bunu yapmanın eski usul yolu, bir ekmek tahtası üzerinde NAND kapıları ile kablolama telleri ile bağlandı. Bu hala mümkündür, ancak kapı sayısının kontrolden çıkması fazla zaman almaz. Daha yeni bir seçenek, bir FPGA (Alan Programlanabilir Kapı Dizisi) kullanmaktır. Bu çipler, tasarlayabileceğiniz herhangi bir dijital mantık devresi olmak için kendilerini yeniden yapılandırabilir, ancak ucuz ve hazır değildir. Bu FPGA'nın nasıl Arduino UNO'dan ucuz bir Atmega yongası ile değiştirilebileceğini ve dijital devreyi çok breadboard dostu olan bir DIP paketine nasıl yerleştirebileceğini göstereceğim.

Adım 1: "FPGA"nın Temsil Edeceği Devreyi Tasarlayın

Devreyi Tasarlayın
Devreyi Tasarlayın
Devreyi Tasarlayın
Devreyi Tasarlayın
Devreyi Tasarlayın
Devreyi Tasarlayın

2 bit + 2 bit toplayıcı oluşturacağım. İki çift lojik giriş pini alır ve bir triplet çıkış pini verir.

Bunu NAND kapıları ile yapmak için resimdeki şemaya bakın. 14 NAND kapısına ihtiyacı var. 4 adet dörtlü NAND kapısı TTL yongası kullandım ve bunları ekmek tahtasına bağladım.

Giriş ve çıkış pinlerinin ne zaman açık (yüksek) ve ne zaman kapalı (düşük) olduğunu göstermek için bazı LED'ler ekledim (akım sınırlayıcı dirençleri unutmayın). Giriş pinlerini sürmek için onları ya toprak rayına ya da pozitif güç rayına atladım.

Bu devre çalışıyor, ancak zaten 4 TTL yongası alıyor ve bir sıçanın kablo yuvası. Daha fazla bit gerekli olsaydı, daha fazla ekmek tahtası ve daha fazla jumper olurdu. Çok hızlı bir şekilde devrenin boyutu kontrolden çıkar.

Bir yandan not olarak, TTL kapıları ile çalışırken, beklendiği gibi tam olarak 0V veya 5V çıktı vermezler. Genellikle "yüksek" için 3V civarında çıkış verirler, ancak tam voltaj çok geniş bir aralıktadır. CMOS eşdeğer yongaları kullanan aynı devre, tam olarak 0V ila tam olarak 5V salınımlara sahip olacaktır.

Adım 2: FPGA'yı girin

FPGA'yı girin
FPGA'yı girin
FPGA'yı girin
FPGA'yı girin

Bir FPGA, kelimenin tam anlamıyla herhangi bir kombinasyonda birbirine bağlanan herhangi bir mantık kapısı kombinasyonu haline gelebilen fantastik bir çiptir. Biri "devreyi" bir donanım tasarım dilinde (HDL) tasarlar. Bunlardan biri Verilog olarak adlandırılan birden çok dil vardır. Resimdeki.v dosyası, iki bitlik toplayıcının Verilog eşdeğeridir. Aşağıdaki.pch dosyası da verilog dosyasında adı geçen giriş ve çıkış pinlerini çip üzerindeki gerçek donanım pinlerine atamak için gereklidir.

Bu durumda Kafes Yarı İletkenler iCEstick geliştirme kartı kullanıyorum (https://www.latticesemi.com/icestick). Gerçek FPGA yongası, her biri herhangi bir mantık kapısı olabilen 1000'den biraz fazla kapıya sahip bir iCE40HX-1k'dir. Bu, her geçidin bir NAND geçidi veya bir OR geçidi, NOT geçidi, NOR, XOR vb. olabileceği anlamına gelir. Ayrıca her geçit ikiden fazla girişi işleyebilir. Bu, her üreticiye özeldir, ancak iCE40'larda her kapı 4 girişi işleyebilir. Böylece her kapı, 2 girişli NAND kapısından çok daha yeteneklidir.

4 giriş pinini ve 3 çıkış pinini sırasıyla 91, 90, 88, 87, 81, 80 ve 79 fiziksel pinlerine atamak zorunda kaldım. Bu, fpga yongasına ve üzerinde bulunduğu devre kartına ve bu pinlerin PMOD bağlantı noktasına nasıl bağlandığına özeldir. Bu, bu FPGA kartının veri sayfalarında mevcuttur.

Kafes, Verilog'dan devreleri sentezlemek için (CPU'lar için derlemeye eşdeğer FPGA) kendi araç zincirini sağlar, ancak ücretsiz açık kaynaklı araç zinciri buz fırtınasını kullandım (https://www.clifford.at/icestorm/). Kurulum talimatları o sitede mevcuttur. icestorm kurulu ve verilog ve pcf dosyası ile, bu devreyi FPGA'ya yüklemek için komutlar:

yosys -p "synth_ice40 -blif TwoBitAdder.v" TwoBitAdder.blif

arachne-pnr -d 1k -p iCEstick.pcf ikiBitAdder.blif -o ikiBitAdder.asc

icepack ikiBitAdder.asc ikiBitAdder.bin

iceprog ikiBitAdder.bin

Bu harika çalışıyor, ancak bu iCEstick'in nakliyesi dahil yaklaşık 30 dolara mal olacak. Bu, bir dijital devre kurmanın en ucuz yolu değil, ama güçlü. 1000'den fazla kapısı vardır ve bu küçük devre için sadece 3 tanesini kullanır. NAND kapısı eşdeğeri 14 kapı kullandı. Bunun nedeni, her kapının herhangi bir tür kapı olabilmesi ve her kapının aslında bir 4 giriş kapısı olmasıdır. Her kapı daha fazlasını yapabilir. Daha fazla kapıya ihtiyacınız varsa, iCEstick'in 8000 kapılı daha büyük bir kardeşi vardır, bu yaklaşık iki katına mal olur. Diğer üreticilerin başka teklifleri var, ancak fiyat oldukça dik olabilir.

Adım 3: FPGA'dan Arduino'ya

FPGA'dan Arduino'ya
FPGA'dan Arduino'ya

FPGA'lar harikadır, ancak pahalı olabilir, elde edilmesi zor olabilir ve ekmek tahtası dostu değildir. Breadboard dostu ve ucuz bir yonga, düzgün bir DIP paketiyle gelen ve breadboard için mükemmel olan Atmega 328 P'dir. Ayrıca 4 dolar civarında olabilir. Bu Arduino UNO'nun kalbidir. Elbette UNO'nun tamamını kullanabilirsiniz, ancak ucuz olun, Atmega 328 P'yi UNO'dan çekip kendi başına kullanabiliriz. Yine de UNO kartını Atmega için programcı olarak kullandım.

Bu noktada ihtiyacınız olacak

1. Çıkarılabilir Atmega 328P CPU'lu bir Arduino UNO.

2. UNO'dan çıkaracağımızın yerini almak üzere, Arduino önyükleyicisi önceden yanmış bir başka Atmega 328P. (Hala kullanılabilir bir UNO'ya sahip olmak istediğinizi varsayarak isteğe bağlı).

Amaç, verilog dosyasını 328P'ye yüklenebilecek bir arduino projesine dönüştürmektir. Arduino, C++ tabanlıdır. Elverişli bir şekilde Verilog'dan C++'a Verilator (https://www.veripool.org/wiki/verilator) adında bir çevirmen vardır. Verilator, bu tasarımları pahalı donanımlara bağlamadan önce tasarımlarını simüle etmesi gereken donanım tasarımcıları tarafından kullanılmak üzere tasarlanmıştır. Verilator cross, verilog'u C++'a derler, ardından kullanıcı, simüle edilmiş giriş sinyalleri sağlamak ve çıkış sinyallerini kaydetmek için bir test kablo demeti sağlar. Arduino alet zincirini kullanarak verilog tasarımını Atmega 328P'ye sıkıştırmak için kullanacağız.

İlk önce Verilator'ı yükleyin. https://www.veripool.org/projects/verilator/wiki/I… adresindeki talimatları izleyin.

Ayrıca Arduino IDE'yi kurun ve USB üzerinden Arduino UNO'ya bağlanıp bağlanamadığını test edin.

Pin adlarının değiştirilmesi gerekmesi dışında, FPGA ile aynı verilog dosyasını kullanacağız. Her birinin başına bir alt çizgi (_) ekledim. Bu gereklidir çünkü arduino kitaplıkları B0, B001, vb. gibi şeyleri ikili sayılara çeviren bir başlık dosyası içerir. Diğer giriş pin adları olduğu gibi iyi olurdu, ancak B0 ve B1, derlemenin başarısız olmasına neden olurdu.

TwoBitAdder.v ve iCEstick.pcf içeren dizinde aşağıdakileri çalıştırın:

verilator -Wall --cc ikiBitAdder.v

Bu, birkaç yeni dosya içeren obj_dir adlı bir alt dizin oluşturacaktır. Yalnızca başlık ve cpp dosyalarına ihtiyacımız var, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h ve VtwoBitAdder_Syms.cpp.

Arduino IDE'de, ikiBitAdder.ino adlı yeni bir çizim oluşturun. Bu, ino dosyasını Arduino eskiz defteri dizininizin içinde TwoBitAdder olarak da adlandırılan yeni bir dizinde oluşturacaktır. VtwoBitAdder.h ve VtwoBitAdder.cpp dosyalarınızı Arduino klasörünüzdeki bu TwoBitAdder klasörüne kopyalayın.

Şimdi doğrulayıcı kurulumundan başlık dosyalarını kopyalayın.

cp /usr/local/share/verilator/include/verilated*.

son olarak https://github.com/maniacbug/StandardCplusplus adresinden std c++ kitaplığına kopyalayın. Kurulum talimatlarına göre Bu, normal bir Arduino kütüphanesi gibi kurulur. Dağıtımın içeriğini eskiz defterinizin altındaki 'kütüphaneler' klasörüne açın. Örneğin, eskiz defterim /home/maniacbug/Source/Arduino'da, yani bu kütüphane /home/maniacbug/Source/Arduino/libraries/StandardCplusplus içindedir.

Arduino IDE'nizi kurduktan sonra sıfırladığınızdan emin olun."

Şimdi, bu adımda sağlanan ikiBitAdder.ino içeriğini değiştirin. Bu, verilatörün beklediği, giriş/çıkış pinlerini ayarlayan, ardından döngüde giriş pinlerini okuyan, onları VtwoBitAdder'a (devremizin çevrilmiş versiyonu) besleyen, ardından VtwoBitAdder'dan çıkışları okuyan ve uygulayan bir test donanımıdır. onları çıkış pinlerine

Bu program Arduino UNO'da derlenmeli ve yürütülmelidir.

Adım 4: Bir Ekmek Tahtasında Arduino'dan DIP Chip'e

Arduino'dan Ekmek Tahtasında DIP Chip'e
Arduino'dan Ekmek Tahtasında DIP Chip'e

Artık program Arduino üzerinde çalıştığına göre, artık Arduino kartının kendisine ihtiyacımız yok. İhtiyacımız olan tek şey CPU.

Atmega 328P'yi Arduino UNO soketinden dikkatlice çıkarın ve isteğe bağlı olarak yenisini takın.

Atmega 328P'yi devre tahtasına koyun. Bölme yukarı bakacak şekilde ucu ekmek tahtasına koyun. Pin 1, sol üst pindir. Pim 2, bir sonraki aşağıdır ve bu şekilde, sol altta bulunan pim 14'e gider. Ardından pim 15 sağ alttadır ve 16 ila 28 arasındaki pimler çipin sağ tarafını geri sayar.

8 ve 22 numaralı pimleri toprağa bağlayın.

Pim 7'yi VCC'ye (+5V) bağlayın.

9 ve 10 numaralı pinler arasına bir 16Mhz kuvars kristali bağlayın. Ayrıca pin 9 ile toprak arasında ve pin 10 ile toprak arasında küçük bir kapasitör (22pF) bağlayın. Bu, Atmega 328P'ye 16Mhz saat hızını verir. Başka bir yerde 328P'ye dahili 8Mhz saatini kullanmayı öğretmek için birkaç parça kaydedecek, ancak bu işlemciyi yavaşlatacak talimatlar var.

Giriş pinleri için kullandığımız Arduino GPIO portları 5, 6, 7 ve 8 aslında Atmega 328P üzerindeki fiziksel pinler 11, 12, 13, 14'tür. Bu, soldaki dört alt pim olacaktır.

Çıkış pinleri için kullandığımız Arduino GPIO portları 11, 10 ve 9 aslında Atmega 328P üzerindeki fiziksel pinler 17, 16, 15'tir. Bu, sağdaki alttaki üç pim olacaktır.

LED'leri daha önce olduğu gibi bu pinlere bağladım.

Adım 5: Sonuç

Çözüm
Çözüm

TTL çipleri işe yarıyor, ancak bir şey inşa etmek için çok fazla şey gerekiyor. FPGA'lar gerçekten iyi çalışır, ancak ucuz değildir. Daha az IO pini ve daha düşük hız ile yaşayabiliyorsanız, Atmega 328P sizin için çip olabilir.

Akılda tutulması gereken bazı şeyler:

FPGA:

profesyonel

- Yüksek hızlı sinyalleri işleyebilir. Bir seferde bir talimata kadar işlemeyi darboğaz yapacak bir CPU olmadığı için, sınırlayıcı faktör, verilen devre üzerindeki kapılardan yayılma gecikmesidir. Çoğu durumda bu, çiple sağlanan saatten çok daha hızlı olabilir. Tasarımım için, hesaplanan gecikme, yerleşik saat yalnızca 12 Mhz kristal olsa bile, ikiBitAdder'ın saniyede giriş değerlerinde (100 Mhz) yaklaşık 100 milyon değişikliğe yanıt vermesine izin verirdi.

- Tasarım karmaşıklaştıkça mevcut devrelerin performansı (çok fazla) azalmaz. Kumaşa devre eklemek, kullanılmayan gayrimenkule yeni bir şey koymak olduğundan, mevcut devreleri etkilemez.

- FPGA'ya bağlı olarak, mevcut IO pinlerinin sayısı çok yüksek olabilir ve genellikle belirli bir amaca kilitlenmezler.

Con

- Pahalı ve/veya bulunması zor olabilir.

- Genellikle herhangi bir amatör projede çiple çalışmak için bir tür koparma panosu gerektiren bir BGA paketinde gelir. Özel bir çok katmanlı SMT PCB ile bir tasarım oluşturuyorsanız, bu bir sorun değildir.

- Çoğu FPGA üreticisi, bazı durumlarda maliyetli olabilen veya lisans son kullanma tarihine sahip olan kendi kapalı kaynaklı tasarım yazılımlarını sağlar.

FPGA olarak Arduino:

profesyonel

- Ucuz ve elde edilmesi kolay. Sadece Amazon'da atmega328p-pu'yu arayın. Parça başına yaklaşık 4 $ olmalıdır. Birkaç satıcı bunları 3 veya 4'lü partiler halinde satar.

- Bu bir DIP paketidir, yani harici pimleri ile bir devre tahtasına mükemmel şekilde uyar.

- Bu, diğer 5V cihazlarla arayüz oluşturmayı kolaylaştıran 5V'luk bir cihazdır.

Con

- ATMEGA328P, sınırlı sayıda IO pinine (23) sahiptir ve bunların birçoğu belirli görevler için ayrılmıştır.

- Devre karmaşıklığı arttıkça, Arduino döngü yönteminde çalıştırılan kod miktarı artar, yani her döngünün süresi daha uzun olur.

- Devrenin karmaşıklığı düşük olsa bile, her döngü, giriş pin değerlerini almak ve çıkış pin değerlerini yazmak ve döngünün en üstüne dönmek için birçok CPU talimatı gerektirir. 16Mhz kristal ile, saat döngüsü başına bir talimatta bile, döngü saniyede 1 milyon defadan (1Mhz) fazla çalışmayacaktır. Gerekenden çok daha hızlı olan çoğu amatör elektronik projesi için.

Önerilen: