CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (9/9)

組み合わせ回路と順序回路

これまで論理ゲートで扱ってきた回路は入力が決まると出力は一意に決まりました。 一方フリップフロップ回路は入力が同じでも、出力が同じとは限りません。入力パターンの順序によって出力が変わるのです。 前者のように入力によって出力が決定される回路を組み合わせ回路、 後者のように入力の順番によって出力が変化する回路を順序回路といいます。

結局のところコンピューター(CPU)は、組み合わせ回路と順序回路が交互に並んでいて、1クロックごとに、組み合わせ回路で信号が変換(=計算)され、 その変換結果が順序回路に保持される。次のクロックが来ると次の組み合わせ回路を通って順序回路で結果が保持される。という繰り返しで動く単純な仕組みと言っていいでしょう。

これで私はほぼCPUについて説明しきった気持ちになっております。

図1-18の下の回路は図1-16の最後にある、NANDゲート4個で作ったXORゲートです。 その上の回路はXOR回路の途中4か所にDフリップフロップを入れ込んだ回路です。 3つの入力がありますが、一番下がクロックです。 クロックをオン・オフすると全Dフリップフロップのクロック入力端子に一斉に信号が届くように配線されています。 次に一番上の入力をL→Hにして、クロックをオン・オフすると、1クロックごと順番に信号が伝わり、4クロック目で出力がL→Hに変化することが分かると思います。 下のXORは入力を変えると一瞬で結果が出力に反映されますが、上の回路は結果を確認するまでに4クロック必要になります! しかし、例えば1クロックごとに入力を変化させるプログラムを組む仕組みを作れば、4クロック後から次々にXORの出力結果を得ることができることになります。

プログラミングっぽいことができました。 (ちょっと乱暴かもしれませんが)CPUっぽいことがでたと言ってよいでしょう!

図1-18

およそこれでCPUがどうなっているのか、私の思っている基本的なことは説明しました。 CPUを知るためには他にも、レジスタをはじめ、カウンタ、マルチプレクサ、命令デコーダなど 必要な概念がいくつも残っていると思います。しかし、レジスタやカウンタだったらDフリップフロップの応用な気がするし、マルチプレクサや命令デコーダは論理ゲート(組み合わせ回路)の応用と考えることができる気がします。これらについても時間のあるときに解説していきたいと思っています。

ご参考までに、CPUの解説本としてウェブ検索すると「CPUの創りかた」という本がよくヒットします。 私も購入して拝読し、とても良い本でしたのでオススメです。 これを読むともっとCPU分かったという気持ちになれると思います。

カテゴリー: 電子工作 | タグ: , | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (8/9)

フリップフロップ

フリップフロップ回路は一般的に2つの出力があって、片方がHighのときもう片方はLow、片方がLowのときもう片方はHighというように シーソーのような出力をする回路として登場します。この回路の要点は何なのか? 例えば、片方が決まるともう片方も決まるなら 片方は使わなくていいよね ということになりますがその通りです。

図1-17の真ん中左側の回路が最も単純なフリップフロップ回路の一例です。 2つのNAND回路からの出力が交差しながら戻って、またNANDゲートの入力になっています。 この交差部分は上を絶縁通過しているだけで、導線同士が接触しているわけではありません。 接続部分は回路図では白い丸印にしますが、このシミュレーターの白丸はちょっと見づらいですね。 入力をいじってみると両方Lのときは、出力は両方Hとなりフリップフロップしていませんが、実際の使用では入力が両方Lの状態は使いません。 上だけHにしたときは、出力の上下はLH、下だけHにしたとき、出力はHLとフリップフロップします。 重要なのが入力が両方Hのときなのですが、出力の上下がHLになるときとLHになるときの2通りがあると思います。 詳細には、入力がHLのとき出力はLHですが、このとき入力をHHにしても相変わらず出力はLHです。 逆に入力がLHのとき出力はHLですが、次に入力をHHにしても出力はHLのままで、つまり入力HHの前の出力の状態が、 そのまま保持されていることになります。これは前の状態を記憶していることに他なりません。 このようにフリップフロップのとても重要な点は出力の状態を保持することができる回路という点です。

