動かしてわかるCPUの作り方 第9講

第9講 プログラムを独立化しメモリを実装する

Quartusを前提とした内容になるため、GHDLで検証するのはやや面倒になってきた。Alteraライブラリを導入すればシミュレーションが可能であることまで確認できた。一方で、タイミングシミュレーションは完全にお手上げになる。

Alteraライブラリについては、Githubから借用した。GHDLでコンパイルしてやれば、altera_mfも普通に使えることが分かった。もちろんテストベンチを書いてシミュレーションもできる。ただ、ROMデータ作成のツールはなく、自動生成されるコードもないので、書籍を参考に写経することになった。

ROMの導入については特に違和感もなく、理解も出来たと思う。気まぐれにaltera_mf.vのaltsyncramを読んでみた。言語を知るにはライブラリを読んでみるのがおすすめという話もあるので。mifという独自フォーマットだけではなく、Intel HEXフォーマットにも対応している模様。ただ、それよりも驚いたのは、VHDLとしてバリバリにフォーマット解析をしているところ。こんなに記述能力が高かったのか。依然として回路設計としてはひたすら配線を手打ちさせらている印象しか持てないのだが、ことシミュレーションについてはかなり柔軟にできそう。

RAMの導入は2段階になっている。前半は、二重に持っていたRAMの実態を、一つにまとめること。その代わり、読み込みと書き込みの2種類のタイミングを考慮できるように、設計をやり直している。機械語を読みだした後に、機械語に含まれるRAMのアドレス(即値)が確定するので、デコードステージでRAMから読み出せば良いということらしい。ところで、RAMのテストベンチをシミュレーションしたところ、RAMに記録されずに入力がそのまま出力に出てくるような波形になっていた。書き込み信号線を考慮するのを失念していたようで、コードを見比べたらすぐに判明した。

ROMとRAM前半を一旦CPUに組み込んでみた。といっても、実機がないのでCPUそのものではなく、CPUテストベンチに組み込んだ。そして、シミュレーション。特に問題なさそうである。

RAMの導入の後半は、AlteraのRAMライブラリを使う。アドレスを指定するバスが読み書きで異なるが、実態は一つであるため、書き込みのタイミングを再検討する必要がある。ところで、RAMへの書き込みを指示する信号は、ライトバックフェーズになった直後に無効になるのだが、なぜこれで安定してRAMへ書けるのかよく分からない。

FFにはセットアップ時間とホールド時間があるのだが、回路遅延に対してホールド時間は無視できるレベルぐらい小さい模様。おそらく、基準クロックのゆらぎは回路遅延よりも更に小さいのだろう(要出典)。概ね理解できた気がする。 

動かしてわかる CPUの作り方10講

動かしてわかる CPUの作り方10講

  • 作者:井澤 裕司
  • 発売日: 2019/08/21
  • メディア: 単行本(ソフトカバー)