2020.10.29
前へ
次へ
ホームページトップへ戻る

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第254回]



●クロック波形(2)

また間が空いてしまいました。
相変わらず多忙な毎日です。
前回はPIC12F629の出力波形をオシロで観測した画像をお見せしました。
MYCPU4のCPUクロックはPIC12F629のクロック内部発振機能を利用します。
PIC12F629は約4MHzのクロックを内部で発生させることができ、その1/4クロック(約1MHz)をpin3から出力させることができます。
その1MHzをMYCPU4のCPUクロックとして利用します。
さらにその1MHzをもとにしてMYCPU4の回路に必要ないくつかの信号クロックを作ります。
MYCPU4用のクロック信号回路は[第252回]でお見せしましたが、下に再掲します。



上に書きましたように、PIC12F629から出力される約1MHzのクロックをMYCPU4のCPUクロックとして利用します(信号名CLK)。
そのCLKをもとにしてMYCPU4の動作に必要な信号を作り出しているのが上の回路です。
下は上の回路によって生成される信号をタイミングチャートとして示した図です。



CLK_はCLKをインバータ(74HC04)で反転させた信号です。
CLK_はCLKとともに以下の信号を生成するためのもとになる信号です。
CLK_を74HC74のCK入力端子に入れることでCLKの1/2の周波数のクロックMCKとMCK_を作ります。
これがMYCPU4のマシンクロックとなります。
MCKとMCK_はCLKの1/2の周波数ですから約500KHzです。
MYCPU4の命令はこのMCKによって実行されます。
ですからMYCPU4の1命令の実行時間は約2μSです。
通常の命令は1CLKでも実行可能なのですが、中には1CLKでは実行できない命令もあるため、2CLKを使って1マシンクロックにしています。
たとえばLD A,Bは実際には1CLKでも実行可能な命令です。
1CLK期間の間Bレジスタからデータを内部バスに出力し、CLKの中央の立ち上がりでAレジスタにラッチすればLD A,Bは実行できます。
しかしADD A,Bはそれでは実行できません。
ADD回路を含めたレジスタ回路の回路図は[第251回]でお見せしました。
ADD A,Bの実行は、AレジスタとBレジスタからデータを出力してそれを加算回路(ALU)に入れ、結果の値を加算回路から出力し、それをAレジスタにラッチすることで行なわれます。
問題はその結果の値をAレジスタにラッチするタイミングです。
何も対策をしない回路ではALUからの結果をAレジスタに与えた瞬間にAレジスタの値が変化してしまうため、ALUからの出力も変化してしまいます。
そこでALUにデータをラッチするための信号(WR1)を第1のCLKで作り、そしてALUから出力されたデータをAレジスタにラッチするための信号(WR2)を第2のCLKから作ります。
なおALUとして使っている74HC283にはデータをラッチする機能はありません。
そこで74HC283から出力される値は74HC74と74HC173でラッチします。
ALUからの出力データを読み込むのはAレジスタだけなので、BレジスタやWレジスタは第1のCLKのタイミングでラッチしてもよいのですが、どうせ2CLKで動作させるのですからAレジスタ以外のレジスタもWR2でラッチするようにします。
PC(プログラムカウンタ)はMCLK_の立ち上がりでカウントアップします。
MYCPU4は4ビットCPUなのでPCからのアドレス出力ラインはA0〜A3の4本です。
上のチャートではそのうちのA0とA1の波形を示しています。

トランジスタでCPUをつくろう![第254回]
2020.10.29upload

前へ
次へ
ホームページトップへ戻る