AVRの「オーバークロック」


12

電気的特性セクションのAVRデータシートには、通常、次のようなグラフがあります(これはATMega328のものです)。

ここに画像の説明を入力してください

「動作している」ように見えても、影付きのエンベロープの外側で動作するデザインを見てきました。具体的には、外部16MHzクリスタルからクロックを実行する3.3V(Arduino)デザインを見てきました。明らかに、これは仕様外です。このエンベロープの外側を実行すると、実際にマイナスの影響は何ですか


13
仕様でsortofのみを実行すると、sortofのみが機能します。
オリンラスロップ

ばかげているように見えるかもしれませんが、XTalを交換できませんでしたか?
ホセイン

良いアイデアではありませんが、ほとんどの場合は機能しないでしょうし、とにかく1 MIPS未満を20 MIPSプロセッサに追加しても、AVRが100%クラッシュすることはほとんどありません。内部信号のセットアップ時間とホールド時間、最大周波数を維持する必要があります。AVR内の最も重要な信号経路で最悪のシナリオを取ります。製造上のばらつきにより、1つのチップがオーバークロックの影響を受けにくくなりますが、コア自体が正常に動作しても、周辺機器が別のバッチの別のチップで複製できます。
user34920 14

1
冗談を再利用するには:「彼らが仕様の範囲内で私たちに時間をかけるふりをするなら、私たちは働くふりをします。」
nitro2k01 14年

これは馬鹿げた質問かもしれませんが、8MHzでのみ動作するMini Pro-3.3vを除き、すべてのAVR Arduinosは5vで動作すると思いました...または、見たことのない高速な3.3vモデルはありますか?
ジュール

回答:


42

人生をもっと面白くする方法101:

  • 気にしないなら

    ことは、あなたの結果は時々 、間違っている可能性があり
    、あなたのシステムは時々 、クラッシュすることがあることを
    、あなたの人生をより面白くあり得ることを
    、あなたのセグウェイのクローンはたまにしかいない明白な理由のために顔プラントを行うという
    ことを...

    その後、必ずメーカーの仕様外の部品を実行します

あなたが支払わないものを手に入れます。
10ドルの頭がある場合は、10ドルのヘルメットを購入します。

それはしばしば機能するかもしれません。
時々動作しない場合があります。
時々動作しないことは明らかではないかもしれません。

  • 通常、除算が機能する場合があります
  • 通常、ジャンプが到着する場合があります。
  • テーブルが正しく検索される場合があります。
  • ADC値が正しい場合があります。

    か否か

    ここに画像の説明を入力してください


4
私はこの答えが大好きですlol
vicatcu

2
これは素晴らしいです。
アンドレイVihrov

6
実際、10ドルの頭がある場合は、10ドルの* potential_of_catastrophic_failureヘルメットを購入する必要があります。
ニックジョンソン

4
新しい壁紙
-Rick_2047

4
これは天才です。「セグウェイクローンは、明白な理由なしにたまにしか顔面植物をしないことを気にしない場合(...)」
カミル14

14

この種の速度では、ほとんどのプロセッサは、特定のクロックサイクルで必要となるすべての信号を計算し、安定している間次のクロックエッジを待機し、それらの信号をすべてラッチして、次のクロックサイクルで必要な信号を計算することで動作します、必要な信号が安定する前にクロックエッジが到着すると、安定していない信号がきれいにラッチされない可能性があります。これがマイクロコントローラーで発生する場合、少なくとも2つの理由により、効果が予測できない場合があります。

  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()
    
    void eep_do_write(void)
    {
      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();
    }  
    
    アドレスとデータがロードされる前に「eep_checksum = 0xC0DEFACE」が実行されない限り、eeprom_writeルーチンがデータを書き込もうとすることはほとんどありません。その実行後、チェックサムを適切な値に調整し、eeprom_storeルーチンを呼び出す前に、述語の有効性がチェックされます。
  2. 不正なコードの実行によって引き起こされる明確なリスクに加えて、潜在的なランダムな動作の別の原因は準安定性です。通常、どのサイクルでも、すべてのフリップフロップはハイまたはローをラッチします。ただし、フリップフロップへの入力がクロックの到着と同時に変化すると、次のクロックサイクルまで、任意のパターンで、ハイとローの間で任意に反転する可能性のある奇妙な出力を任意の期間出力する可能性があります。フリップフロップの下流の一部のデバイスが「高」と見なし、他のデバイスが「低」と見なすことは完全に可能です。一般に、プロセッサは、実行することに同意する多くのデバイスに依存します。「等しくない場合の分岐」命令の実行中に、分岐を行うべきであると考える回路と、そうでない回路がある回路がある場合、

製造業者は、これらのパラメーター内でプロセッサーが単純に動作するように、プロセッサーの動作パラメーターを指定します。そのエンベロープの外側に物を押し込むと、プロセッサの信頼性が99.9999999に低下する場合があります。それはそれほど悪くないように聞こえるかもしれませんが、1分に1回程度(16MHzを構成する)何かをwrong意的に間違っているプロセッサを診断しようとするのは楽しいことではありません。


2
EEPROMの書き込みを装甲すると統計的にデバイスの完全なブリックが発生する可能性が低くなり、誤った実行を行う可能性が低くなることに注意してください。それにもかかわらず、それは良い政策のようです。9 MHzの信頼性は、わずか16 MHzで1分間に非常に高い確率で失敗することに驚いています。
ケビンフェルメール

