エンベデッドシステムでアクティブハイとアクティブローの信号はどのように機能しますか?


8

これは、マイクロコントローラーが一般的にどのように機能するかについてです。

私たちが行うプログラミングは、コンパイラーによって1と0に変換され、これらの機械が理解できるコードがマイクロコントローラーにロードされます。

マイクロコントローラーはこれにどのように応答しますか?これらの1と0はDACによって対応するロジック電圧(5vと0)に変換されますか?そのような場合、この小さなシリコン片は、どのように5vと0vのこれらのさまざまな組み合わせをどうするかをどのように決定しますか?

すべてのICが論理ゲートで構成され、これらのゲートがトランジスタで構成されていることを理解しています。では、これらのトランジスタは5vと0vのさまざまな組み合わせにどのように応答するのですか?

彼らがこれらのロジックを探す理由は何ですか。電源が入っているときに、これらの命令をどのように監視するのですか

だから確かに、処理するように指示し、これらの命令を処理する方法を指示するオペレーティングシステムがmcuにロードされている必要がありますよね。

次に、タイマーについて考えてみます。これは、各クロックサイクルの後に1ずつインクリメントするレジスタです。OSが再び、各クロックの後にインクリメントするようにmcuに指示していませんか?私は正しいですか?その場合、オペレーティングシステムのすべてのコードはどの言語で記述されていますか?

さまざまなタスク用にmcuをプログラミングする作業に進むことができますが、今日、このマシンでコードがどのように理解されるのか知りたいと思いました。

質問が長くてすみません。これらの基本的なことを学んでください。

前もって感謝します..


私は...人々が自分のキャリアの開始時に質問のこれらの並べ替えを持っているだろうと仮定
VVラオ

削除されたメッセージは気分が悪い
Rick_2047

回答:


6

DACを使用する必要はありません。電圧は、0.8V(別名「低」)未満はゼロであり、2.4V(別名「高」)は1であるという慣例により、1と0を表すために使用されます。これらの代表的な電圧でロジックを実行する回路を構築するのは比較的簡単です。

たとえば、回路が2.4Vから5Vの範囲の何かを出力して、入力が2.4Vを超える場合、または0.8V未満の場合、「1」を表し、ORゲートがあります。2.4Vを出力するために1を表す両方の入力が必要な場合は、ANDゲートがあります。インバータは、入力がローのときにハイを出力し、その逆も同様です。非常に少数のトランジスタでこれらのような単純なゲートを構築し、組み合わせブール論理を実行できます。ビットのグループを使用して数値を表すことにより、ソフトウェアを必要とせずに、組み合わせロジックで数値を追加する回路を構築することもできます。

ゲートを操作したら、フリップフロップを作成し、そこからレジスタとカウンタを作成できます。フリップフロップを使用すると、ある時点からの1と0を保存し、後で使用できます。レジスタとカウンタは、数値を表すビットのグループに対して機能を実行する回路です。レジスタは、新しい数をロードするまで数を保持します。カウンターはレジスターのようなものですが、格納された数値を増加させる別の入力があります。(減少も可能です)。これにより、ステートマシンとシーケンシャルロジックの領域に入りますが、ソフトウェアは必要ありません。

メモリシステムは、大量のビットを格納する方法です。コンポーネントレベルでは、一部のメモリはフリップフロップの膨大なコレクションのように構築されますが、より一般的には、フリップフロップではないものの、同じことを行う別のテクノロジ(DRAM)があります。

次のステップとして、新しい値をメモリシステムに書き戻すなど、メモリシステムに格納されているビットに応じて操作を実行できる順次および組み合わせロジックのシステムを構築できます。これで、プロセッサのレベルに到達しました。プロセッサが行うすべてのことは、ハードウェアが多くの単純なタスクを実行するだけです。(にもかかわらず、マイクロプログラムされたコア)。この時点で、メモリシステムに配置するビットの特定の組み合わせは、機械語ソフトウェアと見なすことができます。


これで、トランジスタはプロセッサが作成されるベースであることを理解しました。つまり、ナンドのようなゲートを使用して、フリップフロップ、レジスタ、カウンタ、aluを作成し、これらすべてを組み合わせてコンピューティングシステムを作成できます。トランジスタ入力は高または​​低(2.4v以上または0.8v以下)です。私の質問は、DACが使用されていない場合、コンパイラからの1と0をこれらのトランジスタに対応するロジックとして解釈するデバイスは何ですか?
VV Rao

@Vicky Rao-あなたを混乱させているのは、抽象化のレベルを混ぜていることだと思います。ソフトウェア1と0、およびハードウェア1と0は、同じ物理的現実の異なるビューに過ぎないため、コンパイラ出力をトランジスタの論理レベルに変換する必要はありません。あるレベルでは何百万ものトランジスタが状態を変えるように見え、別のレベルではソフトウェアを実行しているプロセッサのように見えます。
JustJeff 2010年

6

Charles Petzoldによる「Code:The Hidden Language of Computer Hardware and Software」を入手してください。それは素晴らしく、読みやすく、それらの質問の多くに答えます。

Petzoldの本が手に入らない場合は、Roger Youngの「How Computers Work」をチェックしてください。それは同じものの多くをカバーし、HTMLとPDFバージョンは無料です。


また、 『The Elements of Computing systems』も参考になります。
Rick_2047、2011

5

NPN BJTを検討してください。トランジスタ。最初に発見されたものの1つ。

次に、コレクタを可変論理入力に接続し、エミッタを別の論理入力に接続し、抵抗を直列に接続します。次に、エミッタからグランドへの抵抗。

               logic
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 +-- output
                 |
                 /
                 \ 10k
                 /
                 |
                ---
                 -

ANDゲートを作成しました。両方の入力が高い場合にのみ、出力が高くなります。コレクターへの入力に依存するため、完璧ではありません。うまく機能しないためですが、トランジスターを使用して関数を計算する方法についてのアイデアが得られます。

次に、NOTゲートを作成することもできます。

                5V
                 |
                 /
                 \  10k
                 /
                 +-- output
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 |
                ---
                 -

これをANDゲートの出力に追加すると、NANDゲートが得られます。NANDゲートを使用すると、任意の形式のロジックを構築できることをご存知でしょう。また、信号がバッファリングされ、ファンアウトとチェーン機能が向上するという利点もあります。

実際のプロセッサはBJTを使用することはほとんどありませんが、代わりにCMOSロジックを使用しますが、同じ原理が適用されます。


あなたの代わりに:) NPNsのFETを使用することができます
endolith

それが、私がこれを追加した理由です。「実際のプロセッサはBJTを使用することはめったになく、代わりにCMOSロジックを使用しますが、同じ原理が適用されます。」n-JFETとn-MOSFETは、おそらくバルブのようなよりエストリックな形式と同様に機能します。
Thomas O

また、PNPを使用して、NPNとのANDと同じ方法でNOTを実行することもできます
Matt Williamson

3

多分あなたはいくつかのデジタルシステムリファレンスを調べるか、VHDLのようなものを調べるべきです。MCUは基本的に、さまざまなロジックゲートや(小さい)ビルディングブロックであるビルディングブロックで設計されています。最終的には、それはすべて実際にトランジスタで構成されている論理ゲートにまで及びます。PIC18Fなどの一般的なシンプルなMCUでは、オペレーティングシステムを実行しません。ロードするプログラムは、PICが継続的に実行する一連の機械語命令です。すべての処理はハードウェアによって行われます。

一般的なプロセッサには、通常、ALU(特定の命令の結果を計算する)と、命令をロードし、スタックを管理し、メモリを管理するブロックがさらにあります。プロセッサには、主に入力をロードして結果を格納するために、それ自体で動作するいくつかのレジスタがあります。Cまたは他の言語ではこれの多くは見られないが、アセンブリではその多くが見られる場合があります。

ALUは、特定のオペレーションコードと入力を使用して命令を処理します。たとえば、一般的な命令はADD 12 1で、12 + 1 = 13を意味します。結果は、プロセッサ自体のレジスタに格納されます。

アーキテクチャに応じて、ALUはたとえば8ビット幅です。単純な8ビット加算器は、8x 1ビット加算器を結合して構成できます(ブロックを使用してより大きなブロックを構築)。1ビット加算器は、ブール代数を使用して論理ゲートに簡単に書き込めます。論理ゲートのみを使用して手動で8ビット加算器全体を書き留めるのは、非常に面倒な作業です。これは、関数やサブルーチンをまったく使用できないプログラムを書くようなものです。

デジタルシステムを正しく機能させるために、ほとんどのブロックはクロックベースに設計されています。すべてのデジタルシステムには、その最終状態に達するまでに一定の時間が必要です。これは、トランジスタのスイッチング遅延と他の状態に影響を与える状態によるものです。クロック信号は、使い慣れたものであり、プロセッサが動作する速度です。タイマーは非常にシンプルなデバイスであり、小さな加算器ブロックがあり、クロックティックを取得するたびに1ずつ増加します。


3

これは大きな話題で、簡単な答えはできませんが...

あなたはいくつかの分割して征服することでこの答えに少し近づくことができます、そして他の答えはハードウェアの観点からこの問題を攻撃しようとするので、私は高レベルのSWビューから試みます。

たとえばcコード(非常に高度な抽象化)などのソフトウェアでソフトウェアを作成する場合、何が起こっているのか実際にはわかりませんが、質問している恋人たちのことをすべて理解していません。

しかし、とにかくそこから始めましょう。

変数を含めるだけの単純なプログラム。

int main(void)
{
    int i=0;
    while(1) {
        i++;
    }
}

次に、何が起こっているのかを理解できるように、アセンブラコードを取得する必要があります。この手順は、使用しているプラ​​ットフォームで実行できますが、簡単にするために、PCでgccを使用します(ただし、問題はありません...)

gcc -O0 -S main.c -o main.lst

その後、次のような結果になります。

    .file   "main.c"
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $0, -4(%ebp)
.L2:
    addl    $1, -4(%ebp)
    jmp .L2
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

次に、コードのすべての行とその機能を理解しようとします。

次に、すべての命令がどのように実装されているかを調べ始めます...たとえば、subl

    subl    $16, %esp

この時点では、アーキテクチャによって異なり、x86、arm、picも少し異なりますが、私の例はx86だったためです。

このレベルでは、コピーを読むと、ほとんどのアクションは数値を移動しているように見え、ある意味でこれが起こっています。あらかじめ定義されたプログラムがあります。このプログラムは、通常、あるロジックレベルをトラップするある種の電子ロジックである、ある種のフラッシュメモリに格納されます。

すべてのビットに何らかの「フリップフロップ」が表示される場合、あなたは一種の親密であり、それらの多くが必要です。ここで、1と0を見つけ始めます。

次に、いくつかのアクションを発生させるために、ある数値を別の数値(CPU自体)に変換できるクールなロジックを追加します。

次に、プログラムを1ステップずつ実行し、プログラムカウンター(PC)がある場所を確認します。そして、数値を前後に移動して、同様にフリップフロップ付きのグリッドのような別のメモリにそれらを格納します。

しかし、CPUをもう少しよく理解するために、ALUとこの簡略化された図を見て、特定の例に戻りましょう。このロジックブロックにデータを移動し、OPピンで何らかの操作を選択すると、出力で新しい結果が得られることがわかります。次に、記憶のどこかに戻ることができます。

MCUのCPU部分のALUは、これよりもはるかに複雑ですが、同じ基本原理で動作します。

