این روزها با تنش های موجود در بازار ارز و تبعاتش در قیمت سایر اقلام ، اکثر تولید کننده ها سعی میکنند که قیمت محصولات خودشون رو تا جای ممکن به شکل منطقی حفظ کنند، که صد البته کار ساده ای نیست. در بازار الکترونیک هم شرایط به همین صورته، یکی از اقلام اساسی مورد استفاده در انواع مدارات دیجیتال میکروکنترلر است که با چند برابر شدن قیمت میکروکنترلرهای رایج قبلی همه به دنبال جایگزین مناسب هستند. اینجاست که نام شرکتهایی مثل holtek یا میکروکنترلر STM8 بیش از پیش بر سر زبانها افتاد ! در این مقاله قصد داریم قابلیتهای میکروکنترلر STM8 را بررسی کنیم و مطمئن باشید این مقاله از اون مقالههای کلیشهای و حوصله سر بر نخواهد بود 🙂 پس با سیسوگ همراه باشید.
میکروکنترلر stm8 از کجا سروکلش پیدا شد ؟
قبلا در سری مقالاتی به آموزش میکروکنترلر STM8 پرداختیم، در مقاله دیگری تحت عنوان ” کدام کامپایلر برای میکروکنترلر STM8 بهتر است ؟ ” کامپایلر های موجود برای میکروکنترلر STM8 را بررسی کردیم و قابلیتهایی که هر کدام داشت را زیر ذربین گذاشتیم. اما سوالی که جا دارد به آن پاسخ دهیم این است که اصلا STM8 از کجا آمد و چه قابلیتهایی دارد ؟
در واقع قضیه برمیگرده به وقتی که میکروکنترلرها بالاسرشون پنجره داشتن برای پاک کردن اطلاعات درونشون. اون موقعها شرکت ST یه میکروکنترلر برای استفاده توی لوازم خانگی طراحی کرده بود که با توجه به دیگر انواع میکروکنترلر قیمت خیلی پایینی داشت. میکروکنترلر ST که برای این منظور طراحی شده بود در ابتدا ST6 و بعد از آن سری ST7 نام گذاری شده بودند !
سری ST6 از معماری هاروارد استفاده میکرد و قابلیت آدرسدهی 8 بیتی برای حافظه داده و 12 بیت حافظه برنامه رو داشت. یعنی نهایتاً 256 بایت RAM و 4 کیلو فلش رو بیشتر نمیتونست پشتیبانی کنه، که خوب البته برای اون موقع مقدار بدی نبوده. بعد از اون خانواده ST7 را تولید کرد که خیلی متفاوتتر از سری ST6 بود.
در سری ST7 شرکت ST معماری میکروکنترلرش رو به فون نیومان تغییر داد هم زمان باس آدرسدهی حافظه را 16 بیت گسترش داد که امکان آدرسدهی 64 کیلو بایت حافظه را داشته باشد !
شاید برای شما مفید باشد: میکروکنترلر مقصر نیست مقصر برنامه نویسی است
بعد از طراحی ST7 شرکت ST ، این بار بهبود سختافزاری را با نام تجاری STM8 معرفی کرد. در واقع میکروکنترلر STM8 مدل تکامل یافته ST7 است که بهبودهایی زیادی در خصوص پرفرالهای جانبی و معماری داشته است.
بهبودهای انجام شده بر روی ST7 باعث پیدایش میکروکنترلر STM8 شد که قابلیت رقابت با دیگر انواع میکروکنترلر را داشته باشد.
تنوع در میکروکنترلر STM8
غالبا میکروکنترلرها با ابعاد مختلف و میزان حافظه RAM و FLASH متفاوت ایجاد میشوند البته تعداد پرفرالهای موجود هم در خانوادههای ارزانتر کم میشود! به عنوان نمونه در خانوادههای میکروکنترلر AVR ، معمولا تعداد تایمرها یا کانالهای مبدل آنالوگ به دیجیتال و مقدار حافظه کم و زیاد میشوند البته در سریهای خاص پرفرالهایی برای USB و CAN به آن اضافه میشود. اما در میکروکنترلر STM8 مقداری رویکرد متفاوت است و تولیدات شرکت ST در این زمینه دارای تنوع در کارکردهای خاص هستند به این معنی که در سریهای خاص برای منظورهای خاص تولید شدهاند و به صورت عمومی به آنها نگاه نشده است ، STM8 در هفت دسته زیر تولید میشوند :
- STM8AF مناسب اتومبیل
- STM8AFL مناسب اتومبیل و کم مصرف
- STM8L کم مصرف
- STM8S ارزان قیمت
- STM8T دارای کنترلر تاچ
- STLUX مناسب کنترلر روشنایی
- STNRG مخصوص کنترل موتور
بررسی معماری پردازنده میکروکنترلر STM8
همانطور که قبلا اشاره کردیم میکروکنترلر STM8 از معماری هاروارد استفاده میکند و این بدان معناست که CPU می تواند همزمان به RAM و حافظه فلش دسترسی داشته باشد ! اما شاید چیزی که توی ذوق بزنه اینه که معماری پردازنده CISC است؛ احتمالا الان باید یه علامت سوال بالای سرتون باشه و با خودتون بپرسید CISC چیه ؟ فون نیومن کیه ! هاروارد کجاست ؟ من کجام ! اصلا این چیزا چه ریطی به من داره !
خوب بذارید مساله رو روشن کنیم ، اگر این چیزا رو نمیدونید دارید میکروکنترلر کار میکنید خوب احتمالا هیچ وقت یک حرفهای نخواهید شد و در حد یک طراح عادی خواهید ماند. برای حرفهای شدن توی زمینهای نیاز نیست که کار خارق العاده ای انجام بدید بلکه دیگه همه چی برمیگرده به ریزه کاریها !
هر دو از کارکرد پدالهای گاز ؛ ترمز ؛ کلاچ ؛ دنده و … اطلاع دارند اما چی باعث میشه یکی راننده تاکسی باشه یکی راننده فرمول یک ؟ ؛ همین جزییات است مثل ضریب چسبندگی لاستیک ؛ آیرودینامیک خودرو و… پس بهتره برای جزییات وقت بگذارید ! برگردیم به بحث قبلی ؛ امروزه تقریبا تمام میکروکنترلرهای مدرن از معماری RISC استفاده میکنند مثل AVR یا ARM و… اما همونطور که قبلا گفتیم STM8 نوع بهبود یافته ST7 است پس احتمالا از معماری قدیمی CISC بهره میبرد.
معماری RISC در واقع در سال 1980 از روی معماری CISC بهینه سازی شد ؛ از ویژگیهای مهم RISC میتوان به اجرا شدن هر دستور اسمبلی در یک سیکل ماشین (بهبود سرعت) تعداد کم دستورات اسمبلی و ساختار بهینه برای برنامهنویسی سطح بالا نظیر C اشاره کرد. که هیچ کدام در CISC وجود ندارد . در عکس زیر رجیستر های پردازنده STM8 نشان داده شده است:
ممکنه باور نکنید ! اما درست است هسته STM8 تنها 6 رجیستر دارد که خیلی شبیه به رجیسترهای خانواده 6800 محصول موتورلا است. مقایسه کنید با AVR که 32 رجیستر دارد ، خوب قطعا مدیریت 6 رجیستر خیلی سادهتر از 32 رجیستر است البته در برنامهنویسی اسمبلی ! خوب معماری CISC زیاد با زبان برنامهنویسی C راحت نیست ! تا حالا اینطور بهش نگاه نکرده بودید ؟ که نرم افزار زیاد با سخت افزار راحت نیست ؟ اما چرا ؟
معمولا در زبان C برای آدرس دهی ( در تبدیل به زبان اسمبلی ) به شکل ” اشارگر استک + آفست ” استفاده میشود، مثلا به دستور جهنمی ( برای پردازنده های CISC ) زیر دقت کنید
1 | ADD A, ($ 10,SP) |
در واقع پردازنده باید محتویات حافظه اشارگر پشته + 0x10 را با رجیستر ACCUMULATOR جمع کنه و نتیجه رو داخل ACCUMULATOR قرار بده ! غالب آدرس دهی ها توی برنامه C به این شکل انجام میشود ! همین باعث میشه که پردازندهای CISC با زبان سی راحت نباشند!
اینم از اون حرفا است ها ؛ سخت افزار مناسب نرم افزار ؛ ولی خوب امروزه دیگه دوره ؛ دوره نرم افزاره.
یکی از اتفاقات دیگهای که توی طراحی مجدد ST7 دیده شده است ، این که ظاهرا هنگام اتفاق افتادن یک اینتراپت ، رجیسترهای پردازنده که 6 تا هستند باید Push شوند. در حالت عادی این Push نرمافزاری اتفاق میافتد که 18 سیکل ساعت زمان لازم دارد، در STM8 این کار به صورت سختافزاری انجام میشه و در واقع با هر اینتراپت 18 کلاک و 9 بایت از Stack صرفه جویی میشود.
از طرفی امکان ضرب دو عدد 8 بیتی علامت دار و هم چنین تقسیم عدد 16 بیتی بر 8 بیتی به صورت سخت افزاری به پردازنده اضافه شده است که عملکرد پردازنده را در محاسبات ریاضی بهبود بخشیده است.
چالش سرعت و معماری CISC در میکروکنترلر STM8
سرعت اجرای دستورات یکی از پارامترهای مهم توی انتخاب هر پردازنده و میکروپردازندهای است. برای همین هر روز شرکتها سعی میکنند پردازندههایی با کارایی بهتر و سرعت بالاتر رو ارائه کنند . اما همانطور که قبلا اشاره کردیم معماری CISC مقداری قدیمی است و دست و پاگیر . همانطور که احتمالا میدانید در این معماری بر خلاف معماری RISC هر دستور اسمبلی برای اجرا شدن نیاز به چند سیکل ماشین دارد در نمونههایی قدیمیتر هر 12 سیکل ماشین یک دستور اسمبلی را اجرا میکند که در نمونه های جدیدتر وضعیت خیلی بهتر شده است اما کماکان برای برابری با RISC نیاز به کلاک چند برابر است !
شرکت ST اما از خلاقیتهای خوبی برای بالابردن راندمان STM8 استفاده کرده است.
همانطور که اطلاع دارید، برای اجرای هر دستور اول باید اون دستور از حافظه خونده بشه، بعد پارامترهای اون خونده بشه البته در صورتی که پارامتر داشته باشه. معمولا دسترسی به حافظه فلش و البته رم توی میکروکنترلرهای 8 بیتی به صورت 8 بیتی است. در عمل این باعث میشه مثلا برای اجرای یه دستور Jump نیاز باشه که 4 مرتبه از حافظه Flash دیتا برداشت کنیم اگر فرض کنیم هر بار خوندن اطلاعات از فلش یک سیکل ماشین نیاز داشته باشه ، فقط لود یه دستور توی رجیسترها 4 سیکل ماشین لازم داشته باشه !
اما توی میکروکنترلر STM8 این مشکل به این صورت حل شده که باس دیتای Flash به صورت 32 بیتی طراحی شده ، یعنی با یه سیکل ماشین 4 بایت خونده خواهد شد.
این باعث میشه که بارگذاری دستورات از حافظه فلش 4 برابر سریعتر انجام بشه.
اما PipeLine به چه دردی میخوره ؟ برای این که بررسی کنیم چطور PipeLine عملکرد میکروکنترلر رو بهتر میکنه باید ببینم برای اجرای یک دستور در سطح سختافزار چه اتفاقاتی میافته. برای اجرای یک دستور لازمه که سه مرحله کار انجام بشه که به ترتیب عبارتند از
- واکشی دستور از حافظه فلش
- دکد و آدرس دهی
- اجرا
برای اجرای هر دستور اسمبلی باید سه مرحله فوق انجام بشه. توی پردازنده های RISC هر سه مرحله در یک سیکل ماشین انجام میشه ، اما در پردازنده های CISC با توجه به یکی بودن باس داده و دستور چنین چیزی ممکن نیست، شرکت ST با اضافه کردن یک PipeLine سر مرحلهای در واقع کاری کرده که تروپوت(ریت خروجی) در یک سیکل انجام بشه ! اما چطور ؟ برای روشن تر شدن قضیه به عکس زیر دقت کنید :
- F – خواندن دستور از حافظه
- D – رمزگشایی یا دکد دستور
- E – اجرای دستور
سیکل اول : دستور های NEG A و XOR A و بخشی از LD A از حافظه خوانده میشه ( چون باس دیتا 32 بیتی است 4 بایت از حافظه خوانده میشود )
سیکل دوم : دستور NEG A رمزگشایی میشه ، دنباله دستور LD A و دستور SUB A از حافظه فلش خوانده میشود.
سیکل سوم : دستور NEG A اجرا میشود ، دستور XOR A رمزگشایی میشه و دستور های INC A و LD XL و SRL A و… از حافظه خوانده میشود.
این روال با همین شکل ادامه پیدا میکنه، همونطور که مشخص هست، وجود پایپ لاین کمک میکنه که هر دستور در یک سیکل اجرا بشه. در واقع با انجام مراحل خواندن و آماده سازی کمک میکنه که اجرای دستورات سرعت بگیره و اینطور به نظر برسه که توی هر سیکل یک دستور داره اجرا میشه.
اما باعث افزایش چشم گیر راندمان میکروکنترلر میشود ! به شکلی که به صورت تقریبی با کلاک 24 مگاهرتزی میتوان انتظار اجرای 20 میلیون فرمان در ثانیه را داشت.
اگر فرصتی پیش باید و دوستان و دنبال کنند ها علاقه داشته باشند، در مقاله،ی به مقایسه میکروکنترلر STM8 و AVR خواهیم پرداخت.
درود به دوستان سیسوگی
من بصورت مجله وار نه تخصصی وقتی درباره معماری های مختلف هر شرکت میخوندم توی بیشتر اوقات معماری های سیسک اینتل و ای ام ادی از رقبای خود بهتر بودند و معماری x86 اینتل که سیسک هست بخاطر توان پردازشی و مصرف بهتر رقبای چون IBM power,68k و دیگر معماری های ریسک هم دوره بهتر ولی هنوزم معماری های اینتل و AMD خیلی خیلی بهتر از معماری ارم کار میکنند
ایا باز هم میشه گفت ریسک از سیسک بهترع؟؟؟ یا این برتری ها فقط در تبوری و روی کاغذ هست
و خیلی خیلی ممنون میشم که سیسوگ پست و نوشته هایی در مورد که به زبان ساده تر و قابل فهم تر باشه
۱ معماری هاروارد
۲ فون نویمان
۳ پایپ لاین
۴ بررسی و مقایسه معماری ریسک و سیسک
منتظر پست ها در این باره هستم
سلام
زئوس عزیز و سایر صاحب نظران برای مطالعه مواردی که در رابطه با تسلط بر معماری ها گفتید، چه منابعی رو برای مطالعه پیشنهاد میکنید که برای یک شخص الکترونیکی مناسب باشه و زیاد وقتش رو نگیره.
سلام دوست عزیز
امیدوارم که حالتون خوب باشه
کتاب و مقالات زیادی در مورد معماری و نحوه عملکرد میکروکنترلرها و کانسپت های مرتبط به آن هست که فقط لازمه کمی جستجو کنید
مثلا کتاب
https://www.google.com/books/edition/The_Designer_s_Guide_to_the_Cortex_M_Pro/UVieEAAAQBAJ?hl=en
سلام ممنون بایت مقاله و توضیحاتتون. ی سوال داشتم ک شاید ارتباط چندانی با موضوع تاپیک نداشته باشه ولی ممنون میشم راهنماییم کنید.
من قبلا با AVR توی محیط کدویژن فقط با ADC(در حد ابتدایی و کدویزارد) و السیدی کاراکتری و واحد ورودی/خروجی کار کردم. بعد همینارو بردم توی محیط های اتمل استودیو و اونجا براشون کد نوشتم.
تقریبا نزدیک 2سال از برنامه نویسی میکروکنترلر ها دور بودم. الان دوباره میخواستم شروع کنم! دیدم که از لحاظ قیمت خیلی به میکروکنترلرهای ARM نزدیک شدن و اینکه پلتفرم آردوینو نسبت به قبلا خیلی فراگیرتر شده و طرفدارای خیلی بیشتری پیدا کرده… بطوریکه میشه گفت کمتر پروژه ای رو میشه پیدا کرد که با آردوینو انجام نشده.
الان واقعا گیج شدم. نمیدونم برنامه نویسی AVR رو بصورت عمقی مثل قبلا ادامه بدم یا اینکه برنامه نویسی و کار با میکروکنترلرهای سری mega رو توی محیط اردوینو در قالب بردهای arduino UNO از سر بگیرم؟!
و بجای وقت گذاشتن برای یاد گیری عمقی avr برم سراغ میکروهای arm و پتانسیل و تمرکزم رو بذارم تا این رو بصورت عمقی کار کنم؟؟؟
واقعا موندم که باید چیکار کنم.
از جهتی avrها خیلی وقته که توی بازار هسن و تقریبا دیگ قدیمی شدن… از جهت دیگه قیمتشون تقریبا در بعضی موارد با برخی از میکروهای arm برابری میکنه…
سلام دوست عزیز
این سوال ممکنه سوال خیلی های دیگه باشه !
ببینید همونطور که توی مقاله آردوینو خوب، بد، زشت ! همه چیز درباره آردوینو یک سری واقعیت ها رو در مورد آردوینو گفتیم – در واقع آردوینو اصلا چیز بدی نیست و استفاده ازش هم به نظرم هیچ مشکلی نداره (قابل توجه اونهایی که میگن آردوینو چیه دیگه در حد بچه بازیه باید بگم توی سال ۲۰۱۲ با آردوینو ماهواره ساخت و ۲۰۱۴ پرتابش کردن ! اون چیزی که باعث موفقیت یا شکست میشه ابزار نیست بلکه دانش شماست، پروژه ardusat رو سرچ کنید).
اما یه سوال ساده، از خودتون بپرسید اگر پروژه ای بود که به شکل آماده نتونستید توی آردوینو پیداش کنید(مثلا راه اندازی آیسی یا سنسور خاص) آیا قابلیت اینو دارید که بتونید خودتون پیاده سازیش کنید؟ این میشه اون جایی که باید به یادگیری عمیق میکروکنترلر فکر کنید! یا این که اگر نمونه کدی که برای آردوینو نوشته شده بود اونطور که باید کار نمی کرد ! آیا قادر هستید مشکل کد رو متوجه بشید و حلش کنید !!!
دقت کردید دیگه گفتم میکروکنترلر فرق چندانی بین avr و arm قائل نشدم چون مثلا واحد spi تو هر میکروکنترلر یک جور کار میکنه تنها برخی میکروکنترلر ها قابلیت کاستوم کردن کمتری دارن برخی بیشتر ! پس درک شما از سخت افزار و نحوه عملکرد اون باعث میشه که بتونید کارهای پیچیده ای رو انجام بدید که دیگران قادر به انجامش نیستند
این که از چه پلتفرم و میکروکنترلری میخواید استفاده کنید خیلی برمیگرده به این که میخواد تا کجا پیش برید! چه کارهایی میخواید انجام بدید و به مسائل با چه جزییاتی نگاه کنید!
ممنون بابت راهنماییتون…
راستش بصورت کلی و با در نظر گرفتن همه ی جوانب, نه این قابلیت رو ندارم که بتونم یه سنسور یا آیسی که براش لایبریری نیست رو از صفر راه اندازی کنم!
راستش میخوام توی این زمینه کار کنم! برای شروع نه بصورت فریلنسری, بلکه توی شرکت هایی که توی زمینه الکترونیک و میکروکنترلر کار میکنند. ولی نمیدونم چیکار کنم, نمیدونم باید چیا بلد باشم, چه میکروکنترلرهایی رو بلد باشم. اصلا نمیدونم بازار برنامه نویسی میکرو چطوره و آیا میشه بهش به عنوان یک شغل نگاه کرد یا ن…؟!
چندتا آموزش ویدیویی برای ARM خریدم ولی راستش زیاد متوجه نمیشم, یکم گنگ هسن… مثلا من طرز کار انواع ارتباطای سریال رو نمیدونم. وقتی این اموزش هارو میبینم, مستقیم رفتن و توابع CMSIS رو توضیح دادن و فرض رو بر این گذاشتن که مخاطبی که میاد سراغ ARM , به بدیهیات برنامه نویسی میکروکنترلر که همون برنامه نویسی یک میکروکنترلر 8بیتی مثل AVR هست, مسلطه. بخاطر همینه که گاهی اوقات فکر میکنم avr رو یاد بگیرم تا زمینه ی خوبی داشته باشم, حتی با اینکه یکم قدیمی شده و این روزا هم قیمتش نجومی شده.
از جهتی الان 23 سالم تموم هس و با خودم میگم شاید برای ورود به این حرفه و شغل دیر باشه.
قبل از هر چیزی باید بگم هیچ وقت برای یادگیری دیر نیست، ۲۳ که سنی نیست تازه اول راه هستید و باید انگیزه بالایی داشته باشید.
بعد از اون باید بگم درست متوجه شید – باید بیس میکروکنترلر رو یاد بگیرد بعد برید سراغ لایه هایی بالایی نظیر کتابخانه های سطح بالا – اینطوری خیلی بهتره – این که دیدی نداشته باشید نسبت سیستم قطعا در اینده دچار مشکلتون میکنه مخصوصا وقتی که چالش ها پیش بیاد.
در مورد بازار برنامه نویسی میکروکنترلر هم باید بگم به نظرم پتانسبل خوبی برای جذب شدن وجود داره و الان بیشتر تعریفی که ما از الکترونیک داریم برمیگرده به کار با میکروکنترلر
سلام وقتتون بخیر.
ممنون از اینکه وقت گذاشتین و راهنماییم کردین.
در نهایت به نظرتون به میکروکنترلرهای AVR سری مگا شروع کنم؟
سلام خواهش میکنم دوست عزیز
بله به نظرم سری مگا یه نمونه خوبه برای شروع چون بیشتر سخت افزار های لازم رو داره.
خیلی خیلی مقاله ارزنده نوشتید.
تشکر از شما
سلام .
ابتدا میخواستم از مقاله خوبتون تشکر کنم .
راستش من مقداری با avr کار کردم . به نظرم میکرویی هست که برای اسمبلی و سرعت بالا طراحی شده ، میکروی خوشدستی هست و من هم ازش خوشم میاد. ولی با این توضیحاتی که در مورد stm8 دادید و یکسری مطالبی که خودم خوندم فکر نمیکنم به راحتی avr بشه باهاش اسمبلی نوشت و به اون سرعت و کارایی برسه به خاطر اینکه به نظرم میاد ساختارش یک پیچیدگیهایی داره و ساختار هموار و سر راستی نداره ، به خصوص اینکه توی مقاله ذکر کرده کلا 6 فایل رجیستر داره . و کلا به نظرم برای اسمبلی و سرعت اجرا avr بهتره …آیا همینطوره؟
خواهش میکنم دوست عزیز !!
امم خوب بله در واقع این میکرو زیاد برای اسمبلی مناسب نیست مخصوصا با وجود پایپ لاین ؛
میکروهای مدرن جوری ساخته میشن که برای زبان سی بهینه شده باشند ؛ البته دستورات اسمبلی پیچیده ای نداره ولی کم بودن تعداد ریجیستر های پردازنده میتونه مشکل ساز بشه.
مرسی لطف کردید.
خواهش میکنم دوست عزیز
سلام
خیلی خوب بود
واقعا ممنونم!
فقط من یه چیز رو متوجه نشدم!
دستور اسمبلی زیر
ADD A, ($ 10,SP)
که توی پردازنده های اینتل که اونام از جنس cisc هست خیلی رایجه!
اتفاقا اونام خیلی از آدرس دهی نسبی استفاده میکنن!
مثلا برای دسترسی به پارامتر های ارسالی به یک تابع که توی پشته پوش شده از آدرس دهی نسبی استفاده میکنند!
سلام خواهش میکنم دوست عزیز
در واقع این یه مثال بود که چقدر میتونه پردازنده رو به چالش بکشه (در سطح طراحی سخت افزار) نه این که قادر به انجام اون نیست
در ضمن همین آرم که مثال میزنید Cortex-M ؛ راندمانش 1.25 هست ؛ یعنی مقداری بالاتر از 1 ؛ واقعا فکر میکنید چرا ؟
==================
درود
سرعت یک میکرو stm32f103 با 72 مگ سرعت حدود 90 مگاهرتز هست؟ ولی فکر میکنم احتمالا این عدد مربوط به معیار تست بنچ مارک dhrystone باشه که تو دیتاشیت هم نوشته DMIPS/MHz (Dhrystone 2.1)و در عمل فکر نکنم بیشتر از 72 مگ سرعت داشته باشه و توی سری cortex m3 شرکتای دیگه مثل lpc1768 اصلا تو دیتاشیت حرفی از عملکرد بالاتر از کلاک cpu گفته نشده.
خوب فکر میکنم اشتباه برداشت کردید ؛ من کی گفتم کلاک بالامیره خخخ ؛ حرف اینجا سر راندمانه ؛ یعنی هر مگاهرتز تا 1.25 میلیون دستور رو میتونه اجرا کنه ؛ این خیلی فرق میکنه با اون چیزی که شما برداشت کردید ؛ اتفاقا راندمان توی 1768 حتی از stm32f1 هم بالاتره فکر میکنم (البته اینطور که به یاد دارم)
بسیار عالی
خواهش میکنم دوست عزیز.
“ برای اجرای هر دستور اسمبلی باید سه مرحله فوق انجام بشه. توی پردازنده های RISC هر سه مرحله در یک سیکل ماشین انجام میشه ، اما در پردازنده های CISC با توجه به یکی بودن باس داده و دستور چنین چیزی ممکن نیست، شرکت ST با اضافه کردن یک PipeLine سر مرحلهای در واقع کاری کرده که اجرای هر دستور در یک سیکل انجام بشه ! اما چطور ؟ برای روشن تر شدن قضیه به عکس زیر دقت کنید : “
در پردازنده های RISC هم این سه مرحله در سه کلاک انجام میشه اما بدلیل همون PipeLine هست که میگن دستورات در یک کلاک انجام میشه. یعنی در واقع اجراشون در یک کلاک هست اما مراحل F و D هم وجود داره و هرکدام در یک کلاک حداقل انجام میشه، البته حتی در همین معماری RISC به طور مثال Cortex-M هایی که دارای دستور تقسیم هستن دستور تقسیم در چندین کلاک انجام میشه حدودا ۱۲ کلاک.
در معماری CISC اینطور نیست دلیل آن هم پیچیدگی اجرای دستورات هست که در یک کلاک نمی توانم انجام بگیرد نه اینکه باس داده و دستور یکی هستش.
قطعا این سه مرحله در تمام پردازنده ها وجود داره ؛ ولی این که این سه عمل در چند سیکل انجام شود ؛ خود جای بررسی دارد ؛ بله درسته برخی پردازنده های RISC نیز داری Pipline هستند ولی نه همه ؛ به عنوان نمونه AVR پایپ لاین نداره !
در ضمن همین آرم که مثال میزنید Cortex-M ؛ راندمانش 1.25 هست ؛ یعنی مقداری بالاتر از 1 ؛ واقعا فکر میکنید چرا ؟
در مورد CISC فرض کنید دستوری قراره مقداری از حافظه رم رو با یک مقدار ثابت از روی فلش جمع کنه ! میشه بگید کند بودنش آیا به دلیل یکی بودن باس ها هست یا نه ؟
چند تا مورد جالب در این مقاله دیدم.
یکی این که ارتباطی بین فوننیومن یا هاروارد بودن و CISC یا RISC بودن وجود نداره.
دو این که طبق مستندات خود ST و شماتیکهایی که ارائه داده، معماری STM8 هاروارده، نه فوننیومن.
سه این که به طور کلی این غلطه که بگیم CISC قدیمی و کنده و پایپلاین اومده که بهینهش کنه! مگه نه این که اکثر پردازندههای RISC امروزی پایپلاین دارن؟ و مگه معماری instruction set اینتل از دههی ۷۰ تا حالا دستنخورده مونده که بگیم CISC قدیمیه و RISC جدید؟ و مگه طبق معیار درایاستون، عملکرد Core i5 اینتل ضعیفتر از آرم همترازشه؟
بسیار خوشحالم که خوانند هایی این چنین نکته بین و دقیق داریم 🙂
در مورد اول و دوم کاملا حق باشماست و نوشته اصلاح شد ؛ من توی ویکی پیدا خوندم که ST7 معماری فون نیومان داره و هم چنین نوشته بود که stm8 تکامل یافته ST7 هست ، فکر کردم که اگر اینطور باشه باید معماری رو هم به ارث برده باشه که بله اینطور نبود و STM8 از معماری هاروارد استفاده میکنه – متشکرم برای این که تذکر میدهید و خطا های ما رو اصلاح می کنید.
در مورد سوم ؛ باید عرض کنم که فکر میکنم معماری CISC یک معماری قدیمی است به لحاظ طراحی عرض میکنم و وقتی RISC از بهبود CISC به وجود اومده و کاستی های اونو جبران کرده پس RISC میشه معماری جدیدتر نسبت به CISC !
در ضمن من هم توی مقاله نگفتم PipeLine اومده که معماری CISC رو بهینه کنه ؛ در واقع حرکت هوشمندانه ای بوده که شرکت ST برای بهبود عملکرد STM8 بکار برده دقیقا منظور اینه ؛ بله پردازنده های جدید که معماری RISC دارند هم از PipeLine استفاده می کنند نمونش همین ARM !
خیلی متشکرم ?
در مورد پایپلاین، حق با شماست.
در مورد معماری CISC و RISC، چیزی که دیدم، اینه که ظاهرا طرز فکر رایج و نهچندان درستی مبنی بر برتری یکی به اونیکی وجود داره؛ در حالی که به نظرم چنین حرفی غلطه و هر کدوم کاربرد خودشو داره (همونطور که آرم و اینتل هر دو پرقدرت در بازارن). به خاطر همینه که با الفاظی مثل قدیمی و جدید یا بهبودیافته در این مورد مشکل شخصی دارم ?
🙂
قطعا همینطور که هر کدوم کاربرد خاصی دارند ؛
خوب فرض کنید وقتی میگیم جدید منظور اینه که طراحیش بعد از طراحی اون یکی بوده :دی
جالب بود
ممنون
خواهش میکنم دوست عزیز 🙂
ممنون
بسیار دیدگاه جالبی درباره این میکروکنترلر ارائه دادید و امیدوارم این اطلاعات ادامه پیدا کنه.
خواهش میکنم دوست عزیز
ما هم امیدواریم
سلام بی صبرانه منتظر مقایسه شماازavrوstm8هستیم
سلام دوست عزیز
بله انشالله در دستور کار قرار داره. متشکرم برای توحه شما 🙂