目次

ROMシーケンサ

 ROMシーケンサは、CPUのようなマイクロプロセッサを
 実現する場合のマイクロプログラムを生成するために
 使います。

 マイクロプログラムは、カウンタを使った制御信号を
 生成するシーケンサの変形です。
 プログラムと称されていますが、ソフトウエアではなく
 ハードウエアです。

 ROMとして2732を利用した回路は、以下。




 2ビットジョンソンカウンタを利用し、ROMのnOEと
 レジスタへの情報記憶トリガーを生成します。
 ROMのアドレスは、ROMに格納された情報になります。

 ROMのアドレスと格納された4ビットの情報を次の
 ようにすると、どんなことが起きるかを考えます。

           AAAA          DDDD
           3210          3210
address = "0000" data = "0001"
address = "0001" data = "0010"
address = "0010" data = "0011"
address = "0011" data = "0100"
address = "0100" data = "0101"
address = "0101" data = "0110"
address = "0110" data = "0000"

 リセット後、レジスタの出力は"0000"で、これがアドレスに
 なります。クロックが入るとROMからのデータは"0001"になり
 クロックが入るたびに、+1された値がレジスタに格納されて
 いきます。

 アドレスが6のときには、ROMの出力が"0000"になるので
 レジスタの下位4ビットは、0→1→...→6→0→1→
 と繰り返し。

 リセット後に、0から6を繰り返すので7進数カウンタを
 構成したのと等価。

 7進数カウンタは、7ステートをもつシーケンサと等価なので
 ROMの出力の上位4ビットに値を設定すると、7x4=28通り
 の信号を出力できることになります。

 上位4ビットを加えてみます。

           AAAA          DDDD   DDDD
           3210          3210   7654
address = "0000" data = "0001" "1001"
address = "0001" data = "0010" "0001"
address = "0010" data = "0011" "1010"
address = "0011" data = "0100" "0010"
address = "0100" data = "0101" "1101"
address = "0101" data = "0110" "0101"
address = "0110" data = "0000" "1000"

 アドレスとデータの上位4ビットだけをタイミングチャート
 にすると、以下。




 7ステートの中で、上位4ビットの変化は
 他のビットと無関係にできます。データ間
 での依存関係を持たないことも可能ですし
 依存関係を持たせることもできます。

 ROMシーケンサでは、カウンタを構成しつつ
 カウンタの値をステートにし、ステートに
 おける値を好きなように設定できます。

 4ビットに信号生成で不足する場合、以下の
 回路を利用します。




 16ビットを上位にデータ、下位にアドレスを格納して
 最大256アドレスを利用できます。ROMサイズには
 512バイト以上であれば使えます。

 全アドレスを利用することはないですが、256バイト
 分の情報を出力できるので、一般的な処理には不足は
 ないと思います。

 制御回路は、バイナリーカウンタをベースにしたシーケンサ。
 このシーケンサで、SRラッチを使い、nOEとROMのA0を制御し
 8ビットのレジスタのためのトリガーを生成。

 カウンタ出力値で、何をしているのかを示してみると、以下。

counter = "0000" → nothing
counter = "0001" → nOE='L' A0='L'
counter = "0010" → confirm signal level with delay
counter = "0011" → latch 8 data(signal information)
counter = "0100" → A0='H'
counter = "0101" → confirm signal level with delay
counter = "0110" → latch 8 data(address)
counter = "0111" → nOE='H'
counter = "1000" → reset counter

 シーケンサはカウンタを使うので、クロックジェネレータから
 の出力をLEDで確認できるようにしました。点滅していますが
 周期が短いので、点灯したままに見えます。

 ROMライターは、以下を利用。




 ROMライター用のデータ生成は、各種のアセンブラを利用
 しておきます。Z80や6809のアセンブラは、フリーで入手
 可能なので、データをバイトで生成するようにします。


目次

inserted by FC2 system