PicoRV32のネイティブメモリインターフェース
#FPGA #Verilog #RISC-V
PicoRVのメモリインターフェース。
自作のRISC-Vのバスインターフェースもこれを採用した。→ VALIDとREADYにより待ち合わせを行うBRAMコントローラー
https://github.com/YosysHQ/picorv32#picorv32-native-memory-interface
code:verilog
output mem_valid
output mem_instr
input mem_ready
output 31:0 mem_addr
output 31:0 mem_wdata
output 3:0 mem_wstrb
input 31:0 mem_rdata
https://gyazo.com/c5d1e2839abf57193e48c098f39f9ddc
メモ
信号線
instr_addr(32ビット)
instr_addr_valid(1ビット)
instr(32ビット)
instr_ready(1ビット)
【ケース1】CPUがROMへ指定したアドレスの命令取得を依頼
クロック1(命令取得リクエスト)
OUT信号
instr_addr = PCの値
instr_addr_valid = 1
IN信号
instr = (なんでもいい)
instr_ready = (なんでもいい)
クロック2(命令取得待ち)
OUT信号
instr_addr = (前の値のままキープ)
instr_addr_valid = (前の値のままキープ)
IN信号
instr_ready = 0 の場合(読み込み中)
何も行わない
instr_ready = 1 の場合(読み込み中)
instr = (なんでもいい)
instr_ready = (なんでもいい)
参考
https://github.com/YosysHQ/picorv32#picorv32-native-memory-interface
https://flogics.com/wp/2019/12/running-risc-v-on-tinyfpga-bx/
https://msyksphinz.hatenablog.com/entry/2015/07/01/020000