2025年06月18日【その1】
- kojima295
- 6月18日
- 読了時間: 7分
おはようございます。
・・・
昨日の解説の件ですが、一晩考えました。
これは、私の説明が悪いと感じました。
キチンとご理解いただけるまで、丁寧に解説を致します。
一つ一つ解説いたします。
まず、D-フリップフロップについて。
これは、理解がかなり難しいです。
回路記号で書くと、こんな形をしています。

技術解説は以下の通り。
技術解説については、以下の資料も読んでほしい。
上記、技術解説も難しい・・・
これから、読み解いていきます。
CPUの設計には「フリップフロップ」と「マルチプレクサ」及び「デコーダ」と言う回路ブロックが重要になってきます。
上記3種類の解説が、上記の技術解説の中にあります。
まず、CPU内部のレジスタを設計致します。
レジスタと言うのは、一種の記憶装置です。
これに「フリップフロップ」を使用いたします。

今回、上記回路記号内にある「S」及び「R」については、考える必要はございません。
必要なのは「D」と「△」及び「Q」です。
技術解説の中にもありますが、「D」は入力端子です。
「Q」は出力端子です。
で、この動きですが、「D」にはデジタル信号ですので、「0」か「1」つまり「OFF」か「ON」の状態が入ります。
普通、「D」端子のデータと同じものが「Q」端子から出てくると思うでしょ。
でも、これは半分あっているし、半分間違っています。
どういう意味かと言えば、
「△」は入力端子ですので、デジタル信号「0」か「1」が入ります。
この時、「△」が「0」から「1」に切り替わる瞬間、、、
つまり「OFF」から「ON」に切り替わる瞬間、、、
入力端子「D」に入っていた「0」か「1」の値を記録する・・・
そのデータを出力端子「Q」に出す。
どういう意味かと言えば、
もう「△」が「OFF」から「ON」に切り替わった瞬間のときの「D」の値を「Q」に出力し続ける・・・
「△」の状態が上記以外のときは、「D」の値が切り替わったとしても、「Q」の値は上記の状態を保っている・・・
記憶装置なんです・・・
何故、記憶装置なのか?
これは、「△」の状態が切り替わったとき、「D」の値を記憶するからです。
この記憶するという状態が極めて重要なんです。
レジスタは、記憶装置の一種です。
しかし、これ一つだけでは意味がありません。
だって、CPUではレジスタが複数あるから意味があるんです。
その理由をご説明いたします。
フリップフロップを2つ用意致します。
一つのフリップフロップを「X1レジスタ」と呼ぶと致しましょう。
もう一つのフリップフロップを「X2レジスタ」と呼びましょう。
「X1レジスタ」のデータを「X2レジスタ」に移したいとします。
このデータを移す命令を「MOV X1, X2」と記述すると致しましょう。
「MOV」とは「MOVE」つまり「移動」を意味します。
皆さんが回路を記述するのであれば、どのように記述しますか?
考えてみましたか?

上記のように記述されましたか?
【第一段階】
「CLOCK」と言う端子の信号が「OFF」から「ON」に切り替わった瞬間、INPUTの入力データを「X1 register」の「Q」端子に出します。
【第二段階】
もう一度「CLOCK」と言う端子の信号が「OFF」から「ON」に切り替わった瞬間、「X1 register」の「Q」端子データを「X2 register」の「Q」端子に出します。
【上記の結果】
これで、「X1 register」の記憶データを「X2 register」に移動できた。
・・・
でも、なんか問題なさそうだけど、なんか違うような感じもするかな?
そうなんです。
これだと、「X1 register」の記憶データを「X2 register」に筒抜けです。
たしかに「MOV X1, X2」と言う命令は実行しているかもしれません。
しかし、ほかの命令も実行したい・・・
上記だと「MOV X1, X2」しか、実行できません!!
他の命令も実行したいと・・・
どうすればいいのか・・・
どうやら、機能の切替回路が必要だと・・・
ココで出てくるのが「マルチプレクサ」です。
前述の技術解説の中に説明があります。
・・・
一旦、ここで休憩致しましょう。
・・・

上記回路の意味をご説明いたします。
「Q」の上に「-」がある端子があります。
これは「Q」とは反対のデータが出てくる端子です。
つまり「CLOCK」が「OFF」から「ON」に切り替わった瞬間の「D」入力データとは反対の値が出力される。
例を出せば、
「CLOCK」が「OFF」から「ON」に切り替わった瞬間の「D」入力データが「0」であれば、「1」が出力される。
「CLOCK」が「OFF」から「ON」に切り替わった瞬間の「D」入力データが「1」であれば、「0」が出力される。
そんな端子です。
で、以下の回路記号は何を意味しているのか?

これは「インバータ」と呼ばれています。
どういう機能なのかと言えば、

「INPUT」が「0」のとき、「OUTPUT」が「1」になる
「INPUT」が「1」のとき、「OUTPUT」が「0」になる
つまり「INPUT」とは反対のデータが「OUTPUT」に出てくると言うモノです。
前の戻りますが、

じゃ、これは何を意味しているのか?
これは、フリップフロップ「D」の値を記憶し続けて「OUTPUT」に出力する回路です。
で、これに何の意味があるのか?
実は、これだけでは何の意味もありません。。。
「D」の値の反対のデータが「Q」の上に「-」がある端子から出てくる。
このデータを「インバータ」に通して、さらに反対のデータにする。
つまり、これは
「D」と同じ値を「D」に戻す。
これに何の意味があるのか?
これね、、、
「CLOCK」が、何度「OFF」から「ON」に切り替わっても、「D」の値は変わらない。
という意味です。
「当たり前だろう」と思われると思います。
そうですね。当たり前です。。。
・・・

上記の回路記号は何かと・・・
これは「マルチプレクサ」です。
どのような機能かと言えば、これは上記技術解説の中にあります。
もう少し、かみ砕いてみましょう。

これは、、、
上記の回路記号は「マルチプレクサ」が4つ入っています。
で、今回は一つの「マルチプレクサ」だけに注目致します。
これは、
「SELECT」の状態が「0」のとき、「INPUT0」のデータが「OUTPUT」に出力される。
この時「INPUT1」のデータは無視される。
「SELECT」の状態が「1」のとき、「INPUT1」のデータが「OUTPUT」に出力される。
この時「INPUT0」のデータは無視される。
つまり、
切替スイッチの役目を果たします!!
「SELECT」に入るデータによって、「INPUT」データが選択され、「OUTPUT」端子に出力されます。
・・・
これからが、難しくなりますよ!!

これは何を意味しているのか?
チョー難しい!!
これね、メチャ難しい・・・
これは何だと・・・
これは、先ほどの「MOV X1, X2」回路に「切替回路」を付けた。。。
つまり、



上記の3つの回路を合体させた・・・

この回路は、
「MOV X1, X2」命令を実行する場合には「SELECT」を「1」にする。
「MOV X1, X2」命令を実行しない場合には「SELECT」を「0」にする。
これにより「X2レジスタ」の値を保護する。。。
どういう意味かと言えば、
「MOV X1, X2」命令を実行する場合には、「X1レジスタ」の値を「X2レジスタ」に移動させる。
「MOV X1, X2」命令を実行しない場合には、「X1レジスタ」が変わっても、「X2レジスタ」の値は変わらない。
・・・
分かりますか?
非常に難しいですよ・・・
CPUには、いろいろな命令があり「MOV X1, X2」だけではないんです。
他の命令の場合もある。
他の命令でもレジスタは使用いたします。
何といったらいいのか、、、
いろんな場合に応じてレジスタを切り替えたい。
この時、レジスタの値は変えたくない!!
ココでいったん、休憩致しましょう。
・・・
では、そろそろ続きを・・・
じゃあ、命令を切り替える方法って、どのように実現させているのか・・・
ココで登場するのが「デコーダ」です。

難しいよ!!
デコーダとは、
入力ビット「A0」「A1」「A2」(0/1 の信号)が持つ「番号」を読み取り、
その番号に対応する「出力だけ」をピピッと選び出す装置です。
たとえば「部屋番号」を教えると、その部屋の電気だけがパッと点くようなイメージです。
上記の説明で分かる人はほとんどいないはずです。
入力ビットは3ビットです。。。
「A0」と「A1」及び「A2」の3本で構成されています。。。
出力は、
「O0」から「O7」までの8本で構成されています。
これは、何を意味しているのか?
入力コード(A0,A1,A2) | 出力線 O0 | O1 | O2 | O3 | 役割 |
000 | 1 | 0 | 0 | 0 | NOP |
001 | 0 | 1 | 0 | 0 | ADD0 |
010 | 0 | 0 | 1 | 0 | SUB |
011 | 0 | 0 | 0 | 1 | MOV X1, X2 |
上記は、出力線「O0」から「O3」までの4本しか記述していませんが、、、
何が言いたいのか・・・
命令コードに番号をつけておくのです。
例えば「MOV X1, X2」の番号を「3」と致しましょう。
入力端子「A0」と「A1」及び「A2」の値は、2進数で「0, 1, 1」と表します。
(2進数の意味は、AIに聞いてね!)
この時、出力端子「O0」から「O7」の中で「1」を出力するのは「O3」だけです。
つまり「O3」の端子を、、、

上記回路の「SELECT」に接続すれば、、、
「MOV X1, X2」のときだけ命令を実行できる!!
ココまで理解できれば、もう怖いものなしです!!
入力コード(A0,A1,A2) | 出力線 O0 | O1 | O2 | O3 | 役割 |
000 | 1 | 0 | 0 | 0 | NOP |
001 | 0 | 1 | 0 | 0 | ADD |
010 | 0 | 0 | 1 | 0 | SUB |
011 | 0 | 0 | 0 | 1 | MOV X1, X2 |
もう一度言います。
「MOV X1, X2」の命令コードは「0,1,1」つまり「3」です。
この時、「O3」だけが「1」になる!
ちなみに上表にある役割項目に「NOP」とか「ADD」や「SUB」と言うモノもあります。
「NOP」は、何もしない命令。
「ADD」は、足し算命令。
「SUB」は、引き算命令。
を意味すると致しましょう。
出来る限り分かりやすく言えば、
各命令ごとに出力端子「O0」から「O7」までの内のどれかだけが「1」になり、その他は「0」が出力される
と言う事です。
これにより、命令ごとの回路を選択するのです。
・・・
ちなみに、ココでお話している内容は大学院で学習する内容です。
大学院と言うのは、大学のさらに上の位置にある研究機関です。。。
申し訳ない!!
皆さんには、大学院過程を学習してもらっています!!
・・・
次の講義は午前10時から開始いたします。
よろしくお願いします。


コメント