LispマシーンCADRのクロック生成方法が面白かったのでまとめてみました。回路図(CADR_schematic.pdf)の64ページです。図のpdfはこちら。通常のクロックのように、水晶発振子を使わずに、SRラッチと遅延回路の組み合わせでクロックを作っています。クロックがLである期間は40nsと固定ですが、Hの期間がある程度プログラマブルになっています。
回路は大きく分けて4つのブロックからなります。
SRラッチ部分
最初の回路は、図の上の方にあるゲートです。NANDゲート2つで、SRラッチを生成しています。SRラッチの詳細はhttp://ja.wikipedia.org/wiki/ラッチ回路をみてください。負論理の-CLK_RESETと-HANGでクロックが停止します。4つのゲートのうち、最後のANDゲートの出力がクロックの基準となっています。
立ち上がり信号生成部分
次の回路は、SRラッチで生成したクロックに遅延をかけている部分です。遅延素子を使用して、細かい遅延を作っています。作った遅延のうち、40ns遅れの信号をSRラッチに戻して、立ち上がり信号を作っています。図で言うと青線のループです。
マルチプレクサ
図の下真ん中にあるのが、クロックがHの期間を選択するマルチプレクサになっています。SSPEED1、SSPEED2、ILONGの組み合わせでHの期間を選択しています。ILONGは、Lispマシーンのマイクロコードでまとめたように、プロセッサのマイクロコードに組み込まれています。命令の中にクロックの速度の指示を入れられる所がとても面白く感じます。
ライト信号生成部分
マルチプレクサを出た信号は、立ち上がり信号の生成部分と同じような回路で、細かい遅延を作っています。命令の名前から見ると、メモリか何かの書き込み信号として使っていそうです。この中の-TPW60がぐるっと回って、最初のSRラッチ部分に戻ってきています。図の中の赤いループです。