次に真ん中右側の「Dラッチ」についてです。この回路は左側の回路にさらに2つのNANDゲートを加えて、ゴニョゴニョ繋げたものです。 以下、入力の上側をD入力、下側をC入力と呼びます。この回路はC入力がLのときは、出力の状態は変わりません。 ところがHになるとその間、D入力のHLの状態が出力の上側に反映されるようになります。このようにD入力を出力に反映するタイミングを C入力で制御できるのが、Dラッチということになります。

一番下のDフリップフロップは1つインバータが入りますが、Dラッチを2個繋げた回路です。 この回路もD入力の状態を、C入力で制御して出力するという点ではDラッチと同じですが、その反映のタイミングが異なります。 DフリップフロップはC入力がLからHに変わった瞬間だけ、D入力を出力に反映することができます。 つまりC入力のL→H立ち上がり時のD入力の状態が出力に反映されるようになります。 それ以外のタイミングでは出力の状態を変化させることはできません。

このC入力がいわゆるCPUのクロックに当たるものです。Dフリップフロップは図17一番上のボックス状の記号で表現されます。

図1-17

カテゴリー: 電子工作 | タグ: , | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (7/9)

論理ゲート

図1-13の左側の回路はこれまで扱ってきたNOT回路ですが、デジタル回路ではこのひとまとまりの回路をNOTゲートとして表します。 右側の一番上がNOTゲートの記号です。三角形に小さい丸を付けて書きます。 ゲート表記を使うことで、まとまったありきたりの回路を見やすく表現することができます。 実際にはゲート回路には電源のプラスとGndのマイナスのケーブルも必要ですが、それはあるものとして省略されます。 NOTの他にも様々な論理ゲートがあり、例えば右側に示した論理ゲートは、上からNOTゲート、NANDゲート、NORゲート、ANDゲート、ORゲート、XORゲートです。 NOT以外は2つの入力があり、NANDゲートは両方がHの場合のときのみL、NORゲートはどれかがHならL、ANDゲートは両方HのときのみH、ORゲートはどれかがHならH、XORゲートは2つの入力が同じならL、違ったらHになるゲートです。 左側の入力の「L」をクリックして動作を確認してみましょう。 通常は真理値表という表を使ってL/Hを表現します。 いずれもNOT回路のようにトランジスタを何個か使って回路を組み立てることができます。 また、いずれのゲートもNOT、AND、ORゲートの3つを組み合わせれば表現できます。 もっと言えば、どのゲートもNANDゲート(もしくはNORゲート)だけを使えば表現できます。

図1-13

NANDゲートだけでと書きましたが、NANDゲートは実際いろいろな場面で使われています。 図1-14に実際のNAND回路を示します。左側はN型MOSFETを使ったNAND回路、右側はP型MOSFETを使ったNAND回路です。 入力をクリックすると、動作が確認できます!

図1-14

そして図1-15が両方のNAND回路をくっつけたComplementary NAND回路です。入力がどのパターンでも電流は(ほとんど)流れません!

図1-15

NANDゲートだけで他の論理回路が表現できると前述しましたが、図1-16が実例です。NANDの2入力に同じ入力を与えれは、出力は入力の逆になります(=NOTゲート)。 AND回路はNANDゲート2個で、OR回路は3個で、XOR回路は4個あれば表現できます。このようにNAND回路さえ使えばどのようなデジタル回路も表現できると言えます。

図1-16

カテゴリー: 電子工作 | タグ: , | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (6/9)

NOT回路

ここからは出来上がった回路を組み合わせて(繋げて)いけるようにすることを考えます。

図1-10の左側の回路は、前回のプルダウン抵抗を付けた回路から、LEDを取り除いたものです。 その代わり、そこから出力(出口)用のoutという線を用意しました。 スイッチを切っているときはoutはHigh(1)、スイッチを入れているときoutはLow(0)になります。 入力(入口)はトランジスタのベースの部分です。ここが5V(High)のときコレクタ・エミッタ間に電流が流れ、0V(Low)のときは流れません。 この回路全体の機能としては、入力がHighのとき出力がLow、入力がLowのとき出力がHighとなります。 このように入力と出力が逆転する回路をNOT回路(インバータ回路)といいます。 例えば、同じ回路をもう一個用意して、片方のoutをもう片方のベース(正確には100kΩの手前)に接続すれば、 入力Highのとき出力High、入力Lowのとき出力Lowの回路を作ることができます。

