विषयसूची:

Arduino एक सस्ते ब्रेडबोर्ड FPGA के रूप में: 5 कदम (चित्रों के साथ)
Arduino एक सस्ते ब्रेडबोर्ड FPGA के रूप में: 5 कदम (चित्रों के साथ)

वीडियो: Arduino एक सस्ते ब्रेडबोर्ड FPGA के रूप में: 5 कदम (चित्रों के साथ)

वीडियो: Arduino एक सस्ते ब्रेडबोर्ड FPGA के रूप में: 5 कदम (चित्रों के साथ)
वीडियो: अरुडिनो मास्टरक्लास | 90 मिनट में पूर्ण प्रोग्रामिंग कार्यशाला! 2024, दिसंबर
Anonim
Arduino एक सस्ते ब्रेडबोर्ड FPGA के रूप में
Arduino एक सस्ते ब्रेडबोर्ड FPGA के रूप में

हार्डवेयर लॉजिक सर्किट डिजाइन करना मजेदार हो सकता है। ऐसा करने का पुराना तरीका NAND गेट्स के साथ था, एक ब्रेड बोर्ड पर, जो जम्पर तारों से जुड़ा हुआ था। यह अभी भी संभव है, लेकिन फाटकों की संख्या हाथ से निकल जाने में ज्यादा समय नहीं लगता है। एक नया विकल्प FPGA (फील्ड प्रोग्रामेबल गेट ऐरे) का उपयोग करना है। ये चिप्स आपके द्वारा डिज़ाइन किया जा सकने वाला कोई भी डिजिटल लॉजिक सर्किट बनने के लिए स्वयं को रीवायर कर सकते हैं, लेकिन सस्ते और आसानी से उपलब्ध नहीं हैं। मैं दिखाऊंगा कि कैसे इस FPGA को Arduino UNO से सस्ते Atmega चिप से बदला जा सकता है, प्रभावी रूप से डिजिटल सर्किट को DIP पैकेज में डाल सकता है, जो बहुत ब्रेडबोर्ड के अनुकूल है।

चरण 1: उस सर्किट को डिज़ाइन करें जो "FPGA" का प्रतिनिधित्व करेगा

सर्किट डिजाइन करें कि
सर्किट डिजाइन करें कि
सर्किट डिजाइन करें कि
सर्किट डिजाइन करें कि
सर्किट डिजाइन करें कि
सर्किट डिजाइन करें कि

मैं 2 बिट + 2 बिट योजक का निर्माण करूंगा। यह लॉजिक इनपुट पिन के दो जोड़े लेता है, और आउटपुट पिन के एक ट्रिपल को आउटपुट करता है।

नंद द्वार के साथ ऐसा करने के लिए, चित्र में योजनाबद्ध देखें। इसके लिए 14 NAND गेट की जरूरत है। मैंने 4 क्वाड नंद गेट टीटीएल चिप्स का इस्तेमाल किया, और उन्हें ब्रेड बोर्ड पर तार दिया।

मैंने कुछ एल ई डी जोड़े (वर्तमान सीमित प्रतिरोधों को न भूलें) यह दिखाने के लिए कि इनपुट और आउटपुट पिन कब (उच्च) थे, और जब वे बंद (कम) थे। इनपुट पिन को चलाने के लिए, मैंने या तो उन्हें ग्राउंड रेल या पॉजिटिव पावर रेल पर जम्पर किया।

यह सर्किट काम करता है, लेकिन इसमें पहले से ही 4 टीटीएल चिप्स लगते हैं, और यह चूहे के तारों का घोंसला है। यदि अधिक बिट्स की आवश्यकता होती, तो अधिक ब्रेड बोर्ड और अधिक कूदने वाले होते। बहुत जल्दी सर्किट का आकार हाथ से निकल जाएगा।

एक तरफ ध्यान दें, जब टीटीएल गेट्स के साथ काम करते हैं, तो वे बिल्कुल 0V या 5V आउटपुट नहीं करते हैं जैसा कि कोई उम्मीद करेगा। वे अक्सर "उच्च" के लिए लगभग 3V आउटपुट करते हैं, लेकिन सटीक वोल्टेज बहुत विस्तृत श्रृंखला में होता है। सीएमओएस समकक्ष चिप्स का उपयोग करने वाले एक ही सर्किट में बिल्कुल 0V से बिल्कुल 5V स्विंग्स बेहतर होंगे।