@Kevin Vermeer:電源のたるみ、静電現象などの可能性があるため、デバイスが安全な動作領域外で動作しないことを保証するのは難しい場合があります。 -結果を最小限に抑える方法の例です。同様の手法は、外部ハードウェアを操作するコードに役立つことがよくあります。セーフティクリティカルなシステムのコードに依存するべきではありませんが、たとえばラベルメーカーでは、上記のようなロジックを使用してラベルフィードコントロールを保護することができます。
supercat

明確にするために、私は特にAtmel AVRマイクロコントローラーについて話している-それは汎用プロセッサーとは非常に異なっている
...-vicatcu

2
@vicatcu:PIC、8x51、68HC05、ARMなどとは異なると考えている特定の方法はありますか?それとも、6502やZ80などの古いCPUですか?最近のCPUでは、オーバークロックは自己破壊的な過熱を引き起こす可能性がありますが、それよりも小さいまたは遅いCPUでは、デバイスが動作する可能性のある速度では問題になりません。
-supercat

3

あなたの質問に対する簡単な答え:

「安全な速度領域」外で作業すると、システムが不安定になる場合があります。どういう意味?間違った計算結果、マイクロコントローラーのリセットなど。

あなたがただ楽しみのためにそれをしたい場合は、これらのページ/記事を見てください:

液体窒素冷却によるArduinoのオーバークロック。20⇒65.3Mhz@ -196°C / -320°F

ATmega328オーバークロック(30MHz)


3

まだ言及されていない考慮事項の1つは、無効な電圧範囲(3.3Vで16MHz)での有効な周波数での動作ではなく、有効な電圧範囲(5Vで24MHz)での無効な周波数での動作に関するものです。

チップのゲートがオンまたはオフになるたびに、熱を放散します。MOSFETで構成されているゲートは、オンとオフの間、またはオフとオンの間の期間では可変抵抗器のように機能します。もちろん、その抵抗は熱を放散します。頻繁に切り替わるほど、その熱が切り替わってチップから放散されるまでの時間が短くなり、熱が蓄積するリスクがあります。

エルゴは、走る速度が速いほど、より多くの熱を蓄積できます。それが、PC CPUに大きなファンが付いている理由です-彼らは非常に速く切り替わるので、チップから十分な速さで熱を逃すことができないので、助けが必要です。

チップの最高定格速度は、有効な動作条件(周囲温度、通常は最大85°Cまたは105°Cなど)でチップが確実に発熱を散逸できるように選択されます。その周波数を超えると、チップが過熱する可能性があります。

はい。ヒートシンクやファンなど、何らかの支援を提供し、周囲に適切な空気の流れがあることを確認すれば、意図したよりも高速にチップを実行できる可能性があります。しかし、もちろん、夏の暖かい日には、冬の間ずっと完璧に機能するデバイスが突然奇妙なことを始めます。

考慮すべきもう1つのことは、スルーレートのことです。クロック信号(および他の信号も)は、希望するレベルまで上昇または下降するのに時間がかかります。チップの内部が、クロック信号がLOWからHIGHに立ち上がるのに15nsかかることを意味し、HIGH周期が42ns(24MHz)などの周波数でクロックしようとすると、有効なクロックは27nsだけになります残りの期間。これは実際にクロック信号であるクロックの64%に過ぎません-残りはゴミです。IOピンについても同じです。SPIクロック出力などは、IOピンのスルーレートによって制限されるため、チップをオーバークロックしてSPIを高速化すると、クロック出力から期待されるすてきな方形波のように、常に計画どおりに進まないことがあります正方形ではありません。


1

デバイスは、電圧/温度の組み合わせによっては動作しない場合があります。


それが与えられたことを行い、いくつかの電圧/温度(3.3Vおよび25℃)で仕事をちょうど境界ではなく、結晶の定格周波数に沿って動作クロックのでしょうか?「機能しない可能性があります」は非常に曖昧です...
vicatcu

@vicatcu-「ひどくあいまいなのは、あなたが得た仕様です。「機能しないかもしれません」は、まさに仕様です。境界上では機能します。 ...
ラッセルマクマホン

笑、仕様外のデザインは決してしません。これは少し挑発的であるように頼んでいました
vicatcu

@vicatcu:少なくとも名目上仕様外の設計を避けることがほとんど不可能に思えることがあります。たとえば、2つのデバイスがVOut(Max)とVIn(Max)の両方をVDDとして指定し、一方がそれぞれの出力を他方の入力に接続する場合、同じレールに配線されていてもあるデバイスの瞬間的な過渡電流によって、そのVDDが他のデバイスの出力電圧よりも1マイクロボルト低くなることを保証できないことを確認してください。その場合、入力がVDDを超えてはならないという指定の動作条件を超える可能性があります。
supercat

1
@vicatcu:もちろん、ほとんどのエンジニアは、デバイスの物理的な構築方法によって、こうしたものに対する少なくとも数ミリボルトの耐性の存在がほぼ保証されると考えていると思いますが、多くのデータシートには何も明記されていません。理由はわかりません。今日の部品が問題なく受け入れるものに近いものを指定したくない製造業者を理解することができますが、何かを指定することは何も指定しないよりも良いように思えます。
supercat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.