なお、outがHighのときLEDを点灯させたいとするならば、右側のような回路を作ることになるでしょう。 NPN型のトランジスタを一個追加し、それをスイッチとしてNOT回路の出力がHighのとき、上から下に電流が流れるようにしています。

図1-10

図1-11まん中の2つは図1-10の回路のNPNトランジスタを、そのままN型MOSFETに置き換えたものです。同じように機能します。 違いは以前にも書きましたが、通常のトランジスタ(バイポーラ・トランジスタ)はベース・エミッタ間に電流を流す必要がありましたが、 MOSFETの場合は電流を流す必要がありません。ゲート・ソース間の電位差でスイッチングすることができます。 バイポーラ・トランジスタのベース・コレクタ・エミッタの代わりにMOSFETでは、ゲート・ドレイン・ソースとなります。 N型MOSFETでは、ゲート・ソース間に電圧を加えると、ドレイン・ソース間に電流が流れます。 NPNトランジスタに性質が逆のPNPトランジスタがあったように、N型MOSFETにも性質が逆のP型MOSFETが存在します。 一番左の回路はゲート手前のスイッチを取り除き、入力の導線だけにしました。こうすると回路図がかなりシンプルになります。 入力のL(Low)をクリックするとH(High)にトグルすることができます。HにするとoutはLow、LにするとoutはHighになりますね。 一番右側の回路は3番目の回路のN型MOSFETをP型MOSFETに取り換えて(トランジスタも取り換えて)、上下を逆転させた回路です。 N型の回路では出力がHighのとき電流が流れLEDが点灯するようになっていて、P型の回路では出力がLowのとき電流が流れLEDが点灯できるようになっています。 N型回路では、トランジスタが電流をマイナス側に引き込めないので、これだけの回路では、出力がLowのときにLEDを点灯させることができません。 同様にP型回路では出力がHighのときにLEDを点灯させることができません。

図1-11

そして図1-12図1-11のNOT回路の改良版です。N型MOSFETとP型MOSFETのNOT回路を混ぜ合わせたハイブリッド回路になっています。 この逆性質同士(N型P型)をハイブリッドさせた回路をコンプリメンタリ回路(相補回路)といいます。電圧・電流特性が正反対で対等のトランジスタを使えば、 High側から見てもLow側から見ても電気的性質が同じ回路になります。図1-11のN型、P型のNOT回路では、High側でLEDを点灯させるか、Low側でLEDを点灯させるかしかできませんでしたが、こちらの回路だと両方できます。やってみてください! このように、コンプリメンタリ回路は(トランジスタは2倍必要ですが)、出力から電流を押すことも引くこともでき±対照的な性質を持つという利点があります。 更にもう一つ利点があり、図1-12の入力をHやLに切り替えてみてください。出力は正しく切り替わりますが、なんとどちらの状態でも電流は(ほとんど)流れていません。 今後これらの回路を多数組み合わせることを考えると、とても省電力になる気がします。 集積回路などで見聞きするCMOSはこのComplementary MOSの略ということになります。
図1-12
カテゴリー: 電子工作 | タグ: , | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (5/9)

プルアップ/プルダウン抵抗

図1-8の上側の回路は図1-4の回路に0V(Low)の初期値を与える回路を加えたものです。スイッチのすぐ後に、10kΩの抵抗を分岐させて、Gndにつなげています。 このGndに直結する抵抗をプルダウン抵抗といい、スイッチが切ってあるときもスイッチ・ベース間の電圧を0Vに明示(初期値=オフ)することができます。スイッチをオンしたときは ベース方向にも電流が流れますのでLEDを点灯させることができます。抵抗を付けないとスイッチを入れたときに短絡してしまうことにご注意ください。

下側は逆に10kΩのプルアップ抵抗を入れた回路です。初期値がオンということになります。スイッチがオフのときはベース電流が流れますが、 スイッチを入れたときはプルアップ抵抗の下は0VとなりGnd側に電流が逃げてしまうためLEDは点灯しなくなります。

図1-8

