アダルト・ヴァイオリン May the force be with you..

2009年6月13日

【不定期連載】 UMLで16ビットCPUを作ろう:第6回 メモリリクエスト制御

Filed under: Weblog — い~ぐる @ 2:13 PM


EUからBIUへのメモリ要求は、メモリアラインに関係なく、命令の必要とする幅でバイト読み出しだったりワード読み出しだったりする。

これ自体は、アラインフリーであるx86では当然であるが、物理メモリにアクセスするときには、問題なのだ。たとえば奇数番地からワードで読むというのは一度にはできない。

そこで、EUからのリクエストを物理メモリ要求に変換するリクエスト制御をBIUのサブモジュールとして作る。ついでながら、ここでは、メモリ要求を発生させるので、BIU内のすべてのメモリバストランザクションをここに集中させて、アービトレーションの役割を負わせよう。

つまり、バストランザクションとして必要となる、メモリ(EUの命令アクセスと、BIUの命令プリフェッチ)ならびに、IO要求を、ここで取りまとめて、物理バスにコマンドを出す。

もちろん、サブモジュールから直接ピンが出るのではないので、上位のモジュールを仲介する必要がある。そのため、本来ならば、サブモジュールに引っ張ってこなくてもよい信号まで入っているけれど、モジュールの切り分けは仮想的なものであり、物理的なピン数の制約条件が生まれるわけではないので、読みやすさ優先としておく。


UML的には、もしかしたら、関連をうまく使うと、直接ピンを外部にインタフェースする表現方法を取れるかもしれないが、まだ整理し切れていないので、これは、後日の検討としておく。

【不定期連載】 UMLで16ビットCPUを作ろう:第5回 命令プリフェッチキュー

Filed under: Weblog — い~ぐる @ 7:35 AM


分岐命令でフラッシュする命令プリフェッチキューを、BIUのサブモジュールとして作成する。なるべく細かな機能単位でモジュール化しておいたほうが、設計の見通しは良くなる(はず)。

プリフェッチ用のIPは、通常のIPと別として、プリフェッチモジュールからメモリのリクエストを上げるようにする。

BIUが奇数番地のIPを持つときには、プリフェッチは初回はバイト読み出しで、2回目以降をワード読み出しとする。

プリフェッチモジュールはデータが用意できたら、QueueReadyとともに、先頭データを出力し、データを受け渡すごとに、1バイトずつ新しいデータに更新する。

Powered by WordPress