বড় প্রজেক্ট করতে গেলে আমরা বুঝতে পারবো ছোট মাইক্রোকন্ট্রোলার গুলার অসুবিধা। যেমন ধরলাম আমার রোবট এর ৪০ টা মোটর, ১০০ টা সেন্সর, সিস্টেমে আর আছে ইমেজ প্রসেসিং, আরটিফিশিয়াল ইন্টিলিজেন্স। একটা Atmega32 দিয়ে বহু কষ্ট করে হয়ত ৪ টা মোটর আর অল্প কিছু সেন্সর ইন্টারফেস করা যাবে। তাও যেহেতু Atmega32 ৮ বিট এর প্রসেসর, ফীডব্যক পালস, pwm জেনারেশনে খুব বেশি রেজুলেশন পাওয়া যাবেনা। আর যদি কম্পেন্সেটর ডিজাইন করতে হয়, তাহলে ৪ টা মোটর একসাথে ভালভাবে কন্ট্রোল করাও যাবেনা। কারন মাইক্রোকন্ট্রোলার প্যরালালি কাজ করতে পারেনা। ইমেজ প্রসেসিং বা এজাতীয় কিছু ডেভেলপ করতে গেলে লাগবে বড় মেমরি, স্পিড আর বেশি বীট (৩২/৬৪ ) এর প্রসেস ক্ষমতা সম্পন্ন চিপ।
আমরা যে SAM4s Xplained pro ব্যবহার করছিলাম, সেটা অবশ্য ৩২ বিট এর। সেটা কিছুটা বেটার পারফর্ম করবে কিছু এডিশনাল হার্ডওয়ার ব্যবহার করে। (ধরুন ১০০ টা মোটর এর পালস গোনার জন্য কিছু, যেটা কোন একটা প্রোটকলে মূল কন্ট্রোলার এর সাথে যুক্ত ধরুন SPI বা I2C; আবার pwm ১০০ চ্যনেল এর কোন হার্ডওয়ার যেটা আগের মতই যুক্ত SPI বা I2C দিয়ে মূল কন্ট্রোলার দিয়ে ) । কিন্তু, এত কিছুর পর ও আমরা কি প্যরালালি সব কাজ করতে পারবো ১০০ টা মোটরের ? ডিরেকশন/ স্পিড হয়ত করা যাবে। কিন্তু যদি প্রতিটা মোটরের জন্য এলগরিদম, কম্পেন্সেটর অথবা অবসারভার যদি ডিজাইন করার দরকার হয়, তাহলে?
তাহলে আসলে আমাদের লাগবে FPGA
FPGA হল Field Programable Gate Array। এটা দিয়ে কি করা যায় ? এই প্রশ্ন এর চেয়ে বরং জানা উচিত কি করা যায় না? ইলেক্ট্রিলাল সার্কিটে যা যা পসিবল, সবি এটা দিয়ে সম্ভব, এবং প্যরালালি। এটা অসংখ্য NAND গেট এর সমষ্টি, যা দিয়ে আপনি এর ভেতর ARM/ AVR processor ও বানাতে পারেন। তাহলে সবখানেই এটা ব্যবহার করা হয়না ক্যান? অনেক গুলা কারন। এক নাম্বার কারন, আপনার যদি এক রুমের একটা বাসা দিয়ে হয়, আপনি কি ১০০ তলার লাক্সারিয়াস ফ্ল্যাট কিনবেন কোটী কোটী টাকা ঢেলে ? এছাড়া FPGA is real pain in the ass to work with. সত্যি সত্যি একটা ১০০ টা মোটরের কন্ট্রোল কোড লিখে ইচ্ছামত চালাতে হলে আপনাকে মোটামুটি বেশ ভাল দক্ষ হতে হবে। দক্ষতা টা ঠিক আপনার বুদ্ধি কেমন তারওপর নির্ভর করবেনা। আপনি সব ই জানেন, কিন্তু আপনাকে ট্রাবল দিবে VHDL, verilog (এ দুটি ল্যাঙ্গুয়েজে কোড করা হয় FPGA তে ) লেখার নিয়ম কানুন গুলা। কোডে ক্রিয়েটিভিটী নাই, মানে এমন না যে আপনি এটা পারলেই ওটা পারবেন। FPGA ভাল কমপ্লেক্স / রিপিটিটিভ সার্কিটের ইমপ্লেন্টেশনে, কিন্তু এখানে এলগরিদম (সিরিয়াল মুডে চলে এরকম ) ডেভেলপ করাটা ভীষণ বোরিং।
বাকি কারন গুলা জানতে হলে কোডিং টা একটু জানতে হবে।
VHDL, Verilog হল দুটা ল্যাঙ্গুয়েজ যা দিয়ে FPGA এর জন্য কোড করা হয়। এছাড়া আপনি চাইলে সারকিট ডিজাইনের মত কম্পোনেন্ট বসিয়ে আপনার রিকুয়ারমেন্ট মেটাতে পারেন।
VHDL – Very high speed Hardware Description Language
Altera, Xilinx এরা FPGA এর বাজারে সবচেয়ে পরিচিত নাম।
ভিডিওটায় একটা ইন্টারফেস দেখালাম, এখানে FPGA দিয়ে একটা মোটরের ইঙ্ক্রিমেন্টাল এঙ্কোডার এর পালস গুনে দেখিয়েছি । ভ্যালু টা কে SAM4s এ ট্রান্সমিট করেছি I2C প্রোটকলে। SPI ব্যবহার করেছি OLED display আর Sam4s এর মধ্যে। এগুলা আমরা আস্তে আস্তে এক্সপ্লেইন করব পরের টিউটোরিয়ালে।