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

Аливаа мэдрэгчийг FPGA -аас хий: 4 алхам
Аливаа мэдрэгчийг FPGA -аас хий: 4 алхам

Видео: Аливаа мэдрэгчийг FPGA -аас хий: 4 алхам

Видео: Аливаа мэдрэгчийг FPGA -аас хий: 4 алхам
Видео: Processing-Near-Memory: Real PNM Architectures Programming - HPCA 2023 Real-World PIM Tutorial 2024, Арваннэгдүгээр
Anonim
Image
Image
FPGA
FPGA

Ихэнх үйлдвэрлэгчид амьдралдаа дор хаяж нэг удаа термометр бүтээхийг оролдож байсан, эсвэл гэртээ байгаа төхөөрөмж нь тийм ч ухаалаг биш байж магадгүй, эсвэл тэд дараагийн үүрээ барьж чадна гэж бодож магадгүй юм. Гэсэн хэдий ч хэзээ нэгэн цагт тэд хамгийн сүүлийн үеийн програм хангамж бүхий температур хянагчтай холбогдсон микроконтроллертой байсан (магадгүй бусад мэдрэгч: даралт, гэрэл). Өнөөдрийг хүртэл бүх зүйл төгс, програм хангамж ажиллаж байгаа бөгөөд мэдрэгч нь мэдэрч байна. Үүнийг туршиж үзье!

Хмммм … магадгүй тэр үс хатаагч ашиглан мэдрэгчийг халааж, мөс ашиглан хөргөнө, энэ нь хэсэг хугацаанд ажиллах болно. Гэхдээ энэ нь мэргэжлийн биш юм шиг санагддаг, хэрэв та үүнийг халаах юм бол мэдрэгч нь утгыг хэт хурдан өөрчилдөг, хоёр градусаас илүү халдаггүй. Төсөл бол уналт юм! Гэхдээ энэ алгоритм нь олон хүчин зүйлийг харгалзан үзсэн бөгөөд энэ тэнэг зүйлд гацсан нь үнэхээр ичмээр юм.

Миний шийдэл бол: FPGA-ийг компьютерээс дамжуулдаг (эсвэл санах ойд хадгалсан эсвэл FPGA дотор тусгайлан үүсгэсэн) утгыг мэдрэгчийн үүрэг гүйцэтгэдэг болгох. Тиймээс таны үнэ цэнэтэй MCU -ийн хувьд FPGA нь мэдрэгч шиг харагддаг, гэхдээ ямар ч мэдрэгч таалагдахгүй. Магадгүй танд хүлээлтээс илүү нарийвчлал эсвэл илүү хурдан хариу өгөх хугацаа хэрэгтэй гэж шийдсэн бол мэдрэгчээ солих хэрэгтэй. Онлайнаар захиалаарай, хэдхэн хоногийн дараа, хэдэн сарын дараа ирнэ, хэн мэдэх билээ. ПХБ -д хариу өгөх эсвэл шинэ мэдрэгч бүхий модуль захиалах. Эсвэл … хэдхэн товшилтоор FPGA -ийг таны цоо шинэ мэдрэгч болгон тохируулсан бөгөөд энэ нь яг дотоод тохиргоог дуурайж чадна.

Үүнийг бичиж байх үед FPGA нь BRAM (FPGA дээр) хадгалагдсан температурын өгөгдөлтэй LM75 байдлаар ажиллах боломжтой.

Алхам 1: MCU

Миний сонгосон MCU бол LPCXpresso дээрх LPC4337 юм. Дээр нь би дэлгэцтэй, жинхэнэ LM75 мэдрэгч бүхий бамбай (LPC General Purpose Shield) байна. LPC4337 бол 200MHz дээр ажилладаг ARM Cortex M4 ба түүнээс бага хэмжээтэй Cortex M0 (энд ашиглагддаггүй) юм. Жинхэнэ мэдрэгч нь I2C1 захын төхөөрөмжид холбогдсон бөгөөд бидний виртуал төхөөрөмж нь I2C0 -тэй холбогдох болно. Эх сурвалжийг миний GitHub дээрээс авах боломжтой.

Үүнийг яаж бүтээх вэ? LPCXpresso IDE -ийг LPCOpen номын сангийн хамт татаж авах. Энэ номын санг IDE руу оруулж, GitHub -аас төслийг нээнэ үү. Бүх зүйлийг тохируулах ёстой бөгөөд та зүүн доод буланд байгаа "Debug" дээр дарж болно.

Төслийг бүхэлд нь NXP -ийн нэг жишээ дээр үндэслэсэн болно (миний төсөл жинхэнэ мэдрэгчийг дуурайж, MCU -ийн талд тусгай код хэрэггүй гэдгийг харуулах болно). Үндсэн файлд (iox_sensor.cpp гэж нэрлэдэг) энэ код байна:

#SENSORS_ON_SHIELD -ийг тодорхойлох

#тодорхойлсон бол (SENSORS_ON_SHIELD) #SHIELD_I2C I2C1 -ийг тодорхойлох #elif тодорхойлсон (SENSORS_ON_FPGA) #SHIELD_I2C I2C0 -ийг тодорхойлох

SENSOR_ON_SHIELD болон SENSOR_OR_FPGA -г өөрчилснөөр хэрэглэгч өөр өөр I2C тээглүүр дээр байгаа тул хөрвүүлэх үедээ жинхэнэ эсвэл виртуал мэдрэгч рүүгээ ярих боломжтой болно.

Алхам 2: FPGA

