ほかの波形と見比べながら、なんとなく何が必要なのか分かってきた。 現在自作CPUは簡易的なAXIで接続しているが、このためのコンフィグレーションが足りない。 いくつか修正して、AXIとしてちゃんと動作するようにした。要は、データサイズとかバーストサイズとかをちゃんと指定しなければならないらしい。そりゃそうだ。
@@ -105,22 +106,31 @@ class ScariV(CPU): # i_irq_sources = self.interrupt, # AXI interface. - o_o_l1d_req_valid = axi_if.ar.valid, - o_o_l1d_req_addr = axi_if.ar.addr, - o_o_l1d_req_tag = axi_if.ar.id, - i_i_l1d_req_ready = axi_if.ar.ready, + o_o_l1d_req_valid = axi_data_if.ar.valid, + o_o_l1d_req_addr = axi_data_if.ar.addr, + o_o_l1d_req_tag = axi_data_if.ar.id, + i_i_l1d_req_ready = axi_data_if.ar.ready, - i_i_l1d_resp_valid = axi_if.r.valid, - i_i_l1d_resp_tag = axi_if.r.id, - i_i_l1d_resp_data = axi_if.r.data, - o_o_l1d_resp_ready = axi_if.r.ready, + i_i_l1d_resp_valid = axi_data_if.r.valid, + i_i_l1d_resp_tag = axi_data_if.r.id, + i_i_l1d_resp_data = axi_data_if.r.data, + o_o_l1d_resp_ready = axi_data_if.r.ready, o_o_ic_req_valid = axi_fetch_if.ar.valid, i_i_ic_req_ready = axi_fetch_if.ar.ready, o_o_ic_req_tag = axi_fetch_if.ar.id, o_o_ic_req_addr = axi_fetch_if.ar.addr, + + i_i_ic_resp_valid = axi_fetch_if.r.valid, + i_i_ic_resp_tag = axi_fetch_if.r.id, + i_i_ic_resp_data = axi_fetch_if.r.data, + o_o_ic_resp_ready = axi_fetch_if.r.ready, ) + self.comb += axi_fetch_if.ar.len.eq(0) + self.comb += axi_fetch_if.ar.size.eq(4) # 128 + self.comb += axi_fetch_if.ar.burst.eq(0)
いくつかメモリアクセスの設定を変更して、まずは最初のステップとしてブートROMのフェッチに成功した。まずは一安心だ。