توصیه شده, مسابقه

مسابقه اول : درک سخت افزار

مسابقه سیسوگ
مدت زیادی از مسابقه اول (لینک مسابقه در کانال تلگرام) سیسوگ در تلگرام می‌گذره و فکر کردم بهتره باز با یک چالش دیگه در خدمتتون باشیم این بار خبری از اتفاقات خارق العاده و بلک باکس نیست بلکه با یک سوال ساده‌تر چالش را پیش خواهیم برد، و اما چالش :  
کدام خانواده از میکروکنترلرهای 8051، PIC ، AVR ، ARM با فرکانس کلاک ۱ مگاهرتز برنامه زیر را سریعتر اجرا می کنند؟ و دلیل این امر چیست ؟
    کسانی که بتوانند توضیح دهند کدام معماری با سرعت بیشتری برنامه را اجرا می‌کند به قید قرعه یک عدد لاجیک آنالایزر ۸ کاناله ۲۴ مگاسمپل هدیه دریافت خواهد کرد. پاسخ را زیر همین مطلب کامنت کنید.(عجله کنید که تا پایان روز شنبه 5 بهمن ماه 98 فرصت هست😜). + احتمالا پاسخ های صحیح زیاد خواهند بود:)! پس قرعه کشی بین کامل ترین و جامع ترین پاسخ ها انجام خواهد شد.

و اما جواب چالش اول سیسوگ

و اما جواب ! واقعا کدام میکروکنترلر با کلاک ۱ مگاهرتز توانایی اجرای سریعتر برنامه فوق را دارد ! دوستانی اشاره کرده بودند که برنامه سی ملاک خوبی برای مقایسه نیست بله کاملا درسته اما اگر دقت کنید این برنامه صرفا یک فلوچارت از کاری است که باید انجام شود که بخاطر آشنایی بیشتر دوستان با زبان سی ، با این سینتکس نوشته شده است. برای پیدا کردن جواب سوال لازم است که گزینه های موجود را یکی یکی حذف کنیم تا به جواب چالش برسیم. تعدادی از دوستان اشاره کرده بودند که ۸۰۵۱ جواب است. اما واقعا ۸۰۵۱ سرعت بیشتری برای اجرای این چنین برنامه هایی دارد ؟ کلاک ورودی هسته 8051 همانطور که در تصویر فوق می بینید هسته ۸۰۵۱ برای اجرای هر دستور اسمبلی نیاز به ۱۲ کلاک ساعت دارد! یعنی اگر کلاک ورودی ۱ مگاهرتز باشد هسته ۸۰۵۱ قادر است ۸۳ هزار دستور در ثانیه اجرا کند! که خوب عدد بسیار کمی است و قطعا نمی تواند جواب مسابقه باشد.

میکروکنترلر PIC چطور ؟

تعدادی دیگری از دوستان میکروکنترلر PIC را برنده مسابقه اعلام کردند ، اما وضعیت این میکروکنترلر چطور است ؟ میتواند برنده مسابقه باشد ؟ همانطور که تعداد زیادی از دوستان اشاره کردند هسته PIC برای اجرای هر دستور اسمبلی نیاز دارد که کلاک ورودی را بر ۴ تقسیم کند. یعنی به ازاء‌ کلاک ورودی ۱ مگاهرتزی قادر است ۲۵۰ کیلو دستور را اجرا کند! کلاک هسته PIC همانطور که در تصویر بالا می بینید به این نکته به خوبی اشاره شده است(لینک). خوب پس این میکروکنترلر هم نمی تواند جواب باشد.  

ARM یا  AVR کدام یک ؟

تنها دو گزینه می ماند میکروکنترلر AVR و ARM – اما کدام یک سریعتر است ؟ هر دوی این میکروکنترلر ها کلاک ورودی مستقیما به هسته وارد می شد و برای اجرای هر دستور نیاز نیست که کلاک شکسته شود. و اغلب دستوات اسمبلی را هر دوی این میکروکنترلر ها در یک سیکل ماشین اجرا می کنند. تازه از این که بگذریم میکروکنترلر ARM چیزهایی دارد که AVR ندارد – مثل این که ۳۲ بیتی است و دارای PipeLine است (اگر نمیدانید پایپ لاین چیست مقاله با مفهوم Pipeline بهتر آشنا شوید و میکروکنترلر STM8 از کجا اومد و چه قابلیت هایی داره را مطالعه کنید).  

آیا ۳۲ بیتی بودن مزیت است ؟

خوب البته معلوم است که ۳۲ بیتی بودن خوب است اما اگر به برنامه نگاه کنید هیچ عملیاتی نداریم که نیاز به محاسبات و یا ذخیره سازی ۳۲ بیتی داشته باشد. پس در این مثال ۳۲ بیتی بودن برای میکروکنترلر ARM مزیت حساب نمی شود.  

پایپ لاین چطور ؟

