Mündəricat:

Ucuz Breadboard FPGA olaraq Arduino: 5 Addım (Şəkillərlə)
Ucuz Breadboard FPGA olaraq Arduino: 5 Addım (Şəkillərlə)

Video: Ucuz Breadboard FPGA olaraq Arduino: 5 Addım (Şəkillərlə)

Video: Ucuz Breadboard FPGA olaraq Arduino: 5 Addım (Şəkillərlə)
Video: FireAnt: A low-cost, thumb-sized, breadboard-friendly FPGA dev board for makers 2024, Noyabr
Anonim
Arduino Ucuz Breadboard FPGA olaraq
Arduino Ucuz Breadboard FPGA olaraq

Avadanlıq məntiqi sxemlərinin dizaynı əyləncəli ola bilər. Bunu etmək üçün köhnə məktəb yolu, NAND qapıları ilə, çörək taxtasında, tullanan tellərlə bağlanmışdı. Bu hələ də mümkündür, ancaq qapıların sayı əlindən çıxana qədər çox vaxt çəkmir. Daha yeni bir seçim, FPGA (Sahə Programlanabilir Gate Array) istifadə etməkdir. Bu çiplər, dizayn edə biləcəyiniz hər hansı bir rəqəmsal məntiq dövrəsinə çevrilə bilər, lakin ucuz və hazır deyil. Bu FPGA -nın Arduino UNO -dan ucuz bir Atmega çipi ilə necə əvəz edilə biləcəyini göstərəcəyəm, rəqəmsal dövrəni təsirli bir şəkildə çörək taxtasına uyğun bir DIP paketinə qoyuram.

Addım 1: "FPGA" nın təmsil edəcəyi dövrəni dizayn edin

Bu dövrəni dizayn edin
Bu dövrəni dizayn edin
Bu dövrəni dizayn edin
Bu dövrəni dizayn edin
Bu dövrəni dizayn edin
Bu dövrəni dizayn edin

2 bit + 2 bitlik bir toplayıcı quracağam. İki cüt məntiq giriş sancağı alır və bir üçlü çıxış sancağı çıxarır.

NAND qapıları ilə bunu etmək üçün şəkildəki sxemə baxın. 14 NAND qapısına ehtiyac var. 4 ədəd NAND gate TTL çipindən istifadə etdim və onları çörək taxtasına bağladım.

Giriş və çıxış pinlərinin nə vaxt açıldığını (yüksək) və söndüklərini (aşağı) göstərmək üçün bəzi LEDləri (cari məhdudlaşdırıcı rezistorları da unutmayın) əlavə etdim. Giriş sancaqlarını idarə etmək üçün ya onları yer səthinə, ya da pozitiv elektrik rayına atdım.

Bu dövrə işləyir, amma artıq 4 TTL çipi tutur və siçovulların tel yuvasıdır. Daha çox bit lazım olsaydı, daha çox çörək lövhəsi və daha çox tullanan olardı. Çox tez dövrənin ölçüsü əldən çıxacaqdı.

Əlavə olaraq, TTL qapıları ilə işləyərkən, gözlədiyiniz kimi tam olaraq 0V və ya 5V çıxarmırlar. Çox vaxt "yüksək" üçün 3V ətrafında çıxış edirlər, lakin dəqiq gərginlik çox geniş diapazondadır. CMOS ekvivalent çipləri istifadə edən eyni dövrə, tam olaraq 0V -dan 5V -ə qədər daha yaxşı olardı.

Addım 2: FPGA -ya daxil olun

FPGA -ya daxil olun
FPGA -ya daxil olun
FPGA -ya daxil olun
FPGA -ya daxil olun

FPGA, hər hansı bir birləşmə ilə birləşdirilmiş hər hansı bir məntiq qapısının birləşməsinə çevrilə bilən fantastik bir çipdir. Biri "dövrəni" bir hardware dizayn dilində (HDL) dizayn edir. Bir çox belə dillər var, onlardan birinə Verilog deyilir. Şəkildəki.v faylı, iki bit toplayıcının Verilog ekvivalentidir. Aşağıdakı.pch faylı, verilog faylında adlanan giriş və çıxış pinlərini çipdəki həqiqi hardware pinlərinə təyin etmək üçün də lazımdır.

Bu vəziyyətdə bir Lattice Semiconductors iCEstick inkişaf lövhəsindən istifadə edirəm (https://www.latticesemi.com/icestick). Əsl FPGA çipi, hər biri hər hansı bir məntiq qapısına çevrilə bilən 1000-dən çox qapısı olan bir iCE40HX-1k-dir. Bu o deməkdir ki, hər bir qapı NAND qapısı və ya OR qapısı ola bilər, qapı deyil, NOR, XOR və s. Əlavə olaraq hər qapı ikidən çox girişi idarə edə bilər. Bu hər istehsalçıya xasdır, lakin iCE40 -da hər qapı 4 girişi idarə edə bilir. Beləliklə, hər bir qapı 2 girişli NAND qapısından çox daha qabiliyyətlidir.

4 giriş çamı və 3 çıxış pinini sırasıyla 91, 90, 88, 87, 81, 80 və 79 fiziki sancaqlara təyin etməliydim. Bu, fpga çipinə və üzərindəki qırılma lövhəsinə və bu pinlərin PMOD limanına necə bağlandığına xasdır. Bu, bu FPGA kartı üçün məlumat cədvəllərində mövcuddur.

Lattice, Verilog -dan (CPU üçün tərtibə bərabər olan FPGA) sxemləri sintez etmək üçün öz alətlər zəncirini təmin edir, lakin pulsuz açıq mənbə alət zənciri buz fırtınasından istifadə etdim (https://www.clifford.at/icestorm/). Quraşdırma təlimatları həmin saytda mövcuddur. Buzlu fırtına və verilog və pcf faylı quraşdırıldıqda, bu dövrəni FPGA -ya yükləmək üçün əmrlər bunlardır:

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

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

icepack twoBitAdder.asc twoBitAdder.bin

iceprog twoBitAdder.bin

Bu əla işləyir, amma bu iCEstick -in göndərilməsi də təxminən 30 dollara başa gələcək. Bu rəqəmsal bir dövrə qurmağın ən ucuz yolu deyil, amma güclüdür. 1000 -dən çox qapısı var və bu kiçik dövrədə onlardan yalnız 3 -dən istifadə edir. NAND qapısı ekvivalenti 14 qapıdan istifadə edirdi. Bu, hər bir qapının hər cür qapıya çevrilə bilməsi ilə əlaqədardır və hər qapı əslində 4 giriş qapısıdır. Hər qapı daha çox şey edə bilər. Daha çox qapıya ehtiyacınız varsa, iCEstick -in 8000 qapısı olan daha böyük bir qardaşı var ki, bu da təxminən ikiqatdır. Digər istehsalçıların başqa təklifləri var, lakin qiymət olduqca dik ola bilər.

Addım 3: FPGA -dan Arduinoya

FPGA -dan Arduinoya qədər
FPGA -dan Arduinoya qədər

FPGA'lar əladır, amma bahalı ola bilər, gəlmək çətindir və çörək lövhəsi üçün çox uyğun deyil. Çörək taxtasına uyğun və ucuz bir çip, çörək bişirmək üçün mükəmməl bir DIP paketində olan Atmega 328 P -dir. Onu da təxminən 4 dollara almaq olar. Bu Arduino UNO -nun ürəyidir. Əlbəttə ki, bütün UNO -dan istifadə edə bilərsiniz, amma ucuz olsanız, Atmega 328 P -ni UNO -dan çıxarıb özümüz istifadə edə bilərik. UNM idarə heyətini Atmega üçün proqramçı olaraq istifadə etdim.

Bu nöqtədə ehtiyacınız olacaq

1. Çıkarılabilir Atmega 328P CPU ilə bir Arduino UNO.

2. UNO-dan çıxarmaq istədiyimizi əvəz etmək üçün əvvəlcədən yandırılmış Arduino yükləyicisi olan başqa bir Atmega 328P. (İstifadə edilə bilər ki, hələ də istifadə edilə bilən bir UNO -ya sahib olmaq istəyirsən).

Məqsəd, verilog faylını 328P -yə yüklənə bilən bir arduino layihəsinə çevirməkdir. Arduino C ++ üzərində qurulmuşdur. Verilogdan C ++ - a Verilator (https://www.veripool.org/wiki/verilator) adlanan tərcüməçi əlverişlidir. Verilator, bu dizaynları bahalı avadanlığa verməzdən əvvəl dizaynlarını simulyasiya etməli olan hardware dizaynerləri tərəfindən istifadə üçün nəzərdə tutulmuşdur. Verilator cross verilogu C ++ üçün tərtib edir, sonra istifadəçi simulyasiya edilmiş giriş siqnallarını təmin etmək və çıxış siqnallarını qeyd etmək üçün bir test qoşqu təmin edir. Arduino alətlər zəncirindən istifadə edərək verilog dizaynını Atmega 328P -yə sıxışdırmaq üçün istifadə edəcəyik.

Əvvəlcə Verilatoru quraşdırın. Https://www.veripool.org/projects/verilator/wiki/I… ünvanındakı təlimatları izləyin.

Arduino IDE -ni də quraşdırın və Arduino UNO -ya USB vasitəsilə qoşula biləcəyini sınayın.

Pinlərin adlarının dəyişdirilməsi lazım olmadığı istisna olmaqla, FPGA ilə eyni verilog faylını istifadə edəcəyik. Hər birinin əvvəlinə bir alt xətt (_) əlavə etdim. Buna ehtiyac var, çünki arduino kitabxanalarında B0, B001 və s. Kimi şeyləri ikili ədədlərə çevirən bir başlıq faylı var. Digər giriş pin adları olduğu kimi yaxşı olardı, ancaq B0 və B1 quruluşun uğursuz olmasına səbəb olardı.

İkiBitAdder.v və iCEstick.pcf olan qovluqda aşağıdakıları işlədin:

Verilator -Wall --cc twoBitAdder.v

Bu, bir neçə yeni fayl olan obj_dir adlı bir alt kataloq yaradacaq. Yalnız başlıq və cpp fayllarına ehtiyacımız var, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h və VtwoBitAdder_Syms.cpp.

Arduino IDE -də ikiBitAdder.ino adlı yeni bir eskiz yaradın. Bu ino faylını Arduino eskiz kitabçanızın içərisində twoBitAdder adlanan yeni bir qovluqda yaradacaq. VtwoBitAdder.h və VtwoBitAdder.cpp fayllarınızı Arduino qovluğunuzdakı bu ikiBitAdder qovluğuna kopyalayın.

İndi başlıq fayllarını verilator qurğusundan kopyalayın.

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

nəhayət, https://github.com/maniacbug/StandardCplusplus ünvanından std c ++ kitabxanasına kopyalayın. Quraşdırma təlimatlarına uyğun olaraq "Bu, adi bir Arduino kitabxanası kimi quraşdırılmışdır. Dağıtım məzmununu eskiz kitabınızın altındakı" kitabxanalar "qovluğuna yığın. Məsələn, eskiz kitabım/home/maniacbug/Source/Arduino -da olduğu üçün bu kitabxana /home/maniacbug/Source/Arduino/library/StandardCplusplus -dadır.

Arduino IDE qurduqdan sonra sıfırladığınızdan əmin olun."

İndi twoBitAdder.inonun məzmununu bu addımda təqdim olunanla əvəz edin. Bu, giriş/çıxış pinlərini quran, sonra döngədə, giriş pinlərini oxuyan, onları VtwoBitAdder -ə (dövrəmizin tərcümə edilmiş versiyası) ötürən, sonra VtwoBitAdder -dən çıxan məlumatları oxuyan və tətbiq edən yoxlayıcının gözlədiyi bir sınaq kəməridir. onları çıxış pinlərinə bağlayın.

Bu proqram Arduino UNO -da tərtib edilməli və icra edilməlidir.

Addım 4: Arduinodan Çörək Lövhəsində DIP Çipə

Arduinodan DIP Çipə Çörək Lövhəsində
Arduinodan DIP Çipə Çörək Lövhəsində

İndi proqram Arduinoda işlədiyinə görə artıq Arduino lövhəsinin özünə ehtiyacımız yoxdur. Bizə lazım olan tək şey CPU -dur.

Atmega 328P -ni Arduino UNO yuvasından diqqətlə çıxarın və əvəzinə onu daxil edin.

Atmega 328P -ni çörək taxtasına qoyun. Çörək lövhəsində yuxarıya baxan divotun ucunu qoyun. Pin 1 yuxarı sol pindir. Pin 2, aşağıdakı növbəti pindir və s. Sonra pin 15 sağ altındadır və 16 ilə 28 arasındakı pinlər çipin sağ tərəfində geri sayılır.

8 və 22 -ci pinləri yerə bağlayın.

7 pinini VCC -yə (+5V) qoşun.

9 və 10 -cu pinlər arasında 16Mhz kvars kristalını bağlayın. Həmçinin pin 9 ilə torpaq arasında və pin 10 ilə torpaq arasında kiçik bir kondansatör (22pF) bağlayın. Bu, Atmega 328P -yə 16Mhz saat sürətini verir. Başqa yerdə 328P -nin daxili 8Mhz saatını istifadə etməyi öyrətməklə bağlı bir neçə hissəyə qənaət edəcək, lakin bu prosessoru yavaşlatacaq.

Giriş pinləri üçün istifadə etdiyimiz Arduino GPIO 5, 6, 7 və 8 portları əslində Atmega 328P üzərindəki 11, 12, 13, 14 fiziki sancaqlardır. Soldakı dörd alt sancaq olardı.

Çıxış sancaqları üçün istifadə etdiyimiz Arduino GPIO 11, 10 və 9 portları əslində Atmega 328P üzərindəki 17, 16, 15 fiziki sancaqlardır. Sağdakı ən alt üç pin olacaq.

LEDləri bu pinlərə əvvəlki kimi bağladım.

Addım 5: Nəticə

Nəticə
Nəticə

TTL çipləri işləyir, amma bir şey qurmaq üçün çox şey lazımdır. FPGA'lar həqiqətən yaxşı işləyir, amma ucuz deyil. Daha az IO pin və daha aşağı sürətlə yaşaya bilsəniz, Atmega 328P sizin üçün çip ola bilər.

Yadda saxlamalı olduğunuz bəzi şeylər:

FPGA:

Pro

- Yüksək sürətli siqnalları idarə edə bilir. Bir anda bir təlimata qədər darboğazda işləmək üçün heç bir CPU olmadığı üçün məhdudlaşdıran amil, verilən dövrədəki qapılardan yayılma gecikməsidir. Əksər hallarda bu, çiplə təmin edilən saatdan daha sürətli ola bilər. Dizaynım üçün, hesablanan gecikmə, ikiBitAdder-in təyyarə saatı cəmi 12Mhz bir kristal olmasına baxmayaraq saniyədə (100Mhz) giriş dəyərlərindəki təxminən 100 milyon dəyişikliyə cavab verməsinə imkan verərdi.

- Dizayn daha da mürəkkəbləşdikcə mövcud sxemlərin performansı pisləşmir (çox). Parçaya sxemlər əlavə etmək, sadəcə istifadə edilməmiş daşınmaz əmlaka yeni bir şey qoymaqdır, bu da mövcud sxemlərə təsir etmir.

- FPGA -dan asılı olaraq, mövcud IO pinlərinin sayı çox yüksək ola bilər və ümumiyyətlə hər hansı bir məqsəd üçün kilidlənmir.

Con

- Bahalı və/və ya çətin gələ bilər.

- Adətən hər hansı bir həvəskar layihədə çiplə işləmək üçün bir növ qırılma lövhəsi tələb edən bir BGA paketində gəlir. Xüsusi çox qatlı SMT PCB ilə bir dizayn halına gətirirsinizsə, bu problem deyil.

- Əksər FPGA istehsalçıları, bəzi hallarda pula başa gələ biləcək və ya lisenziyanın son istifadə tarixinə malik ola biləcək öz qapalı mənbəli dizayn proqramlarını təqdim edirlər.

FPGA olaraq Arduino:

Pro

- Ucuz və əldə etmək asandır. Amazonda atmega328p-pu axtarın. Təxminən 4 dollar/ədəd olmalıdır. Bir neçə satıcı onları 3 və ya 4 -də satır.

- Bu bir DIP paketidir, yəni xarici sancaqlar ilə çörək taxtasına mükəmməl uyğun gəlir.

- Bu, digər 5V cihazları ilə əlaqəni asanlaşdıra bilən 5V cihazdır.

Con

- ATMEGA328P məhdud sayda IO pininə malikdir (23) və onlardan bir neçəsi xüsusi tapşırıqlar üçün ayrılmışdır.

- Dövrə mürəkkəbliyi artdıqca, Arduino loop metodunda işlədilən kod miqdarı artır, yəni hər dövrün müddəti daha uzundur.

- Dövrün mürəkkəbliyi aşağı olsa belə, hər bir dövrədə giriş pin dəyərlərini əldə etmək və çıxış pin dəyərlərini yazmaq və döngənin yuxarısına qayıtmaq üçün bir çox CPU təlimatı tələb olunur. 16Mhz bir kristal ilə, hətta bir saat dövrü üçün bir göstəriş olsa belə, dövrə saniyədə 1 milyon dəfədən çox işləməyəcək (1Mhz). Çox həvəskar elektronika layihələri üçün lazım olandan daha sürətlidir.

Tövsiyə: