مقدمه
این روزها با تنشهای موجود در بازار ارز و تبعاتش در قیمت سایر اقلام، اکثر تولیدکنندهها سعی میکنند که قیمت محصولات خودشون رو تا جایممکن بهشکل منطقی حفظ کنند، که صدالبته کار سادهای نیست. در بازار الکترونیک هم شرایط بههمین صورته، یکیاز اقلاماساسی مورداستفاده در انواع مدارات دیجیتال میکروکنترلر است که با چندبرابرشدن قیمت میکروکنترلرهای رایج قبلی همه بهدنبال جایگزین مناسب هستند. اینجاست که نام شرکتهایی مثل holtek یا میکروکنترلر STM8 بیشاز پیش بر سر زبانها افتاد! در این مقاله قصد داریم قابلیتهای میکروکنترلر STM8 را بررسیکنیم و مطمئنباشید این مقاله از اون مقالههای کلیشهای و حوصلهسربر نخواهد بود. پس با ما همراه باشید.
میکروکنترلر STM8 از کجا سروکلش پیدا شد؟
قبلا در سری مقالاتی به آموزش میکروکنترلر STM8 پرداختیم، در مقاله دیگری تحت عنوان “کدام کامپایلر برای میکروکنترلرSTM8 بهتر است؟” کامپایلرهای موجود برای میکروکنترلر STM8 را بررسیکردیم و قابلیتهایی که هرکدام داشت را زیر ذربین گذاشتیم. اما سوالی که جا دارد به آن پاسخدهیم این است که اصلا STM8 از کجا آمد و چه قابلیتهایی دارد؟ درواقع قضیه برمیگرده بهوقتی که میکروکنترلرها بالاسرشون پنجره داشتن برای پاککردن اطلاعات درونشون. اونموقعها شرکتST یه میکروکنترلر برای استفاده توی لوازمخانگی طراحیکردهبود که باتوجهبه دیگر انواع میکروکنترلر قیمت خیلیپایینی داشت. میکروکنترلرST که برای اینمنظور طراحی شدهبود در ابتدا ST6 و بعداز آن سری ST7 نامگذاری شدهبودند! سریST6 از معماری هاروارد استفاده میکرد و قابلیت آدرسدهی ۸بیتی برای حافظه داده و ۱۲بیت حافظه برنامه رو داشت. یعنی نهایتاً ۲۵۶بایت RAM و ۴کیلو فلش رو بیشتر نمیتونست پشتیبانی کنه، که خوب البته برای اونموقع مقداربدی نبوده. بعداز اون خانواده ST7 را تولید کرد که خیلی متفاوتتر از سریST6 بود. در سری ST7 شرکت ST معماری میکروکنترلرش رو به فون نیومان تغییر داد همزمان باس آدرسدهی حافظه را ۱۶بیت گسترشداد که امکان آدرسدهی ۶۴کیلوبایت حافظه را داشتهباشد! بعداز طراحی ST7 شرکت ST، اینبار بهبود سختافزاری را با نام تجاری STM8 معرفیکرد. درواقع میکروکنترلر STM8 مدل تکامل یافته ST7 است که بهبودهایی زیادی درخصوص پرفرالهای جانبی و معماری داشتهاست.
در STM8 رجیسترهای Index بهصورت ۱۶بیتی تعریفشدهاند همچنین آدرسدهی ریلیتیو به اشارهگر استک اضافهشدهاست همچنین باس آدرسدهی حافظه ۲۴بیت گسترش پیداکردهاست. معماری هاروارد اجازه اجرای کد را برروی حافظه RAM به پردازنده میدهد که در مواردمصرف خاص میتواند باعث سرعت عملکرد بیشتر شود.
بهبودهای انجامشده برروی ST7 باعث پیدایش میکروکنترلر STM8 شد که قابلیت رقابت با دیگر انواع میکروکنترلر را داشتهباشد.
تنوع در میکروکنترلر STM8
غالبا میکروکنترلرها با ابعاد مختلف و میزان حافظه RAM و FLASH متفاوت ایجاد میشوند البته تعداد پرفرالهای موجود هم در خانوادههای ارزانتر کم میشود! بهعنواننمونه در خانوادههای میکروکنترلر AVR، معمولا تعداد تایمرها یا کانالهای مبدل آنالوگ به دیجیتال و مقدار حافظه کم و زیاد میشوند البته در سریهای خاص پرفرالهایی برای USB و CAN به آن اضافه میشود. اما در میکروکنترلر STM8 مقداری رویکرد متفاوت است و تولیدات شرکت ST در این زمینه دارای تنوع در کارکردهای خاص هستند به اینمعنی که در سریهای خاص برای منظورهای خاص تولید شدهاند و بهصورت عمومی به آنها نگاه نشدهاست، STM8 در هفت دسته زیر تولید میشوند :
- STM8AF مناسب اتومبیل
- STM8AFL مناسب اتومبیل و کم مصرف
- STM8L کممصرف
- STM8S ارزان قیمت
- STM8T دارای کنترلر تاچ
- STLUX مناسب کنترلر روشنایی
- STNRG مخصوص کنترل موتور
این دستهبندیها به این معنی نیست که از سری ارزان قیمت نمیتوان در خودرو استفادهکرد، بلکه به اینمعنی است که سری خودرویی دارای پرفرالهایی برای استفاده در خودرو نیز هستند مثل CAN
بررسی معماری پردازنده میکروکنترلر STM8
همانطورکه قبلا اشارهکردیم میکروکنترلر STM8 از معماری هاروارد استفاده میکند و این بدان معناست که CPU میتواند همزمان به RAM و حافظه فلش دسترسی داشتهباشد! اما شاید چیزیکه توی ذوق بزنه اینهکه معماری پردازنده CISC است؛ احتمالا الان باید یه علامت سوال بالای سرتون باشه و با خودتون بپرسید CISC چیه؟ فون نیومن کیه! هاروارد کجاست؟ من کجام! اصلا این چیزا چه ریطی بهمن داره! خوب بذارید مساله رو روشنکنیم، اگر این چیزا رو نمیدونید دارید میکروکنترلر کار میکنید خوب احتمالا هیچوقت یک حرفهای نخواهید شد و درحد یک طراح عادی خواهید ماند. برای حرفهایشدن توی زمینهای نیازنیست که کار خارقالعادهای انجامبدید بلکه دیگه همهچی برمیگرده به ریزهکاریها!
فکر میکنید تفاوت یک راننده تاکسی با راننده فرمول یک توی چی هست؟
هردو از کارکرد پدالهای گاز، ترمز، کلاچ، دنده و… اطلاع دارند اما چی باعث میشه یکی راننده تاکسی باشه یکی راننده فرمول یک؟همین جزییات است مثل ضریب چسبندگی لاستیک، آیرودینامیک خودرو و… پس بهتره برای جزییات وقت بگذارید! برگردیم به بحثقبلی؛ امروزه تقریبا تمام میکروکنترلرهای مدرن از معماری RISC استفاده میکنند مثل AVR یا ARM و… اما همونطورکه قبلا گفتیم STM8 نوع بهبودیافته ST7 است پس احتمالا از معماری قدیمی CISC بهره میبرد. معماری RISC درواقع در سال۱۹۸۰ از روی معماری CISC بهینهسازی شد؛ از ویژگیهای مهم RISC میتوان به اجراشدن هر دستوراسمبلی در یک سیکل ماشین(بهبود سرعت) تعداد کم دستورات اسمبلی و ساختاربهینه برای برنامهنویسی سطحبالا نظیر C اشارهکرد. که هیچکدام در CISC وجود ندارد. در عکسزیر رجیسترهای پردازنده STM8 نشانداده شدهاست:
ممکنه باور نکنید! اما درستاست هسته STM8 تنها ۶ رجیستر دارد که خیلی شبیهبه رجیسترهای خانواده ۶۸۰۰محصول موتورلا است. مقایسه کنید با AVR که ۳۲رجیستر دارد، خوب قطعا مدیریت ۶رجیستر خیلی سادهتر از ۳۲رجیستر است البته در برنامهنویسی اسمبلی! خوب معماری CISC زیاد با زبان برنامهنویسیC راحت نیست! تاحالا اینطور بهش نگاه نکردهبودید؟ که نرمافزار زیاد با سختافزار راحت نیست؟ اما چرا؟ معمولا در زبانC برای آدرسدهی(در تبدیل به زبان اسمبلی) به شکل “اشارگر استک + آفست” استفاده میشود، مثلا به دستورجهنمی (برای پردازندههای CISC) زیر دقتکنید:
ADD A, ($ 10,SP)
درواقع پردازنده باید محتویات حافظه اشارگر پشته + 0x10 را با رجیستر ACCUMULATOR جمعکنه و نتیجه رو داخل ACCUMULATOR قرار بده! غالب آدرسدهیها توی برنامه C به این شکل انجام میشود! همین باعثمیشه که پردازندهای CISC با زبان سی راحت نباشند!
ولی خوشبختانه شرکت ST اضافهکردن آدرسدهی ریلیتیو به STM8 درواقع این میکروکنترلر رو برای برنامهنویسیC بهینهکردهاست اینم از اونحرفا استها، سختافزار مناسب نرمافزار ولی خوب امروزه دیگه دوره، دوره نرمافزاره.
یکیاز اتفاقات دیگهای که توی طراحی مجدد ST7 دیدهشدهاست، اینکه ظاهرا هنگام اتفاقافتادن یک اینتراپت، رجیسترهای پردازنده که ۶تا هستند باید Push شوند. درحالتعادی این Push نرمافزاری اتفاق میافتد که ۱۸سیکل ساعت زمان لازم دارد، در STM8 این کار بهصورت سختافزاری انجاممیشه و درواقع با هر اینتراپت ۱۸کلاک و ۹بایت از Stack صرفهجویی میشود. ازطرفی امکان ضرب دوعدد ۸بیتی علامتدار و همچنین تقسیم عدد ۱۶بیتی بر ۸بیتی بهصورت سختافزاری به پردازنده اضافهشدهاست که عملکرد پردازنده را در محاسبات ریاضی بهبود بخشیده است.
چالش سرعت و معماری CISC در میکروکنترلر STM8
سرعت اجرای دستورات یکیاز پارامترهای مهم توی انتخاب هر پردازنده و میکروپردازندهای است. برای همین هرروز شرکتها سعی میکنند پردازندههایی با کاراییبهتر و سرعتبالاتر رو ارائهکنند. اما همانطورکه قبلا اشارهکردیم معماری CISC مقداری قدیمی است و دستو پاگیر. همانطورکه احتمالا میدانید در این معماری برخلاف معماری RISC هر دستور اسمبلی برای اجراشدن نیازبه چند سیکل ماشین دارد در نمونههایی قدیمیتر هر ۱۲سیکل ماشین یک دستوراسمبلی را اجرا میکند که در نمونههای جدیدتر وضعیت خیلیبهتر شدهاست اما کماکان برای برابری با RISC نیازبه کلاک چندبرابر است! شرکتST اما از خلاقیتهای خوبی برای بالابردن راندمان STM8 استفادهکردهاست.
اولینقدمی که برای بهبودسرعت برداشتهشدهاست، پهنکردن باس دیتای دسترسیبه Flash است.
همانطورکه اطلاعدارید، برای اجرای هر دستوراول باید اون دستور از حافظه خوندهبشه، بعد پارامترهای اون خونده بشه البته درصورتیکه پارامتر داشتهباشه. معمولا دسترسیبه حافظه فلش و البته رم توی میکروکنترلرهای ۸بیتی بهصورت ۸بیتی است. در عمل این باعثمیشه مثلا برای اجرای یه دستور Jump نیازباشه که ۴مرتبه از حافظه Flash دیتا برداشتکنیم اگر فرضکنیم هربار خوندن اطلاعات از فلش یک سیکل ماشین نیاز داشتهباشه، فقط لود یه دستور توی رجیسترها ۴سیکل ماشین لازمداشتهباشه! اما توی میکروکنترلر STM8 این مشکل به اینصورت حلشده که باس دیتای Flash بهصورت ۳۲بیتی طراحیشده، یعنی با یه سیکل ماشین ۴بایت خونده خواهدشد.
این باعث میشه که بارگذاری دستورات از حافظه فلش ۴برابر سریعتر انجامبشه.
قدم بعدی برای همترازکردن STM8 با دیگر میکروکنترلرهای مدرن این است که قابلیت PipeLine سهمرحلهای به آن اضافهشدهاست.
اما PipeLine به چهدردی میخوره؟ برای اینکه بررسیکنیم چطور PipeLine عملکرد میکروکنترلر رو بهتر میکنه باید ببینم برای اجرای یک دستور در سطح سختافزار چه اتفاقاتی میافته. برای اجرای یک دستورلازمه که سه مرحلهکار انجامبشه که بهترتیب عبارتند از:
- واکشی دستور از حافظه فلش
- دکد و آدرس دهی
- اجرا
برای اجرای هر دستوراسمبلی باید سه مرحلهفوق انجامبشه. توی پردازندههای RISC هر سهمرحله در یک سیکل ماشین انجاممیشه، اما در پردازندههای CISC باتوجهبه یکیبودن باسداده و دستور چنینچیزی ممکننیست، شرکتST با اضافهکردن یک PipeLine سر مرحلهای درواقع کاریکرده که تروپوت(ریت خروجی) در یک سیکل انجامبشه! اما چطور؟ برای روشنترشدن قضیه به عکسزیر دقتکنید:
- F – خواندن دستور از حافظه
- D – رمزگشایی یا دکد دستور
- E – اجرای دستور
سیکل اول: دستورهای NEG A و XOR A و بخشیاز LD A از حافظه خواندهمیشه(چون باس دیتا ۳۲بیتی است ۴بایت از حافظه خوانده میشود)
سیکل دوم: دستور NEG A رمزگشایی میشه، دنباله دستور LD A و دستور SUB A از حافظه فلش خوانده میشود.
سیکل سوم: دستور NEG A اجرا میشود، دستور XOR A رمزگشایی میشه و دستورهای INC A و LD XL و SRL A و… از حافظه خوانده میشود.
این روال با همین شکل ادامه پیدا میکنه، همونطورکه مشخص هست، وجود پایپ لاین کمک میکنه که هر دستور در یک سیکل اجرا بشه. درواقع با انجام مراحل خواندن و آمادهسازی کمک میکنه که اجرای دستورات سرعت بگیره و اینطوربهنظر برسه که توی هرسیکل یک دستور داره اجرا میشه.
همونطورکه مشخصاست این روش صددرصد کارا نیست، چون درهنگام اجرای دستورات شرطی مجبورهستیم که PipeLine را خالیکنیم و با دستورات جدید پر کنیم.
اما باعث افزایش چشمگیر راندمان میکروکنترلر میشود! بهشکلی که بهصورت تقریبی با کلاک ۲۴مگاهرتزی میتوان انتظار اجرای ۲۰میلیون فرمان درثانیه را داشت. اگر فرصتی پیش بیاید و دوستان و دنبالکنندهها علاقهداشتهباشند، در مقالهای به مقایسه میکروکنترلر STM8 و AVR خواهیم پرداخت.
منبع: سیسوگ