चरण 2: FPGA दर्ज करें

एफपीजीए दर्ज करें
एफपीजीए दर्ज करें
एफपीजीए दर्ज करें
एफपीजीए दर्ज करें

एक FPGA एक काल्पनिक चिप है, जो किसी भी संयोजन में एक साथ वायर्ड, लॉजिक गेट्स का कोई भी संयोजन बन सकता है। एक "सर्किट" को एक हार्डवेयर डिज़ाइन भाषा (HDL) में डिज़ाइन करता है। ऐसी कई भाषाएँ हैं, जिनमें से एक को वेरिलोग कहा जाता है। चित्र में.v फ़ाइल दो बिट योजक के समान Verilog है। इसके नीचे की.pch फाइल को वेरिलोग फाइल में नामित इनपुट और आउटपुट पिन को चिप पर वास्तविक हार्डवेयर पिन को असाइन करने की भी आवश्यकता होती है।

इस मामले में मैं एक लैटिस सेमीकंडक्टर्स iCEstick डेवलपमेंट बोर्ड (https://www.latticesemi.com/icestick) का उपयोग कर रहा हूं। वास्तविक FPGA चिप एक iCE40HX-1k है, जिसमें १००० से अधिक गेट हैं, जो प्रत्येक किसी भी लॉजिक गेट बन सकते हैं। इसका मतलब है कि प्रत्येक गेट एक NAND गेट, या एक OR गेट हो सकता है, गेट नहीं, NOR, XOR, आदि। इसके अतिरिक्त प्रत्येक गेट दो से अधिक इनपुट को हैंडल कर सकता है। यह प्रत्येक निर्माता के लिए विशिष्ट है, लेकिन iCE40 के प्रत्येक गेट पर 4 इनपुट संभाल सकते हैं। इस प्रकार प्रत्येक द्वार 2 इनपुट नंद द्वारों की तुलना में काफी अधिक सक्षम है।

मुझे भौतिक पिन ९१, ९०, ८८, ८७, ८१, ८०, और ७९ को क्रमशः ४ इनपुट पाइन और ३ आउटपुट पिन असाइन करना था। यह fpga चिप और उस पर लगे ब्रेकआउट बोर्ड के लिए विशिष्ट है, और उन पिनों को PMOD पोर्ट पर कैसे वायर किया जाता है। यह इस FPGA बोर्ड के लिए डेटाशीट में उपलब्ध है।

लैटिस वेरिलोग से सर्किट (सीपीयू के लिए संकलन के बराबर एफपीजीए) को संश्लेषित करने के लिए अपनी उपकरण श्रृंखला प्रदान करता है, लेकिन मैंने मुक्त ओपन सोर्स टूल चेन आइसस्टॉर्म (https://www.clifford.at/icestorm/) का उपयोग किया। स्थापना निर्देश उस साइट पर उपलब्ध हैं। आइसस्टॉर्म स्थापित होने के साथ, और वेरिलोग और पीसीएफ फ़ाइल, इस सर्किट को FPGA पर लोड करने के लिए कमांड हैं:

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

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

आइसपैक टूबिटएडर.एएससी टूबिटएडडर.बिन

Iceprog दोBitAdder.bin

यह बहुत अच्छा काम करता है, लेकिन शिपिंग सहित इस iCEstick की कीमत लगभग $ 30 होगी। यह डिजिटल सर्किट बनाने का सबसे सस्ता तरीका नहीं है, लेकिन यह शक्तिशाली है। इसमें १००० से अधिक द्वार हैं और इस छोटे से सर्किट के लिए यह उनमें से केवल ३ का उपयोग करता है। NAND गेट समकक्ष में 14 गेट का इस्तेमाल किया गया था। यह इस तथ्य के कारण है कि प्रत्येक गेट किसी भी प्रकार का गेट बन सकता है, और प्रत्येक गेट वास्तव में एक 4 इनपुट गेट है। प्रत्येक द्वार अधिक कर सकता है। यदि आपको अधिक गेट की आवश्यकता है, तो iCEstick का एक बड़ा भाई है जिसमें 8000 गेट हैं, जिसकी लागत लगभग दोगुनी है। अन्य निर्माताओं के पास अन्य प्रसाद हैं लेकिन कीमत काफी तेज हो सकती है।

चरण 3: FPGA से Arduino तक

FPGA से Arduino तक
FPGA से Arduino तक

FPGAs महान हैं, लेकिन महंगे हो सकते हैं, मुश्किल से आ सकते हैं, और बहुत ब्रेड बोर्ड के अनुकूल नहीं हैं। ब्रेडबोर्ड के अनुकूल और सस्ता चिप एटमेगा 328 पी है, जो एक साफ डीआईपी पैकेज में आता है, जो ब्रेडबोर्डिंग के लिए एकदम सही है। यह लगभग $ 4 के लिए भी हो सकता है। यह Arduino UNO का दिल है। आप निश्चित रूप से पूरे यूएनओ का उपयोग कर सकते हैं, लेकिन सस्ते हो, हम यूएनओ से एटमेगा 328 पी खींच सकते हैं, और इसे स्वयं ही उपयोग कर सकते हैं। हालांकि मैंने एटमेगा के लिए एक प्रोग्रामर के रूप में यूएनओ बोर्ड का उपयोग किया था।

इस बिंदु पर आपको आवश्यकता होगी

1. एक Arduino UNO, हटाने योग्य Atmega 328P CPU के साथ।

2. Arduino बूटलोडर के साथ एक और Atmega 328P पहले से जला हुआ है, जिसे हम UNO से बाहर निकालने वाले हैं। (वैकल्पिक मान लें कि आप अभी भी एक प्रयोग करने योग्य यूएनओ रखना चाहते हैं)।

लक्ष्य वेरिलॉग फ़ाइल को एक arduino प्रोजेक्ट में बदलना है जिसे 328P में लोड किया जा सकता है। Arduino C++ पर आधारित है। आसानी से वेरिलोग से सी++ में एक अनुवादक है, जिसे वेरिलेटर (https://www.veripool.org/wiki/verilator) कहा जाता है। वेरिलेटर का उद्देश्य हार्डवेयर डिजाइनरों द्वारा उपयोग किया जाना है, जिन्हें महंगे हार्डवेयर के लिए उन डिज़ाइनों को करने से पहले अपने डिज़ाइनों का अनुकरण करने की आवश्यकता होती है। वेरिलेटर क्रॉस वेरिलॉग को सी ++ में संकलित करता है, फिर उपयोगकर्ता नकली इनपुट सिग्नल प्रदान करने और आउटपुट सिग्नल रिकॉर्ड करने के लिए एक परीक्षण दोहन प्रदान करता है। हम इसका उपयोग Arduino टूल चेन का उपयोग करके Atmega 328P में वेरिलॉग डिज़ाइन को रटने के लिए करने जा रहे हैं।

पहले वेरिलेटर स्थापित करें। https://www.veripool.org/projects/verilator/wiki/I… पर दिए गए निर्देशों का पालन करें।

Arduino IDE भी स्थापित करें, और परीक्षण करें कि यह USB पर Arduino UNO से कनेक्ट हो सकता है।

हम FPGA के समान ही वेरिलॉग फ़ाइल का उपयोग करेंगे, सिवाय इसके कि पिनों के नाम बदलने की आवश्यकता है। मैंने प्रत्येक की शुरुआत में एक अंडरस्कोर (_) जोड़ा। इसकी आवश्यकता है क्योंकि arduino पुस्तकालयों में एक हेडर फ़ाइल शामिल होती है जो B0, B001, आदि जैसी चीजों को बाइनरी नंबरों में अनुवाद करती है। अन्य इनपुट पिन नाम वैसे ही ठीक रहे होंगे, लेकिन B0 और B1 ने बिल्ड को विफल कर दिया होगा।

TwoBitAdder.v और iCEstick.pcf वाली निर्देशिका में, निम्नलिखित चलाएँ:

सत्यापनकर्ता - दीवार --cc twoBitAdder.v

यह obj_dir नामक एक उपनिर्देशिका बनाएगा जिसमें कई नई फ़ाइलें होंगी। हमें केवल हेडर और सीपीपी फाइलों की जरूरत है, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, और VtwoBitAdder_Syms.cpp।

Arduino IDE में, TwoBitAdder.ino नामक एक नया स्केच बनाएं। यह आपकी Arduino स्केचबुक निर्देशिका के अंदर एक नई निर्देशिका में ino फ़ाइल बनाएगा, जिसे TwoBitAdder भी कहा जाता है। अपने Arduino फ़ोल्डर में अपने VtwoBitAdder.h और VtwoBitAdder.cpp फ़ाइलों को इस twoBitAdder फ़ोल्डर में कॉपी करें।

अब वेरिलेटर इंस्टालेशन से हेडर फाइल को कॉपी करें।

सीपी/यूएसआर/स्थानीय/शेयर/सत्यापनकर्ता/शामिल/सत्यापित*।

अंत में https://github.com/maniacbug/StandardCplusplus से std c++ लाइब्रेरी में कॉपी करें। उनके इंस्टॉलेशन निर्देशों के अनुसार यह एक नियमित Arduino लाइब्रेरी की तरह ही स्थापित है। वितरण की सामग्री को अपनी स्केचबुक के तहत 'लाइब्रेरीज़' फ़ोल्डर में अनपैक करें। उदाहरण के लिए, मेरी स्केचबुक /home/maniacbug/Source/Arduino पर है, इसलिए यह लाइब्रेरी /home/maniacbug/Source/Arduino/पुस्तकालयों/StandardCplusplus में है।

अपने Arduino IDE को इंस्टॉल करने के बाद उसे रीसेट करना सुनिश्चित करें।"

अब TwoBitAdder.ino की सामग्री को इस चरण में प्रदान की गई सामग्री से बदलें। यह एक परीक्षण हार्नेस है जिसकी वेरिलेटर अपेक्षा करता है, जो इनपुट/आउटपुट पिन सेट करता है, फिर लूप में, इनपुट पिन को पढ़ता है, उन्हें VtwoBitAdder (हमारे सर्किट का अनुवादित संस्करण) में फीड करता है, फिर VtwoBitAdder से आउटपुट पढ़ता है और लागू होता है उन्हें आउटपुट पिन के लिए।

इस कार्यक्रम को Arduino UNO पर संकलित और निष्पादित करना चाहिए।

चरण 4: ब्रेड बोर्ड पर Arduino से DIP चिप तक।

ब्रेड बोर्ड पर Arduino से DIP चिप तक।
ब्रेड बोर्ड पर Arduino से DIP चिप तक।

अब जबकि कार्यक्रम Arduino पर चल रहा है, हमें अब Arduino बोर्ड की आवश्यकता नहीं है। हमें बस सीपीयू की जरूरत है।

Arduino UNO सॉकेट से Atmega 328P को सावधानी से निकालें, और वैकल्पिक रूप से इसके प्रतिस्थापन को सम्मिलित करें।

Atmega 328P को ब्रेडबोर्ड पर रखें। ब्रेड बोर्ड पर डिवोट की ओर इशारा करते हुए सिरे को रखें। पिन 1 ऊपरी बाएँ पिन है। पिन 2 अगला नीचे है, और इसी तरह 14 को पिन करने के लिए जो नीचे बाईं ओर है। फिर पिन 15 नीचे दाईं ओर है, और पिन 16 से 28 तक चिप के दाईं ओर गिनें।

पिन 8 और 22 को जमीन से कनेक्ट करें।

पिन 7 को VCC (+5V) से कनेक्ट करें।

पिन 9 और 10 के बीच एक 16Mhz क्वार्ट्ज क्रिस्टल कनेक्ट करें। साथ ही पिन 9 और ग्राउंड के बीच और पिन 10 और ग्राउंड के बीच एक छोटा कैपेसिटर (22pF)। यह Atmega 328P को 16Mhz क्लॉक स्पीड देता है। इसके बजाय इसकी आंतरिक 8Mhz घड़ी का उपयोग करने के लिए 328P को सिखाने के लिए कहीं और निर्देश हैं, जो कुछ हिस्सों को बचाएगा, लेकिन यह प्रोसेसर को धीमा कर देगा।

Arduino GPIO पोर्ट 5, 6, 7, और 8, जिनका उपयोग हमने इनपुट पिन के लिए किया था, वास्तव में Atmega 328P पर भौतिक पिन 11, 12, 13, 14 हैं। वह बाईं ओर के चार निचले पिन होंगे।

Arduino GPIO पोर्ट 11, 10, और 9, जिसका उपयोग हमने आउटपुट पिन के लिए किया था, वास्तव में Atmega 328P पर भौतिक पिन 17, 16, 15 हैं। वह दाईं ओर नीचे के तीन पिन होंगे।

मैंने पहले की तरह इन पिनों में एल ई डी को जोड़ दिया।

चरण 5: निष्कर्ष

निष्कर्ष
निष्कर्ष

टीटीएल चिप्स काम करते हैं, लेकिन कुछ भी बनाने में उनमें से बहुत कुछ लगता है। FPGAs वास्तव में अच्छा काम करते हैं, लेकिन सस्ते नहीं हैं। यदि आप कम IO पिन और कम गति के साथ रह सकते हैं, तो Atmega 328P आपके लिए चिप हो सकता है।

ध्यान रखने योग्य कुछ बातें:

एफपीजीए:

समर्थक

- हाई स्पीड सिग्नल को हैंडल कर सकते हैं। चूंकि एक समय में एक निर्देश तक प्रसंस्करण में बाधा डालने के लिए कोई सीपीयू नहीं है, सीमित कारक दिए गए सर्किट पर फाटकों के माध्यम से प्रसार विलंब है। कई मामलों में यह चिप के साथ दी गई घड़ी की तुलना में बहुत तेज हो सकता है। मेरे डिजाइन के लिए, गणना की गई देरी ने दो बिटएडर को प्रति सेकंड (100 मेगाहर्ट्ज) इनपुट मूल्यों में लगभग 100 मिलियन परिवर्तनों का जवाब देने की अनुमति दी होगी, भले ही ऑन-बोर्ड घड़ी केवल 12 मेगाहर्ट्ज क्रिस्टल हो।

- जैसे-जैसे डिजाइन अधिक जटिल होता जाता है, मौजूदा सर्किट का प्रदर्शन कम नहीं होता (ज्यादा)। क्योंकि कपड़े में सर्किट जोड़ना अप्रयुक्त अचल संपत्ति में बस कुछ नया डाल रहा है, यह मौजूदा सर्किटरी को प्रभावित नहीं करता है।

- FPGA के आधार पर, उपलब्ध IO पिनों की संख्या बहुत अधिक हो सकती है, और वे आम तौर पर किसी विशेष उद्देश्य में बंद नहीं होते हैं।

चोर

- महंगा हो सकता है और/या मुश्किल से आ सकता है।

- आम तौर पर एक बीजीए पैकेज में आता है जिसके लिए किसी शौकिया परियोजना में चिप के साथ काम करने के लिए किसी प्रकार के ब्रेकआउट बोर्ड की आवश्यकता होती है। यदि आप इसे कस्टम मल्टी-लेयर SMT PCB के साथ डिज़ाइन में बना रहे हैं, तो यह कोई समस्या नहीं है।

- अधिकांश FPGA निर्माता अपना स्वयं का बंद स्रोत डिज़ाइन सॉफ़्टवेयर प्रदान करते हैं, जिसमें कुछ मामलों में पैसे खर्च हो सकते हैं, या लाइसेंस की समाप्ति तिथि हो सकती है।

Arduino एक FPGA के रूप में:

समर्थक

- सस्ता और आसानी से मिल जाने वाला। Amazon पर atmega328p-pu खोजें। वे लगभग $ 4 / टुकड़ा होना चाहिए। कई विक्रेता उन्हें ३ या ४ के लॉट में बेचते हैं।

- यह एक डीआईपी पैकेज है, जिसका अर्थ है बाहरी पिन के साथ ब्रेडबोर्ड पर पूरी तरह फिट बैठता है।

- यह एक 5V डिवाइस है, जो अन्य 5V डिवाइस के साथ इंटरफेसिंग को आसान बना सकता है।

चोर

- ATMEGA328P में सीमित संख्या में IO पिन (23) हैं, और उनमें से कई विशिष्ट कार्यों के लिए आरक्षित हैं।

- जैसे-जैसे सर्किट की जटिलता बढ़ती है, Arduino लूप विधि में चलने वाले कोड की मात्रा बढ़ती जाती है, जिसका अर्थ है कि प्रत्येक चक्र की अवधि लंबी होती है।

- भले ही सर्किट की जटिलता कम हो, प्रत्येक चक्र को इनपुट पिन मान लाने, और आउटपुट पिन मान लिखने और लूप के शीर्ष पर लौटने के लिए कई CPU निर्देशों की आवश्यकता होती है। 16 मेगाहर्ट्ज क्रिस्टल के साथ, प्रति घड़ी चक्र में एक निर्देश पर भी, लूप प्रति सेकंड 1 मिलियन बार (1 मेगाहर्ट्ज) से अधिक नहीं चलेगा। अधिकांश शौकिया इलेक्ट्रॉनिक्स परियोजनाओं के लिए, हालांकि यह जरूरत से ज्यादा तेज है।

सिफारिश की: