ダブルバッファ可能なメモリモジュール
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メソッドを呼び出します
うまく動いていたので閉じます