خوب اگر مقالات مربوط به پایپ لاین را مطالعه کرده باشید حتما میدانید که پایپ لاین کمک میکند تا پردازنده برنامه را سریعتر اجرا کند ! و همانطور که میدانید میکروکنترلر ARM با هسته Cortex-M3 دارای یک پایپ لاین ۳ مرحله‌ای است. پایپلاین آرم به لطف وجود همین پایپ لاین است که میکروکنترلر ARM قادر است بیشتر دستورات را در یک سیکل ماشین اجرا کند و دقیقا پاشنه آشیل جواب سوال همنجاست. پایپلاین حتی کمک میکند پرفومنس پردازنده از ۱ بیشتر باشد و برای هسته M3 معادل ۱٫۲۵ باشد.  
اگر احتمالا تا الان مطمئن شده اید که جواب سوال ARM است. باید بگم که اشتباه می کنید و جواب سوال میکروکنترلر AVR است.
اما چطور ؟ این موضوعی است که انتظار داشتم دوستان به آن اشاره کنند اما متاسفانه در هیچ یک از کامنت ها به آن اشاره نشد اما بین دوستانی که کامل ترین توضیح رو دادن قرعه کشی خواهیم کرد. قضیه دقیقا به وجود if در برنامه بر می‌گردد. اجرای دستورات شرطی باعث می‌شود که پایپ لاین خالی بشه اگر به تصویر پایپ لاین که بالا هم گذاشتیم دقت کنید branch ها رو با خط تیره به اول پایپ لاین وصل کرده و حداقل دو سیکل ماشین برای پرشدن مجدد لازم است و همین خالی و پر شدن پایپ لاین باعث میشه که میکروکنترلر AVR جلو بیفته. Arm Vs AVR At 1mhz عکس بالا هم به خوبی عملکرد هر دو میکروکنترلر رو نشان میدهد و به خوبی مشخص است که میکروکنترلر AVR عملکرد بهتری دارد و باید AVR را اعلام کنیم.     و اما برنده – بین تمام کامنت های دریافتی ۴ کامنت صحیح با توضیحات قابل قبول وجود داشت – یکی کامنت حسین و دوم کامنت محمد هشیار بود و سوم کامنت محمد یوسفی و کامنت چهارم هم مربوط به رضا بیات است. با قرعه کشی که انجام دادیم برنده آقای حسین شدن با کامنت:
با سلام . سپاس بابت کاربسيار خوبي که انجام داديد . جايزه ش خيلي بدرد بخوره!!! [نيشخند][چشمک] ولي جداي از شوخي اينکار باعث ميشه افراد ديتاشيت رو مطالعه کنن و باعث افزايش سطح علمي ميشه که خودش جاي تقدير داره . و اما جواب: قبل از اينکه جواب رو بگم بايد بگم در مورد آرم چون PLL داره نميشه گفت که فرکانس هسته چند ميشه در مورد pic و 8051 مقسم فرکانس داخلي دارن. بنابر اين باتوجه به اينکه صورت مسئله نبايد مبهم باشه حدس منطقي اينه که منظور فرکانس هسته 1 مگاهرتز هست . اين از اين . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ و اما جواب اينه که AVR از همه سريعتر است . @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ دليل برتري avr اينه : معماري هسته AVR اين طوره که بسياري از دستورات که مربوط به فايل رجيسترها هستن فقط در يک سيکل ساعت واکشي و اجرا ميشن .( ديگه از اين سريعتر نميشه که !!!! ) و مورد ديگه اينه که AVR تعداد زيادي فايل رجيستر داره !!! دقيقا 32 تا و براي هرکاري که شما بخواهيد روي اين فايل رجيسترها انجام بده يک دستور اسمبلي داره ه همين علت تعداد دستورات AVR نسبت به بقيه ميکروها زياد تره و حدود 130 تا دستور ميشه و همين باعث ميشه در تعداد زيادي از کارها فقط يک دستوراسمبلي ( يک پالس کلاک ) براي انجامش احتياج باشه( و کمتر نياز باشه از رم استفاده بشه که 2 کلاک مصرف ميکنه ) . با توجه به اينکه فرکانس کلاک هسته AVR همون فرکانس کريستال هست ، به وضوح مشخص هست به چه سرعتي دستورات رو انجام ميده !! و اما در مورد 8051( احتمال زياد مدلهاي قديمي AT89C51-55 مدنظر بوده چون بيشتر ملت اينا رو ميشناسن ) اينطور نيست که بشه مستقيم با يک دستور مثلا r1 , r5 راکپي کرد .و بايد حتما از رجيستر A يا اکومولاتور استفاده کرد . همين يعني کند تر شدن اجراي دستورات . در مورد pic هم داستان اکومولاتور صادق هست . در مورد Arm چون من با stm32 کار کردم ، اون رو ميگم : دستورات اسمبلي stm32 پارامترهاي بيشتري نسبت متغير به ميکروهاي 8 بيتي داره و روي متغير هاي 32 بيتي بهتر از 8 بيتي عمل ميکنه ( اين مورد رو خودم با بررسي کد اسمبلي برنامه حين ديباگ به چشم ديدم )و تعداد زيادتري پالس کلاک براي اجرا احتتياج داره و معمولا به زور پايپ لاين اجراي زمان اجراي هر دستور را به يک کلاک ميرسونن .!! اما باز هم در حين ديباگ يک برنامه ديدم که براي 1 کردن يک بيت پورت 4 دستور و براي 0 کردنش 3 دستور استفاده شده بود …تازه اين عملکرد با بهينه سازي روي سرعت اتفاق افتاده بود بدون بهينه سازي 6 و 5 دستور طول ميکشيد .!!! البته کمپايلرها هم در سرعت مور هستن ولي اگر بخواهيم الگوريتم بالا را اسمبلي بنويسيم AVR سريعتره .

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

