সুচিপত্র:

একটি সস্তা ব্রেডবোর্ড FPGA হিসাবে Arduino: 5 টি ধাপ (ছবি সহ)
একটি সস্তা ব্রেডবোর্ড FPGA হিসাবে Arduino: 5 টি ধাপ (ছবি সহ)

ভিডিও: একটি সস্তা ব্রেডবোর্ড FPGA হিসাবে Arduino: 5 টি ধাপ (ছবি সহ)

ভিডিও: একটি সস্তা ব্রেডবোর্ড FPGA হিসাবে Arduino: 5 টি ধাপ (ছবি সহ)
ভিডিও: Flashing LED Circuit 555 IC Bangla With English Subtitle 2024, নভেম্বর
Anonim
একটি সস্তা ব্রেডবোর্ড FPGA হিসাবে Arduino
একটি সস্তা ব্রেডবোর্ড FPGA হিসাবে Arduino

হার্ডওয়্যার লজিক সার্কিট ডিজাইন করা মজাদার হতে পারে। এটি করার পুরাতন স্কুল পদ্ধতিটি ছিল NAND গেট দিয়ে, একটি রুটি বোর্ডে, জাম্পার তার দিয়ে তারযুক্ত। এটি এখনও সম্ভব, কিন্তু গেটের সংখ্যা হাত থেকে বেরিয়ে যাওয়ার আগে খুব বেশি সময় লাগে না। একটি নতুন বিকল্প হল একটি FPGA (ফিল্ড প্রোগ্রামযোগ্য গেট অ্যারে) ব্যবহার করা। আপনি যে ডিজিটাল লজিক সার্কিট ডিজাইন করতে পারেন, এই চিপগুলি তাদের নিজেদেরকে নতুন করে তৈরি করতে পারে, কিন্তু সস্তা এবং সহজলভ্য নয়। আমি দেখাবো কিভাবে এই FPGA কে একটি Arduino UNO থেকে একটি সস্তা Atmega চিপ দিয়ে প্রতিস্থাপিত করা যায়, ডিজিটাল সার্কিটকে একটি DIP প্যাকেজে কার্যকরভাবে স্থাপন করা হয়, যা খুবই রুটিবোর্ড বান্ধব।

ধাপ 1: সার্কিটটি ডিজাইন করুন যা "FPGA" প্রতিনিধিত্ব করবে

সার্কিট ডিজাইন করুন যে
সার্কিট ডিজাইন করুন যে
সার্কিট ডিজাইন করুন যে
সার্কিট ডিজাইন করুন যে
সার্কিট ডিজাইন করুন যে
সার্কিট ডিজাইন করুন যে

আমি একটি 2 বিট + 2 বিট অ্যাডার তৈরি করব। এটি লজিক ইনপুট পিনের দুই জোড়া লাগে, এবং আউটপুট পিনের এক ট্রিপ্লেট আউটপুট করে।

NAND গেট দিয়ে এটি করতে, ছবিতে পরিকল্পিত দেখুন। এটি 14 NAND গেট প্রয়োজন। আমি 4 চতুর্ভুজ NAND গেট টিটিএল চিপ ব্যবহার করেছি, এবং তাদের রুটি বোর্ডে সংযুক্ত করেছি।

ইনপুট এবং আউটপুট পিনগুলি যখন (উচ্চ), এবং যখন তারা বন্ধ (কম) ছিল তখন দেখানোর জন্য আমি কিছু LEDs (বর্তমান সীমাবদ্ধ প্রতিরোধককে ভুলে যাব না) যোগ করেছি। ইনপুট পিনগুলি চালানোর জন্য, আমি সেগুলিকে গ্রাউন্ড রেল বা পজিটিভ পাওয়ার রেল এ ঝাঁপিয়ে পড়েছিলাম।

এই সার্কিট কাজ করে, কিন্তু এটি ইতিমধ্যে 4 টিটিএল চিপ নেয়, এবং এটি একটি ইঁদুরের তারের বাসা। আরো বিট প্রয়োজন হলে, আরো রুটি বোর্ড, এবং আরো jumpers হবে। খুব দ্রুত সার্কিটের সাইজ হাতের বাইরে চলে যেত।

