CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

クロック設計(2)

・・と、ここまできてすぐ気づくのがPCLKに入力する5MHzとOSC2の4.9152MHzが極めて近い周波数なので5MHzを流用できないか、ということです。この偏差は-1.7%で、シリアル転送に必要な精度±5%以内なのでたぶん大丈夫でしょう。

少ししか違わない発振源がボード上にあるのは気持ち悪いのでOSC2は未実装とし赤点線のようにクロック信号をパスさせます。

 

f:id:O3I:20200927081813j:plain

さらにSCC:Am85C30のデータシートをよく読んでみると転送用クロックのソース選択に非常に柔軟性があることが判りました。以下のようなマルチプレクサが内蔵されていてボーレートジェネレータ、内蔵PLL、外部転送クロック入力ピンと実際の転送クロックをあたかもパッチコードで接続するようにほぼ自由に切替できるようです。

 

f:id:O3I:20200927081825j:plain

 

ということはシステムクロックPCLKを入力とする内蔵ボーレートジェネレータから内部接続で転送クロックを与えてしまえば、わざわざ外部回路を用意したり、接続は不要だったことになります。

さらに云うと今回使用したAm85C30はサフィックスに「-10」がついていてPCLKに10MHz注入が可能でした(今更)・・なわけで74HC74も不要。わずかですが回路・パタンを簡略化できたところです。まったく事前の詰めが甘々です。

 

ところでUSB-シリアル変換ICを使えばボーレートの値自体は意味が無くなってきましたが、やはり旧来の2400,4800,9600,19200,38400・・・baudには合わせておきたいところです。ですがこれらの値「3×2の累乗系」は10M,20MHzといったピッタリした「10の累乗系」の周波数とは相性が悪いのです。

CPUやタイマ用クロックは時間測定の意味もあって「10の累乗系」にしたいので、転送用クロックには別水晶を用意するか、今回のように「10の累乗系」から誤差を承知で「3×2の累乗系」の近似値に分周するかです。

今回4.9152MHzが5MHzで流用できたのは

   3×2^15 = 98304 ≒ 100000  

であるためでこれは-1.7%の誤差です

もっと分周比の分解能に余裕があれば

   3×2^8×13= 9984  ≒ 10000

の近似値が使え、こちらは-0.16%で精度が高くなります。

13という素数マジックナンバーは今までにもしばしば使っていてCPUクロックを13分周するというのはよくやりました。