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

مسابقه هفتم: تا کجا می‌تونی آورکلاک کنی؟

پایان مسابقه هفتم سیسوگ

توضیحات مسابقه

چند روزی هست که درگیر انجام یه تحقیق جالب هستم، که احتمالا تا ده بیست روز دیگه ارائه اش می‌کنم، حالا کاری به خود تحقیق نداشته باشیم امروز نیاز بود که توان پردازشی بیشتری از میکروکنترلری که باهاش کار میکردم بگیرم، تا جای ممکن سعی کردم برنامه رو بهینه کنم ولی باز هم کم بود دیگه برنامه رو نمیشد بیشتر از این بهینه کرد! اینجا است که باید دست به کار شد و دید توان تحمل میکروکترلر تا کجاست و وارد بحث شیرین سخت افزار شدم و سعی کردم میکروکنترلر را آورکلاک کنم.

خوب تا دوبرابر فرکانس مجاز مشکلی نبود، فراموش کردم توی پروژه من از میکروکنترلر ATXMEGA128 استفاده کردم که ماکزیمم فرکانس مجازش فکر کنم ۳۲ مگاهرتز هست و به سادگی و بدون هیچ تغییر خاصی تا ۶۴ رفت بالا ولی بعدش! شروع کرد ناپایدار بشه و هنگ بکنه که خوب همه میدونیم کند ترین بخش هر سیستم دیجیتالی تا به امروز حافظه است (کامیپوتر دیسک و اینجا فلش) ولی خوب همونطور که گفتم همیشه یه راهی هست و من هم اون راه رو پیدا کردم و فرکانس رو نهایتا تا ۹۶ مگاهرتز بالا بردم البته بالاتر هم میرفت ولی دیگه قابل اطمینان نبود و هنگ میکرد مدار بعد از چند ثانیه کارکردن و نتیجه نهایتا این بود که دمای چیپ به شکل چشم گیری بالا می‌رفت تا حدود ۵۰ درجه البته با خنک سازی !!

دمای میکروکنترلر حین آورکلاک

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

صورت مساله

میکروکنترلر STM32F103C8Tx

از اونجایی که بیشتر دوستان با میکروکنترلرهای STM32 آشنایی دارند و الان تقریبا بازار ایران رو هم اشباع کرده، ما هم برای برگزاری از یکی از خانواده های این میکروکنترلر استفاده خواهیم کرد یعنی STM32F103C8T6 که در بردهای BluePill استفاده می‌شود، اگر نمیدانید برد بلوپیل چیست یا چه شماتیکی دارد با مراجعه به این پست سیسوگ هم شماتیک و هم PCB آن را دانلود کنید.

صورت مساله نیز ساده است:

صورت مساله مسابقه
برنامه ای بنویسید که به سریعترین شکل ممکن پایه PC14 از میکروکنترلر STM32F103C8T6 صفر و یک کند.

شرایط داوری

برنامه ای که بالاترین فرکانس را بر روی پایه PC14 ایجاد کند، برنده خواهد بود، برد مورد استفاده جهت تست یک برد bluepill است که قبلا معرفی شد و با همان شمانیک ذکر شده است، برنامه مذکور باید بدون مشکل بتواند حداقل برای مدت ۱۰ دقیقه به کار خود ادامه دهد.

جایزه مسابقه سیسوگ

به اولین و سریعترین برنامه که با ذکر توضیحات کافی ارائه شده باشد مبلغ بیست میلیون ریال جایزه نقدی تعلق خواهد گرفت.

ارسال جواب

برای ارسال پاسخ های خود برای این مسابقه

پاسخ های خود را به ایمیل زیر ارسال نمایید.

ایمیل برای شرکت در مسابقهشرایط شرکت در مسابقه:

  1. عنوان ایمیل ” مسابقه هفتم سیسوگ” باشه.
  2. در بخش توضیحات نام و نام خانوادگی
  3. سپس توضیحات راجع به فرایند انجام پروژه در توضیحات ایمیل
  4. فایل Hex برنامه در ایمیل attach شده باشد.
مهلت شرکت در مسابقه تمدید شد!
مهلت شرکت در این مسابقه تا پایان روز شنبه 15/07/1402 می باشد.

نتایج نهایی مسابقه آورکلاک سیسوگ

نام شرکت کننده بالاترین فرکانس بر روی پایه PC14
Meysam73.5mhz
Morteza Farahi73.5mhz
Hossein Kardan71.5mhz
Jaafar Bazme64.1mhz
Kazem_Salari39mhz
Mohammad Pourkhalili32.05mhz

پایان و جواب چالش هفتم سیسوگ

با توجه به اتمام زمان مسابقه، فایل های ارسال شده دوباره مورد ارزیابی قرار گرفت و با توجه به این که دو دوست عزیز به سرعت یکسانی دست پیدا کردند و با توجه به این که شرط مسابقه، «اولین و سریعترین» بود، جایزه تعلق میگیره به آقای «میثم پرویزی»، البته به نظر من تک تک دوستانی که در این چالش شرکت کردند برنده هستند و برای خود من این چالش نکات جدیدی داشت که طی یکی دو روز آینده در خصوص آن مقاله ای خواهم نوشت و با هم بیشتر به زوایای جالب این چالش نگاه خواهیم انداخت.

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

 

روند تست و تکامل جواب آقای پرویزی (Meysam)

فرایند اورکلاک کردن میکروکنترلر STM32F103C8T8 را با کریستال خارجی ۸ مگاهرتز و با تنظیم کلاک روی ۷۲ مگاهرتز شروع می‌کنیم.

پین PC14 را به عنوان خروجی از نوع Push-Pull و بدون Pull-Up تنظیم کرده و آن را به اسیلوسکوپ وصل می‌کنیم تا فرکانس پالس خروجی را ببینیم.

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

سریع ترین راه برای صفر و یک کردن (Toggle کردن) یک بین در یک رجیستر استفاده از دستور XOR است. به همین جهت قبل از حلقه‌ی while ، آدرس رجیستر GPIOC_ODR و ماسک مورد نیاز برای تغییر مقدار بیت 14 پورت C را در رجیسترهای عمومی ذخیره می دهیم.

سپس در داخل حلقه while ابتدا عمل XOR را به کمک دستور EOR بین ماسک و مقدار فعلی رجیستر GPIOC_ODR را انجام داده و سپس با دستور STR مقدار حاصل شده را در رجیستر GPIOC_ODRبازنویسی می‌کنیم.

ه این ترتیب در کمترین زمان ممکن عمل صفر و یک کردن پین PC14 در داخل حلقه while انجام می‌شود و بالاترین فرکانس پالس خروجی به دست خواهد آمد.

با تنظیم کلاک روی ۷۲ مگاهرتز فرکانس پالس خروجی روی PC14 به حدود ۵.۱۵ مگاهرتز می‌رسد:

حالا کلاک میکروکنترلر را آرام آرام افزایش می‌دهیم تا به جایی برسیم که سیگنال خروجی ناپایدار شود. با تنظیم کلاک روی ۸۰ مگاهرتز فرکانس پالس خروجی روی PC14 به حدود ۵.۷۵ مگاهرتز می‌رسد:

با تنظیم کلاک روی ۸۸ مگاهرتز فرکانس پالس خروجی روی PC14 به حدود ۶.۲۵ مگاهرتز می‌رسد:

با تنظیم کلاک روی ۹۶ مگاهرتز فرکانس پالس خروجی روی PC14  به حدود ۶.۹۴ مگاهرتز می‌رسد:

با تنظیم کلاک روی ۱۰۴ مگاهرتز فرکانس پالس خروجی روی PC14  به حدود ۷.۴ مگاهرتز می‌رسد:

با تنظیم کلاک روی ۱۱۲ مگاهرتز فرکانس پالس خروجی روی PC14  به حدود ۸.۰ مگاهرتز می‌رسد:

با تنظیم کلاک روی ۱۲۰ مگاهرتز فرکانس پالس خروجی روی PC14  به حدود ۸.۵ مگاهرتز می‌رسد:

با تنظیم کلاک روی ۱۲۸ مگاهرتز فرکانس پالس خروجی روی PC14  به حدود ۹.۱ مگاهرتز می‌رسد:

فرکانس ۱۲۸ مگاهرتز بالاترین فرکانس کلاک قابل دستیابی با کریستال ۸ مگاهرتز بود. لذا کریستال خارجی را ۱۶ مگاهرتز تغییر می‌دهیم تا بتوانیم به فرکانس‌های کلاک بالاتری برسیم.

حالا فرکانس کلاک را روی ۱۴۴ مگاهرتز تنظیم می‌کنیم. در این حالت فرکانس پالس خروجی روی PC14  به حدود ۱۰.۳ مگاهرتز می‌رسد:

با تغییر دادن کد و استفاده از دستورالعمل EORS به جای EOR فرکانس خروجی کمی افزایش یافت که نتایج آن به شکل زیر است:

کریستال خارجی = ۱۶ مگاهرتز، کلاک سیستم = ۱۴۴ مگاهرتز، فرکانس خروجی = ۱۲ مگاهرتز پایدار:

کد تغییر داده شد و برای افزایش سرعت، قبل از ورود به حلقه مقادیر متناظر GPIOC_ODR برای صفر و یک کردن پین PC14 در دو رجیستر r1 و r2 ذخیره شد.

در داخل حلقه‌ی while از دو دستور STR برای صفر و یک کردن PC14 استفاده می‌کنیم.

به این ترتیب با کریستال خارجی ۱۶ مگاهرتز و تنظیم کلاک روی ۱۴۴ مگاهرتز میتوان به فرکانس ۲۰.۶۶ مگاهرتز روی PC14 رسید.

در این حالت دستورالعمل branch که پس از کامپایل در انتهای هر حلقه‌ی while اجرا می‌شود باعث کاهش فرکانس می‌شود.

برای حل این مسئله، عمل صفر و یک کردن PC14 را به تعداد زیاد و به صورت متوالی در هر بار اجرای حلقه، انجام می‌دهیم:

به این ترتیب با حذف تاخیر ناشی از branch توانستیم با کریستال خارجی ۱۶ مگاهرتز و تنظیم کلاک روی ۱۴۴ مگاهرتز به فرکانس ۳۶.۲۳ مگاهرتز روی PC14 برسیم:

برای دستیابی به فرکانس بالاتر می‌توان از عملکرد EVENTOUT روی پین PC14 استفاده کرد. پس از فعالسازی عملکرد EVENTOUT می‌توان به کمک دستورالعمل SEV مقدار PC14 را فقط به مدت یک کلاک سایکل یک کرد. به این ترتیب نیمی از یک پالس کامل ایجاد می‌شود. حالا به کمک دستورالعمل NOP به مدت یک کلاک سایکل در حالتی که مقدار PC14 صفر است تاخیر ایجاد می‌کنیم تا یک پالس کامل ایجاد شود.

مشابه نسخه ۳ می‌توان با اجرای متوالی SEV  و  NOP در داخل حلقه‌ی while ، اثر تاخیر ناشی از branch را در سیگنال تولید شده از بین برد. نتایج حاصل از این برنامه به صورت زیر است:

کریستال خارجی = ۱۶ مگاهرتز، کلاک سیستم ۱۴۴ مگاهرتز، فرکانس سیگنال خروجی = ۷۲.۴۶ مگاهرتز (بالاترین فرکانس پایدار)

لینک گیت هاب

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

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

11 دیدگاه در “مسابقه هفتم: تا کجا می‌تونی آورکلاک کنی؟

  1. Avatar for Hadi Taghizadeh Hadi Taghizadeh گفت:

    ممنون از تلاشتون برای ارتقای جامعه مهندسی برق ایران

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  2. Avatar for سامان سامان گفت:

    با سلام خسته نباشید ولی به نظر شما تغییر کریستال مدار شرط مسابقه رو نقض نمیکنه

    “برنامه ای که بالاترین فرکانس را بر روی پایه PC14 ایجاد کند، برنده خواهد بود، برد مورد استفاده جهت تست یک برد bluepill است که قبلا معرفی شد و با همان شمانیک ذکر شده است، برنامه مذکور باید بدون مشکل بتواند حداقل برای مدت ۱۰ دقیقه به کار خود ادامه دهد.”

    قرار بود برد برد blue pill باشه و تغییر کریستال دیگه برد blue pill نیست
    ولی چالش خوبی بود برای من این نکته رو داشته که بتونم میکرو را تا 128 مگ آور کلاک کنم و بدون مشکل کار بکنه

  3. Avatar for سید امیرعلی معصومی سید امیرعلی معصومی گفت:

    بابا حلالتون
    خیلی عالی بود. ممنون از همه دوستان

  4. Avatar for روح الله جعفری روح الله جعفری گفت:

    سلام در صورت امکان یکی از hex ها رو بذارید خود ما هم تست کنیم یا حداقل فیلم اندازه گیری رو بذارید ممنون

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام و درود – فایل هگز برنده مسابقه قرار خواهد گرفت

  5. Avatar for روح الله جعفری روح الله جعفری گفت:

    سلام برای فرکانس سیکل کامل منظورتون بوده دیگه درسته؟ یا هم لبه بالارونده هم پایین رونده!؟
    ممنون مسابقه هیجان انگیزیه

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام و درود ، بله سیکل کامل منظور بوده
      خواهش میکنم دوست عزیز.

  6. Avatar for داود زمانی داود زمانی گفت:

    درود.
    اشباع نه اشباء

    این لینک هم با روش دیگری اورکلاک کرده .
    https://www.programmersought.com/article/69869572825/

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      ممنونم دوست عزیز برای دقتتون
      اصلاح شد.

دیدگاهتان را بنویسید

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