“ โอเวอร์คล็อก” AVR


12

ในเอกสารข้อมูลของ AVR ภายใต้หัวข้อลักษณะไฟฟ้าคุณจะพบกราฟเช่นนี้ (อันนี้มาจาก ATMega328):

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเคยเห็นการออกแบบที่ดูเหมือนจะ "ทำงาน" แต่ทำงานนอกซองสีเทา โดยเฉพาะฉันได้เห็นการออกแบบ 3.3V (Arduino) ที่รันนาฬิกาจากคริสตัล 16MHz ภายนอก เห็นได้ชัดว่านี่เป็นข้อมูลจำเพาะ อะไรคือผลกระทบเชิงลบที่เกิดขึ้นจริงจากการทำงานนอกซองจดหมายนี้?


13
หากคุณเรียกใช้มันเรียงลำดับเฉพาะแล้วมันจะเรียงลำดับของการทำงานเท่านั้น
Olin Lathrop

อาจดูเหมือนโง่ แต่คุณไม่สามารถแทนที่ XTal ได้หรือไม่
Hossein

ไม่ใช่ความคิดที่ดีมีโอกาสมากที่สุดที่มันจะไม่ทำงานและคุณจะได้รับน้อยมากจากการเพิ่มที่ต่ำกว่า 1 MIPS ไปยังตัวประมวลผล 20 MIPS เหนือกว่าที่ฉัน 100% AVR จะล้มเหลว คุณต้องทำการตั้งค่าและกดค้างไว้สำหรับสัญญาณภายในคือความถี่สูงสุด ใช้สถานการณ์กรณีที่เลวร้ายยิ่งกว่าในเส้นทางสัญญาณที่สำคัญที่สุดภายใน AVR รูปแบบการผลิตอาจทำให้ชิปหนึ่ง ๆ มีภูมิคุ้มกันต่อการโอเวอร์คล็อกได้มากขึ้น แต่น้อยมากและจำไว้ว่าแม้ว่าตัวแกนหลักจะทำงานได้ดีก็ไม่ได้หมายความว่า สามารถทำซ้ำกับชิปอื่นจากชุดที่แตกต่างกัน
user34920

1
ในการจัดวางมุขตลกอีกครั้ง: "หากพวกเขาจะแกล้งนาฬิกาของเราภายในสเป็คเราจะแกล้งทำเป็นทำงาน"
nitro2k01

นี่อาจเป็นคำถามที่โง่ แต่ฉันคิดว่า AVR Arduinos ทั้งหมดทำงานที่ 5v ยกเว้น Mini Pro-3.3v ที่ทำงานที่ 8MHz เท่านั้น ... หรือมีรุ่น 3.3v ที่เร็วกว่าที่ฉันไม่เห็นหรือไม่
จูลส์

คำตอบ:


42

วิธีทำให้ชีวิตน่าสนใจยิ่งขึ้น 101:

  • ถ้าคุณไม่สนใจ

    บางครั้งผลลัพธ์ของคุณอาจผิดไปบางครั้ง
    ระบบของคุณอาจล้มเหลวเพื่อ
    ให้ชีวิตของคุณน่าสนใจยิ่งขึ้น
    ซึ่ง Segway ของคุณจะทำการโคลนหน้าพืชเป็นครั้งคราวโดยไม่มีเหตุผลชัดเจน
    ...

    จากนั้นทั้งหมดเรียกใช้ส่วนนอกข้อกำหนดของผู้ผลิต

คุณได้สิ่งที่คุณไม่ต้องจ่าย
หากคุณมีหัว $ 10 ซื้อหมวกกันน็อก $ 10

มันอาจทำงานได้บ่อย
มันอาจไม่ทำงานในบางครั้ง
อาจไม่ชัดเจนว่าบางครั้งมันไม่ทำงาน

  • การหารอาจใช้งานได้
  • โดยปกติการกระโดดอาจมาถึง
  • ตารางอาจถูกค้นหาอย่างถูกต้อง
  • ค่า ADC อาจถูกต้อง

    หรือไม่

    ป้อนคำอธิบายรูปภาพที่นี่


4
ฉันรักคำตอบนี้ฮ่า ๆ
vicatcu

2
นี่คือสิ่งมหัศจรรย์
Andrey Vihrov

6
ที่จริงแล้วถ้าคุณมีหัว $ 10 คุณควรซื้อหมวกกันน็อคแบบมีค่าความน่าจะเป็น $ 10 *
Nick Johnson

4
ฉันพบวอลล์เปเปอร์ใหม่ของฉัน
Rick_2047

4
นี่คืออัจฉริยะ: "ถ้าคุณไม่สนใจ (... ) ว่าการโคลน Segway ของคุณเพียงบางครั้งทำหน้าพืชโดยไม่มีเหตุผลที่ชัดเจน"
Kamil

14

ที่ความเร็วประเภทเหล่านี้โปรเซสเซอร์ส่วนใหญ่ทำงานโดยการคำนวณสัญญาณทั้งหมดที่จะต้องใช้ในรอบสัญญาณนาฬิกาหนึ่งรอขอบนาฬิกาถัดไปในขณะที่พวกเขามีเสถียรภาพล็อคสัญญาณเหล่านั้นทั้งหมดและคำนวณสัญญาณที่จำเป็นในรอบนาฬิกาถัดไป ให้รอที่ขอบนั้นในขณะที่สัญญาณเหล่านั้นเสถียร ฯลฯ หากขอบสัญญาณนาฬิกามาถึงก่อนที่สัญญาณที่จำเป็นจะมีความเสถียรผลที่ได้คือว่าสัญญาณใดที่ไม่เสถียรจะไม่ถูกสลักอย่างสะอาด หากสิ่งนี้เกิดขึ้นในไมโครคอนโทรลเลอร์ผลกระทบอาจไม่แน่นอน - ด้วยเหตุผลอย่างน้อยสองประการ:

  1. ในหลายกรณีความเร็วในการประมวลผลจะถูก จำกัด ด้วยเวลาตอบสนองของแฟลชอาเรย์ที่โปรเซสเซอร์อ่านโค้ด หากการรันตัวประมวลผลเร็วเกินไปทำให้บิตผิดพลาดเป็นครั้งคราวที่นี่หรือที่นั่นอาจทำให้โปรเซสเซอร์ประมวลผลโค้ดที่แตกต่างไปจากที่ตั้งใจไว้ได้อย่างง่ายดาย ในหลาย ๆ โปรแกรมแม้แต่การอ่านผิดครั้งเดียวเพียงครั้งเดียวก็สามารถเปลี่ยนแปลงพฤติกรรมได้อย่างรุนแรง มันไม่ค่อยมีประโยชน์ที่จะพยายามคาดการณ์เกี่ยวกับสิ่งที่อาจเกิดขึ้นในกรณีเช่นนี้ สิ่งที่ดีที่สุดที่สามารถทำได้ในบางกรณีก็คือ "ชุดเกราะ" บางส่วนของโปรแกรม ตัวอย่างเช่นอาจมีการป้องกัน EEPROM ไว้จนกว่าจะต้องการเขียนจากนั้นใช้โค้ดดังนี้:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (ที่อยู่ข้อมูลภาคแสดง) \
      eep_checksum = 0xC0DEFACE, eep_addr = (ที่อยู่), eep_data = (ข้อมูล), \ 
      eep_checksum + = eep_addr + eep_data, ((แสดง) || HARD_CRASH ()), \
      eep_checksum + = (0xCAFEBABE - C0DEFACE), eep_do_write ()
    
    เป็นโมฆะ eep_do_write (เป็นโมฆะ)
    {
      ENABLE_EEPROM_WRITE_HARDWARE ();
      if (eep_checksum! = eep_addr + eep_data + 0xCAFEBABE)
      {
        DISABLE_EEPROM_WRITE_HARDWARE ();
        HARD_CRASH ();
      }
      DO_EEPROM_WRITE ();
      DISABLE_EEPROM_WRITE_HARDWARE ();
    }  
    
    ไม่น่าเป็นไปได้มากที่รูทีน eeprom_write จะพยายามเขียนข้อมูลเว้นแต่ว่า "eep_checksum = 0xC0DEFACE" จะถูกดำเนินการก่อนที่จะโหลดที่อยู่และข้อมูล หลังจากการดำเนินการของภาคแสดงจะถูกตรวจสอบความถูกต้องก่อนที่จะปรับการตรวจสอบค่าที่เหมาะสมและเรียกรูทีน eeprom_store
  2. นอกจากความเสี่ยงที่ชัดเจนที่เกิดจากการเรียกใช้รหัสที่ไม่ถูกต้องแล้วแหล่งที่มาของพฤติกรรมแบบสุ่มที่อาจเกิดขึ้นก็คือการแพร่กระจายของข้อมูล โดยทั่วไปในทุกรอบฟล็อปฟล็อปจะสลักทั้งสูงหรือต่ำ อย่างไรก็ตามหากการป้อนข้อมูลไปยังฟล็อปฟล็อปเปลี่ยนแปลงไปเมื่อนาฬิกามาถึงอาจเป็นช่วงเวลาที่สัญญาณเอาท์พุตที่แปลก ๆ ซึ่งอาจพลิกระหว่างสูงและต่ำในรูปแบบใดก็ได้จนกระทั่งรอบนาฬิกาถัดไป เป็นไปได้โดยสิ้นเชิงว่าอุปกรณ์บางอย่างที่อยู่ท้ายน้ำจากฟลิปฟล็อปจะเห็นว่า "สูง" ในขณะที่อุปกรณ์อื่น ๆ มองว่า "ต่ำ" โดยทั่วไปโปรเซสเซอร์ใช้อุปกรณ์หลายเครื่องที่เห็นด้วยกับสิ่งที่พวกเขากำลังจะทำ หากในระหว่างการดำเนินการตามคำสั่ง "การลดลงและสาขาหากไม่เท่ากัน" และวงจรบางอย่างคิดว่าควรดำเนินการสาขา แต่ผู้อื่นไม่

ผู้ผลิตระบุพารามิเตอร์ปฏิบัติการสำหรับตัวประมวลผลซึ่งภายในพารามิเตอร์เหล่านั้นตัวประมวลผลจะทำงานแบบธรรมดา การผลักสิ่งต่าง ๆ ข้างนอกซองจดหมายอาจทำให้โปรเซสเซอร์มีความน่าเชื่อถือเพียง 99.9999999 เท่านั้น นั่นอาจฟังดูไม่เลวร้ายนัก แต่การพยายามวิเคราะห์โปรเซสเซอร์ที่ทำสิ่งผิดพลาดโดยพลการครั้งละหนึ่งนาที (การหา 16MHz) นั้นไม่สนุก


2
มันเป็นการดีที่จะทราบว่าชุดเกราะ EEPROM เขียนเพียงทำให้การก่ออิฐเต็มรูปแบบของอุปกรณ์มีโอกาสน้อยลงทางสถิติมันไม่ได้ทำอะไรมากนักที่จะทำให้การกระทำผิดพลาดมีโอกาสน้อยลง อย่างไรก็ตามดูเหมือนว่าเป็นนโยบายที่ดี ฉันตกใจที่ความน่าเชื่อถือ 9 แห่งมีความน่าจะเป็นสูงของความล้มเหลวในหนึ่งนาทีด้วยความเร็วเพียง 16 เมกะเฮิรตซ์
Kevin Vermeer

@Kevin Vermeer: ​​มักจะยากที่จะตรวจสอบให้แน่ใจว่าอุปกรณ์จะไม่ทำงานออกจากพื้นที่ปฏิบัติการที่ปลอดภัยเนื่องจากความเป็นไปได้ของอุปกรณไฟฟ้า, เหตุการณ์ไฟฟ้าสถิต, ฯลฯ การหุ้มเกราะ EEPROM ไม่ได้ออกแบบมาเพื่อการดำเนินการที่ผิดพลาด - เป็นตัวอย่างของวิธีการลดผลที่ตามมา เทคนิคที่คล้ายกันมักจะมีประโยชน์สำหรับรหัสที่ทำงานกับฮาร์ดแวร์ภายนอก เราไม่ควรพึ่งพาโค้ดสำหรับระบบที่สำคัญต่อความปลอดภัย แต่ในตัวอย่างเช่นผู้ผลิตฉลากอาจใช้ตรรกะเช่นด้านบนเพื่อป้องกันตัวควบคุมการป้อนฉลากดังนั้นการดำเนินการแบบสุ่มจะไม่ทำลาย $ 5 ในสต็อกฉลาก
supercat

เพื่อความชัดเจนฉันกำลังพูดถึงเฉพาะเกี่ยวกับไมโครคอนโทรลเลอร์ Atmel AVR - ซึ่งแตกต่างจากตัวประมวลผลวัตถุประสงค์ทั่วไป ...
vicatcu

2
@vicatcu: มีวิธีการบางอย่างที่คุณคิดว่าแตกต่างจาก PIC, 8x51, 68HC05, ARM หรือไม่? หรือสำหรับเรื่องนั้นซีพียูรุ่นเก่าเช่น 6502 หรือ Z80 ใน CPU ที่ทันสมัยการโอเวอร์คล็อกอาจทำให้เกิดความร้อนสูงเกินไปในตัวเอง แต่ในซีพียูที่เล็กลงหรือช้าลงนั่นคือการไม่มีปัญหาที่ความเร็วใด ๆ ที่อุปกรณ์จะมีโอกาสในการทำงาน
supercat

3

คำตอบที่ง่ายสำหรับคำถามของคุณ:

การทำงานนอก "พื้นที่ปลอดภัยความเร็ว" อาจทำให้ระบบของคุณไม่เสถียร มันหมายความว่าอะไร? ผลการคำนวณผิดพลาดไมโครคอนโทรลเลอร์รีเซ็ตเป็นต้น

หากคุณต้องการทำเพื่อความสนุกคุณควรดูที่หน้า / บทความเหล่านี้:

โอเวอร์คล็อก Arduino พร้อมระบายความร้อนด้วยไนโตรเจนเหลว 20⇒65.3Mhzที่ -196 ° C / -320 ° F

ATmega328 โอเวอร์คล็อก (30MHz)


3

ข้อพิจารณาหนึ่งยังไม่ได้กล่าวถึงซึ่งเกี่ยวข้องกับการใช้งานที่ความถี่ที่ถูกต้องในช่วงแรงดันไฟฟ้าที่ไม่ถูกต้อง (16MHz ที่ 3.3V) แต่การทำงานที่ความถี่ไม่ถูกต้องที่ช่วงแรงดันไฟฟ้าที่ถูกต้อง (24MHz ที่ 5V) คือการกระจายความร้อน

ทุกครั้งที่ประตูในชิปเปิดหรือปิดจะกระจายความร้อน เกตที่ประกอบขึ้นจาก MOSFET ทำหน้าที่เหมือนตัวต้านทานผันแปรในช่วงเวลาระหว่างเปิดและปิดหรือปิดและเปิด ตัวต้านทานนั้นแน่นอนกระจายความร้อน ยิ่งมีการสลับบ่อยครั้งยิ่งใช้เวลาน้อยลงระหว่างการสลับเพื่อให้ความร้อนกระจายออกจากชิปและคุณเสี่ยงต่อการเกิดความร้อน

ยิ่งคุณวิ่งเร็วเท่าไหร่ความร้อนก็ยิ่งเพิ่มมากขึ้นเท่านั้น นั่นเป็นสาเหตุที่พีซีซีพียูมีแฟนตัวยงพวกเขา - พวกมันสลับเร็วมากพวกเขาไม่สามารถเอาความร้อนออกมาจากชิปเร็วพอดังนั้นพวกเขาจึงต้องการความช่วยเหลือ

ความเร็วสูงสุดของชิปถูกเลือกเพื่ออนุญาตให้ชิปกระจายความร้อนได้อย่างน่าเชื่อถือภายใต้เงื่อนไขการใช้งานที่ถูกต้อง (เช่นอุณหภูมิแวดล้อมปกติสูงสุด 85 ° C หรือ 105 ° C เป็นต้น) การใช้ความถี่เกินกว่านั้นอาจทำให้ชิปร้อนเกินไป

ใช่เป็นไปได้ที่จะเรียกใช้ชิปเร็วกว่าที่ตั้งใจหากคุณให้ความช่วยเหลือบางประการ - เช่นฮีตซิงก์และพัดลมอาจแน่ใจได้ว่ามีการไหลเวียนของอากาศที่ดีรอบ ๆ แต่แน่นอนว่าในวันที่อากาศอบอุ่นในฤดูร้อนคุณอาจพบว่าอุปกรณ์ทำงานได้อย่างสมบูรณ์แบบทุกฤดูหนาวก็เริ่มทำสิ่งแปลก ๆ

อีกสิ่งที่ควรพิจารณาคืออัตราการฆ่า สัญญาณนาฬิกา (และสัญญาณอื่น ๆ ด้วย) ใช้เวลาเพิ่มขึ้นหรือลดลงถึงระดับที่ต้องการ ถ้า internals ของชิปหมายถึงสัญญาณนาฬิกาจะบอกว่า 15ns เพิ่มขึ้นจาก LOW เป็น HIGH และคุณลองและนาฬิกาด้วยความถี่ที่มีระยะเวลา HIGH บอกว่า 42ns (24MHz) ที่เหลือเพียง 27ns ของนาฬิกาที่ถูกต้อง เหลือระยะเวลา นั่นเป็นเพียง 64% ของนาฬิกาจริง ๆ แล้วเป็นสัญญาณนาฬิกาส่วนที่เหลือเป็นขยะ เช่นเดียวกันสำหรับ IO pins สิ่งต่าง ๆ เช่นสัญญาณนาฬิกา SPI จะถูก จำกัด โดยอัตราการฆ่าของพิน IO ดังนั้นหากคุณโอเวอร์คล็อกชิพของคุณเพื่อรับ SPI ที่เร็วขึ้นคุณจะพบสิ่งต่าง ๆ ไม่ได้เป็นไปตามแผนที่วางไว้เนื่องจากคลื่นสี่เหลี่ยมที่สวยงามที่คุณคาดหวังจากสัญญาณนาฬิกา ไม่ได้เป็นรูปสี่เหลี่ยมอีกต่อไป


1

อุปกรณ์อาจไม่ทำงานที่แรงดันไฟฟ้า / อุณหภูมิรวมกัน


รับว่ามันไม่ทำงานในบางแรงดัน / อุณหภูมิ (3.3V และ 25C) ไม่นาฬิกาเพียงดำเนินการตามแนวพรมแดนมากกว่าความถี่จัดอันดับคริสตัลหรือไม่ "อาจไม่ทำงาน" เป็นสิ่งที่คลุมเครืออย่างน่ากลัว ...
vicatcu

@ vicatcu - "คลุมเครืออย่างยิ่งเป็นพิเศษ* สเป็คที่คุณได้รับ" อาจไม่ทำงาน "คือสเปคที่ตรงกับขอบเขตที่ใช้งานได้ดังนั้นคุณจึงมั่นใจได้ว่าจะมีความปลอดภัยมากแค่ไหน ...
Russell McMahon

ฮ่าฮ่าใช่ฉันไม่เคยออกแบบจากข้อมูลจำเพาะฉันขอให้สิ่งนี้เป็นเรื่องกวน ๆ
vicatcu

@vicatcu: บางครั้งดูเหมือนว่าแทบจะเป็นไปไม่ได้เลยที่จะหลีกเลี่ยงการออกแบบอย่างน้อยเรียกว่าข้อมูลจำเพาะ ตัวอย่างเช่นหากอุปกรณ์สองเครื่องระบุ VOut (สูงสุด) และ VIn (สูงสุด) ทั้งสองเป็น VDD และอีกอุปกรณ์หนึ่งเชื่อมต่อเอาท์พุทของแต่ละอุปกรณ์เข้ากับอินพุตของอุปกรณ์อื่นแม้ว่าอุปกรณ์เหล่านั้นจะเชื่อมต่อกับรางเดียวกันก็ตาม ดูว่ามีใครรับประกันได้ว่ากระแสชั่วขณะชั่วคราวในอุปกรณ์หนึ่งไม่สามารถทำให้ VDD ลดลงแม้แต่ microvolt ที่ต่ำกว่าแรงดันไฟฟ้าที่ส่งออกโดยอุปกรณ์อื่น ถ้าเป็นเช่นนั้นนั่นอาจเกินเงื่อนไขการทำงานที่ระบุว่าอินพุตนั้นต้องไม่เกิน VDD
supercat

1
@ vicatcu: แน่นอนฉันคิดว่าวิศวกรส่วนใหญ่จะคิดว่าวิธีการสร้างอุปกรณ์ทางกายภาพเกือบจะรับประกันการมีอยู่ของความอดทนอย่างน้อยสองสามมิลลิโวลต์ในสิ่งต่าง ๆ แต่แผ่นข้อมูลจำนวนมากไม่ได้ระบุอะไรเลย ไม่แน่ใจว่าทำไม ฉันสามารถเข้าใจผู้ผลิตที่ไม่ต้องการระบุสิ่งที่ใกล้เคียงกับส่วนของวันนี้ที่จะยอมรับโดยไม่มีปัญหา แต่การระบุสิ่งที่ดูเหมือนจะดีกว่าไม่ได้ระบุอะไรเลย
supercat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.