May 31, 2006

TD4用ROMエミュレータ

「CPUの創りかた」CPUのTD4用に作成したROMエミュレータもようやく完成。
本体部分は非常にシンプルな作りで、
  • 起動時にEEPROMからRAMにROMデータを読み込み
  • TD4からのCLOCK信号を割り込みトリガとし、指定されたアドレスに対するデータ(RAM)を出力
だけ。

おまけ機能のUARTからROMデータをを操作する部分に非常に多くのコードが費やされる状態。
ここの機能は、
  • ROMバンク(16バイト単位,バンク)
  • ROMバンク切り替え
  • EEPROM書き換え
  • RAM内のROMデータダンプ
を実装。全部で500バイト弱。意外と大きい。

10数年振りにフルアセンブラで書いた割りには上出来か。初アーキテクチャ(AVR)でもあるし。
当初はPICで作るつもりだったけど、AVRの方が適しているという結論となった。
どちらも使ったことがないので、慣れの問題は無いがAVRの方が使いやすかった。
条件としては、
  • 入力5bit+出力8bit+UART
  • 外部割り込みあり
  • データ用EEPROMを内蔵
  • 必要最小限のピン数
の4点。
最初に試したPIC16F648(18ピン)では、汎用I/Oポートと特殊機能ポートの重複度合いが良くない。
PORTAはリセット端子が入力専用、PORTBにはUARTと外部割り込みといった具合で、ひとつのポートを出力用専用とすることができない。
TD4ではROMに対してストローブ信号を持たないため、PORTA/Bに分けて出力すると誤動作する可能性がある。
次のクラスだと、28ピンか40ピンになってしまうため、大きすぎ。
AVR90S2313(20ピン)は外付けクロックが必要ではあるが、PORTDにUART,外部割り込みがあり、PORTBは全部出力用に使えるため問題なし。
Posted at 00:10 in embedded

May 24, 2006

CPUの創りかた(その3)

遂に完成。ROMエミュレータはUARTからの変更機能は未実装なものの、とりあえず動く状態のプログラムにてテスト。
サンプルプログラム1(LEDちかちか)にて動作確認し問題なく動作することを確認。
念のため、ロジアナを接続してみたけどこちらも問題なし。
10Hz動作とはいえ、きちんと1命令/クロックで実行されてますな。

完成写真


右上のピンヘッダがROM接続用端子。アドレス&データバスとクロック,電源を引き出し。

サンプルプログラム実行時のロジアナ波形


10KHzでサンプリングし、クロックエッジのサンプルだけを抜き出し可視化
Posted at 20:58 in embedded

CPUの創りかた(その2)

CPU部分完成。逆接・ショートが無いことまでは確認完了。
ROM部分は作って無いんで動作確認がまだできない。

ROMエミュレータはPICで作ろうかと思っていたけど、いざやって見るとイマイチしっくりこない。(PICは使ったこと無い。そのうち使うかなと思っていたけど買っておいた16F648Aがあるだけ)
命令体系はそんなに違和感無いんだけれども、各I/Oピンの取り扱いとかSFRへのアクセスとか、そういう部分が使いにくい。
で、秋月行ったついでにAVR(AT90S2313)を入手。廃品種だけど安いし、UARTもあるので。 早速使って見ると、一部命令に違和感があるものの、PICのような使いにくさを感じなかったので、AVRで行く事に決定。
Posted at 18:26 in embedded

CPUの創りかた

今更ながら、CPUの創りかた(毎日コミュニケーションズ)を読破(読んだのは3月末だけど)。
非常に平易に書かれているので、通勤電車の中だけで、1週間で読めた。
実に考えられた設計で、デコーダが単純になるようになっているため、回路が非常に簡単。でも、IC10個で作れるってことになっているんだけど、もっとプリミティブなロジックICだけ(7400だけとか)で作るのかと思ったらALUは4bit加算器だったりするのでちょっとがっかり。
ROMをDIPスイッチで実現するところなんかは力技ながら、納得。

デコーダの設計のところで、説明の書き方がロジカルでなく、釈然としなかったので別途「VHDLで学ぶディジタル回路設計@CQ出版」を買ってお勉強。論理圧縮の方法がちゃんと理解できたので、良しとしよう。
(こっちの本は仕事が忙しくなってまだ頭の方しか読んでない。)

で、部品も買ってきたので実際にこのCPUを作ってみることに。
ICが11個もあると配線は拷問ですな。
やったことある人はわかると思うけど、回路図から作ろうとすると、配線図ではないので、各パーツの配置とかは自分で考えないといけないし、一本一本配線するのも大変。
ROM回路は最初から作る気がしないので、PICで置き換える予定(4bitCPU作るのに8bitのマイコンを載せるのもどうかと思うが)。
作例では、サンハヤトのICB-98GUに全部実装しているが、ROM回路は外出し出来るようにするので、もう少し小さいICB-96PUを使用。CPU部だけならなんとか収まる。
およそ半分できたので、日曜日には動かせるかな。
Posted at 18:25 in embedded

May 05, 2006

EZ-USBその2

まとまった時間が取れず、機器製作ができないため、方向転換して、JTAGゴッコでUSBの練習。
ターゲットはトラ技2006/4付録のCPLD基板(ALTERA MAXII)。
ホスト側から、コマンドとシフトインするデータをEZ-USBに送ると、TAP操作をEZ-USB側で実施し、結果を返すという仕様。(TAPのそれぞれのポートを単独でOn/Offするプリミティブなコマンドもあり)
IDCODEの取得と、EXTESTでLEDの点滅が出来ることまでは確認できた。
ただし、手抜きな作りなので、一回のコマンド送信に対して一回分のデータ受信しか行えない(分割するのが面倒だった)ので、データ長に制限あり(64バイト)。
→ bit単位で扱えるので、最大448bitまで。
当面はこれで使えるけど、足りなくなったらUSB2.0化(FX)しないと。
あとは、jtagtoolに組み込めば遊べるのかな。
Posted at 10:31 in embedded