2017-01-18 11 views
0

私はArduinoとマイクロコントローラを初めて使用しています。ArduinoボードでCPU周波数は何を表していますか?

私はスペックを勉強しても、同じボードは、異なる入力電圧(5V対3.3V)と異なる周波数を有することができることが判明しました。だから問題は、周波数はどういう意味ですか?実行可能なアセンブリコードの行数を表しますか?または出力できる最大PWM周波数?

さらに、問題は、私は特定のプロジェクトのためのボードを探していた場合、どのように私は演繹的に必要となる周波数を決めるのではなく、すべてのものを試して、もう1つは働くかを確認します、でしょうか?私はもっ​​と混乱して作る何

は、コンピュータのCPUに来るとき、より低い周波数のCPUが実際に速く、より高い周波数のもの(例えば、インテル)よりも実行できるようだということです。では、マイクロコントローラがどれだけ速く動作するかを実際にどのように知っていますか?

+0

「より低い周波数のCPUは、実際にはインテルなどのより高い周波数のCPUよりも高速に実行できるように思われる」とはどういう意味ですか? –

+1

AVRが一般的なCPUよりも速いのはなぜだと思いますか? –

+0

最後の1つ:コンピュータのCPUには、mpeg解読、暗号化、ネットワークチェックサムの計算などの一般的なコンピューティングタスクを加速するために使用される余分な部分がたくさんあります。これらのサブタスクは多くの "メインCPU"一部の低速クロックCPUでは、高速化されていないクロックよりも高速にコードを実行できます。同じ考え方では、ハードウェアSPIまたはシリアルは、CPUのタイミングとスロットルを削除する必要があるビットバンギングバージョンよりもはるかに少ないCPUを使用します。これらのソフトケースでは、クロック速度がより速いため、「エミュレーション」がより正確で一貫性があります。 – dandavis

答えて

2

周波数とは、CPUクロックの周波数を意味します。 Arduino Unoが16MHzで動作しているとします。これは1600万ヘルツです。 これは、毎秒1600クロックサイクルがあることを意味します。 CPUはプログラムのバイトコードを実行します。 1つのアセンブラ命令は、実際には実行に必要なCPUサイクル数を取ることができます。通常、単純な処理では1〜4サイクル、メモリへの演算と書き込みは少し重くなります。したがって、1秒あたりに実行できる「アセンブラの行数」(つまり、バイトコード命令)の概算です。少し上手くいく測定値は、 "MIPS"値、 "1秒あたりの命令数百万"です。より正確なCPUのベンチマークタイプもあります。

