DE1 に 68000 をつなぎたい

3年ぐらい無駄に時間を過ごしている感がありますが、ノウハウができてきまして、2013年になったら件名の通りにやろうと思います。16/32bit CPU を FPGA に持たせるというのはとても有意義な反面、ビルドに時間がかかるので開発時には不便だと最近思うようになりました。(シミュレーション時と量産時にはメリットが大きい)

1番の問題はピン数が限られていること、2番目の問題は物理的な大きさと5V動作の問題です。1番目は単方向信号はできるだけまとめてしまうこと、2番目の問題は 68SEC000 の存在を知ったこと(恥ずかしい)や入手ルートができたことで解決するものと思われます。

ピン数の稼ぎ方は DE1 からみて入力(CPU からみて出力)の場合は 74541 を並列につないで OE で出力先を指定します。DE1からみて出力側 (CPU からみて入力)の場合は 74574 を並列につないで CLK でデータを確定させます。
双方向の場合は 74541 と 74574 を並列につなぐことで理論上実装できます(回路図を書くのは楽)。しかしバスの配線が異様に複雑になるのであまり現実的ではありません。8051 のようなパラレルIO IC があるとその手間は減りますが、その分野の IC に現行品は存在せず、 3.3V 対応となると本当にあるのかわかりません。

ピン数を減らすということは、 OE や CLK のスイッチングのための時間やFPGA内部の論理構成がトレードオフになることや基板実装のための面積を使ってしまうことを忘れてはいけません。

双方向 (18pin)

  • RESET
  • HALT
  • D15:0

出力単体 (4pin)

  • CLK
  • input muliplex select3:0


clock は重要かつ更新頻度の面からいって単体出力にすべきである。
input multiplex selectは 74139 を使えば2pinに減らせる。

出力複合 (8pin?)

  0
              • -
0|BERR 1|DTACK 2|BR 3|AVEC 4|IPL0 5|IPL1 6|IPL2 7|x

CPU への出力端子はそんなに多くないので、CPU以外につける部品(SRAM のアドレスバスとか)出力に複合させた方がよさそう。

入力複合 (8pin)

  0  1   2   3
                                • -
0|x A8 A16 FC0 1|A1 A9 A17 FC1 2|A2 A10 A18 FC2 3|A3 A11 A19 AS 4|A4 A12 A20 RW 5|A5 A13 A21 UDS 6|A6 A14 A22 LDS 7|A7 A15 A23 BG 縦:bit, 横:select

総括

この計算では 38pin ですので、DE1 の外部コネクタのIOピン数 72 から引くと 34 pin が自由に使えます。物理的制約を無視すればFM音源チップや SRAM もつなげそうでなんとかいけそうな気がします。