ご参考までに図1-9はNPN型トランジスタの代わりにPNP型トランジスタを使ったものです。NPNと比べると上下が反転し、オン・オフの状態も逆になっているのが分かると思います。

図1-9

カテゴリー: 電子工作 | タグ: , | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (4/9)

電圧/ハイ・インピーダンス/短絡(ショート)

ここで話が変わりますが、電圧についての話です。

CPUで扱うデジタル回路では、電圧が高い(high)か低い(low)かの2つの状態の組み合わせだけによって情報を表現します。 5Vを電源とする回路の場合は、0Vの領域はLow、5Vの領域はHighとなります。簡単にLowを0、Highを1として表記する場合もあります(Low:1, High:0にすることもあり)。 電流が流れている、いないで0,1を表現するのではなく、電圧の高い、低いで0,1を表現することになります。 もちろん0VぴったりがLow、5VぴったりがHighというわけでもなく、ある程度電圧値の上下は許容してHigh、Lowを認識すべきですが、 2.5Vのような間の電圧値をMiddleとして、Low、Middle、Highの3つなどには通常しません。2.5VはHighとする場合が多いでしょう。 いずれにしてもHighかLowか白黒ハッキリさせないといけません。

図1-6の回路ですが、左側は途中に1つの抵抗を置いただけの回路です。電圧は抵抗より上側が5V(High)下側が0V(Low)になります。 今抵抗が1kΩですので、電流は5mAということになります。当たり前ですが、この抵抗を別の抵抗値のものに取り換えたとしても電圧は変わりません。 抵抗の上は5V、下は0Vです。勿論 抵抗値が上がればその分電流値は小さくなります。実は電流値の大小、その両極端を作れるのが右側のスイッチと考えることができます。 抵抗値を上げていくと電流は小さくなり最後には流れなくなり、ちょうどスイッチを切った状態(=ハイ・インピーダンスな状態と言います)になります。 逆に抵抗値をどんどん下げていくと、最後には右側のスイッチを入れた状態、つまり短絡(ショート)した状態になります。 ショートした状態は前にも書いてきた通りしてはいけない状態です。この状態を作ってしまったら負けです。ショートすると多くの場合どこかの部品が壊れたり、 場合によっては破裂したりもするでしょう。 右側の回路のスイッチを入れるとシミュレーターはストップしてしまいます。 デジタル回路を扱う場合HighとLow以外に、このハイ・インピーダンスとショートの状態もあることが何気に重要だったりします。 (正しい回路ではショートの状態はでてきません。)

図1-6 High、Low、絶縁、短絡 (左: 抵抗を入れた回路、右: スイッチを入れた回路)

電子部品にもHighとLowの他に、ハイインピーダンスを出力できる「3ステートバッファ(スリーステートバッファ)」というものがあります。 これは物理スイッチのような使い方をするための部品です。例えば、A回路とB回路を繋げた回路があったとして、回路同士を切り離す(=ハイインピーダンスにする)機能がほしいときに 間に3ステートバッファを入れるといった使い方が考えられます。

図1-7の回路ですが、一番左側は2つの抵抗があり、それぞれの上下に電圧計を置いてみました。今両方とも抵抗値が1kΩで同じなので、 両方とも2.5Vを示しています。勿論 上の抵抗値を大きくすれば、上の抵抗の電位差は大きく、その分下の電位差は小さくなります。 抵抗値でそれぞれの電位差は上下しますが、2箇所の電位差を足すと必ず5Vになるのはいいですよね。 では、左から2番目の回路で「抵抗の前後」と「スイッチの前後」で電圧計を使って測るとそれぞれ何ボルトになるでしょうか? スイッチをオンにしているときとオフにしているとき、「抵抗器前後の電位差」と「スイッチ前後の電位差」は、それぞれいくつになるのでしょうか?

中学校の理科では「電流計は回路に直列につないで計測し、電圧計は回路に並列につないで計測する」と習います。 電圧計はその場(一点)の電圧を測っているわけではありません。2点間の電圧の差を測るものです。 電位差は相対値であることも忘れてはいけません。プラス(電源)側の電圧値を5V、マイナス(Gnd)側を0Vとしていますが、プラス(電源)側を0Vとしても一向に構わないわけです。 そのときはマイナス(Gnd)側は-5Vということになります。しかしどのようにしても、上端と下端の電位差は5Vということでこれは変わりません!

