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

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

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

مدت زیادی از مسابقه اول (لینک مسابقه در کانال تلگرام) سیسوگ در تلگرام می‌گذره و فکر کردم بهتره باز با یک چالش دیگه در خدمتتون باشیم
این بار خبری از اتفاقات خارق العاده و بلک باکس نیست بلکه با یک سوال ساده‌تر چالش را پیش خواهیم برد، و اما چالش :

 

کدام خانواده از میکروکنترلرهای 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 سريعتره .

برچسب ها

حمایت از Zeus ‌

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

Zeus ‌
Zeus ‌

زئوس هستم ساکن المپ

دیدگاه ها

76 دیدگاه

  • متین میرزاده
    ۵ تیر ۱۴۰۰

    یعنی باورم نمیشه هنوز هستن کسایی که سر نوع میکرو بحث می کنن!
    من خودم PIC کار می کنم. از نظر من کامپایلر هم خیلی تاثیر داره. مثلا CCS C و Micro C دو کامپایلر قوی با خروجی خوب و Help قوی برای PIC هستند و CCS C هم که تمام کد های رجیستر رو به کد های کاملا آسون و قابل فهم حتی برای مبتدیان هست.
    درباره خود میکرو من STM32 رو بهتون پیشنهاد می کنم برای پروژه های سنگین در کامپایلر STM32 CubeMX و Keil u vision5 که واقعا کولاک می کنه ولی خب کار باهاش فوق العاده سخته. در مورد PIC و AVR به هردوش کار کردم و می تونم بگم PIC سرتره چون:
    1-بازسازی از معماری هاروارده و نسبت به نویز حساس تره(دلیل نمیشه AVR رو بخاطر این بزارین کنار)
    2-سری PIC24 یک سری از PIC با CPU 16 بیت هست که نسبتا ارزون و با کلی امکانات هست(مثلا تایمر 32 بیت و تنظیم Period هر تایمر)
    3-تمام پین ها I/O می تونن I2C , SPI , RS-232 و کلی قابلیت دیگه بشن(فقط پین های USB و ADC و DAC نمی تونه جابجا شه اگه چیزیو از قلم انداختم بگید چون حضور ذهن ندارم)
    4-من چندبار مثبت و منفیش رو برعکس زدم نسوخت[تعجب]
    اما از طرفی AVR ارزون تره و تو بازار فراوون تره

    البته تمام نمونه هایی که دربالا ذکر شده در سایت irancollect.com موجود هست(سایت خودم نیست تبلیغ هم نیست. یک پیشنهاده)

  • مهدی
    ۲۷ مهر ۱۳۹۹

    سلام عالی بود .
    یه سوال کلا دستورات شرطی باعث تداخل عملکرد پایپ لاین میشه؟
    ایا این دستورات شرطی فقط ifهستش یا نه تمام دستوراتی که منجر به Tترو Fفالس در یک برنامه بودن میشن عملکرد پایپ لاین رو مختل میکنه ؟

    • Zeus ‌
      زئوس Zeus
      ۳۰ مهر ۱۳۹۹

      سلام دوست عزیز
      البته باید بگم با معماری های جدید سخت افزاری تعداد دستوراتی که باعث میشن پایپ لاین تخلیه بشه کاهش پیدا کردن و بسته به معماری سخت افزار متفاوت هستند
      ولی بله همچنان هستند دستوراتی که این قابلیت رو داشته باشند – برای جزییات دقیق تر می تونید به رفرنس منوال قطعه مورد استفاده مراجعه کنید

  • محمد بوشهری
    ۲ فروردین ۱۳۹۹

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

    • Zeus ‌
      زئوس Zeus
      ۵ فروردین ۱۳۹۹

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

  • حسین
    ۹ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۱۳ بهمن ۱۳۹۸

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

  • reza
    ۷ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۷ بهمن ۱۳۹۸

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

  • مهدی
    ۶ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۷ بهمن ۱۳۹۸

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

  • حمید عرب
    ۶ بهمن ۱۳۹۸

    خب سلام به همه هم رشته ای های عزیز . من همون حمید هستم که یک کامتنی پایین گذاشتم و نوشتم آرم سریع تره و یکم بجث هم کردم با آقای 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: -:)

    • Zeus ‌
      زئوس Zeus
      ۷ بهمن ۱۳۹۸

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

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

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

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

      arm pipline

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

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

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

  • Mohammad
    ۶ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

  • محمد
    ۶ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

      • محمد
        ۷ بهمن ۱۳۹۸

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

        • Zeus ‌
          زئوس Zeus
          ۷ بهمن ۱۳۹۸

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

          • حسین
            ۷ بهمن ۱۳۹۸

            سلام .
            جناب زئوس .
            راستش این کاربر محترم که گفت :بررسی کرده که 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 دستور!!!!
            راستش دستور مستقیمی پیدا نکردم که یک بیت از پورت را صفر یا یک کنه .
            و همینطور دستوری که بیت پورت را تاگل کنه .!!
            اگر اشتباه میکنم . لطفا به من خبر بدید .
            سپاس.

            0
          • Zeus ‌
            زئوس Zeus
            ۸ بهمن ۱۳۹۸

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

            0
          • حسین
            ۸ بهمن ۱۳۹۸

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

            0
          • Zeus ‌
            زئوس Zeus
            ۸ بهمن ۱۳۹۸

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

            0
          • حسین
            ۸ بهمن ۱۳۹۸

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

            0
          • محمد
            ۹ بهمن ۱۳۹۸

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

            0
          • حسین
            ۱۷ بهمن ۱۳۹۸

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

            0
  • حسین خانی
    ۵ بهمن ۱۳۹۸

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

  • کیان
    ۵ بهمن ۱۳۹۸

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

  • Clooner
    ۵ بهمن ۱۳۹۸

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

  • قدیر ایجی
    ۵ بهمن ۱۳۹۸

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

  • حمید
    ۵ بهمن ۱۳۹۸

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

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

    • حمید
      ۶ بهمن ۱۳۹۸

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

      • Zeus ‌
        زئوس Zeus
        ۶ بهمن ۱۳۹۸

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

        • حمید
          ۶ بهمن ۱۳۹۸

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

          • Zeus ‌
            زئوس Zeus
            ۶ بهمن ۱۳۹۸

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

            0
  • Phoenix
    ۵ بهمن ۱۳۹۸

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

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

  • مری
    ۵ بهمن ۱۳۹۸

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

  • ابوالقاسمی ال مهندس!
    ۵ بهمن ۱۳۹۸

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

    • Mohammad
      ۶ بهمن ۱۳۹۸

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

  • 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هرتز اجرا میکند.

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

  • مهدی
    ۵ بهمن ۱۳۹۸

    سلام، وقت به خیر
    مقایسه سرعت چند 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 در برخی نسخه ها، به نظر می رسد در زمان کمتری برنامه را اجرا کند.

  • سینا
    ۵ بهمن ۱۳۹۸

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

  • mahdi
    ۴ بهمن ۱۳۹۸

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

    • Sisoog Os
      Sisoog OS
      ۴ بهمن ۱۳۹۸

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

  • محمد یوسفی
    ۴ بهمن ۱۳۹۸

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

  • علی رضا
    ۴ بهمن ۱۳۹۸

    خوانواده 8051

  • شهریار هوشمند
    ۴ بهمن ۱۳۹۸

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

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

  • hrvahed
    ۴ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

      • hrvahed
        ۶ بهمن ۱۳۹۸

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

        • Zeus ‌
          زئوس Zeus
          ۷ بهمن ۱۳۹۸

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

  • محمد
    ۴ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

  • دانیال
    ۴ بهمن ۱۳۹۸

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

  • طاهره سلسله
    ۴ بهمن ۱۳۹۸

    سلام
    برای مقایسه سرعت پردازنده های میکروکنترلرهای مختلف آن ها را با یک پردازنده مرجع به نام 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 میباشد.

  • علیرضا عسگری
    ۴ بهمن ۱۳۹۸

    میکرو 8051 سریع تر انجام خواهد داد
    بدلیل اجرای اسمبلی
    Pic چون تقسیم کننده کلاک داره نمی تونی سرعتی بالا داشته باشه
    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 سريعتره .

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

      • حسین
        ۶ بهمن ۱۳۹۸

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

        • Zeus ‌
          زئوس Zeus
          ۶ بهمن ۱۳۹۸

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

  • فرید
    ۴ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

  • Mehdi
    ۴ بهمن ۱۳۹۸

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

  • دایدالوس
    دایدالوس
    ۴ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

      • دایدالوس
        دایدالوس
        ۷ بهمن ۱۳۹۸

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

        • Zeus ‌
          زئوس Zeus
          ۷ بهمن ۱۳۹۸

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

  • محمد
    ۳ بهمن ۱۳۹۸

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

  • توسلی
    ۳ بهمن ۱۳۹۸

    8051

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

  • Damawand
    ۳ بهمن ۱۳۹۸

    Pic

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

  • مسلم
    ۳ بهمن ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۶ بهمن ۱۳۹۸

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 9 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

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

Zeus ‌ Zeus ‌
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش

درآمد زایی به سبک پینوکیو

ما مهندسین, بخصوص مهندسین برق و الکترونیک … علاقه خاصی به طراحی و ساختن داریم علاقه زیادی به تکنولوژی , بخصوص از...

Sisoog Os Sisoog Os
  • 3 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک