4bit CPU TD4を動かそう(2) ROM基板と動作確認

TD4

前回 4bit CPU TD4のパワーオンリセット&クロックボードとCPUボードを作りました。今回は本当の(笑)ROMで作ったROMボードで動作確認します。いろいろとありましたが、最後は以前作ったTTLメモリー7489でつくったROM代わりのメモリーボードでも動作確認します。

ROM&アドレス・データバス表示ボード概要

TD4は8ビットx16ステップのメモリーにアクセスできます。書籍では8ビットのDIPスイッチとダイオードアレイを使って1バイト分のROMを作成し、16ステップのROMを手配線しています。

根性が無い私は以前TTLメモリー7489×2個で作ったメモリーボードを作ってみたわけですが、それを繋ぐ前に Z80マイコンでも使っている256kbit(32バイト)のフラッシュROMをつないでみようと思い立ちました。安定動作が見込めますのでCPUボードとかクロックの不調があっても安心かと….

20pinのバスにROMだけぶら下げるのもなんなので(基板スペースも余ってますし)、アドレスバス4本、データバス8本の状況をLEDで表示する回路も搭載してみました。

ROM&アドレス・データバス表示ボードの回路

ROM&アドレス・データバス表示ボードの回路は以下のような感じです。

フラッシュROMはアドレスバスA0〜A3だけ使ってそれ以外のアドレス線はGNDへ。データバスは8bit分そのまま使います。制御線としてはCEはGNDへ。WEはVccへ接続します。

アドレスバス、データバスの信号を表示する回路はNPNトランジスタ2SC1815をたくさん準備してスイッチング回路を形成しました。(NOT回路ですね…)以下の文献を参考に抵抗値を決めてみました。ありがとうございます。

https://www.hakodate-ct.ac.jp/~moriya/class/2Ssensing/text/006_01transistor.pdf

部品を配置した秋月電子Bタイプユニバーサル基板は以下のような感じとなりました。以下は1個づつLEDの点灯を確認しているところです。トランジスタ2SC1815のベース端子がHレベルになるとトランジスタスイッチが作動してコレクタにつけたLEDに電流が流れまして点灯する仕掛けです。トランジスタがたくさんありますが、規則的に配線するだけなのでそれほどたいへんではありませんでした。(ちょっとトランジスタがデコボコしてますが…)

ROMへALLゼロを書き込んで動作確認

書籍の手順に従って動作確認をしていきたいと思います。まずは、16バイト分の$00をフラッシュROMへ書き込みます。

$00はNOPではありませんが 「ADD A,0」 らしいので悪さはしない模様。ROMボードのアドレスバスのLEDが0001→0010→0011→…と上がっていくことを期待したのですが、どうも挙動が変でした。

ロジアナで信号を観測

LEDの回路が変で表示が変?と思ったので、ロジックアナライザでCPUボードのプログラムカウンター(74HC161)から出てくるアドレスバスのデータを観測してみます。

上記のようにAnalogDiscovery2をつないでデータバスは全部GNDへ落としまして、ロジアナ機能で信号を観測してみたところ、やっぱりプログラムカウンター(74HC161)のカウントアップが変です。

1→2→4→5→7→8→10→11….みたいに不規則に飛び飛びとなってしまいます。プログラムカウンターにしている74HC161のICの不良?!と思って交換してみましたが事象に変化は見られませんでした。

1ビット目(0x1)がクロックに従ってH→L→Hとなるべきですが、H→H→L→Lのような動きとなっていてまったく変です。

ちなみに、1Hzとか10Hzとかの発振回路といっしょに手動クロック回路もあるのですが、クロックボタンを押したらアドレスがバンバン飛びまくって全くだめです。チャタリングしてる感じです。あかん。たしか、TTLメモリー7489ボードにも同じような回路を装備してみましたがチャタリングで駄目な感じでした。

クロックも観測してみたら治った?!

アドレスバスだけではなくて、74HC161のLOAD信号端子やクロックボードが出してきている1Hzクロック信号も観測してみようと接続したところ、なんと正しい動きになってしまいました。観察者効果ですか?!?!

ロジアナの波形は以下のような感じ。以前と違ってちゃんと1ビット目(0x1)がクロックに従ってH→L→Hとなっています。DIO4はプログラムカウンターとなっている74HC161のLOAD端子(HレベルでOK)、DIO5はクロック基板から出てきている信号が74HC161に入るところで観測しました。ROMボードのLEDを見ても正しくカウントアップされています。なんのこっちゃ〜♫

CLK端子に色々と手あて

クロック発生器からCPUまではフラットケーブルで接続してますので、ケーブル長も長くてバッドパターンではあるなぁと思いつつ色々とためしてみることにしました。

プルアップ or プルダウン

ナニカがつながっていることで状況が変化しましたので、クロック回路の出口のところに10kΩや100kΩの抵抗器をつけまして、CLKラインをプルアップしたりプルダウンしたりしてみました。残念ですが、変化はありませんでした。

AnalogDiscovery2の波形生成器

実は同じような事象で苦しんだ方がいらっしゃいまして、以下の記事が私の事象と似ています。この方はあきらめて、ファンクションジェネレーターの矩形波へ繰り替えたところ安定したとのこと。

ロジックアナライザとして使っているAnalog Discovery2は波形生成器もできまして、サイン波や矩形波を出すことが可能です。
クロック基板の配線をいったん外して、直接Analog Discovery2で発生させた1Hzのパルスを入れてみました。(写真のプローブからニョロニョロとのびた黄色いICクリップがついたケーブルがクロックです。74HC161の2番端子へ直結してみました)

するとTD4のプログラムカウンターが無事稼働しました!!ちゃんと思ったとおり0001→0010→0011→とカウントアップします。やった〜♫

これで安定するということは、Analog DIscovery2のオシロスコープでは捉えることができてないですが、もともとのクロック回路から出ているクロック波形に超高速でノイジーな波形が混ざっているのかもしれません。

みんな大好き 555タイマーICでクロック

安定したクロック回路といえばみんな大好きNE555PタイマーIC。(…しか知らないだけですけど…) 小学生時代より初歩のラジオ誌などでクロック発生源といえば555だったわけで、今回も555で1Hzぐらいのタイマー回路を作ってみました。

書籍の回路図の通り作ったクロック基板のヨコチョに555の1Hz発振回路をつけまして、スライドスイッチで切り替えができるようにしてみました。
こちらの信号でも無事 稼働!! 書籍に出ているLEDチカチカプログラムをROMへ書き込んで動作させてみました。これまた成功!!やった〜♫TD4が動き出しました。

TTLメモリーボードだと挙動が変?

気を良くして、以前作った TD4のROMとしてつかえるTTLメモリーボードをつないでみましたところ、これまたプログラムカウンターの挙動がおかしいのであります。

今度はアドレスバスの1ビット目(0x1)が反応せず 0010→0110→0100→….という謎な動き。これはROMボード側の配線不良??と思い確認しましたがそうではないらしい。
またもCPUボードのプログラムカウンター74HC161くんが謎動作をしているようです。

今回は、555の発振回路でも駄目でした。やっぱり、クロックボードをフラットケーブルの先につけるという構成に無理が!!(….無理があるんですけど….)
当然 以前からダメな書籍のとおりのクロック発振回路や手動クロック回路でもプログラムカウンターがメタメタです。(T-T)

もともとのクロック回路の出口に 0.1uF〜動いた!

いろいろと状況をTwitterで報告していましたら、クロックラインに数pFを挟んでみたら改善するかも?という助言をいただきましてやってみました。

22pF….改善せず、0.01μF….改善!!!

CLKラインにプルアップ抵抗などを挟んで試していたときに、0.1μFをはさんでみたら容量が大きすぎたのかクロックがさらにメタメタになってあきらめたということもありましたが…ノイズ的なものをやっつけるとするとコンデンサなんですね。やっぱり。

上記Tweetにも書きましたが、クロック基板に1Hz/10Hz発振回路と一緒に装備した手動クロックボタンも、このクロックラインへの0.1μFコンデンサ追加で改善!!! ノイズをやっつけてくれたみたいです。やった〜♫

4bit CPU TD4のプログラムとしてはLEDちかちか(OUT命令、JNC命令)だけができた感じですが無事稼働して感動であります。

また、TTLメモリー7489ボードは元々 中学・高校時代に初歩のラジオ誌に出ていたプログラムコントローラーというものを参考につくりまして、その記事にも「これにCPUがついたらコンピューターだ!」と出てましてですね、その夢が叶ったわけであります。嬉しいです!!

コメント