左から2番目の回路図ですが、スイッチをオンしたときの電位差は分かりやすいと思います。抵抗の前後が5Vでスイッチの前後は電位差0Vです。 スイッチを切った場合はどうでしょう? ぼんやり考えると「抵抗の前後の電位差」は、抵抗があるのだからやっぱり電位差5Vっていう気がしませんか? 私は電子回路を覚える前はそう思ってしまいました。 私自身電圧を正しく理解してなかったのですね。答えは電位差0Vです。そして切ってある「スイッチ前後の電位差」が5Vになります。 抵抗とスイッチの間、ここが電気が流れているとき電圧値が0Vなのに、流れてないときは5Vに上がるという なんか当初違和感がありました。 でも今は「スイッチ切ったとき=ハイ・インピーダンス=超巨大抵抗値と考えれば当たり前か。そもそも電流流れてないからスイッチより上全体が 5Vになるよな」と思えるようになりました。 ここで重要なのはデジタル回路を考えるときは、電位差を追うのではなく、その位置の電圧値を考えるようにするということです。 つまりシミュレータの(緑や灰色の)色を考えるようにすると理解がしやすいです。

図1-7 抵抗やスイッチを2つにした回路

図1-7の一番右のスイッチ2つの回路図についてです。上のスイッチだけ閉じて下は開けると、下のスイッチまでが5V(緑)その下が0V(灰色)になります。下のスイッチだけを閉じて上を開けると、上のスイッチまでが5Vでその下が0Vになります。両方閉じたらやってはいけない短絡です。 ではスイッチを両方開けたらどうなるでしょう?上のスイッチまでが5Vで、下のスイッチより下は0Vはその通りです。 では「上下スイッチの間」の宙ぶらりん領域はどうでしょうか?シミュレーターでは灰色になっていますが、 実際にはここは何Vになるのか分かりません。コンデンサーのように電気を貯められると仮定すれば、最後まで繋がっていたほうの電圧に等しくなりそうですが、 短い導線ではどうなるかわかりません。シミュレーションでなく実際でもこの宙ぶらりん部分は手を近づけたりすると静電気の影響で簡単に電圧が上下したり、 周りに影響されやすい不安定な電圧値になります。

実はこの宙ぶらりん、トランジスタのベースと物理スイッチの間にも同じことが言えます。これまで示してきたバイポーラトランジスタではベース・エミッタ間に 電流を流すか流さないかでオンオフを制御するので、さほど問題にならないのですが、よく使われる集積回路ではMOSFET(モスエフティーピー・モスフェット)と呼ばれる 素子(バイポーラに対しユニポーラトランジスタといいます)が使われます。MOSFETではスイッチに当たる部分をゲートと言いますが、ここに電圧を与えるだけで電流の流れをオンオフできる素子です。 電流を流す必要がありません。逆に電流を流す必要がないため、ゲートとスイッチの間を宙ぶらりんにしておくと、動作が不安定になります。 宙ぶらりんの部分に手を近づけるだけで、電流が流れだしたり止まったりということが起こりだします。

これを避けるにはどうすればよいでしょうか? 宙ぶらりん状態を避けて、スイッチが切れている状態でも5V(High)か0V(Low)かの電圧の初期値を与えてあげればオーケーです

カテゴリー: 電子工作 | タグ: , , | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (3/9)

トランジスタ

トランジスタはちょうど、スイッチボタンの役割を果たすような電子部品です。我々がトランジスタというと通常バイポーラトランジスタを指します。 バイポーラトランジスタはNPN型とPNP型の2つの種類があります。いずれも3本の線があり、それぞれの線をベース(B)、コレクタ(C)、エミッタ(E)と呼びます。 このうちのベースがスイッチに当たる線です。NPN型トランジスタの場合、ベースからエミッタに向かってほんの少しだけ電流を流すと、 コレクタからエミッタに向かって電流が流れ出します。ベース・エミッタ間に電流を流さなければ流れません。 このようにベースに電流を流すか流さないかによって、コレクタ・エミッタ間の電流を制御することができます。 電流をほんの少しだけと書きましたが、ベースのわずかな電流の流れによって、コレクタ・エミッタ間の 電流の大きな流れを制御する電流の増幅という重要な性質もあります。ただし、CPUの動きを知るだけでしたら、 あまりこの性質を気にする必要はないかもしれません。

くどいようですが重要なのはトランジスタはスイッチに当たる部品で、しかもそのスイッチは手で切り替えたり可動する部分がなく、 電流や電圧の小さな変化=電気自身の力だけでオンオフできるということです。 これは複数のトランジスタを繋げて組み合わせていけば、トランジスタ自体のスイッチを次々に制御し任意の動作をさせることができることを意味します。 実はCPUはトランジスタ同士を繋げて、スイッチを切ったり入れたりを繰り返して、カスケードして計算を行っているだけなんです! と言っても過言ではないでしょう。

図1-4 トランジスターを使ってLEDの点灯を切り替える

図1-4が実際のNPN型トランジスタを使った回路です。ベースからエミッタに流れる電流は少しでよいので、手前に大き目の抵抗(100kΩ)を入れています。 抵抗を入れないと短絡状態になりトランジスタが壊れるので注意してください。トランジスタ部品の型番は最もよく使われる、(しかし昔から生産中止になるという噂のある) 2SC1815を想定しています。

トランジスタの部分がスイッチの役割を果たします。ベースの手前に物理スイッチがありますが、実際にはなくても 物理スイッチと100k抵抗間の導線を5V側(緑)に繋げるか否かで電流の流れのオン・オフを制御できるということが重要です。

図1-5 PNPトランジスタを使ったLED点灯回路(上: シミュレーター, 下: ブレッドボードでの組み立て例. トランジスタは左からエミッタ、ベース、コレクタ)

図1-5はPNP型トランジスタを使った例です。こちらは導線をマイナス側に接続すると電流が流れだしLEDが光ります。NPN型とはベースから導く電流の方向のプラス・マイナスが逆になります。 NPN型は+側から電流を押し付けてLEDを点けるイメージ。PNP型は-側から電流を引っ張ってLEDを点けるイメージになります。


カテゴリー: 電子工作 | タグ: , , | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (2/9)

LEDを使った回路

最初の回路は電子回路を学び始めたときに一番最初に試してみることが多いLED(発光ダイオード)の点灯回路です。 LEDを点灯させるには豆電球とは違って電源に直接つなげることができません。通常途中に数百Ω程度の抵抗を入れる必要があります。 多くのLEDはそのまま電源とつなげると電流が流れすぎて壊れます。というか私は初めての電子工作で壊しました。 確かに私が参考にした教科書(電子部品同梱品だった)には「LEDを点灯してみよう!」のところに抵抗器(抵抗)とLEDが直列につながった図が載っていたのですが、 抵抗を入れずに流すと壊れるとは書いてなかったので、入れずに流してみたんですね。 壊れました。当たり前ですが壊れると光らなくなりますので注意してください(なおLEDに抵抗が内蔵されていて 5V電源にそのままつなげられるLEDも購入できるので、テストする場合はこれをつかうと安全です)。 またLEDには極性の方向がありますので、こちらもご注意ください。長いほう(アノード)を(+)に、短いほう(カソード)を(-)に繋げます。

これはLEDの話ではないですが、短絡(ショート)も結構危ないので注意してください。なお私は短絡で電池ボックスを溶かしました。

抵抗は電流の流れやすさを調整する部品と考えてよいでしょう。または電流の流れの速さを調整する部品と言ってもよいかもしれません。 オームの法則では、電流=電圧/抵抗 ですから、抵抗値が小さければ小さいほどたくさん電流が流れバッテリーも早く消費されます。 逆に抵抗値が大きければ大きいほど電流はゆっくり流れるので、バッテリーの減りは遅く省電力になります。 でも、あまり抵抗値が大きくなりすぎると、LEDが暗くなり最後には光らなくなります。

図1-2 LEDを使った回路

図1-2のシミュレーターの抵抗器の四角の部分をダブルクリックすると抵抗値を変更できます(文字”抵抗値”のダブルクリックではないので注意)。 同様に電源をダブルクリック(“5V”の文字でないので注意)すると電源の電圧値を変更できますので、電流の流れや電圧の大きさを確認すると 理解しやすいと思います。