あなたはAVRマイクロプロセッサ・アーキテクチャのためのデータシートで取る場合は、それぞれの命令が必要とするサイクル見ることができます:(リンク:http://www.atmel.com/images/Atmel-0856-AVR-Instruction-Set-Manual.pdfADD Rd, Rr命令、AVR CPUのニーズにそう

clock timings

を1クロックサイクル。

たとえば、デスクトップのIntel CPUを使用します。最近では、ArduinoのAVR CPUの1秒間に1600万サイクルに比べて、20億回/秒のクロック周波数を持つことが一般的です。 IntelのCPUはArduinoをはるかに上回っています。また、Arduinoは、さまざまなもののために設計されています。オーバーヘッドの少ない小型のマイクロコントローラで、OSなどはありません。このようなCPU(およびアーキテクチャ)のユースケースはまったく違っています。マルチコアCPU(4つのインテルCPUコア対1つのAVR)やコマンドパイプライン、メモリ/ RAMの速度など、他の多くの要因があります.CPUを使用するたびに別のCPUと比較するのは本当に難しいのです。 "汎用コンピューティング"の場合、デスクトップCPU(AMD、Intel、x64アーキテクチャ)は単なるArduino AVR CPUの処理能力をはるかに上回ります。

私は、これはいくつかの混乱をクリア願っています。

私はあなたが持っている1つの混乱はチップ特異的であってもよく、私は今、それをルックアップするつもりはないが、私はこれを見て覚えて、チップの仕様は、この入力電圧範囲のために、それは、この周波数を扱うことができると言うとためかもしれないと思う
+0

クロック周波数は出力ピンのPWM周波数とどのように関係しますか? – OneZero

+1

@OneZeroクロック周波数は、クロック周波数を設定可能なプリスケーラ値で割った値よりも速くならないように、PWM周波数に関連しています。ハードウェアPWMは、ハードウェアタイマーに基づいています。ハードウェアタイマーは、ビット単位の分解能を持ちます。 PWM周波数は基本的に 'f_PWM = f_CPU /(2 *プリスケーラ)'ですが、AVRの 'プリスケーラ 'は' 1,8,64,256,1024 'から選択できます。詳細については、https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWMおよびhttp://www.cs.mun.ca/~rod/Winter2007/4723/notes/timer0/timer0.htmlを参照してください。 –

+0

PWMは任意の周波数を出力することはできませんが、特定のレベルでのみ出力できますか?例えば、ピッチ音を作りたいと思ったら、ピッチは任意の周波数になるかもしれません。それはどのように機能するのですか? – OneZero

1

この電圧範囲ではできません。私はsparkfun 3.3は8mhzであり、5.0は16mhzかそのようなものだと思います。とにかく、それは一般的なケースではありませんが、それはベンダーのことでチップベンダーであり、そのためにデータシートを読む必要があります。 arduinosやavrsとはまったく関係がありません。一般的なチップ設計のものです。

はどのようにあなたのマイクロコントローラがどのように速く走ることができます知っていますか?それは非常に読み込まれた質問です、あなたの高速化の定義に依存します。単にクロック周波数であれば、その部分の「データシートを読んで」、ボードデザインによっては使用可能なものから選択してください。外部クロックがない場合は、選択肢があるかもしれません。より制限されているかもしれませんが、クロックソースを逓倍するために使用できるPLIがあるかもしれません。

あなたの定義が速い場合、このタスクを実行できますか、毎秒何回のwhattversか、または特定のタスクを完了するのに必要な壁時計の時間です。それはベンチマークの問題であり、本当に本当の答えがないほど多くの変数があります。はい、それは、x86は、より低いクロックを持って、他のx86よりも速く実行することができますが、歴史的に新しいものは、同じバイナリの古いものよりクロックあたりの処理量が少なくて済みますので、コンパイルを新しいチップmhzにあなたのmipsの一部を戻すかもしれません。これは、同じ言語(マシンコード)を話すだけの異なるチップデザインを使用していることもあります。あなたは短い人よりも速く詩を暗唱することができる背の高い人を持つことができます。英語と同じ詩を使用しても、短くても背の高いものとも関係ありません。

コアのバリエーションは異なりますが、x86アーキテクチャーとは異なるリモートではありません。 xmegaとxmegaとの比較は、レジスタやアドレス空間などが多いため、同じクロックレートでxmegaを「高速」に実行することができます。しかし、1秒あたりの命令はおそらく実際には違いはないかもしれませんが、私の推測はそれほどではありません。

コンパイラがありますが、コンパイラやコンパイラのバージョンやコンパイラの設定を変更したり、同じ高レベルのソースコード(例:C)から生成されたマシンコードを "速く"実行するには、その結果、コードの「スピード」に劇的な影響を与える可能性があります。たとえば、dhrystoneを取ってみると、同じ正確なチップ/ボード上の同じ正確なソースコード、同じクロックレートなどが、異なるコンパイラ、バージョン、またはコマンドライン設定を使用するか、ちょっとした証明ベンチマークのゴッドファーザーは、意味のある情報を提供するのに基本的に役に立たないということです。

マイクロコントローラは、多くの場合、フラッシュでプログラムを実行しているので、問題はさらに悪化しますが、多くはすべてではありませんが、多くは分割または乗算、または両方の機能を備えていますが、全範囲。あなたは8mhzで内部クロックで起動するチップを持っているかもしれませんが、あなたは80mhzと言うまでそれを乗算するためにPLLを使うことができます。しかし、フラッシュが16mhzというようなチップには限られているのは珍しいことではないので、8mhzでフラッシュはアイテムごとにCPUクロックを指示することができますが、20mhzでは待機状態にしなければなりません。あなたは16mhzでしか餌を食べることができないので、より多くを待っていて、何かを得ると速く行動します。それは本当に「速い」か、遅くなってしまいます。確かにこのファンタジーチップのわずか16mhz以下で、私はあなたがゼロ待機状態に保つことができるので、本当に速く、必ずしも他の要因が2倍ではないが間違いなく8mhzより速いことを説明しています。ちょうど16mhz以上に比べて巨大なパフォーマンスのヒットを取るが、16mhz以上。ちょうど32mhzのちょうど下に比較してかなり速いが32mhzのちょうどのところで、クロックが基本的に同じであるにもかかわらず、もうちょうど32mhzの別の待ち状態設定とはるかに遅い。

次に、CPUが実際にフェッチするのは、0x1004に分岐した場合にすべてを実行しなくても、フェッチトランザクションごとに多数のデータをフェッチするようなものです。アドレス0x2008への分岐がある場合、コアは0x1000から0x100Fまで0x10バイトをフェッチした後、0x1004ワード/命令を抽出し、それをデコードして分岐してから0x2000から0x10バイトを読み込みます。基本的に0x20バイトを読み取って2つの命令を検索します。両方が0x10バイトにある場合は2つの命令を実行し、1つが0x100Cにある場合には良好で、もう1つがパフォーマンスヒットである0x2000にある場合は、この内部情報を取得してアプリケーションに適用し、1行のコードを変更するか、または1つのnopをブートストラップに追加または削除すると(プログラムのアドレス空間が変更される)、パフォーマンスの大きな変化から小さなものへの変更、プログラムのソースコードの2つのヘルパー関数の置き換え、テキスト内でのコンパイル後に別のアドレス空間に上陸させることは、関数自体を実際に変更することなく、

パフォーマンスは、最初は尊敬の念を払うのは愚かな作業ですが、それ以外の点では、使用しているハードウェアで使用しているコンパイラで書かれたプログラムだけです。コンパイラの設定やコード、あるいはその両方を変更することで、その日のそのコンパイラでそのコードをより高速にするためにできることがあります。理想的には、最終的なファームウェア、パフォーマンステストを構築し、1年か2年後に別のコンパイラやコンパイラバージョンを使用して別のホストコンパイラを使用していて、すべてのベットが性能低下しているかのように、

どのようにボードを選びますか、どのくらいのフラッシュ、ラム、機能、クロックレート。多くのことが試行錯誤の経験ですが、幸いなことに、数百ドルのボードを試すことができ、数十ドルから数十ドル、それぞれのCPUのアーキテクチャが異なるチップベンダーなどがあります。多くのコンパイラの選択肢があり、使用できる言語さえありますが、基本的に選択肢が簡単に入手できない場合があります。部品がかなり安い日に戻ってくるのとは異なり、自分のボードを構築して、独自のアセンブラなどを作成することもできます。数百から数千ドルのロムプログラマが必要です。したがって、あなたが持っている機能とAVRを使い、コンパイラでプレイしたり、あるいはその両方を書くことができます。フェッチ効果があるかどうかを確認するための実験を行います。あなたがクロッキングの選択肢を持っていれば、何が起こるか見ることができます。

もちろん、これはすべて、ベンダーのチップドキュメントを読むことから始まります。

+0

周波数は理想的には "クロック"がどのくらい速いか、16Mhzは62.5ナノ秒ごとに論理が再評価され、状態が変わることを意味します。あなたがピアノを弾いていて、1秒に1回音符を変えることができるなら、前の音符または和音がその曲の次のコードを決定しますが、あなたは1つしか聞こえません。あなたはおそらくルールを変更して2時間を許してもいいかもしれませんが、おそらくそれを速くすることはできません。ロジックの場合と同じように速くしか動かすことができず、クロックをそこに置かなければならない。 –

関連する問題