Агуулгын хүснэгт:

Arduino хямд талхны самбар FPGA байдлаар: 5 алхам (зурагтай)
Arduino хямд талхны самбар FPGA байдлаар: 5 алхам (зурагтай)

Видео: Arduino хямд талхны самбар FPGA байдлаар: 5 алхам (зурагтай)

Видео: Arduino хямд талхны самбар FPGA байдлаар: 5 алхам (зурагтай)
Видео: Том-том для драм-машины DR 110 (проект драм-машины Arduino) 2024, Арваннэгдүгээр
Anonim
Arduino бол хямдхан талхны самбар FPGA юм
Arduino бол хямдхан талхны самбар FPGA юм

Тоног төхөөрөмжийн логик хэлхээг зохион бүтээх нь хөгжилтэй байх болно. Хуучин сургуулийн арга бол талхны тавцан дээр NAND хаалга ашиглан холбогч утсаар холбосон явдал байв. Энэ нь боломжтой хэвээр байгаа боловч хаалганы тоо гараас гарах хүртэл тийм ч их хугацаа шаардагдахгүй. Шинэ сонголт бол FPGA (Field Programmable Gate Array) ашиглах явдал юм. Эдгээр чипүүд нь таны зохион бүтээсэн дижитал логик хэлхээ болж хувирах боломжтой боловч хямдхан биш юм. Би энэ FPGA -ийг Arduino UNO -ийн хямд Atmega чипээр хэрхэн сольж болохыг харуулах болно.

Алхам 1: "FPGA" -ийн төлөөлөх хэлхээг зохион бүтээ

Энэ хэлхээг зохион бүтээ
Энэ хэлхээг зохион бүтээ
Энэ хэлхээг зохион бүтээ
Энэ хэлхээг зохион бүтээ
Энэ хэлхээг зохион бүтээ
Энэ хэлхээг зохион бүтээ

Би 2 бит + 2 битийн нийлүүлэгч бүтээх болно. Үүнд хоёр хос логик оролтын зүү шаардлагатай бөгөөд нэг триплет гаралтын тээглүүр гаргадаг.

NAND хаалгаар үүнийг хийхийн тулд зурган дээрх схемийг үзнэ үү. Энэ нь 14 NAND хаалга хэрэгтэй. Би 4 quad NAND gate TTL чип ашиглаж, талхны тавцан дээр холбосон.

Би оролт, гаралтын тээглүүр асаалттай (өндөр), унтраасан (нам) үед харуулахын тулд зарим LED -ийг (одоогийн хязгаарлах резисторыг бүү мартаарай) нэмсэн. Оролтын тээглүүрийг жолоодохын тулд би тэдгээрийг газрын төмөр зам эсвэл эерэг цахилгаан төмөр зам руу холбосон.

Энэ хэлхээ нь ажилладаг боловч 4 TTL чипийг авдаг бөгөөд энэ нь хархын үүрний үүр юм. Хэрэв илүү их бит хэрэгтэй байсан бол илүү олон талхны самбар, илүү олон үсрэгч байх болно. Хэлхээний хэмжээ маш хурдан гараас гарах болно.

Нэмж дурдахад, TTL хаалгатай ажиллахдаа тэд яг 0V эсвэл 5V -ийг хүлээж байсны дагуу гаргадаггүй. Тэд ихэвчлэн 3V орчим "өндөр" гаргадаг боловч яг хүчдэл нь маш өргөн хүрээнд байдаг. CMOS эквивалент чипийг ашигладаг ижил хэлхээ нь яг 0V -ээс 5V хүртэл илүү сайн байх болно.

Алхам 2: FPGA -г оруулна уу

FPGA оруулна уу
FPGA оруулна уу
FPGA оруулна уу
FPGA оруулна уу

