kitune-sanの日記: 8288をSystemVerilogで書いてみた 2
仕事が忙しかったため少しづつやってたものが一応完成した。
りぽじとりぃ
https://github.com/kitune-san/KF8288
8288はバスコントローラーだ。
8086だとか8088といった古いCPUはDIPパッケージでピン数が少ない。そのため一部のアドレスピンとデータピンは共有されていたのである。
そこでCPUは3本のステート信号を利用してアドレスのラッチタイミング、IOやメモリへの送受信命令を8288へコマンドを送信していた。(MAXモード)
…ただ、FPGA上でこれをつかうメリットはないと思う。
気になった点などのメモ
- 設計するとき、マシンサイクル中にステート信号が変わったらどうなるのか気になったが、
今回は、絶対に変更しないという前提で進めることにした。ただしマシンサイクルの先頭(T4->T1)と末尾(T3(Tw)->T4)は除く。
- MCE信号の使い方がよくわからなかった。8259(割込コントローラ)をカスケード接続する場合に使用するみたいなので、8259を調べるときにそのうちわかるかもしれない。
- データシートのI/O BUS MODEにマルチプロセッサについて少し書かれていた。この頃からマルチプロセッサシステムがあったのだろうか。(コプロセッサやDMA等のことだろうか)
失敗したとこメモ
- always_ff文内でノンブロッキング(<=)のつもりでブロッキング(=)を書いてしまっても、シュミレータやコンパイル時に警報が出ない。
シュミレーションが思い通りに行かずに時間を潰してしまった。;;記述順によっては思ったように動いてしまうので注意。たまに都合がいい場合もあるので辛い(実機にコンフィグレーションすると…)。
- クロックの立ち上がりエッジと立ち下がりエッジ両方を使う場合はよく考えないと混乱するかも。なるべく使わないほうがいいけれども…
シミュレーション (スコア:0)
シュミレーションが思いどおりいかないという件に関しては、
正解はSTARCルールどおり書けばよくて、FFの信号代入にはかならず
遅延を入れます。気をつけるのはそれだけです。
Verilog系の場合、信号代入にデルタ遅延がないので注意しましょう。
同一時刻イベントは前半・後半みたいな処理になっていて、後半で確定する
信号代入で同時刻イベントを発生させると順序があやしくなってきます。
Re:シミュレーション (スコア:1)
コメントありがとうございます。シュミレーションの遅延の入れ方には気をつけていきたいです。
STARCルールについてですが、
以前コメント頂いていてその際に調べたのですが、本(電子書籍)で販売されていることは知っていました。
アマチュアでやっていることもあったので避けてたのですが、購入しようか考えてみます。