Chisel FPGA メモリ
Memクラス
val mem = Mem(2048, UInt(8.W))
SyncReadMemクラス
val mem = SyncReadMem(2048, UInt(8.W))
同期書き込み,同期読み出しを持つメモリ生成
おそらくBRAMを使用する
FPGAは通常同期メモリをサポートしている.同期メモリはアドレスを入力してから,1クロック後に読み出しデータを利用できる.
同じクロックサイクルで新しい値が読み出されたのと同じアドレスに書き込まれた場合,Chiselは読み出しデータは未定義(FPGAに依存)
新しく書き込んだ値を読み出したい場合は,アドレスが等しいことを条件に書き込みデータを送信する「フォワード回路(転送回路)」を構築すれば良い.
val forwardReg = RegNext(wrAddr === rdAddr && wen) // true or false rdData := Mux(forwardReg, ..., ...)