FPGA бол ямар ч хослолоор холбогдсон логик хаалганы хослол болж чаддаг гайхалтай чип юм. Нэг нь "хэлхээ" -ийг тоног төхөөрөмжийн дизайны хэлээр (HDL) зохион бүтээдэг. Ийм олон хэл байдаг бөгөөд тэдгээрийн нэгийг Верилог гэж нэрлэдэг. Зураг дээрх.v файл нь Verilog хоёр битийн нийлүүлэгчийн эквивалент юм. Доорх.pch файл нь верилог файлд нэрлэгдсэн оролт, гаралтын тээглүүрийг чип дээрх жинхэнэ тоног төхөөрөмжийн зүү рүү шилжүүлэхэд шаардлагатай болно.

Энэ тохиолдолд би Lattice Semiconductors iCEstick хөгжүүлэх самбар ашиглаж байна (https://www.latticesemi.com/icestick). Бодит FPGA чип нь iCE40HX-1k бөгөөд 1000 гаруй хаалгатай бөгөөд тус бүр нь ямар ч логик хаалга болж чаддаг. Энэ нь хаалга бүр NAND хаалга, эсвэл OR хаалга, хаалга биш, NOR, XOR гэх мэт байж болно гэсэн үг юм. Хаалга бүр хоёроос илүү оролттой ажиллах боломжтой. Энэ нь үйлдвэрлэгч бүрт зориулагдсан боловч iCE40 дээр хаалга бүр 4 оролттой ажиллах боломжтой. Тиймээс хаалга бүр нь 2 оролтын NAND хаалганаас хамаагүй илүү чадвартай байдаг.

Би 4 оролтын нарс, 3 гаралтын зүүг 91, 90, 88, 87, 81, 80, 79 физик зүү рүү хуваарилах ёстой байв. Энэ нь fpga чип болон түүний холболтын самбар, тэдгээр тээглүүрийг PMOD порт руу хэрхэн холбосонтой холбоотой юм. Үүнийг энэ FPGA самбарын мэдээллийн хуудсан дээрээс авах боломжтой.

Lattice нь Verilog -аас хэлхээг нэгтгэх (CPU -ийн хөрвүүлэлттэй тэнцэх FPGA) хэлхээний багаж хэрэгслээр хангадаг боловч би үнэгүй нээлттэй эхийн багажийн сүлжээний icestorm -ийг ашигласан (https://www.clifford.at/icestorm/). Суурилуулах зааврыг тухайн сайт дээрээс авах боломжтой. Icestorm суулгасан, verilog болон pcf файлтай бол энэ хэлхээг FPGA -д ачаалах тушаалууд нь:

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

Энэ нь маш сайн ажилладаг, гэхдээ энэ iCEstick -ийг тээвэрлэхэд ойролцоогоор 30 доллар хэрэгтэй болно. Энэ бол дижитал хэлхээг бий болгох хамгийн хямд арга биш боловч хүчирхэг юм. Энэ нь 1000 гаруй хаалгатай бөгөөд энэ жижиг хэлхээнд зөвхөн 3 -ыг нь ашигладаг. NAND хаалганы эквивалент нь 14 хаалгыг ашигласан. Энэ нь хаалга бүр ямар ч төрлийн хаалга болж чаддагтай холбоотой бөгөөд хаалга бүр нь үнэндээ 4 оролттой хаалга юм. Хаалга бүр илүү ихийг хийж чадна. Хэрэв танд илүү их хаалга хэрэгтэй бол iCEstick нь 8000 хаалгатай том ахтай бөгөөд энэ нь ойролцоогоор хоёр дахин үнэтэй болно. Бусад үйлдвэрлэгчид өөр санал тавьдаг боловч үнэ нь огцом өсч магадгүй юм.

Алхам 3: FPGA -аас Arduino руу

FPGA -аас Arduino хүртэл
FPGA -аас Arduino хүртэл

FPGA нь маш сайн, гэхдээ үнэтэй байж болно, авахад хэцүү, талхны тавцанд тийм ч ээлтэй байдаггүй. Талхны тавцанд ээлтэй, хямд чип бол Atmega 328 P юм. Үүнийг ойролцоогоор 4 доллараар худалдаж авах боломжтой. Энэ бол Arduino UNO -ийн зүрх юм. Мэдээжийн хэрэг та НҮБ -ыг бүхэлд нь ашиглаж болно, гэхдээ хямдхан бол бид Atmega 328 P -ийг НҮБ -аас гаргаж аваад өөрөө ашиглаж болно. Би НҮБ -ын ТУЗ -ийг Атмега програмист болгон ашиглаж байсан.

Энэ үед танд хэрэгтэй болно

1. Arduino UNO, зөөврийн Atmega 328P процессортой.

2. Бидний НҮБ-аас гаргах гэж байгаа нэгний оронд Arduino bootloader-ийг урьдчилан шатаасан өөр нэг Atmega 328P. (Хэрэв та ашиглах боломжтой НҮБ -тай байхыг хүсч байгаа бол заавал биш).

Зорилго нь verilog файлыг 328P руу ачаалах боломжтой arduino төсөл болгон хөрвүүлэх явдал юм. Arduino нь C ++ дээр суурилсан. Verilog -аас C ++ хэл рүү Verilator гэж орчуулдаг орчуулагч байдаг (https://www.veripool.org/wiki/verilator). Verilator -ийг үнэтэй техник хэрэгслээр хийлгэхийн өмнө загвараа дуурайх шаардлагатай тоног төхөөрөмжийн дизайнерууд ашиглах зориулалттай. Verilator cross нь verilog -ийг C ++ дээр хөрвүүлдэг бөгөөд дараа нь хэрэглэгч оролтын дууриамал загварыг гаргаж, гаралтын дохиог бүртгэх туршилтын хэрэгслийг өгдөг. Бид үүнийг ашиглан Arduino багаж хэрэгслийн сүлжээг ашиглан верилог дизайныг Atmega 328P руу оруулах болно.

Эхлээд Verilator -ийг суулгаарай. Https://www.veripool.org/projects/verilator/wiki/I… дээрх зааврыг дагана уу.

Arduino IDE -ийг суулгаад Arduino UNO -д USB -ээр холбогдох боломжтой эсэхийг шалгаарай.

Бид FPGA -тэй ижил верилог файлыг ашиглах болно, гэхдээ тээглүүрийн нэрийг өөрчлөх шаардлагатай. Би тус бүрийн эхэнд доогуур зураас (_) оруулсан. Arduino номын сан нь B0, B001 гэх мэт зүйлийг хоёртын тоонд хөрвүүлдэг толгой файлтай байдаг тул үүнийг хийх шаардлагатай байна. Бусад оролтын зүү нэр нь одоогийнх шиг зүгээр байх болно, гэхдээ B0 ба B1 нь бүтэлгүйтэхэд хүргэсэн.

TwoBitAdder.v ба iCEstick.pcf агуулсан директорт дараах зүйлийг ажиллуулна уу.

Шилжүүлэгч -Wall --cc twoBitAdder.v

Энэ нь хэд хэдэн шинэ файл агуулсан obj_dir нэртэй дэд директор үүсгэх болно. Бидэнд зөвхөн толгой ба cpp файлууд хэрэгтэй, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, VtwoBitAdder_Syms.cpp.

Arduino IDE дээр twoBitAdder.ino нэртэй шинэ ноорог үүсгээрэй. Энэ нь ino файлыг таны Arduino тойм номын лавлах дотор twoBitAdder гэж нэрлэгддэг шинэ лавлахад үүсгэх болно. VtwoBitAdder.h болон VtwoBitAdder.cpp файлуудаа Arduino фолдер дээрх энэ хоёрBitAdder фолдерт хуулж ав.

Одоо verilator суулгацын толгой файлуудыг хуулж ав.

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

Эцэст нь https://github.com/maniacbug/StandardCplusplus -аас std c ++ номын санд хуулна уу. Тэдний суулгах зааварчилгааны дагуу "Үүнийг ердийн Arduino номын сан шиг суулгасан болно. Тархалтын агуулгыг өөрийн ноорог номын доорх" номын сан "хавтсанд задална уу. Жишээлбэл, миний зургийн дэвтэр/home/maniacbug/Source/Arduino дээр байгаа тул энэ номын сан /home/maniacbug/Эх сурвалж/Arduino/номын сан/StandardCplusplus дотор байна.

Arduino IDE -ийг суулгасны дараа дахин тохируулахаа мартуузай."

Одоо twoBitAdder.ino -ийн агуулгыг энэ алхам дээр өгсөн агуулгаар солино уу. Энэ бол оролтын/гаралтын тээглүүрийг тохируулж, оролтын тээглүүрийг уншиж, VtwoBitAdder (манай хэлхээний орчуулагдсан хувилбар) руу оруулдаг, дараа нь VtwoBitAdder -ийн гаралтыг уншдаг. тэдгээрийг гаралтын тээглүүр рүү чиглүүлнэ.

Энэ програм нь Arduino UNO дээр эмхэтгэж, гүйцэтгэх ёстой.

Алхам 4: Arduino -аас DIP чип хүртэл талхны тавцан дээр

Arduino -аас DIP чип хүртэл талхны тавцан дээр
Arduino -аас DIP чип хүртэл талхны тавцан дээр

Одоо програм Arduino дээр ажиллаж байгаа тул бидэнд Arduino самбар өөрөө хэрэггүй болсон. Бидэнд хэрэгтэй бүх зүйл бол CPU юм.

Atmega 328P -ийг Arduino UNO залгуураас болгоомжтой авч, орлуулагчийг нь оруулна уу.

Atmega 328P -ийг талхны тавцан дээр тавь. Талхны тавцан дээр диотыг дээш харуулан төгсгөлийг нь тавь. 1 -р зүү нь зүүн дээд талын зүү юм. 2 -р зүү нь доошоо байрлах дараагийнх бөгөөд зүүн доод талд байгаа 14 -р зүү рүү орно. Дараа нь 15 -р зүү нь баруун доод талд, 16-28 -р зүү нь чипний баруун талыг буцааж тоолно.

8 ба 22 -р зүүг газардуул.

7 -р зүүг VCC (+5V) руу холбоно уу.

9 ба 10 -р зүү хооронд 16 МГц давтамжийн кварцын болорыг холбоно уу. Мөн зүү 9 ба газрын хооронд, зүү 10 ба газардуулгын хооронд жижиг конденсатор (22pF) холбоно. Энэ нь Atmega 328P -д 16Mhz цагийн хурдыг өгдөг. 328P -ийг дотоод 8Mhz цагийг ашиглахыг заах заавар өөр хэсэгт байдаг бөгөөд энэ нь хэд хэдэн хэсгийг хэмнэх боловч процессорыг удаашруулдаг.

Бидний оролтын тээглүүрт ашигладаг Arduino GPIO 5, 6, 7, 8 портууд нь үнэндээ Atmega 328P дээрх 11, 12, 13, 14 физик зүү юм. Энэ нь зүүн талд байгаа дөрвөн доод тээглүүр байх болно.

Бидний гаралтын тээглүүрт ашигладаг Arduino GPIO портууд 11, 10, 9 нь Атмега 328P дээрх 17, 16, 15 физик зүү юм. Энэ нь баруун талд байгаа доод гурван тээглүүр байх болно.

Би LED -ийг эдгээр зүү рүү урьдын адил залгав.

Алхам 5: Дүгнэлт

Дүгнэлт
Дүгнэлт

TTL чипүүд ажилладаг боловч юу ч бүтээхэд маш их цаг зарцуулдаг. FPGA нь үнэхээр сайн ажилладаг боловч хямдхан биш юм. Хэрэв та цөөн тооны IO зүү, бага хурдтай амьдарч чадвал Atmega 328P нь таны хувьд чип байж магадгүй юм.

Санаж байх ёстой зарим зүйл:

FPGA:

Pro

- Өндөр хурдны дохиог удирдах чадвартай. Нэг удаад нэг зааварчилгааг авч ажиллахад саад учруулдаг CPU байхгүй тул хязгаарлах хүчин зүйл нь тухайн хэлхээний хаалгаар тархах саатал юм. Ихэнх тохиолдолд энэ нь чиптэй нийлүүлсэн цагнаас хамаагүй хурдан байж магадгүй юм. Миний дизайны хувьд тооцоолсон хоцрогдол нь хоёрBitAdder-д секундэд 100 сая орчим оролтын утгыг (100 МГц) өөрчлөхөд 126 МГц болортой байсан ч хариу өгөх боломжийг олгоно.

- Дизайн нь илүү төвөгтэй болох тусам одоо байгаа хэлхээний гүйцэтгэл мууддаггүй. Даавуунд хэлхээ нэмэх нь ашиглагдаагүй үл хөдлөх хөрөнгөд шинэ зүйл оруулах явдал юм, энэ нь одоо байгаа хэлхээнд нөлөөлөхгүй.

- FPGA -аас хамааран боломжтой IO зүүгийн тоо маш өндөр байж болох бөгөөд тэдгээр нь ерөнхийдөө ямар нэгэн зориулалттай түгжигдээгүй байдаг.

Con

- Үнэтэй, эсвэл ирэхэд хэцүү байж болно.

- Ихэвчлэн сонирхогчдын аль ч төсөлд чиптэй ажиллахын тулд ямар нэгэн таслах самбар шаардлагатай BGA багцад ирдэг. Хэрэв та үүнийг захиалгат олон давхаргат SMT ПХБ-ийн загвар болгон бүтээж байгаа бол энэ нь асуудал биш юм.

- Ихэнх FPGA үйлдвэрлэгчид өөрсдийн хаалттай эхийн дизайны програм хангамжийг хангадаг бөгөөд энэ нь зарим тохиолдолд мөнгө шаарддаг, эсвэл лицензийн хүчинтэй байх хугацаатай байдаг.

Arduino нь FPGA хэлбэрээр:

Pro

- Хямд, авахад хялбар. Амазон дээрээс atmega328p-pu хайж олоорой. Тэд ойролцоогоор 4 доллар байх ёстой. Хэд хэдэн худалдагч тэдгээрийг 3 эсвэл 4 ширхэгээр зардаг.

- Энэ бол DIP багц бөгөөд энэ нь гаднах тээглүүр бүхий талхны тавцан дээр бүрэн нийцдэг гэсэн үг юм.

- Энэ бол 5V төхөөрөмж бөгөөд бусад 5V төхөөрөмжүүдтэй харьцахад хялбар болгодог.

Con

- ATMEGA328P нь хязгаарлагдмал тооны IO тээглүүртэй (23) бөгөөд тэдгээрийн хэд нь тодорхой ажлуудад зориулагдсан байдаг.

- Хэлхээний нарийн төвөгтэй байдал нэмэгдэхийн хэрээр Arduino давталтын аргаар ажиллах кодын хэмжээ нэмэгдэх бөгөөд энэ нь мөчлөг бүрийн үргэлжлэх хугацаа илүү урт болно гэсэн үг юм.

- Хэлхээний нарийн төвөгтэй байдал бага байсан ч мөчлөг бүрт оролтын зүүний утгыг авах, гаралтын зүүний утгыг бичих, давталтын дээд хэсэгт буцаж очихын тулд CPU -ийн олон зааварчилгаа шаардлагатай болно. 16 МГц болортой бол нэг мөчлөгт нэг зааварчилгаа өгсөн ч гэсэн давталт нь секундэд 1 сая удаа (1 МГц) ажиллахгүй. Ихэнх сонирхогчдын электроникийн төслүүдийн хувьд энэ нь шаардлагатай байгаагаас хамаагүй хурдан юм.

Зөвлөмж болгож буй: