仕事で役立つ人気ビジネスアプリおすすめ!
[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
コンピュータアーキテクチャの話 (45) 4004の設計を追体験する
4ビット内部バスと各種レジスタ
ブロックダイヤグラムに示すように、4004は背骨にあたる4ビット内部バスに各機能ユニットが接続された構造になっている。そして、内部バス制御表に示したように各ユニットからバスにデータを送り出し(SRC)たり、バスからデータを受け取ったり(DST)して処理を行っている。まず、この4004の中心となる4ビット内部バスとそれに繋がる各種レジスタを設計してみよう。
次に示す図は4ビット内部バスに、外部との接続を行うデータバスバッファとTemp、OPR、OPAのようなレジスタの接続した構成の回路図である。アキュムレータACCの接続もほぼ同様であるが、ACCレジスタはバス以外にTempレジスタからの直接の入力があるので、D入力にマルチプレクサを必要とする点が若干異なっている。
外部接続データバスバッファ、レジスタの4ビット内部バス接続
FFはクロックが入ると必ずD入力からデータを取り込んで保持する回路であるが、論理設計をする場合、特定の条件だけでデータを取り込み、その他の場合には、以前の情報をそのまま保持したいという場合が多く存在する。このため、図の左上の灰色の箱に描いたように、エネーブル付きのFFを定義する。エネーブル付きのFFはD入力にマルチプレクサを持ち、 EN信号が"0"の場合はループバックのQを選択し、EN信号が"1"の場合にはD入力を選択して、クロックの立ち上がりでFFに保持する。この追体験設計では、オリジナルの4004とは異なり1相のクロックを用いるので、エネーブル付きのFFのクロックは常にΦ2であるので記載を省略する。
レジスタは、このエネーブル付きFFと出力をバスに接続するトライステートバッファ 4組で構成されており、FFのエネーブルによりバスの情報を取り込むので、これがDST制御信号であり、バスをドライブするトライステートバッファのエネーブルがSRC制御信号で駆動される。
外部ピンと接続するデータバスバッファは図の上側に描かれているように、両方向のトライステートバッファのペアで出来ている。外部ピンをドライブする側のトライステートバッファは論理回路図では同じ大きさで描かれているが、大きな負荷容量をドライブする必要があるので、物理的には大きなトランジスタが用いられている。
データバスバッファがデータを受け取るのは外部ピンに出力するためであり、DST制御信号は外部ピンをドライブするトライステートバッファのエネーブルを行う。また、SRC制御信号は、外部ピンからの信号を 4ビット内部バスに載せるトライステートバッファのエネーブルを行う。
コラムの第43回に掲載したバスの制御表を機能ユニット毎に整理すると、以下のようになる。ここでの記法は、:の左側にどのサイクルのDST信号、あるいはSRC信号かを示し、右側にその信号を"1"にする命令を書いている。
(1)データバスバッファ1stByte、2ndByte A1~A3 DST:全命令1stByte、2ndByte M1、M2 SRC:全命令1stByte X1 DST:全命令1stByte X2 SRC:IO read命令1stByte X2 DST:SRC、IO write命令1stByte X3 DST:SRC命令(2)Tempレジスタ1stByte X2 DST:JCN、JUN、JMS、INC、ISZ、ADD、SUB、LD、XCH、LDM、I/O read命令2ndByte X1 SRC:JUN、JMS命令(3)OPRレジスタ1stByte、2ndByte M1 DST:全命令2ndByte X3 SRC:全命令(4)OPAレジスタ1stByte、2ndByte M2 DST:全命令1stByte X1 SRC:全命令1stByte X2 SRC:JCN、JUN、JMS、BBL、LDM命令2ndByte X2 SRC:全命令(5)ACCレジスタ1stByte X2 DST:BBL命令1stByte X3 DST:ADD、SUB、LD、LDM、IO、ACC命令(6)インデックスレジスタ1stByte X2 SRC:INC、ISZ、ADD、SUB、LD、XCH命令1stByte X3 DST:INC、ISZ、XCH命令(7)Evenペアレジスタ1stByte X2 SRC:SRC、JIN命令2ndByte X2 DST:FIM、FIN命令(8)Oddペアレジスタ1stByte X3 SRC:SRC、JIN命令2ndByte X3 DST:FIM、FIN命令(9)PClow1stByte A1 SRC:全命令2ndByte A1 SRC:FIN命令以外の全命令1stByte X2 DST:JIN命令2ndByte X2 DST:JUN、JMS命令、条件成立の場合のJCN、ISZ命令(10)PCmid1stByte A2 SRC:全命令2ndByte A2 SRC:FIN命令以外の全命令1stByte X3 DST:JIN命令2ndByte X3 DST:JUN、JMS命令、条件成立の場合のJCN、ISZ命令(11)PChigh1stByte、2ndBye A3 SRC:全命令2ndByte X1 DST:JUN、JMS命令(12)RS1stByte X1 DST:全命令
4ビット内部バスの制御は、以上の場合分けに従って、各ユニットのSRCとDST信号を作れば良い。
なお、バス制御表のところで述べたように、インデックスレジスタを選択するためのRSレジスタへの書き込みが必要となるのはインデックスレジスタを使う命令だけである。しかし、インデックスレジスタを使わない命令では、どのインデックスレジスタが選択されていても問題ないので、制御信号の生成を簡単にするため、このように常にRSレジスタに書き込みを行う設計となっている。
また、(7)、(8)にEvenレジスタペア、Oddペアレジスタという項がある。これはレジスタペアを扱うFIM、SRC、FIN、JIN命令では、レジスタ指定の最下位に相当するビットが命令種別の拡張に使われているので、 (7)の場合はRSレジスタの最下位ビットを強制的に"0"にし、(8)の場合はRSレジスタの最下位ビットを強制的に"1"にしてインデックスレジスタをアクセスすることを意味している。
バスの制御信号は、次の図に示すように、命令の種別、命令の第一バイトの処理か第二バイトの処理か、そしてA1からX3のどのサイクルであるかの情報を生成し、それらを組み合わせてデータバスバッファやレジスタのSRC、DST信号を生成する。
4ビット内部バス制御信号発生回路(一部分)デコーダとデータバスバッファのデータ受け取り(DST)信号の生成部分の回路を示す。