একটি সাইড নোট, টিটিএল গেটগুলির সাথে কাজ করার সময়, তারা ঠিক 0V বা 5V আউটপুট করে না যেমনটি কেউ আশা করবে। তারা প্রায়শই "উচ্চ" এর জন্য 3V এর কাছাকাছি আউটপুট করে, কিন্তু সঠিক ভোল্টেজটি খুব বিস্তৃত পরিসরে। সিএমওএস সমতুল্য চিপ ব্যবহার করে একই সার্কিটটি ঠিক 0V থেকে ঠিক 5V সুইংয়ে থাকবে।

ধাপ 2: FPGA লিখুন

FPGA লিখুন
FPGA লিখুন
FPGA লিখুন
FPGA লিখুন

একটি এফপিজিএ একটি কল্পনাপ্রসূত চিপ, যা আক্ষরিক অর্থে যুক্তিযুক্ত গেটের যেকোনো সংমিশ্রণে পরিণত হতে পারে, যেকোনো সংমিশ্রণে একসঙ্গে তারযুক্ত। একজন হার্ডওয়্যার ডিজাইন ভাষায় (এইচডিএল) "সার্কিট" ডিজাইন করে। এরকম একাধিক ভাষা আছে, যার মধ্যে একটি হল ভেরিলগ। ছবির.v ফাইলটি দুটি বিট অ্যাডারের ভেরিলগ সমতুল্য। চিপের আসল হার্ডওয়্যার পিনগুলিতে ভেরিলগ ফাইলের নামযুক্ত ইনপুট এবং আউটপুট পিনগুলি বরাদ্দ করার জন্য এটির নীচের.pch ফাইলটিও প্রয়োজন।