73 دیدگاه در “مسابقه اول : درک سخت افزار

  1. محمد بوشهری گفت:

    از نظرم نکته‌ای هست که از نظر پنهان مونده و اینکه در avr عملیت شیفت توسط دستور lsl انجام میشه که بار هر بار اجرای دستور فقط یک شیفت انجام میشه ولی در cortex-m3 درستور شیفت که باز هم lsl (شیفت چپ) پارامتر تعداد شیفت رو هم میگیر و هر تعداد شیفت مد نظر باشه(۱ تا ۳۲) رو تو یه کلاک انجام میده.بنابراین به مقدار bit در برنامه که تعداد شیفت هست هم بستگی داره اگه مقدار bit یک باشه avr جلو میوفته ولی اگر مثلا ۷ باشه avr باید ۷ بار دستور شیفت رو انجام بده ولی arm با یکبار انجام دستور عملیات رو انجام بده و فکر میکنم اونجا arm جلو بیوفته.

    1. زئوس Zeus زئوس Zeus گفت:

      ممنون برای توضیحاتتون :)‌
      البته لازمه اشاره کنم که دلایل دیگه هم وجود داره ! مثلا کستینگ ۸ بیت حافظه

  2. حسین گفت:

    سلام.
    لاجیک انالایزر امروز به دستم رسید .
    سپاس از زئوس گرامی و تمام دست اندرکاران سایت خوب سیسوگ.

    1. زئوس Zeus زئوس Zeus گفت:

      مبارکتون باشه 🙂
      خواهش میکنم – ممنون که خبر دادید

      1. حسین گفت:

        خواهش میکنم .

  3. Reza Poordana reza گفت:

    سلام
    تشکر فراوان برای این مطالب آموزنده.
    بهترین جنبه این جور مسابقات بعد آموزشی اون هست.
    برقرار باشید.

    1. زئوس Zeus زئوس Zeus گفت:

      ممنونم سلامت باشید 🙂

  4. مهدی گفت:

    سلام میزان mips بین میکرو کنترلرهای مخلتف مطرح نیست؟ اگر Arm با MIPS قوی تری میزاشتیم نتیجه فرق نمی‌کرد؟

    1. زئوس Zeus زئوس Zeus گفت:

      آرم در واقع میپس بالاتری داره نسبت به avr و مساله دقیقا شرایط موجوده

  5. گفت:

    خب سلام به همه هم رشته ای های عزیز . من همون حمید هستم که یک کامتنی پایین گذاشتم و نوشتم آرم سریع تره و یکم بجث هم کردم با آقای Zeus .( الان ی حساب باز کردم تو سایت اسمم الان انگلیسی می نویسه) قرار شد من بگم چرا انقدر مطمئن میگم متن بالا و مقایسه اشتباه هست حتی اگه توی سایت گفت و گو خارجی هم این مطلب باشه و جالب تر پیاده هم شده که میشد درست پیاده بشه !! و خب یک جایزه هم دوستان sisog لطف کنند بدن بمن . دوتا مبحث پیش میاد یکی علمی یکی اخلاقی .
    1- اخلاقی
    تو پاسخ جواب من zeus عزیز گفت تو بحث علمی کل کل نیست که درست هم گفتند پس بهتره من “خخ” ننویسم !
    دیدم الان دوستی نوشته بعضیا فکر می کنند آرم بلدند و به کلاس های آموزشی چیز گفتند بازم درست گفتند ولی من افتخار میکنم که دوره پیشرفته ARM پیش***************************** بصورت خصوصی یاد گرفیتم و الان هم با تیم ایشون همکاری می کنم و من فقط نقل قول میکنم انشاءالله کمی نداشته باشه البته با سند و مدرک و متاسفانه نمیتونم تصویر هم قرار بدم اینجا اگه مشید پست باز کنم میشد ولی تو کامنت فکر نکنم این قابلیت داشته باشه ولی سعی میکنم رفرنس سایت اصلی بدم .
    البته استاد عزیزم یبار گفت با کسی که رسانه دستش بحث نکن بخواد حرفت پخش نمیکنه و انگم بهت میزنن . ولی من اطمینان میکنم به همکاران عزیزم تو مجموعه سیسوگ .
    2- علمی :
    بریم سر اصل مطلب بله دوست عزیزمون به پایپ لاین اشاره کرد که فوق العادس ولی به چند مورد دیگه اشاره نکرد که پایپ لاین بد جلوه داد تو این مورد من تو کامت اولم موقع مسابقه گفتم معماری آرم داره میره به سمت اینکه مثل DSP بتونه پردازش کنه ولی کسی توجه نکرد . ما تو cortex یک موردی داریم به اسم branch speculation برای branch ها ، رفرنس بدم :
    http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/CACDJFCF.html
    ( کلا بخونیدش تا چیزای بیشتری هم دستگیرتون بشه )
    برای همین cortex-m3 هم هست که بررسی شده . خب این مورد اول که باعث میشه مثال pilpeline خالی شدن شما رد بشه با چیزایی که داریم .arm 6/7 که بررسی نمی کنیم !اینجا نوشتید ARM یعنی باید Cortex-m7 در نظر بگیری اصلا!( جلوتر اینکار می کنیم )
    از این بگذریم این تازه cortex-m3 هست ما تو m4 ی ورژن پیشرفته تر داریم از اونم رد میشم ! میخوام برم سر جاهای باحال تر یعنی ARM Cortex-M7 خب ما اینجا خیلی چیز داریم که الان بتونم برا همین مثال ساده بیارم ولی به یکی دوتاش بسنده میکنم اول اینکه ما باس instruction مون 64 بیتی شده یعنی دو دستور تو یک سیکل خونده میشن ! که اصن نداریم همچین چیزی تو بیقیه موارد خب این تازه اولش صبر کنید ما تو قسمت prefetch این ورژن جدید ی واحد خیلی خفن داریم که به قول خودشون penalty ش صفر هست تو پیش بینی کردن پرش ها ،یعنی خطا نمیره ! باعث میشه pipeline با داده درست پر بشه تازه اونم نه ی pipeline 3 مرحله ای ! دوتا pipeline سه مرحله به لطف باس 64 بیتی جدیدش .( دوستای گلم اگه در این مورد اطلاعات کافی ندارید بحث بیهوده نکنید برید درست بخونید )
    خب از اینا بگذریم بریم ببینیم اصن معماری آرم دیگه چی داره که من نوشتم این فوق العاده بهتر هست :
    نه فقط تواین مثال کلا فرض کنید ما شیفت n بیتی داریم تو مثال بالا هم نوشته :(۱<<bit); ( البته اینجا شیفت برعکس شد همون که نوشتم درست هست )
    خب حالا قشنگ تر میشه : وقتی شیفت 1 دونه باشه چیزی نیست مثل هم کار میکنند اما وقتی شیفت n بیتی میشه ما ی واحدی تو ARM داریم که برامون شیفت n بیتی رو انجام میده اونم با ی مکانیزم بسیار زیبا . اسم این واحد خوشگل چیه ؟ ی سرچ بزنید 4 تا چیز خوشگل تر هم میبینی لااقل همش که من نمیتونم کامل و قشنگ اینجا توصیج بدم .
    مورد سوم هم خیلی پیشرفته تر از این موارد هست اصن دید اونجا موقع تبدیل ی همچین تیکه کدی به زبان اسمببلی چیز دیگه ای هست که باعث میشه اینجوری که دارید برنامرو می بینید پیادش نکنیم که اونوقت دیگه نگران پایپ لاین نباشیم ولی فکر میکنیم ما بلد این مورد سوم نیستیم و همینجور که همه داریم معادل اسمبلی در نظر میگیرم همون معال به سبک قبل از ARM در نظر بگیریم !

    5 مورد حداقل هست که میشه اینجا بررسی کرد اما همون مورد اول اینجا کافی بود . اگه واقعا کسی دنبال جواب باشه !
    " پیشاپیش بخاطر LC مترتون تشکر می کنم "
    D: -:)

    1. زئوس Zeus زئوس Zeus گفت:

      دوست عزیزم چند تا نکته را ذکر میکنم که فکر میکنم باعث شده ذهن شما کمی دچار ناآرامی بشه که به راحتی میشه این ناراحتی را در متنتون لمس کرد, اصلا ناراحت نباشید این صرفا یه بحث علمی هست و کسی اینجا به حریم شما وارد نشده

      این مسابقه نگفته که پایپ لاین یا آرم بد هست و AVR خوبه!

      این مسابقه سعی کرده یک چالش ذهنی ایجاد کنه در مورد درک لایه های پایین تر سخت افزاری و حتی نشون بده میشه کدی را تصور کرد، که سرعت اجرای آن در (حالت خاص) در یک AVR هشت بیتی سریعتر از یک میکروکنترلر ۳۲ بیتی باشه
      خب مسلمه که یک برنامه فقط شامل چند خط برنامه فرضی شبیه ما نیست و مطمئنا میتونه باعث بشه که ARM هم سریعتر باشه ولی موضوع نگاه ما و زاویه نگاه ما برای به چالش کشیدن دید ما از سخت افزار بوده
      سیسوگ رسانه ای است برای همه الکترونیکی ها و ما اونو محدود نکردیم شما هم می تونید مطالب خودتون رو اگر بنویسید به اسم خودتون در سیسوگ منتشر کنید و از اون موقع به بعد شما هم دارای تریبون و رسانه باشید 😎 تنها مساله ای که این وسط هست اینه که دانش کافی برای نوشتن داشته باشید و البته انگیزه اونو.

      در خصوص مورد اخلاقی – اون عبارت خنده بر میگرده به عبارت بعدش که نوشتم یعنی آخرین باری که مطمئن حرف زدم برعکسش ثابت شد و برام خنده دار بود این موضوع. آرزوی موفقیت برای شما و استاد عزیزتون دارم و با عرض پوزش به علت اینکه شاید حتی استادتون هم راضی نباشه بنده اطلاعات ایشون را از نوشته شما حذف کردم …
      البته توی کامنت هم امکان ارسال عکس به شکل لینک هست 🤓

      arm pipline

      خوب این لینکی که فرستادید دقیقا چیزی رو داره میگه که توضیح دادم الان مشکلش کجاست ؟ قسمت های های لایت شده رو مجددا بخونید. ما اینجا m3 رو بررسی کردیم چون بیشتر با این خانواده کار میکنند و میشناسند و برای آموزش هم از همین خانواده استفاده میشه – بله ارم مدل های زیادی داره با امکانات خیلی متفاوت حتی مدل هایی هم هستن که در کنار خودشون fpga هم دارن 🧐 خوب که چی چه ربطی داره به موضوع مساله مطرح شده در مسابقه ؟

      موضوع مطرح شده موضوعی است که حالت خاصی رو پیش میکشه اگر نه اگر بخوایم به شکل کلی به موضوع نگاه کنیم خوب اره arm پردازنده خوبی است هر روز هم داره پیشرفت میکنه و خیلی ها هم دارن استفاده میکنن – چرا فکر کردید ما داریم ثابت میکنیم که avr بهتر از arm است ؟ هر پردازنده ای برای مقصودی و کاری و هدفی طراحی شده و داره استفاده میشه 🤨 ! آره پردازنده هایی هم هستن که ۴۰۹۶ بیتی هستن و مطمئن هستم حتی اسمش رو هم نشنیدید چه برسه به کاربردشون رو
      در ضمن در مورد شیفت (فرض که زبان سی باشه ) خوب avr هم همین واحد زیبا رو داره 😊 و عملیات شیفت رو توی یک سیکل انجام میده

      راستی LC مترتون داره چشمک میزنه و برای اینکه به ادرس شما ارسال بشه به یک همت شما بستگی داره که دست به کار بشید و سعی کنید مقایسه را هم عملی انجام بدید همونکاری که ما کردیم/

  6. Mohammad گفت:

    الان داشتم نظرات رو میخوندم….متاسفانه خیلی کسانی که الان اومدن نظر دادن و به ظاهر آرم بلدند هیچی درکی نسبت به سخت افزارش ندارن! این واقعا بد نیست؟ وقتی آموزشگاه ها به جای یاد دادن اصولی میان تمرکز رو میزارن روی HAL بیش از این هم انتظاری نیست!

    1. زئوس Zeus زئوس Zeus گفت:

      بله متاسفانه – ای کاش عمیق تر جزییات سخت افزاری تدریس میشد

  7. محمد گفت:

    به نظرم این چیزی که میگید اصلا قضاوت خوبی نیست! پایپلاین آرم قابل غیر فعال سازی هست توی 8 مگاهرتز. پس عملا توی بدترین حالت آرم میشه مثل AVR.

    1. زئوس Zeus زئوس Zeus گفت:

      اول بفرمایید چطور میتونیم پایپ لاین رو غیرفعال کنیم ؟ آیا بعد از غیرفعال کردن پایپ لاین همچنان دستورات رو در یک سیکل ماشین اجرا میکنه ؟
      بعید میدونم

      1. محمد گفت:

        رجیستر FLASH_ACR رو بررسی کنید.
        قبلا که آرم کار میکردم یه مقاله ای مطالعه کردم اینکه prefetch buffer همیشه چیز خوبی نیست و بهتر با احتیاط ازش استفاده کنیم. به این قضیه برای طراحی یک برنامه سریع نیاز داشتم … هرچند به طور کلی برنامه به نتیجه نرسید.:)
        بعد اینکه این دوست برندمون که فرموندن توی 4 سیکل باید اجرا بشه یک تغییر پایه … بظرم اصلا حرف علمی نیست و من اولش شک کردم شاید دارم اشتباه میکنم اما خب بررسی کردم دیدم حرفشون یکم بدون پشتوانه هست… بستگی به طراحی و برنامه داره. اتفاقا آرم خیلی از جاها مثل رمزنگاری از اونجایی که میتونه بعضی عملیات ها رو ترکیبی در یک سیکل انجام بده صورت میگیره و از طرفی توی ورژن های مختلف ما دستورات مختلفی هم داریم که گاهی همون دستورات موجود هستند ولی دستور جدید به اونها اضافه شده. دیگه خودتون استاد آرم هستید سابقه خوبی دارید حتما میدونید!

        1. زئوس Zeus زئوس Zeus گفت:

          وقتی نوشتید که پایپ لاین رو غیر فعال کنید اول شک کردم بعد فکر کردم شاید منظورتون pll بوده باشه ، الان متوجه شدم منظورتون چیز دیگه ای هست
          در مورد کامنت برنده باید بگم حق با شماست ، همونطور که قبلا توضیح دادم هیچ کامنتی کامل بیان نکرده مساله رو ، از بین کامنت هایی که دلایل قابل قبولی ارائه کردند به قید قرعه یکی انتخاب شد، ک این بدان دلیل نیست که کل توضیحات کامنت درسته ، البته فکر کنم توی کامنت خودشون گفتن که گفته هاشون از ارم تجربی است

          1. حسین گفت:

            سلام .
            جناب زئوس .
            راستش این کاربر محترم که گفت :بررسی کرده که 4 دستور برای ست کردن پایه های stm32 حرف اشتباهی هست . رو زیاد جدی نگرفتم . ولی جواب شما به ایشون باعث شد یک بیشتر روی این موضوع دقت کنم .
            راستش ماجرا برمیگرده به کتابخانه nokia1661 lcd که برای avr منتشر کرده بودین .
            وقتی میخواستم به نسخه stm32 cortexm0 تبدیلش کنم نتونستم متوجه بشم چطور دستورات اینلاین اسمبلی رو استفاده کنم . برای همین به طور معمولی اون ها رو صفر و یک کردم و توی دیباگ حالت بهینه سازی روی سرعت دیدم که چند دستور استفاده شده . الان programing manual مربوط به stm32f103 رو نگاه کردم دیدم که دستورات صفر و یک کردن یک بیت رو خیلی واضح داره ولی یک موضوعی هست. اون اینه که اینکارو روی رجیسترهای R انجام میده .
            آأرس مطلب هم اینجاست : سند PM0056 از شرکت st.و موضوع 3.8 Bitfield structions .
            توی اینقسمت 2 تا دستور زیر رو معرفی کرده
            BFC{cond} Rd, #lsb, #width
            BFI{cond} Rd, Rn, #lsb, #width
            و مثالش هم ایناست .
            BFC R4, #8, #12 ; Clear bit 8 to bit 19 (12 bits) of R4 to 0
            BFI R9, R2, #8, #12 ; Replace bit 8 to bit 19 (12 bits) of R9 with
            ; bit 0 to bit 11 from R2
            حالا تنها راه حلی که برای صفر و یک کردن بیتهای پورت وجود داره اینه که با یک دستور رجیستر i/o را توی یکی از R ها بگذاریم .
            با دستور BFC یا BFI صفر یا یک کنیم و با یک دستور دیگه نتیجه رو توی I/O بگذلریم که در مجموع میشه 3 دستور!!!!
            راستش دستور مستقیمی پیدا نکردم که یک بیت از پورت را صفر یا یک کنه .
            و همینطور دستوری که بیت پورت را تاگل کنه .!!
            اگر اشتباه میکنم . لطفا به من خبر بدید .
            سپاس.

          2. زئوس Zeus زئوس Zeus گفت:

            سلام آقا بسته دیروز پست شد – رسید لطفا یه اطلاعی بدید.
            ببینید این موضوع خیلی برمیگرده به شکل برنامه نویسی – مثلا برای ست کردن یه بیت از یک پورت میتونید معادل اون بیت رو توی رجیستر BSRR از پورت بنویسید خوب این کار یک سیکل ماشین بیشتر لازم نداره
            و برای صفر کردن هم میتونید از رجیستر BRR پورت استفاده کنید.
            این دستوراتی که شما گفتید برای فعال و غیرفعال کردن مجموعه بیت است

          3. حسین گفت:

            سلام.
            سپاس بابت ارسال بسته .لطف کردید.
            چشم به دستم رسید اطلاع میدم .
            در مورد رجیستر BSRR و BRR :
            خب این دوتا هم رجیستر هستن . با چی باید یک بیتش رو 1 کرد؟!
            یا باید از عملگر =| استفاده کرد یا باید اسمبلی اینکارو کرد .این همون مسئله قبلی هست چیزی حل نشده !!!.
            دستور BFI رو که فکر کنم اشتباه برداشت کرده بودم .و ماجراش ظاهرا یک چیز دیگه ست .
            اما دستور BFC اگر پارمتر with رو 1 در نظر بگیریم میشه صفر کردن یک بیت دلخواه از رجیستر.
            ظاهرا cortex M0 ,M3 دستور یک کردن بیت دلخواه از رجیستر رو نداره .فکر کنم به کمک دستور not باید یک بیت از رجیستر رو 1 کرد .
            احتمالا برای همین تعداد دستورات اسمبلی برای ست کردن یک بیت از تعداد دستورات ریست کردن بیشتر میشه .
            سپاس جناب زئوس بابت وقتی که میگذارید .
            ولی من هنوز دستوری پیدا نکردم که مستقیم بیت یک پورت را صفر یا یک کنه .درک نمیکنم bsrr و brr چطوری در یک پالس ساعت بیت یک پورت رو تغییر وضعیت میدن .

          4. زئوس Zeus زئوس Zeus گفت:

            سلام
            ببینید این دو تا ریجیتر نیاز به or کردن نداره و شما مستقریم دیتا رو روش مینویسی مثلا برای صفر کن بیت ۳ ام به شکل زیر مینویسی
            portx->BRR = 8;
            همین کفایت میکنه و نیازی نیست or کنید برای یک کردم هم همینطور و جالبه بدونید باقی بیت ها بدون تغییر می مونن

          5. حسین گفت:

            سپاس لطف کردید .

          6. محمد گفت:

            بله دقیقا این کار ممکن هست درصورتی که فرکانس تا حد خاصی باشه این نکته مهمی هست و چند جای دیتا شیت گفته و یه جورایی به حضرت عباس قسم داده که بابا اگر فرکانس رو بالا میبرید ای تاخیر رو فعال کنید وگرنه به فنا میرید! 🙂 چون اینطور از ظاهر قضیه از مطالعه دیتاشیت میادبرخلاف تصور خیلی ها تمام قسمت های آرم مثلا 72 نیستن بلکه بعضی فرکانس پایینتری کار میکنن.
            البته بگم متاسفانه رفرنس منوال های ST جاهای نامفهوم زیاد داره…اینجا هم دقیقا به این رجیستر اشاره کرده و نگفته دقیقا داستان چیه و گفته صرفا با این میشه روشن و خاموش کرد.
            معمولا اینطور چیز ها رو توی یک داکیومنت دیگه به صورت مسئله محور توضیح میده.

          7. حسین گفت:

            سلام.
            کمپایلر gcc
            stm32 cortex m0
            استفاده از رجیسترهای BSRR و BRR
            بدون بهینه سازی
            https://www.mediafire.com/convkey/5fbf/zrsvrlxvqth6suczg.jpg
            بهینه سازی روی سرعت
            https://www.mediafire.com/convkey/7095/ce916qorwj5t5c4zg.jpg

  8. 8051 که یه پراسسر سیسک داره از پیک و ارم و ای وی ار که ریسک هستن سریعتر هست و تو یه دستور بدون خوندن مقدار پرت میتونه یه بیت از پرت رو تاگل کنه.

  9. کیان گفت:

    سلام به نظر بنده arm چون پردازش 32 بیتی دارد پس به طبع سرعت اجرا 4 برار میکرو های 8بیتی می باشد واستفاده از پردازش خط لوله ای نیز تاثیر زیادی در سرعت وکم مصرف بودن دارد

  10. Clooner گفت:

    سلام و ممنون از زحماتتون
    این کد ها روی arm سریع تر اجرامیشه. دلیلش ساختار داخلی ارم هست. عمل مکمل در معماری arm در یک مرحله اجرا میشه اما در بقیه موارد باید ۳ مرحله (خواندن ،تغییر بیت، نوشتن) انجام بشه . اما در arm برای ترکیب های منطقی بصورت رجیستر با سخت افزار اضافه دستور مستقل داره و کل اعمالی که بقیه تو ۲ یا سه مرحله انجام میدن تو یه مرحله انجام میده. امیدوارم جواب درست داده باشم 😄🤔🧐

  11. قدیر ایجی گفت:

    با سلام
    به نظر میرسه میکرو کنترلر های سری pic با توجه به معماری ساخت و نوع اعمال کلاک به سیستم با توجه به فرکانس این دستورالعمل را سریع تر اجرا نماید

  12. حمید عرب حمید گفت:

    خب آرم بخاطر معماری داخلیش و اینکه برای بعضی محاسبات و پردازش های خاص در VLSI اش بلوک های بخصوصی تعبیه شده این قابلیت داره که تیکه کدی که نوشته شده رو سریع تر از بقیه انجام بده ( آرمی که نوشتید حداقل ی سر و گردن بالاتر از میکروکنترلرهایی هست که معماریش به سمت معماری های DSP نرفته ). که خب این فقط یک قسمت و فرضا قسمت مربوط به شیقتش نیست که باعث میشه این برنامه سریع تر انجام بشه چندین بلاک باعث انجام این اتفاق میشن که البته بازم فقط مربوط به معماری VLSI اش نیست ،سمت مجموعه کدهاشم تو این امر دخیل ( که البته نرم افزار بدون سخت افزاری که بتونه اون رو پیاده کنه جور در نمیاد پس بر میگرده بهمون معماری داخلیش )

    بجای لاجیک آنالایزر LC Meter هم دادید که چه بهتر 🙂
    ( دس شما درد نکند .)

    1. حمید عرب حمید گفت:

      جدی الان جواب من قبول نکردید ؟ جالب شد .
      البته اگه چیزی که نوشتم متوجه نشدید که حرفی برای گفتن نمیمونه .

      1. زئوس Zeus زئوس Zeus گفت:

        الان شما همچنان فکر میکنید arm سریعتر برنامه رو اجرا میکنه ؟
        باشه مشکلی نداره یا علی کد اسمبی رو بفرست تست میگیریم – شاید ما داریم اشتباه میکنم :/

        1. حمید عرب حمید گفت:

          شاید نداره من حاضرم بدون کد حرفای شمارو با گفته های شرکت ARM و تست های گرفته شده عملی خودشون رد کنم اما فرض کنید من ثابت کردم شما دارید اشتباه می کنید اون وقت چی میشه ؟

          1. زئوس Zeus زئوس Zeus گفت:

            خخ توی کل عمرم تنها دو سه بار بدون تردید مساله ای رو بیان کردم که بعد ثابت شد اشتباه می کردم – نمیدونم چطور اینقدر محکم حرف میزنید ! ولی اوکی مسائل علمی که دیگه کل کل کردن نداره شما ثابت کنید! هم ما و هم خواننده های عزیز سیسوگ از دانش شما استفاده می‌کنیم و اگر حق با شما بود که یه دونه LC متر تقدیم شما می‌کینم
            البته دقت داشته باشید باید بتونید ثابت کنید که میکروکنترلر arm این کد رو در فرکانس هسته ۱ مگاهرتز سریعتر از avr با همین فرکانس هسته اجرا میکنه 🙂

  13. من فکر می‌کنم به سه پارامتر زیر بستگی داشته باشه:
    1- تعداد دستوراتی که در یک ثانیه اجرا میشن و در دیتاشیت هر کدوم از اینا گفته. و همچنین اینکه باس دستور و داده از هم مجزا هستن یا خیر.
    2- عملیات شیفت در هر کدام به چه صورتی انجام می‌گیره.
    3- با توجه به حلقه و شرطی که گذاشتید، آیا پایپ‌لاین خالی می‌شه یا نه. و در هر پردازنده تا چه اندازه رو این مورد کنترل داریم.

    فکر می‌کنم به این پارامترا بستگی داشته باشه که باید مطالعه و تست بشه رو هر کدوم تا بشه جواب نهایی را داد.

  14. مری گفت:

    مساوی در همه میکروها

  15. ابوالقاسمی ال مهندس! گفت:

    سلام
    به نظرم avr باید سرعت بیشتری داشته باشه.چون pic و arm عملگر بیتی ندارن ولی avr و 8051 دارن. چون 8051 فرکانس ورودیش رو به 12 تقسیم میکنه پس باید avr سریعتر باشه

    1. Mohammad گفت:

      مثلا آرم بیت بندینگ داره که AVR تو خوابشم نمیتونه ببینه! کی چنین حرفی رو زده؟!

  16. Reza Bayat Reza Bayat گفت:

    در معماری هاروارد باس های جداگانه برای دسترسی به data و instruction وجود دارد اما در معماری ون نیومن هم دیتا و هم instruction از طریق یک باس مشترک انتقال داده می شوند، پس در معماری ون نیومن سرعت execution کندتر از معماری هاروارد است زیرا در معماری ون نیومن پروسسور نمیتواند همزمان واکشی instruction و Data را انجام دهد پس در کلاک 1هرتز معماری هاروارد سرعت بیشتری دارد.
    میکروکنترلرهای PIC، 8051 و AVR دارای معماری هاروارد هستند ولی معماری میکروکنترلر ARM ون نیومن می باشد.
    میکروکنترلرهای 8051 (12Clock/instruction cycle) و 4Clock/instruction cycle)PIC) نیازمند چند کلاک به ازای هر instruction هستند اما ARM و AVR هر instruction را با یک کلاک انجام می دهند.
    پس با توجه به توضیحات ذکر شده میکروکنتر AVR با سرعت بیشتری کد مورد نظر را با کلاک 1هرتز اجرا میکند.

    1. زئوس Zeus زئوس Zeus گفت:

      گزینه درستی رو انتخاب کردید توضیحاتی هم که دادید به شکل اجتمالی درسته است

  17. مهدی گفت:

    سلام، وقت به خیر
    مقایسه سرعت چند cpu بر اساس یک برنامه سطح بالا مثل C شاید مقایسه درستی نباشد. بهتر است این مقایسه بر اساس تعداد مشخص دستورات اسمبلی انجام شود.
    نکته اصلی برای تعیین سرعت اجرای برنامه (یک تعداد مشخص دستور اسمبلی) در یک کلاک مشخص، تعداد کلاک مورد نیاز برای اجرای هر دستور، و همچنین تعداد پایپ لاین موجود در cpu است. و در مورد اجرای برنامه، 8، 16، و یا 32 بیتی بودن cpu عامل تعیین کننده است. در مورد سرعت اجرای دستورات، پارامتر MIPS می تواند مشخص کننده سرعت اجرای دستورات در یک cpu باشد.
    8051: انواع مختلفی از هسته 8051 هشت بیتی توسط شرکت های مختلف تولید شده است که حداکثر کلاک cpu در آنها متفاوت است. هسته اوریجینال 8051 که توسط اینتل طراحی شده است، با کلاک 12 مگاهرتز می تواند بیشتر دستورات را توسط در یک یا دو کلاک انجام دهد که در نتیجه سرعت اجرای دستورات برابر با 500000 الی 1000000 دستور در ثانیه به ازای هر مگاهرتز کلاک می شود. برخی شرکت ها این هسته را طوری طراحی کرده اند که با کلاک تا 100 مگاهرتز نیز کار می کند که در نهایت، نسبت به کلاک 12 مگاهرتز، در یک MIPS برابر (نه در کلاک برابر)، سرعت بالاتری را نتیجه می دهد. حتی هسته 8051 با عنوان Single Clock 8051 Core و Fast 8051 Core طراحی شده است. بنابراین برای دستیابی به سرعت دقیق این هسته، باید به مشخصات ارائه شده توسط سازنده (یعنی MIPS) رجوع شود.
    AVR: در مورد این هسته (با هسته 8 بیتی)، سرعت یک MIPS توسط شرکت سازنده ادعا شده است. البته دستورات به بیشتر از یک کلاک برای اجرا شدن نیاز دارند. اما با توجه به تکنیک پایپ لاین استفاده شده (معماری هاروارد)، به طور متوسط، سرعت یک MIPS به دست می آید. حتی با وجود استفاده از پایپ لاین، برخی دستورات مانند دستور ضرب، به تعداد سیکل بیشتری نیاز دارند.
    PIC: در هسته 8 بیتی PIC هر دستور به 4 سیکل برای اجرا شدن نیاز دارد. بنابراین سرعت برابر با یک چهارم (0.25) MIPS حاصل می شود. در مقایسه با AVR و 8051، نیاز به زمان بیشتری برای اجرای تعداد مشخصی دستور را دارد.
    ARM: در مورد هسته 32 بیتی Cortex-M7، به طور تئوریک، هر دو دستور در یک سیکل ماشین انجام می شود. به طور کلی هسته های ARM دارای پایپ لاین های چند مرحله ای هستند و نسبت به سایر هسته ها (ی مطرح شده در این مطلب)، در زمان کمتری تعداد مشخصی دستور را اجرا می کنند.
    در مورد جواب به سوال مطرح شده، از روی کد C نمی توان به درستی تصمیم گیری کرد و باید به تعداد دستورات تولید شده پس از کامپایل پروژه برای هسته مورد نظر توجه شود. تعداد دستورات تولید شده نیز وابسته به معماری cpu است. به عنوان مثال در AVR، از معماری RISC استفاده شده است. هدف این معماری استفاده از دستورات ساده است تا در یک سیکل انجام شود. از طرفی ممکن است پس از کامپایل یک برنامه C تعداد دستورات اسمبلی زیادی (در مقایسه با دستورات C) ایجاد شود. در مقابل، در هسته PIC از معماری CISC استفاده شده که هدف آن کمتر شدن تعداد دستورات اسمبلی و پیچیده شدن دستورات است که منجر می شود برای اجرا، به تعداد بیشتر از یک کلاک برای هر دستور نیاز باشد. معماری هسته ARM بر اساس RISC است بنابراین دستورات در کمترین سیکل ماشین انجام می شوند. نکته دیگر 8 بیتی، 16 بیتی، یا 32 بیتی بودن cpu است که با توجه به برنامه فوق، می تواند سرعت اجرا را تحت تاثیر قرار دهد. به عنوان مثال اگر کامپایلر اعداد ثابت را از نوع int که 16 بیتی است در نظر بگیرد، یک cpu 8 بیتی به دلیل دارا بودن رجیسترهای 8 بیتی، برای پردازش آن، باید آن را به صورت دو مقدار 8 بیتی در نظر بگیرد و یکی پس از دیگری در رجیسترها قرار دهد، که خود باعث افزایش تعداد دستورات اسمبلی پس از کامپایل خواهد شد. اما یک cpu 32 بیتی، متغیرهای تا 32 بیت را به طور مستقیم پردازش می کند.
    در نهایت، باید گفت که سوال مطرح شده تا حدودی کلی است (حداقل به راحتی قابل محاسبه نیست، زیرا پارامترهای زیادی تعیین کننده هستند). اما با توجه به وجود پایپ لاین چندمرحله ای در ARM و معماری RISC، و 32 بیتی بودن آن، و برخی امکانات دیگر مانند دستورات thumb در برخی نسخه ها، به نظر می رسد در زمان کمتری برنامه را اجرا کند.

  18. سینا گفت:

    سلام.
    هیچ کدام!
    چون اصلا پورت را خروجی تعریف نکرده اید که بتوانیم فرکانس تولید شده را اندازه گیری کنیم!

  19. mahdi گفت:

    سلام
    جواب رو به کجا ارسال کنیم.
    لینک یا ایدی بدید.

    1. Sisoog Os Sisoog Os گفت:

      سلام همینجا در قسمت نظرات مشابه همین سوالتون ارسال کنید

  20. محمد یوسفی گفت:

    سلام،
    پاسخ AVR است.
    میکروکنترلر 8051 برای اجرای یک دستور نیاز به 12 سیکل کلاک دارد و PIC برای اجرای یک دستور نیاز به 4 سیکل کلاک دارد ولی AVR و ARM فقط به یک سیکل کلاک برای اجرای هر دستور نیاز دارند. میکروکنترلر AVR از معماری هاروارد استفاده می کنند که گذرگاه های مجزا برای کد و داده دارد در نتیجه سرعت اجرای دستورات در آن بیش از ARM است، ARM از معماری ون نیومن استفاده می کند که یک گذرگاه مشترک برای کد و داده دارد. در نتیجه AVR بیشترین سرعت اجرا را خواهد داشت.

  21. علی رضا گفت:

    خوانواده 8051

  22. شهریار هوشمند گفت:

    سلام
    میکروهای مبتنی بر ARM زیرا در این نمونه ها معماری ARM توی هستش تعدادی پایپ لاین دارن که میتونه توی یک کلاک کارها رو بصورت پیوسته انجام بده…
    مثال در هسته coretex m3 سه عدد پایپ لاین وجود داره که مثل یک خط تولید کارها رو پشت سر هم انجام میده در یک کلاک… ای کاش میشد عکس یا فیلم بفرستم و توضیحات بهتری ارائه بدم😅

    این دیدگاه من بود…

  23. hrvahed گفت:

    سلام
    ۸۰۵۱ کلاک رو بر ۱۲ تقسیم میکنه
    پی آی سی بر ۴
    avr بر ۱ 😁
    آرم هم که ۳۲ بیتیه و داستان داره
    avr ۸ بیتی چالاک با کلاک کمتری این عملیات رو انجام میده
    نظر من بود
    برای جایزه نظر ندادم
    چیزایی که از حدود ۱۰ سال پیش یادم بود
    ممنون از سایت دوست داشتنی و جوانمردتون
    مانا باشید

    1. زئوس Zeus زئوس Zeus گفت:

      ممنون برای مشارکت – نظرتون
      امم در مورد دو مورد اول کاملا درست گفتید و اما دلیل چالاکی ای وی آر ۸ بیتی بودنش نیست ولی خوب گزینه درست رو انتخاب کردید.

      1. hrvahed گفت:

        خیلی ممنون ،دیگه شرح کوچولو رو سعی کردم با مختصر کلمات بدم
        تشکر از شما بابت این ابتکار خوب 🌹

        1. زئوس Zeus زئوس Zeus گفت:

          خواهش میکنم
          ممنون از این که شرکت کردید

  24. محمد گفت:

    سلام
    معماری 8051 ، AVR و PIC هاوارد هست ولی معماری ARM نیومن. معماری هاوارد چون fetch کردن دیتا و دستور العمل رو همزمان انجام میده سرعت بیشتری داره. PIC و 8051 پشته محدودی دارن و PIC مشکل دیگش اینه که با آدرس مستقیم نمیشه دسترسی به رم داشت.یه مشکل دیگه PIC و 8051 داره اینه که دستورالعمل ها توی چند سیکل کلاک انجام میشه در صورتی که توی ARM و AVR دستورالعمل ها عموما توی یه سیکل انجام میشن.شاید مزیت ARM نسبت به مابقی 16 یا 32 بیتی بودنش باشه ولی دست کم واسه کدی که نوشتید قابل توجه نیست. خلاصه حرفام اینکه به نظر من AVR جواب سواله.
    ممنونم
    محمد هوشیار

    1. زئوس Zeus زئوس Zeus گفت:

      خوب به نکات خوبی اشاره کردید و نتیجه گیری اخر هم درست بود 🙂

  25. دانیال گفت:

    سرعت میکروکنترلر pic بیشتر است.چون تقسیم فرکانسی صورت نمیگیرد.میکرو با کلاک ۱مگا شروع به کار میکنه.

  26. طاهره سلسله گفت:

    سلام
    برای مقایسه سرعت پردازنده های میکروکنترلرهای مختلف آن ها را با یک پردازنده مرجع به نام Dhrystone مقایسه میکنند. شرکت های مختلف که پردازنده جدیدی ارایه میدهند برای تشخیص میزان کارایی و سرعت پردازنده باید آن را با سرعت این پردازنده مقایسه کنند. این پردازنده مرجع در فرکانس 1 مگاهرتز دارای توان اجرای ا میلیون دستور در ثانیه است (1MIPS) . میکروکنترلر 8051 در فرکانس 12MHz میتواند ا میلیون دستور را در یک ثانیه انجام دهد، بنابراین سرعت اجرای دستور آن در فرکانس 1 مگاهرتز 1/12MIPS یعنی 1/12 سرعت پردازنده مرجع است. میکروکنترلر PIC در فرکانس 4MHz میتواند سرعت 1MIPS را داشته باشد، بنابراین سرعت اجرای دستور توسط آن 1/4 سرعت پردازنده مرجع است. پردازنده میکروکنترلر AVR در فرکانس 1MHz تقریبا دارای سرعت اجرای 1MIPS است یعنی سرعتی برابر سرعت پردازنده مرجع دارد. و اما پردازنده میکروکنترلر ARM میتواند در فرکانس کلاک 1MHZ، دارای سرعت اجرای دستور 2.14MIPS باشد یعنی میتواند در یک ثانیه 2.14 میلیون دستور را اجرا کند و بنابراین سرعت اجرای دستور آن 2.14 برابر سرعت اجرای دستور در پردازنده مرجع Dhrystone است. بنابراین پاسخ این سوال پردازنده میکروکنترلر ARM میباشد.

  27. علیرضا عسگری گفت:

    میکرو 8051 سریع تر انجام خواهد داد
    بدلیل اجرای اسمبلی
    Pic چون تقسیم کننده کلاک داره نمی تونی سرعتی بالا داشته باشه
    Avr هم بدلیل اجرای دستورات این برنامه در بیشتر از یک کلاک

  28. حسین گفت:

    با سلام .
    سپاس بابت کاربسيار خوبي که انجام داديد . جايزه ش خيلي بدرد بخوره!!! [نيشخند][چشمک]
    ولي جداي از شوخي اينکار باعث ميشه افراد ديتاشيت رو مطالعه کنن و باعث افزايش سطح علمي ميشه که خودش جاي تقدير داره .
    و اما جواب:
    قبل از اينکه جواب رو بگم بايد بگم در مورد آرم چون PLL داره نميشه گفت که فرکانس هسته چند ميشه در مورد pic و 8051 مقسم فرکانس داخلي دارن. بنابر اين باتوجه به اينکه صورت مسئله نبايد مبهم باشه حدس منطقي اينه که منظور فرکانس هسته 1 مگاهرتز هست . اين از اين .

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@ و اما جواب اينه که AVR از همه سريعتر است . @@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    دليل برتري avr اينه :
    معماري هسته AVR اين طوره که بسياري از دستورات که مربوط به فايل رجيسترها هستن فقط در يک سيکل ساعت واکشي و اجرا ميشن .( ديگه از اين سريعتر نميشه که !!!! ) و مورد ديگه اينه که AVR تعداد زيادي فايل رجيستر داره !!! دقيقا 32 تا و براي هرکاري که شما بخواهيد روي اين فايل رجيسترها انجام بده يک دستور اسمبلي داره ه همين علت تعداد دستورات AVR نسبت به بقيه ميکروها زياد تره و حدود 130 تا دستور ميشه و همين باعث ميشه در تعداد زيادي از کارها فقط يک دستوراسمبلي ( يک پالس کلاک ) براي انجامش احتياج باشه( و کمتر نياز باشه از رم استفاده بشه که 2 کلاک مصرف ميکنه ) . با توجه به اينکه فرکانس کلاک هسته AVR همون فرکانس کريستال هست ، به وضوح مشخص هست به چه سرعتي دستورات رو انجام ميده !!
    و اما در مورد 8051( احتمال زياد مدلهاي قديمي AT89C51-55 مدنظر بوده چون بيشتر ملت اينا رو ميشناسن )
    اينطور نيست که بشه مستقيم با يک دستور مثلا r1 , r5 راکپي کرد .و بايد حتما از رجيستر A يا اکومولاتور استفاده کرد . همين يعني کند تر شدن اجراي دستورات .
    در مورد pic هم داستان اکومولاتور صادق هست .
    در مورد Arm چون من با stm32 کار کردم ، اون رو ميگم :
    دستورات اسمبلي stm32 پارامترهاي بيشتري نسبت متغير به ميکروهاي 8 بيتي داره و روي متغير هاي 32 بيتي بهتر از 8 بيتي عمل ميکنه ( اين مورد رو خودم با بررسي کد اسمبلي برنامه حين ديباگ به چشم ديدم )و تعداد زيادتري پالس کلاک براي اجرا احتتياج داره و معمولا به زور پايپ لاين اجراي زمان اجراي هر دستور را به يک کلاک ميرسونن .!! اما باز هم در حين ديباگ يک برنامه ديدم که براي 1 کردن يک بيت پورت 4 دستور و براي 0 کردنش 3 دستور استفاده شده بود …تازه اين عملکرد با بهينه سازي روي سرعت اتفاق افتاده بود بدون بهينه سازي 6 و 5 دستور طول ميکشيد .!!!
    البته کمپايلرها هم در سرعت مور هستن ولي اگر بخواهيم الگوريتم بالا را اسمبلي بنويسيم
    AVR سريعتره .

    1. زئوس Zeus زئوس Zeus گفت:

      ممنون از پاسخ کاملتون و این که گزینه درست رو هم انتخاب کردید 🙂

      1. حسین گفت:

        من از شما سپاسگزارم بابت زمان و هزینه ای که گذاشتید و بابت دغدغه ای که در مورد مطالب پایه و تئوری دارید.

        1. زئوس Zeus زئوس Zeus گفت:

          خواهش میکنم
          متشکرم برای توضیحات خوبتون

  29. فرید گفت:

    ای وی ار، به خاطر معماری ریسک

    1. زئوس Zeus زئوس Zeus گفت:

      خوب بله avr پاسخ درسته ولی بخاطر ریسک بودنش نیست آرم هم ریسکه

  30. Mehdi گفت:

    آرم،به خاطر معماری پاپلاین

  31. زئوس عزیزم، یک خانواده از PIC هست به نام dsPIC در معماری این کنترلر ها دو عدد آکولوماتور و Barrel Shifter تعبیه شده است، این سخت افزار خاص این امکان را به پردازنده میدهند که عملیات ضرب و تقسیم دو عدد تا شانزده بیت تنها در یک سیکل ماشین انجام شود. همچنین در معماری سری های عمومی ۱۲، ۱۶ و ۱۸ PIC یک رجیستر واسط به نام WREG وجود دارد، برای ALU حکم حافظه CASH را دارد و از این رو محاسبات را قدری کند میکند. همچنین کنترلر های PIC کلاک دریافتی را ابتدا تقسیم بر ۴ میکنند و سپس استفاده میکنند، گرچه در PIC و بسیاری از تراشه های ARM شما میتوانید کلاک را براحتی با PPL ضرب کنید و …
    در معماری ARM همزمان با اجرای یک دستور، کد دستور بعدی برای ALU آماده میشود…
    در کل کنترلر ها و پردازنده های بهینه شده برای عملیات DSP, در فرکانس یکسان سریع تر محاسبات ریاضی و عملیات منطقی را انجام میدهند… در برخی از معماری های پردازنده DSP, شش ALU وجود دارد و و شما در یک سیکل ماشین شش عملیات ضرب اعشاری میتوانید انجام دهید!

    1. زئوس Zeus زئوس Zeus گفت:

      خوب اول ممنون برای کامنت 🙂
      دوم این که اگر قرار بود از سری خاصی استفاده بشه حتما اسمش رو میگفتیم مثلا همین dspic
      البته با توجه به صورت سوال alu و قابلیت هایاون چندان کاربرد نداره

      1. زئوس جان شاید برای برخی از دوستان سواله چرا در برخی کنترلر ها کلاک رو تقسیم میکنند یا با PLL داخلی ضرب میکنند….
        در پاسخ باید گفت سیگنال کلاک بسیار حساسه. و به شدت ناپایدار. از این رو کلاک های بزرگ را با استفاده از ضرب کننده فرکانس به دست می آورند.
        در پردازنده هایی که کارآمدی در شرایط بحرانی برای آنها اهمیت دارد، ابتدا کلاک را تقسیم میکنند تا اثرات ناپایداری روی کلاک را کاهش دهند، همچنین مدار داخلی خاصی هست تا در صورت از دست رفتن کلاک، کلاک بکاپ داخلی را متصل کند. برخی از پردازنده ها استاندارد های ایمنی خاص دارند… مثل سری هرکولس تگزاس، سری 33 میکروچیپ و… کاربرد این پردازنده ها مواردی همچون تجهیزات هسته ایی ، سیستم های ترمز و فرمان و ایمنی خودرو، اعلام حریق تجهیزات هسته ایی ، ادوات پزشکی حفظ کننده حیات انسان و…. است.
        من با اجازه تون برم یه جفت بال برای ایکاروس بسازم !

        1. زئوس Zeus زئوس Zeus گفت:

          ممنون برای اشاره به این نکته مهم

  32. Mohamad Chamrami محمد گفت:

    ارم ها چون در معماری رسیک v بر خلاف معماری های pic, avr برای شمارنده بالا رونده کلاک کمتری نیازه اما در دو معماری دیگه کلاک — کمتر از ++ هست و توصیه میشه از — استفاده شه

    1. زئوس Zeus زئوس Zeus گفت:

      اگر دلایلتون رو هم میگفتید خوب بود.

    1. زئوس Zeus زئوس Zeus گفت:

      ای کاش دلایل رو هم می گفتید

  33. مسلم گفت:

    ARM
    چون از تکنولوژی پایپ لاین قویتری نسبت به دیگر خانواده ها استفاده میکند

    1. زئوس Zeus زئوس Zeus گفت:

      و وجود همین پایپ لاین کار دستش میده 🙂