mikecat が 2022年12月01日19時36分32秒 に編集
初版
タイトルの変更
自作CPU用クロック・プログラムROM
タグの変更
自作CPU
クロック生成
メイン画像の変更
記事種類の変更
製作品
ライセンスの変更
(CC BY 4+) Creative Commons Attribution CC BY version 4.0 or later
本文の変更
++[自作CPU Advent Calendar 2022](https://qiita.com/advent-calendar/2022/diycpu) 1日目++ 自作CPUを紹介していくにあたり、まずは自作CPUを支えるクロックとプログラムROMを紹介する。 # クロック・プログラムROMインターフェイス まずはクロックやプログラムROMの種類を変えても共通して用いることができるよう、クロックとプログラムROM用のインターフェイスを定めた。 なお、「クロック」は電源およびリセット信号を供給する役割も持っている。 以下が、クロックおよびプログラムROMを接続するCPUボードの端子である。  画像の上側がプログラムROM用端子、下側がクロック用端子である。 いずれも2.54mmピッチのL字型ピンソケットで、プログラムROM用端子は2×10ピン、クロック用端子は1×6ピンである。 基板上のランドからクロックやプログラムROMを接続する側の基板の端までの距離は、ピンソケットの大きさにちょうどいい距離とする。 基板上のランドからその他3方向の基板の端までの距離は規定しない。 クロック用端子とプログラムROM用端子のそれぞれ相手に一番近いランドの中心の距離は、27.94 (2.54×11) mmとする。(ブレークポイント機能をもつなど、クロックとプログラムROM両方の役割の装置を開発する可能性を考え、規定している。距離にあまり深い意味は無い) シルクスクリーン (もしくはその他の技術による基板上への説明用の図形やテキストの描画) は参考であり、同じように描画する必要はない。 端子のリファレンスも、図通りのJ1、J2である必要はない。 プログラムROM用端子は、以下の端子からなる。 * 画像中一番下の2本:VCC (CPUボードからの電源出力) * 画像中下から2番目の2本:GND * 2段のうち基板に近い側、かつVCCとGND以外:データ (CPUボードへの入力) * 画像の上から下の順に、LSB→MSB * 2段のうち基板から遠い側、かつVCCとGND以外:アドレス (CPUボードからの出力) * 画像の上から下の順に、LSB→MSB クロック用端子は、画像の上から下の順に、以下の端子からなる。 * クロック (CPUボードへの入力) * リセット (CPUボードへの入力) * LOWのときリセット、HIGHのとき通常動作 * GND * VCC (CPUボードへの電源入力) * GND * VCC (CPUボードへの電源入力) クロック用端子のGNDとVCCはそれぞれ同じものなので、クロックを供給する装置は画像の下側の2本のGNDとVCCを省略し、4本の端子で接続する仕様にしてもよい。 # クロック 製作したクロックの装置を紹介する。 ## Clock & Reset Board ||| |---|---| UART通信用端子、操作用ボタン、状態表示用LCDを備えたArduino互換機。 1Hz~8MHzの間でクロックの周波数を設定でき、送信したクロックのカウントや手動でのクロック送信にも対応。 より正確にいうと、1Hz、2Hz、5Hz、10Hz、20Hz、50Hz、…、100kHz、200kHz、500kHz、1MHz、2MHz、4MHz、8MHzを設定できる。 [基板設計](https://github.com/mikecat/hardware_cpu/releases/tag/20220310-boards-v1.0) | [ソフトウェア](https://github.com/mikecat/hardware_cpu/tree/main/software/clock/clock_reset) ## Simple Clock & Reset Board ||| |---|---| マイコンを使わない設計としたクロック。 [CPUの創りかた TD4](http://xyama.sakura.ne.jp/hp/4bitCPU_TD4.html) のクロック部分や、Arduinoのリセット部分などを参考にした。 ついでに、電源用USB端子以外の表面実装部品を使わない設計とした。 クロックの周波数を約1Hz、約10Hz、約100Hzから選択できる。 切り替えスイッチの中点を約10Hzとし、キャパシタを並列接続すると容量が増え、周波数が下がって約1Hzとなる。 また、抵抗を並列接続すると抵抗値が減り、周波数が上がって約100Hzとなる。 周波数は可変抵抗で調整できるが、キャパシタの容量は調整できないため、3モードのうち1個の精度は犠牲となる。 [基板設計](https://github.com/mikecat/hardware_cpu/releases/tag/20220404-boards-v1.0) ## LTC1799モジュールによるクロック ||| |---|---| 秋月電子通商のLTC1799モジュール (I-01569) を用いた高速クロック。 精密可変抵抗で周波数を調整し、ジャンパーピンで分周比を設定する。 クロックの一時停止とリセット信号の供給はできるが、手動でのクロック供給はできない。 # プログラムROM 製作したプログラムROMを紹介する。 ## 16-Octet Switch ROM Board ||| |---|---| 16個の8回路ディップスイッチを用いて16バイトのプログラムを表現するROM。 TD4リスペクトだが、8回路NOTのIC(20ピン)が設計上基板に収まらなそうだったため、入力を反転して出力するマルチプレクサを用い、8×2のマトリクス構造とした。 ダイオードは1素子に2回路入っているものを用い、以下のようにスイッチとともに規則正しく並べた。  [基板設計](https://github.com/mikecat/hardware_cpu/releases/tag/20220310-boards-v1.0) ## Hardware ROM Board ||| |---|---| 64KiBのUV-EPROMをほぼそのまま乗せたROM。 アドレスの上位をディップスイッチで設定することでプログラムの切り替えを可能にするとともに、電気的にアドレスを設定するための端子も用意した。 UV-EPROMの窓には、アルミホイルをマスキングテープで貼っている。(これでいいのかはわからない) [基板設計](https://github.com/mikecat/hardware_cpu/releases/tag/20220310-boards-v1.0) 以下のArduino UNO (互換機を含む) 用シールドを用いて書き込むことができる。 ||| |---|---| ※画像の回路図はv1.1であるが、画像の基板はA0~A5の端子が逆順になっているv1.0のものである。 [基板設計](https://github.com/mikecat/hardware_cpu/releases/tag/20220310-boards-v1.0) | [ソフトウェア](https://github.com/mikecat/hardware_cpu/tree/main/software/other/rom_write_shield) ## Software ROM Board ||| |---|---| ROMインターフェースを持つArduino互換機。 ソフトウェアでROMの機能を再現することを目的としている。 [基板設計](https://github.com/mikecat/hardware_cpu/releases/tag/20220310-boards-v1.0) | [ソフトウェア](https://github.com/mikecat/hardware_cpu/tree/main/software/rom/software_rom) ## 1-Byte ROM Board ||| |---|---| アドレス入力を省略し、常にディップスイッチで指定した固定の値を出力するROM。 命令を1個ずつ与えて動作確認を行うのに便利。 10kΩの集合抵抗を用いてプルダウンしている。 ## Software ROM Board 2 ||| |---|---| ソフトウェアでROMの機能を再現することを目的とした装置の第2段。 Arduino互換機ではなく、PICを用いている。 外部EEPROMと、操作用の液晶およびボタンを用意し、何種類ものプログラムを格納してスタンドアロンで切り替えられるようにする計画。 ただし、現在未実装である。 [基板設計](https://github.com/mikecat/hardware_cpu/releases/tag/20220527-boards-v1.0) | ~~ソフトウェア~~