এই ক্ষেত্রে আমি একটি ল্যাটিস সেমিকন্ডাক্টর iCEstick ডেভেলপমেন্ট বোর্ড (https://www.latticesemi.com/icestick) ব্যবহার করছি। আসল FPGA চিপ হল iCE40HX-1k, যার 1000 টিরও বেশি গেট রয়েছে, যার প্রত্যেকটি যেকোনো লজিক গেট হতে পারে। এর মানে হল যে প্রতিটি গেট একটি NAND গেট, অথবা একটি OR গেট, NOT গেট, NOR, XOR, ইত্যাদি হতে পারে। অতিরিক্তভাবে প্রতিটি গেট দুটি ইনপুট পরিচালনা করতে পারে। এটি প্রতিটি প্রস্তুতকারকের জন্য নির্দিষ্ট, কিন্তু iCE40 এর প্রতিটি গেটে 4 টি ইনপুট পরিচালনা করতে পারে। এভাবে প্রতিটি গেট 2 টি ইনপুট NAND গেটের চেয়ে অনেক বেশি সক্ষম।

আমাকে 4 টি ইনপুট পাইন এবং 3 টি আউটপুট পিন যথাক্রমে 91, 90, 88, 87, 81, 80 এবং 79 ফিনিক পিনগুলিতে বরাদ্দ করতে হয়েছিল। এটি এফপিজিএ চিপ এবং ব্রেকআউট বোর্ডের জন্য নির্দিষ্ট, এবং সেই পিনগুলি কীভাবে পিএমওডি বন্দরে যুক্ত করা হয়। এই FPGA বোর্ডের জন্য ডেটশীটে পাওয়া যায়।

ল্যাটিস ভেরিলগ থেকে সার্কিট সংশ্লেষণ (FPGA সমতুল্য FPGA সমতুল্য) করার জন্য তাদের নিজস্ব টুল চেইন সরবরাহ করে, কিন্তু আমি বিনামূল্যে ওপেন সোর্স টুল চেইন আইসেস্টরম (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

এটি দুর্দান্ত কাজ করে, তবে এই আইসিস্টিক শিপিং সহ প্রায় 30 ডলার খরচ হবে। এটি ডিজিটাল সার্কিট তৈরির সবচেয়ে সস্তা উপায় নয়, তবে এটি শক্তিশালী। এটির 1000 টিরও বেশি গেট রয়েছে এবং এই ক্ষুদ্র সার্কিটের জন্য এটি কেবলমাত্র 3 টি ব্যবহার করে। NAND গেট সমতুল্য 14 টি গেট ব্যবহার করেছে। এটি এই কারণে যে প্রতিটি গেট যে কোনও ধরণের গেট হয়ে উঠতে পারে এবং প্রতিটি গেট আসলে 4 টি ইনপুট গেট। প্রতিটি গেট আরও কিছু করতে পারে। যদি আপনার আরো গেটের প্রয়োজন হয়, iCEstick এর 8000 গেট সহ একটি বড় ভাই আছে, যার দাম প্রায় দ্বিগুণ। অন্যান্য নির্মাতাদের অন্যান্য অফার আছে কিন্তু দাম বেশ খাড়া পেতে পারে।

ধাপ 3: FPGA থেকে Arduino পর্যন্ত

FPGA থেকে Arduino পর্যন্ত
FPGA থেকে Arduino পর্যন্ত

FPGAs মহান, কিন্তু ব্যয়বহুল হতে পারে, আসা কঠিন, এবং খুব রুটি বোর্ড বন্ধুত্বপূর্ণ নয়। একটি ব্রেডবোর্ড বন্ধুত্বপূর্ণ এবং সস্তা চিপ হল Atmega 328 P, যা একটি ঝরঝরে DIP প্যাকেজে আসে, যা রুটিবোর্ডিংয়ের জন্য উপযুক্ত। এটি প্রায় $ 4 এর জন্যও হতে পারে। এটি আরডুইনো ইউএনও এর হৃদয়। আপনি অবশ্যই পুরো ইউএনও ব্যবহার করতে পারেন, কিন্তু সস্তা হতে পারেন, আমরা ইউএনও থেকে আটমেগা 328 পি টেনে আনতে পারি এবং এটি নিজে ব্যবহার করতে পারি। যদিও আমি ইউএনও বোর্ডকে অ্যাটমেগার জন্য প্রোগ্রামার হিসাবে ব্যবহার করেছি।

এই সময়ে আপনার প্রয়োজন হবে

1. একটি Arduino UNO, অপসারণযোগ্য Atmega 328P CPU সহ।

2. আরডুইনো বুটলোডারের সাথে আরেকটি Atmega 328P প্রি-বার্ন করা হয়েছে, যাকে আমরা UNO থেকে বের করতে যাচ্ছি। (Stillচ্ছিক অনুমান আপনি এখনও একটি ব্যবহারযোগ্য 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 নামে একটি সাবডিরেক্টরি তৈরি করবে যেখানে বেশ কিছু নতুন ফাইল থাকবে। আমাদের শুধুমাত্র হেডার এবং cpp ফাইল, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, এবং VtwoBitAdder_Syms.cpp প্রয়োজন।

Arduino IDE তে, একটি নতুন স্কেচ তৈরি করুন যার নাম TwoBitAdder.ino। এটি আপনার Arduino স্কেচবুক ডিরেক্টরির ভিতরে একটি নতুন ডিরেক্টরিতে ইনো ফাইল তৈরি করবে যাকে টু বিটএডার বলা হয়। আপনার VtwoBitAdder.h এবং VtwoBitAdder.cpp ফাইলগুলিকে আপনার Arduino ফোল্ডারে এই দুই বিট অ্যাডার ফোল্ডারে অনুলিপি করুন।

এখন ভেরিলেটর ইনস্টলেশন থেকে হেডার ফাইল কপি করুন।

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

অবশেষে https://github.com/maniacbug/StandardCplusplus থেকে std c ++ লাইব্রেরিতে অনুলিপি করুন। তাদের ইনস্টলেশন নির্দেশাবলী অনুসারে এটি একটি নিয়মিত আরডুইনো লাইব্রেরির মতই ইনস্টল করা আছে। আপনার স্কেচবুকের নীচে 'লাইব্রেরি' ফোল্ডারে বিতরণের বিষয়বস্তু আনপ্যাক করুন। উদাহরণস্বরূপ, আমার স্কেচবুক/home/maniacbug/source/Arduino এ আছে, তাই এই লাইব্রেরিটি /home/maniacbug/source/Arduino/লাইব্রেরি/StandardCplusplus এ আছে।

এটি ইনস্টল করার পরে আপনার Arduino IDE রিসেট করতে ভুলবেন না।"

এখন এই ধাপে প্রদত্ত একের সাথে twoBitAdder.ino এর বিষয়বস্তু প্রতিস্থাপন করুন। এটি একটি পরীক্ষা জোতা যা ভেরিলেটর আশা করে, যা ইনপুট/আউটপুট পিন সেট করে, তারপর লুপে, ইনপুট পিনগুলি পড়ে, তাদের VtwoBitAdder (আমাদের সার্কিটের অনুবাদিত সংস্করণ) এ খাওয়ায়, তারপর VtwoBitAdder থেকে আউটপুট পড়ে এবং প্রয়োগ করে তাদের আউটপুট পিনগুলিতে।

এই প্রোগ্রামটি Arduino UNO তে কম্পাইল এবং এক্সিকিউট করা উচিত।

ধাপ 4: Arduino থেকে একটি রুটি বোর্ডে DIP চিপ পর্যন্ত।

Arduino থেকে একটি রুটি বোর্ডে DIP চিপ।
Arduino থেকে একটি রুটি বোর্ডে DIP চিপ।

এখন যেহেতু প্রোগ্রামটি আরডুইনোতে চলছে, আমাদের আরডুইনো বোর্ডের আর প্রয়োজন নেই। আমাদের যা দরকার তা হল CPU।

Arduino UNO সকেট থেকে সাবধানে Atmega 328P সরান, এবং allyচ্ছিকভাবে এর প্রতিস্থাপন োকান।

ব্রেডবোর্ডে Atmega 328P রাখুন। রুটি বোর্ডে ইঙ্গিত করে ডিভট দিয়ে শেষ করুন। পিন 1 উপরের বাম পিন। পিন 2 হল পরেরটি নিচে, এবং 14 পিন করতে যা নীচে বাম দিকে রয়েছে। তারপর পিন 15 নীচে ডানদিকে, এবং পিন 16 থেকে 28 গণনা চিপের ডান দিকে ফিরে।

পিন 8 এবং 22 মাটিতে সংযুক্ত করুন।

পিন 7 কে VCC (+5V) এর সাথে সংযুক্ত করুন।

পিন 9 এবং 10 এর মধ্যে একটি 16 মেগাহার্টজ কোয়ার্টজ স্ফটিক সংযুক্ত করুন। এছাড়াও পিন 9 এবং গ্রাউন্ডের মধ্যে একটি ছোট ক্যাপাসিটর (22pF) এবং পিন 10 এবং গ্রাউন্ডের মধ্যে। এটি Atmega 328P 16Mhz ঘড়ির গতি দেয়। 328P শেখানোর অন্যত্র নির্দেশনা আছে তার পরিবর্তে তার অভ্যন্তরীণ 8Mhz ঘড়ি ব্যবহার করা যা কয়েকটি অংশ বাঁচাবে, কিন্তু এটি প্রসেসরকে ধীর করে দেবে।

আরডুইনো জিপিআইও পোর্ট 5, 6, 7, এবং 8, যা আমরা ইনপুট পিনের জন্য ব্যবহার করেছি সেগুলি প্রকৃতপক্ষে অ্যাটমেগা 328 পি -তে 11, 12, 13, 14 ফিজিক্যাল পিন। এটি বাম দিকে চারটি নীচের পিন হবে।

আরডুইনো জিপিআইও পোর্ট 11, 10 এবং 9, যা আমরা আউটপুট পিনের জন্য ব্যবহার করেছি সেগুলি প্রকৃতপক্ষে অ্যাটমেগা 328 পি -তে 17, 16, 15 ফিজিক্যাল পিন। এটি ডানদিকে নীচের তিনটি পিন হবে।

আমি আগের মতো এই পিনগুলিতে LEDs সংযুক্ত করেছি।

ধাপ 5: উপসংহার

উপসংহার
উপসংহার

টিটিএল চিপগুলি কাজ করে, কিন্তু যেকোনো কিছু তৈরি করতে এটি অনেক বেশি লাগে। FPGAs সত্যিই ভাল কাজ করে, কিন্তু সস্তা নয়। যদি আপনি কম IO পিন এবং কম গতি নিয়ে বাঁচতে পারেন, তাহলে একটি Atmega 328P আপনার জন্য চিপ হতে পারে।

কিছু জিনিস মনে রাখতে হবে:

FPGA:

প্রো

- উচ্চ গতির সংকেত পরিচালনা করতে পারে। যেহেতু একটি সময়ে একটি নির্দেশের নিচে প্রক্রিয়াজাতকরণের জন্য কোন CPU নেই, সীমিত ফ্যাক্টর হল প্রদত্ত সার্কিটের গেটগুলির মাধ্যমে বংশ বিস্তার বিলম্ব। অনেক ক্ষেত্রে এটি চিপের সাথে প্রদত্ত ঘড়ির চেয়ে অনেক দ্রুত হতে পারে। আমার ডিজাইনের জন্য, গণিত বিলম্বটি দুই বিট অ্যাডারের জন্য প্রতি সেকেন্ডে (100 মেগাহার্টজ) ইনপুট মানগুলিতে প্রায় 100 মিলিয়ন পরিবর্তনের প্রতিক্রিয়া জানাতে পারে যদিও বোর্ডে ঘড়িটি কেবল 12 মেগাহার্টজ স্ফটিক।

- নকশাটি আরও জটিল হয়ে উঠলে বিদ্যমান সার্কিটগুলির কার্যকারিতা হ্রাস পায় না (অনেক)। কারণ ফ্যাব্রিকের সার্কিট যোগ করা অব্যবহৃত রিয়েল এস্টেটে নতুন কিছু রাখছে, এটি বিদ্যমান সার্কিটারে প্রভাব ফেলবে না।

- এফপিজিএর উপর নির্ভর করে, উপলব্ধ আইও পিনের সংখ্যা খুব বেশি হতে পারে এবং এগুলি সাধারণত কোনও বিশেষ উদ্দেশ্যে লক করা থাকে না।

কন

- ব্যয়বহুল এবং/অথবা আসা কঠিন হতে পারে।

- সাধারণত একটি BGA প্যাকেজে আসে যার জন্য কোন অপেশাদার প্রকল্পে চিপের সাথে কাজ করার জন্য এক ধরণের ব্রেকআউট বোর্ড প্রয়োজন। আপনি যদি এটি একটি কাস্টম মাল্টি-লেয়ার এসএমটি পিসিবি দিয়ে একটি নকশায় তৈরি করছেন, এটি কোনও সমস্যা নয়।

- বেশিরভাগ এফপিজিএ নির্মাতারা তাদের নিজস্ব ক্লোজ সোর্স ডিজাইন সফটওয়্যার সরবরাহ করে, যার কিছু ক্ষেত্রে অর্থ ব্যয় হতে পারে, অথবা লাইসেন্সের মেয়াদ শেষ হওয়ার তারিখ থাকতে পারে।

একটি FPGA হিসাবে Arduino:

প্রো

- সস্তা, এবং সহজেই পাওয়া যায়। শুধু অ্যামাজনে atmega328p-pu অনুসন্ধান করুন। তারা প্রায় $ 4/পিস হতে হবে। বেশ কয়েকজন বিক্রেতা সেগুলো 3 বা of টিতে বিক্রি করে।

- এটি একটি ডিআইপি প্যাকেজ, যার অর্থ তার বহিরাগত পিনের সাথে একটি রুটিবোর্ডে পুরোপুরি ফিট করে।

- এটি একটি 5V ডিভাইস, যা অন্যান্য 5V ডিভাইসের সাথে ইন্টারফেসিং সহজ করতে পারে।

কন

- ATMEGA328P এর একটি সীমিত সংখ্যক IO পিন (23) আছে এবং এর মধ্যে কয়েকটি নির্দিষ্ট কাজের জন্য সংরক্ষিত আছে।

- সার্কিট জটিলতা বাড়ার সাথে সাথে, Arduino লুপ পদ্ধতিতে কোড চালানোর পরিমাণ বৃদ্ধি পায়, অর্থাত প্রতিটি চক্রের সময়কাল বেশি।

- সার্কিটের জটিলতা কম হলেও, প্রতিটি চক্রের ইনপুট পিন মানগুলি আনতে, এবং আউটপুট পিনের মানগুলি লিখতে এবং লুপের শীর্ষে ফিরে আসার জন্য অনেক CPU নির্দেশের প্রয়োজন হয়। একটি 16Mhz স্ফটিক দিয়ে, এমনকি প্রতি ঘড়ি চক্রের একটি নির্দেশে, লুপটি প্রতি সেকেন্ডে 1 মিলিয়ন বারের বেশি চলবে না (1Mhz)। বেশিরভাগ অপেশাদার ইলেকট্রনিক্স প্রকল্পের জন্য যা প্রয়োজনের তুলনায় দ্রুততর।

প্রস্তাবিত: