"Overclocking" sebuah AVR

12

Dalam lembar data AVR di bawah bagian Karakteristik Listrik, Anda biasanya akan menemukan grafik seperti ini (yang ini dari ATMega328):

masukkan deskripsi gambar di sini

Saya telah melihat desain yang tampaknya "bekerja" tetapi beroperasi di luar amplop teduh. Secara khusus, saya telah melihat desain 3.3V (Arduino) yang menjalankan jam dari kristal 16MHz eksternal. Jelas, ini di luar spesifikasi. Apa konsekuensi negatif praktis dari menjalankan di luar amplop ini?

vicatcu
sumber
13
Jika Anda hanya menjalankannya di spec, maka itu hanya akan berfungsi.
Olin Lathrop
Mungkin terlihat bodoh tetapi tidak bisakah Anda mengganti XTal?
Hossein
Bukan ide yang baik, kemungkinan besar itu tidak akan berhasil dan lagi pula Anda mendapatkan sangat sedikit dari menambahkan di bawah 1 MIPS ke prosesor 20 MIPS, di atas itu saya 100% AVR akan crash. Anda harus tetap mengatur dan menahan waktu untuk sinyal internal, freq maks. mengambil skenario kasus yang lebih buruk di jalur sinyal paling kritis di dalam AVR, variasi pembuatan mungkin membuat satu chip sedikit lebih kebal terhadap overclocking tetapi dengan sangat sedikit dan ingat bahwa bahkan jika inti itu sendiri berjalan dengan baik itu tidak berarti periferal akan atau bahwa Anda dapat mereplikasi dengan chip lain dari batch yang berbeda.
user34920
1
Untuk membuat ulang lelucon: "Jika mereka akan berpura-pura memberi tahu kami dalam spec, kami akan berpura-pura bekerja."
nitro2k01
Ini mungkin pertanyaan bodoh, tapi saya pikir semua Arduinos AVR berlari pada 5v, kecuali Mini Pro-3.3v yang hanya berjalan pada 8MHz ... atau ada model 3.3V lebih cepat yang belum saya lihat?
Jules

Jawaban:

42

Cara membuat hidup lebih menarik 101:

  • Jika kamu tidak peduli

    bahwa hasil Anda kadang-kadang mungkin salah,
    bahwa sistem Anda terkadang macet,
    bahwa hidup Anda mungkin lebih menarik,
    bahwa kloning Segway Anda hanya sesekali melakukan face-plant tanpa alasan yang jelas,
    bahwa ...

    kemudian dengan segala cara menjalankan bagian di luar spesifikasi pabrikan

Anda mendapatkan apa yang tidak Anda bayar.
Jika Anda memiliki kepala $ 10, beli helm $ 10.

Mungkin sering berhasil.
Terkadang mungkin tidak berhasil.
Mungkin tidak jelas bahwa kadang-kadang tidak berfungsi.

  • Pemisahan biasanya berhasil
  • Lompatan biasanya tiba.
  • Sebuah tabel dapat dilihat dengan benar.
  • Nilai ADC mungkin benar.

    Atau tidak

    masukkan deskripsi gambar di sini

Russell McMahon
sumber
4
Saya suka jawaban ini lol
vicatcu
2
Ini luar biasa.
Andrey Vihrov
6
Sebenarnya, jika Anda memiliki kepala $ 10, Anda harus membeli helm $ 10 * probability_of_catastrophic_failure.
Nick Johnson
4
Saya menemukan wallpaper baru saya
Rick_2047
4
Ini jenius: "Jika Anda tidak peduli (...) bahwa klon Segway Anda hanya sesekali melakukan face-plant tanpa alasan yang jelas"
Kamil
14

Pada kecepatan seperti ini, sebagian besar prosesor bekerja dengan menghitung semua sinyal yang akan diperlukan pada siklus jam tertentu, menunggu tepi jam berikutnya sementara mereka stabil, mengunci semua sinyal dan menghitung sinyal yang diperlukan pada siklus jam berikutnya , menunggu tepi itu sementara sinyal-sinyal tersebut stabil, dll. Jika tepi jam tiba sebelum sinyal-sinyal yang diperlukan telah stabil, efeknya adalah bahwa sinyal mana pun yang belum stabil mungkin tidak terkunci dengan benar. Jika ini terjadi pada mikrokontroler, efeknya mungkin tidak dapat diprediksi - setidaknya karena dua alasan:

  1. Dalam banyak kasus, kecepatan eksekusi dibatasi oleh waktu respons larik flash tempat prosesor membaca kode. Jika menjalankan prosesor terlalu cepat menyebabkan bit sesekali menjadi salah baca di sini atau di sana, itu dapat dengan mudah menyebabkan prosesor mengeksekusi kode yang sama sekali berbeda dari apa yang dimaksudkan. Dalam banyak program, bahkan kesalahan satu bit satu kali saja dapat secara radikal mengubah perilaku; jarang praktis untuk mencoba membuat prediksi tentang apa yang mungkin terjadi dalam kasus-kasus seperti itu. Yang terbaik dapat dilakukan dalam beberapa kasus adalah "pelindung" bagian-bagian tertentu dari program sehingga membuat eksekusi yang salah tidak mungkin. Misalnya, seseorang dapat membiarkan EEPROM terlindungi sampai seseorang ingin menulisnya, dan kemudian menggunakan kode seperti:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (alamat, data, predikat) \
      eep_checksum = 0xC0DEFACE, eep_addr = (alamat), eep_data = (data), \ 
      eep_checksum + = eep_addr + eep_data, ((predikat) || HARD_CRASH ()), \
      eep_checksum + = (0xCAFEBABE - C0DEFACE), eep_do_write ()
    
    membatalkan eep_do_write (batal)
    {
      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 ();
    }  
    
    Sangat tidak mungkin bahwa rutin eeprom_write akan berusaha menulis data kecuali "eep_checksum = 0xC0DEFACE" dijalankan sebelum alamat dan data dimuat. Setelah eksekusi itu, predikat akan diperiksa validitasnya sebelum menyesuaikan checksum ke nilai yang tepat dan memanggil rutin eeprom_store.
  2. Selain risiko yang jelas yang ditimbulkan oleh mengeksekusi kode yang salah, sumber lain perilaku acak potensial adalah metastabilitas. Biasanya, pada siklus apa pun, setiap flip flop akan mengunci tinggi atau rendah. Namun, jika input ke flip flop berubah tepat ketika jam tiba, mungkin untuk beberapa durasi waktu sewenang-wenang hal-hal aneh yang dapat berubah secara acak antara tinggi dan rendah, dalam pola apa pun, sampai siklus clock berikutnya; sangat mungkin bahwa beberapa perangkat hilir dari flip flop akan melihatnya sebagai "tinggi" sementara yang lain melihatnya sebagai "rendah". Secara umum, prosesor mengandalkan banyak perangkat yang menyetujui apa yang akan mereka lakukan. Jika selama pelaksanaan instruksi "pengurangan-dan-cabang-jika-tidak-sama", dan beberapa sirkuit berpikir cabang harus diambil tetapi yang lain tidak,

Produsen menentukan parameter operasi untuk prosesor sedemikian rupa sehingga, dalam parameter tersebut, prosesor hanya akan berfungsi. Mendorong hal-hal di luar amplop dapat mengurangi prosesor menjadi hanya 99,9999999 dapat diandalkan. Itu mungkin kedengarannya tidak terlalu jahat, tetapi mencoba mendiagnosis prosesor yang melakukan kesalahan semau satu menit atau lebih (mencari 16MHz) tidak menyenangkan.

supercat
sumber
2
Akan lebih baik untuk dicatat bahwa armoring EEPROM menulis hanya membuat pemblokiran lengkap perangkat secara statistik lebih kecil kemungkinannya, itu tidak melakukan banyak hal untuk membuat eksekusi yang salah semakin kecil kemungkinannya. Meskipun demikian, sepertinya kebijakan yang baik. Saya kaget bahwa 9 sembilan keandalan memiliki probabilitas kegagalan yang tinggi dalam satu menit hanya pada 16 MHz.
Kevin Vermeer
@Kevin Vermeer: ​​Seringkali sulit untuk memastikan bahwa perangkat tidak akan pernah beroperasi di luar wilayah pengoperasian yang aman, mengingat kemungkinan jebol catu daya, peristiwa elektrostatik, dll. Pelindung lengan EEPROM tidak dirancang untuk membuat eksekusi yang salah lebih mungkin terjadi- -Itu ilustrasi tentang cara meminimalkan konsekuensi. Teknik serupa sering berguna untuk kode yang mengoperasikan perangkat keras eksternal. Seseorang seharusnya tidak bergantung pada kode untuk sistem yang kritis terhadap keselamatan, tetapi misalnya pembuat label yang mungkin menggunakan logika seperti di atas untuk menjaga kontrol pemberian label, sehingga eksekusi acak tidak akan menghancurkan $ 5 dalam stok label.
supercat
Untuk lebih jelasnya, saya berbicara secara spesifik tentang mikrokontroler Atmel AVR - yang sangat berbeda dari prosesor tujuan umum ...
vicatcu
2
@vicatcu: Apakah ada cara tertentu yang Anda pikirkan bahwa mereka berbeda dari PIC, 8x51, 68HC05, ARM, dll? Atau dalam hal ini, CPU yang lebih tua seperti 6502 atau Z80? Pada CPU modern, overclocking dapat menyebabkan overheating yang merusak diri sendiri, tetapi pada CPU yang lebih kecil atau lebih lambat, itu bukan masalah pada kecepatan apa pun di mana perangkat akan memiliki peluang untuk bekerja.
supercat
3

Satu pertimbangan belum disebutkan, yang kurang berkaitan dengan operasi pada frekuensi yang valid dalam rentang tegangan tidak valid (16MHz pada 3,3V) tetapi lebih terkait dengan berjalan pada frekuensi tidak valid pada rentang tegangan yang valid (24MHz pada 5V) adalah pembuangan panas.

Setiap kali gerbang dalam chip menyala atau mati, panasnya akan hilang. Gerbang, yang terdiri dari MOSFET, bertindak seperti resistor variabel pada periode antara AKTIF dan MATI, atau MATI dan AKTIF. Resistor itu tentu saja menghilangkan panas. Semakin sering ia beralih, semakin sedikit waktu yang ada di antara pergantian untuk panas yang hilang dari chip, dan Anda berisiko penumpukan panas.

Ergo, semakin cepat Anda berlari, semakin banyak panas yang menumpuk. Itulah mengapa CPU PC memiliki penggemar besar - mereka beralih begitu cepat sehingga tidak bisa mengeluarkan panas dari chip dengan cukup cepat, sehingga mereka membutuhkan bantuan.

Kecepatan nilai tertinggi dari chip dipilih untuk memungkinkan chip untuk membuang penumpukan panasnya secara andal di bawah kondisi operasi yang valid (misalnya, suhu sekitar, biasanya maks 85 ° C atau 105 ° C misalnya). Melebihi frekuensi itu dapat menyebabkan chip menjadi terlalu panas.

Ya, adalah mungkin untuk menjalankan chip lebih cepat dari yang dimaksudkan jika Anda memberikan bantuan - yaitu, pendingin dan mungkin kipas, dan memastikan ada aliran udara yang baik di sekitarnya. Tapi tentu saja, pada hari yang hangat di musim panas Anda mungkin menemukan apa yang berfungsi dengan baik sepanjang musim dingin tiba-tiba mulai melakukan hal-hal aneh.

Satu hal yang perlu dipertimbangkan adalah tingkat perubahan harga. Sinyal jam (dan sinyal lain juga) membutuhkan waktu untuk naik atau turun ke level yang diinginkan. Jika internal chip berarti sinyal clock membutuhkan waktu 15ns untuk naik dari RENDAH ke TINGGI, dan Anda mencoba dan clock pada frekuensi di mana periode TINGGI adalah, katakanlah 42ns (24MHz), yang hanya menyisakan 27ns dari jam yang valid periode tersisa. Itu hanya 64% dari jam yang benar-benar menjadi sinyal jam - sisanya adalah sampah. Hal yang sama untuk pin IO. Hal-hal seperti output clock SPI akan dibatasi oleh laju perubahan pin IO, jadi jika Anda overclock chip Anda untuk mendapatkan SPI lebih cepat, Anda akan menemukan hal-hal tidak selalu berjalan sesuai rencana, seperti gelombang persegi bagus yang Anda harapkan dari output clock tidak persegi lagi.

Majenko
sumber
1

Perangkat mungkin tidak berfungsi pada kombinasi tegangan / suhu.

Leon Heller
sumber
mengingat bahwa itu tidak bekerja di beberapa tegangan / suhu (3.3V dan 25C), apakah jam hanya beroperasi di sepanjang batas bukan dinilai frekuensi kristal? "mungkin tidak bekerja" sangat samar-samar ...
vicatcu
@vicatcu - "Sangat kabur persis PERSIS * spesifikasi yang Anda dapatkan." Mungkin tidak bekerja "adalah ** PERSIS spec. PADA batas akan bekerja. Jadi Anda dapat yakin bahwa ada beberapa margin keselamatan. Seberapa besar? Buat hari mereka ...
Russell McMahon
haha ya, saya tidak pernah mendesain dari spec, saya meminta ini menjadi sedikit provokatif
vicatcu
@vicatcu: Kadang-kadang tampaknya hampir mustahil untuk menghindari mendesain setidaknya nominal keluar dari spesifikasi. Misalnya, jika dua perangkat menentukan VOut (Max) dan VIn (Max) keduanya sebagai VDD, dan satu menghubungkan output masing-masing ke input yang lain, bahkan jika mereka terhubung ke rel yang sama saya tidak lihat bagaimana seseorang dapat menjamin bahwa transient arus sesaat dalam satu perangkat tidak dapat menyebabkan VDD-nya jatuh bahkan microvolt di bawah output tegangan oleh perangkat lain. Jika melakukannya, itu bisa melebihi kondisi operasi yang ditentukan sehingga input tidak boleh melebihi VDD.
supercat
1
@vicatcu: Tentu saja, saya pikir sebagian besar insinyur akan berpikir bahwa cara perangkat dibangun secara fisik akan hampir menjamin adanya setidaknya beberapa millivolt toleransi pada hal-hal seperti itu, tetapi banyak lembar data tidak menentukan apa pun. Tidak yakin kenapa. Saya dapat memahami produsen yang tidak ingin menentukan apa pun yang dekat dengan apa yang akan diterima bagian saat ini tanpa masalah, tetapi menentukan sesuatu akan tampak lebih baik daripada tidak menentukan apa pun.
supercat