Миний сонгох FPGA самбар бол Xilinx Arty 7 -тэй Digilent -ийн хийсэн Artix 7 юм. PMod -ийн хоёр холболтыг нэг нь дибаг хийх, нөгөө нь бодит ачааллын хувьд MCU хавтантай холбоход ашигладаг.

Дахин хэлэхэд FPGA -ийн эх кодыг миний GitHub (fpgaSide фолдер) дээрээс авах боломжтой.

Үүнийг яаж бүтээх вэ? Xilinx Vivado IDE татаж авах, худалдаж авах эсвэл нээнэ үү. Төслийн файлуудыг GitHub -аас импортлох. Файлуудын нэг (content.coe) нь температурын өгөгдлийг түүхий форматаар хуурамч мэдрэгч рүү дамжуулах болно. Хүний унших боломжтой температурын өгөгдлийг LM75 түүхий мэдээлэл болгон хөрвүүлэхэд тусалдаг ижил нэртэй Excel файл бас байдаг. Би үүнийг Java дээр бичигдсэн програм хангамж бүхий автомат процесс болгон өөрчлөх төлөвлөгөөтэй байгаа боловч тэр хүртэл энэ шийдэл ажиллах болно. Синтез ба хэрэгжүүлэлт нь хэсэг хугацаа шаардагдах тул үүнийг анхаарч үзээрэй.

Алхам 3: Энэ нь хэрхэн ажилладаг вэ?

Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?

Миний хэлснээр MCU -ийн хувьд FPGA нь яг л I2C мэдрэгч шиг харагдаж байна. I2C захын төхөөрөмжийн гаралт нь FPGA -ийн оролттой холбогдсон байна. FPGA-ийн дотор 3 үндсэн бүрэлдэхүүн хэсгүүд байдаг:- I2C Controller- I2C Device- Data I2C Controller нь IPG-ийн өгөгдлийг FPGA-ийн тээглүүрээс хүлээн авч FPGA-ийн бусад хэсэгт илгээж, урвуу дарааллаар хийдэг. Энэ нь I2C протоколын дотоод төлөв байдлын машиныг хадгалдаг (энэ талаар баримт бичиг энд байна). Энэ бүрэлдэхүүн хэсэг нь I2C төхөөрөмжид юу илгээдэг вэ? Одоогийн хүлээн авсан байт, тухайн байтын одоогийн харилцаа дахь байр суурь, MCU нь FPGA -д бичиж байгаа эсвэл уншиж байгаа эсэх. I2C төхөөрөмж нь илгээсэн байтыг хүлээн авч, мэдрэгчийн загварчилсан дотоод бүтцийг шинэчилдэг. Энэ нь бүртгэлийн заагчийг шинэчлэх эсвэл мэдээллийн эх сурвалжаас шинэ өгөгдөл хүсэх болно. Data бүрэлдэхүүн хэсэг нь шинэ өгөгдлийн цэгүүдийг дамжуулдаг. Одоогийн байдлаар энэ нь зөвхөн ROM санах ой бөгөөд хаяг нь секундэд хоёр удаа (ойролцоогоор) нэмэгддэг.

Миний эцсийн зорилго юу вэ? Үүнийг хоёр дахь зурагт үзүүлэв. Энэ нь: илүү олон I2C төхөөрөмжүүдийг (мэдрэгч болон бусад) FPGA дотор нэгэн зэрэг дуурайх боломжтой болгох. Мэдрэгчийн арын хэсэгт байгаа өгөгдлийг FPGA -д кэш хийж, USB эсвэл Ethernet ашиглан компьютерээс дамжуулах болно. Илүү дэвшилтэт мэдрэгч болон бусад I2C төхөөрөмжийг (санах ой, LED драйвер гэх мэт) дэмжих.

Алхам 4: Бүгдийг нэгтгэх

Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах

Одоо бүх зүйлийг хооронд нь холбох цаг болжээ. Онолын хувьд энэ нь маш энгийн: mcu самбар нь PMod холбогчтой (I2C0 & SSP0 (SPI шиг ажиллах боломжтой)). Artix самбар нь 4 PMod холбогчтой бөгөөд үүнийг хүссэнээрээ ашиглаж болно. Би MCU -тай ярихын тулд D холбогчийг, Логик анализатор руугаа холбогдохын тулд B холбогчийг сонгоно.

Анхааруулга

Та хоёр самбарыг ингэж холбож чадахгүй. Яагаад? PMod нь Мастер/Хостын самбар (хүч өгдөг) -ийг Боол/Мэдрэгчийн самбар (хүчийг хүлээн авдаг) холболтыг хөнгөвчлөх зорилгоор бүтээгдсэн болно. Гэхдээ энэ төсөлд хоёулаа хоёулаа хүч өгдөг бөгөөд хэрэв та нэг самбараас 3.3V гаралтыг нөгөө самбарын 3.3V гаралттай холбовол муу зүйл тохиолдож магадгүй юм. Гэхдээ тэд FPGA -ийн цахилгаан шугамын параметрүүдийг өөрчилж чадахгүй байж магадгүй (та маш нарийн боловсруулсан болно). Дээрх зураг дээр үзүүлсэн шиг ийм эрсдэлд орж болохгүй бөгөөд холбогчийг нэг зүүгээр зүүн тийш (мөн FPGA самбарыг эргүүлээрэй) бүү хөдөлгө. Энд PMod -ийн тодорхойлолт байна, та үүнийг сайн судалж үзээрэй, миний товчоор хэлэхэд миний хийсэн зүйл бол хоёр самбарын VCC -ийг холбохгүй байх явдал юм.

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