本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。

4004を再設計するに当たって、命令の動作と基本サイクルの図から、A1~3、M1,2、X1~3の各サイクルに行う動作を明確に規定する必要がある。

  • 4004のブロックダイヤグラム

    4004のブロックダイヤグラム(再掲)

例えば、インデックスレジスタRRRRの内容をアキュムレータに格納するLD命令の場合は、以下のような動作を行えば良い。

  • A1サイクル:PCの最下位4ビット(PClow)を4ビット内部データバスに載せ、データバスバッファを経由してROMに送り出す。
  • A2サイクル:PCの中位4ビット(PCmid)を4ビット内部データバスに載せ、データバスバッファを経由してROMに送り出す。
  • A3サイクル:PCの最上位4ビット(PChigh)を4ビット内部データバスに載せ、データバスバッファを経由してROMに送り出す。また、PCの内容を+1してサイクルの終わりにPCに書き戻す。
  • M1サイクル:データバスバッファを経由してROMからのデータを4ビット内部データバスに載せ、OPRレジスタに書き込む。
  • M2サイクル:データバスバッファを経由してROMからのデータを4ビット内部データバスに載せ、OPAレジスタに書き込む。また、OPAの内容をOP Regレジスタに書き込む。
  • X1サイクル:OP RegとOPAレジスタに格納された命令をデコードし、各種制御信号を生成する。また、OPAレジスタの値を4ビット内部データバスに載せ、レジスタを選択するRSレジスタに書き込む。
  • X2サイクル:RSレジスタに格納された値でインデックスレジスタを選択し、その内容データを4ビット内部データバスに載せる。サイクルの終わりに4ビット内部データバスのデータをTempレジスタに書き込む。
  • X3サイクル:ALUの動作をTempレジスタの内容を素通し(例えば、Temp + 0を実行)とし、ALU出力データを内部4ビットバスに載せる。サイクルの終わりに4ビット内部データバスのデータをアキュムレータに書き込む。

LD命令の場合は、X2サイクルで直接、4ビット内部データバスのデータをアキュムレータに格納しても良いのであるが、その他の命令では、X2サイクルではバスのデータをTempレジスタに書き込む動作を必要とするものが多く、それらと同じ動作をさせる方が制御回路が簡単になるので、このような動作にしている。また、X3サイクルではTempレジスタの内容をALUを経由して4ビット内部バスに載せているが、これはTempレジスタの出力を直接、4ビット内部バスに載せるという設計もありうる。

また、条件分岐を行うJCN命令では、

  • 最初のA1~3、M1、M2、X1サイクルはLD命令と同じ。
  • X2サイクル:OPAレジスタの内容を4ビット内部データバスに載せ、サイクルの終わりにTempレジスタに書き込む。
  • X3サイクル:ALUでアキュムレータの内容をチェックし、Tempレジスタに格納された条件が成立しておれば、CCフラグを"1"にセットする。
  • 次のA1~A3サイクル:PCレジスタの内容は+1されており、命令の後半の8ビットを指している。このPCレジスタの内容を4ビット内部データバス、データバスバッファ経由でROMに送る。また、PCを+1してA3サイクルの終わりにPCに書き戻す。
  • M1、M2サイクル:データバスバッファを経由してROMからのデータ(この場合は命令の後半の8ビット)を4ビット内部データバス経由でOPR、OPAレジスタに書き込む。
  • X1サイクル:動作なし。内部の制御レジスタの状態から、命令の後半であることが分かるので、命令のデコードは行わない。
  • X2サイクル:OPAレジスタの内容を4ビット内部データバスに載せ、CCフラグが"1"であればPClowに書き込む。
  • X3サイクル:OPRレジスタの内容を4ビット内部データバスに載せ、CCフラグが"1"であればPCmidに書き込む。

JCN命令の処理は、最初の8サイクルでは命令の前半8ビットを読み込んで解釈し、アキュムレータの内容をチェックし、条件の成立、不成立をCCフラグに記憶する。次に、命令の後半8ビットを読み込み、A3サイクルでPCの値を+1して条件不成立の場合の次の命令を指す。そして、X2、X3サイクルではOPA、OPRレジスタの内容を4ビット内部データバスに載せるが、条件が不成立の場合はどこにも書き込まず、捨ててしまうので、PCの値はA3サイクルに書かれたものが残る。一方、条件が成立した場合は、PClow、PCmidに分岐先のアドレスが書き込まれる。ただし、PClow、PCmidの書き込み順は逆でも良く、Faggin氏の設計ではX2とX3サイクルの動作は逆になっているかも知れない。