FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LiteXによるSoC環境構築を試行する (10. LiteXのAXIコンフィグレーションの変更)

https://raw.githubusercontent.com/enjoy-digital/litex/master/doc/litex.png

ほかの波形と見比べながら、なんとなく何が必要なのか分かってきた。 現在自作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のフェッチに成功した。まずは一安心だ。