この時点で、一方の側で「機能」を実行する論理回路と、もう一方の側でストレージを確認できます。また、ストレージには、プログラム用とデータ用の2つの部分があります。しかし、実際にはどのように「移動」するのでしょうか、それらは何らかの方法で接続されている必要があります...

そして、ここがこれらのパーツをバスに接続する場所です。

バスは、さまざまな部分を接続するいくつかのワイヤであり、制御ロジックは、このバスに送信するデータと、送信されたこのデータをリッスンする必要があるCPUの部分をメモリに通知します。そして、これは、異なる部分を有効/無効にするいくつかの並列制御ラインで行われます。

...


したがって、選択したmcuを使用して非常に小さなプログラムを分析すると、何が起こっているのか理解できない限り、「mcu」を作成するために使用できる素敵な小さなパズルができるまで、さらに分析します。

そして、あなたのMCUのデータシートを読んで、それがどのような種類のメモリ、ALU、バスなどのように作られたのかを調べることを忘れないでください。

これが少し役立つことを願っています?

幸運を


指示を分割することでそれを説明するというあなたの戦略は、それを本当に簡単にしました..おかげで..
VV Rao

2

CPUを自分で設計するのでない限り、これらのことを実際に知る必要はありませんが、すべてはハードウェアに実装された巨大なステートマシンに帰着します。

この種の質問の最大の問題は、答えが膨大であり、大学のコースで数年かかるため、ここで得られる答えは表面をなぞるだけです。

CPUに何が入るのかを本当に知りたい場合は、http://opencores.org/projectsのvhdl / verilogソースコードを確認してください

vhdlとverilogを学ぶだけでも、それだけで大がかりな作業になるので、長く読んでください。


「巨大なステージマシン」-ブロードウェイのプロダクションのように聞こえます。
OIO 2010年

幸いなことに、これらの人々が与えた答えは、あなたが言ったように私が表面を引っ掻くのではなく、代わりにそれを非常に明確にしました..とにかく、pal ..
VV Rao

2

つまり、これらの1と0はDACによって対応するロジック電圧(5vと0)に変換されますか?

いいえ、DACではありません。1と0が実際に存在することはありません。これらは、プログラミングを容易にするために使用する数学的な抽象概念にすぎません。実際のデジタル電圧は、ハードウェアに応じて5 V、3.3 V、または1 Vになる場合があります。結局のところ、コンピューターは単なるデジタルロジックです。メモリは1と0をデジタルロジックとして保存します。デジタルロジック回路はそれらをメモリからプロセッサに転送します。プロセッサは、2進数を加算、減算、または比較できるデジタルロジック回路です。

この小さなシリカ片はどうやって

Silic aはガラスで、シリコンと酸素の混合物です。チップは、すべてのトランジスタを作成するために特定の場所に不純物が追加された、純粋なシリコンから作られています。

私はすべてのICが論理ゲートで作られていることを理解しています

デジタルICは、アナログICではなく、論理ゲートから作られています。

では、これらのトランジスタは5vと0vのさまざまな組み合わせにどのように応答するのでしょうか。

最も単純な例であるCMOSインバーターを読んでください。


DACは使用されていないと説明しましたが、1と0はプログラミングを簡単にするために使用する数学的抽象化にすぎません。「コンパイラ」を参照して、これについてもう少し詳細を追加できますか?コンパイラは高水準言語を1と0に変換します。これらの1と0はデジタルロジックとしてメモリに格納され、デジタルロジック回路がメモリからプロセッサに転送すると言いました。この機能を実行するデバイスの名前は何ですか。 ?また、プロセッサの入力は5vまたは0vになります。それで、どのデバイスがメモリから(実際にはコンパイラから)1と0を5vと0vに変換しますか?
VV Rao

1
@Vicky:「1」から5 Vへの変換はありません。「1」と「0」は、2進数で計算するときに高電圧と低電圧に与えるラベルです。2進数で動作しない単純な低レベルロジックの場合、 "H"(高)および "L"(低)と呼ぶ方が一般的です。
エンドリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.