hungalab / cube_sim

Cube System Simulator based on VMIPS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ダブルバッファ可能なメモリモジュール

tkojima0107 opened this issue · comments

CMAやSNACCでは同一アドレス空間上に2つの物理メモリが存在するため、これを可能にするモジュールを作ります

DoubleBufferクラスを追加しました
このクラスはMemoryModuleクラスを継承しているので、CPU側に直接マップすることもできますが、基本的にはアクセラレータ向けのモジュールです

ほかのRangeクラスを継承したものたちと同様にstore_word, fetch_wordなどをもち、これらはルータ経由での読み書きに利用されます

一方で、fetch_word_from_innerとstore_word_from_innerはアクセラレータ内部からのアクセスに利用します
イメージは以下の通り

                     +--------------------------------------------------------------+
                     |                                                              |
                     |                  Physical Memory                             |
                     |                  +-------------+                             |
+---------------+    |                  |             |                             |     +------------------+
|               |    |               +--+    front    |  +                          |     |                  |
|               +--->+ store_word    |  |             |  |    store_word_from_inner +<----+                  |
|     Router    |    |           +---+  +-------------+  +---+                      |     |  Inner Modules   |
|               +<---+ fetch_word    |  +-------------+  |    fetch_word_from_inner +---->+                  |
|               |    |               |  |             |  |                          |     |                  |
+---------------+    |               +  |    back     +--+                          |     +------------------+
                     |                  |             |                             |
                     |                  +-------------+                             |
                     |                                       void bus_switch()      |
                     |                                                              |
                     +--------------------------------------------------------------+

初期状態ではルータ側にfront, 内部側にbackのメモリが接続され、切り替えたい場合はbus_switchメソッドを呼び出します

うまく動いていたので閉じます