図1-3 LEDを使った回路(上: シミュレーター、下: ブレッドボードでの組み立て例)

さてこれまでは、電源(バッテリー)を中心にグルリと回る回路図を書いてきましたが、これは図1-3のように1本線に書き変えることができます。 図1-2の回路図は左側にある電源の2本線の長いほうがプラス端子、短いほうがマイナス端子で、この間の「電位差」が5Vです。 電圧値は長いほう側が5V、短いほう側が0Vと考えればよいでしょう。後者は、この5Vの部分を上、0Vの部分を下にもってきています。 こちらのほうが図がスッキリするし、線を元の位置(電源)まで引き戻す必要がないので便利です。 以降はなるべく図1-3の書き方で表現していきます。電源をVccと書いたり、接地をGnd(Ground)と書いたりします。 Gndこれは地面ということですが、正確には基準となる0Vを意味しています。上部の電源(Vcc)はそれより5V高いという意味になります。


カテゴリー: 電子工作 | コメントする

CircuitJS1を使ってなるべく分かりやすく簡潔にCPUの仕組みをゆっくり説明する (1/9)

全9回で電球の回路からCPUの仕組みがなんとなくわかった気持ちになれる(著者の独断)までを説明します.

電球回路

パソコンの頭脳であるCPU。実際にどうやってできて動いてるのでしょうか?どこまで機能すればCPU(Central Processing Unit)と言っていいか難しいところですが、私自身でCPUってこんなものかと、分かった気になったところまでを書きたいと思います。 多々間違えている部分、修正したほうがいい部分でてくると思いますが、ご了承ください。

電子回路のシミュレーターはCircuitJS1を使っています。 前にも書きましたが、これはWeb上で利用・編集できる優れた電子回路のシミュレータです。とても良くできていて便利です! 一般のウェブブラウザ上で動き、ユーザがそのまま回路を編集することもできます。 これを使って私が理解している範囲でCPUの説明を試みようと思います。 下(図1-1)の回路は5ボルトの電源にスイッチと電球をつなげた回路です。黄色の粒で電流の流れを、ワイヤー線の色の濃さが電圧を表しています。 スイッチをクリックするとオンオフの変更ができますので、クリックしてみてください。 右側のCurrent Speedのスライダーを動かすと電流のシミュレーション速度を調整できます。 また上のメニューから回路を編集することもできるようになっています。

図1-1 CircuitJS1を使って作った回路

 

カテゴリー: 電子工作 | コメントする

Javascriptでできた電子回路シミュレーター、CircuitJS1のインストール

https://github.com/sharpie7/circuitjs1

上記のreadmeを読んでインストールしました。

手順は以下のとおりです:
Eclipse Java版をWindows PCへインストールしました。
https://www.gwtcenter.com/how-to-run-gwt-on-oxygen-2018-1
上記が役に立ち、この手順に従ってGWTをEclipseに追加しました。

JavaのコンパイラのバージョンをJava11からJava8にする必要がありました。
↑ウィンドウ→設定から、Java→インストール済みのJREからjava8をチェックするとできます。

windowsにgitをインストールした後、dos窓から作業したいフォルダで、

$ git clone https://github.com/sharpie7/circuitjs1

その後、Eclipseのファイル→ファイル・システムからプロジェクトを開く…
からcircuitjs1のディレクトリを指定しました。

左上、パッケージ・エクスプローラーのcircuitjs1[circuitjs1 master]を右クリック→実行→3 GWT Development mode with Jetty
を選択し、http://127.0.0.1:8888/circuitjs.html へのリンクが表れるのでダブルクリックするとシミュレーターが動き出しました。

続いて、右クリック→GWT→コンパイルでコンパイルで[コンパイル]しました。(The project circuitjs1 has errors.と出ているが大丈夫そうです!)

warディレクトリ内のWEB-INFディレクトリを除いて、Webサーバーの公開したいディレクトリにアップロードし
http://XXXX/YYYY/circuitjs.htmlへアクセスします。

※できたものが以下
CircuitJS1

カテゴリー: 電子工作 | コメントする