FPGA開発日記

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

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (2. トレースファイルの生成)

Tenstorrentが、オープンソースRISC-VベクトルプロセッサOcelotを公開した。

github.com

トレースファイルの修正について、Generator内のコンフィグレーションを少しいじってみたのだが変化はなかった。

$ git diff
diff --git a/generators/boom b/generators/boom
--- a/generators/boom
+++ b/generators/boom
@@ -1 +1 @@
-Subproject commit b059b3b85b4bb4dbf44a9112c14d24945b3828cf
+Subproject commit b059b3b85b4bb4dbf44a9112c14d24945b3828cf-dirty
diff --git a/generators/chipyard/src/main/scala/config/BoomConfigs.scala b/generators/chipyard/src/main/scala/config/BoomConfigs.scala
index 719eef0b..9362af2d 100644
--- a/generators/chipyard/src/main/scala/config/BoomConfigs.scala
+++ b/generators/chipyard/src/main/scala/config/BoomConfigs.scala
@@ -15,8 +15,10 @@ class MediumBoomConfig extends Config(
   new chipyard.config.AbstractConfig)

 class MediumBoomVecConfig extends Config(
-  new boom.common.WithVector(2) ++                               // Add vector
+  new boom.common.WithVector(2) ++                               // Add vector
   new boom.common.WithNMediumBooms(1) ++                         // medium boom config
+  new boom.common.WithBoomCommitLogPrintf ++
+  new boom.common.WithBoomBranchPrintf ++
   new chipyard.config.AbstractConfig)

コア側のトレースファイルもspike-dasmが受け取れるようにしてみたのだが変化がない。

diff --git a/src/main/scala/exu/core.scala b/src/main/scala/exu/core.scala
index 0cbcd32d..9194eb1f 100644
--- a/src/main/scala/exu/core.scala
+++ b/src/main/scala/exu/core.scala
@@ -1480,9 +1480,9 @@ class BoomCore(usingTrace: Boolean)(implicit p: Parameters) extends BoomModule
       // To allow for diffs against spike :/
       def printf_inst(uop: MicroOp) = {
         when (uop.is_rvc) {
-          printf("(0x%x)", uop.debug_inst(15,0))
+          printf("DASM(0x%x)", uop.debug_inst(15,0))
         } .otherwise {
-          printf("(0x%x)", uop.debug_inst)
+          printf("DASM(0x%x)", uop.debug_inst)
         }
       }

波形自体は取得できたので、プログラムは動いたのだろう、何が起きているのかもう少し解析したいと思う。

とりあえず手っ取り早くトレースファイルを出力する方法は、上記のif文を取り除いてダイレクトにトレースを出力することだろう。

  • generators/boom/src/main/scala/exu/core.scala
if (COMMIT_LOG_PRINTF) {
    var new_commit_cnt = 0.U

    for (w <- 0 until coreWidth) {
      val priv = RegNext(csr.io.status.prv) // erets change the privilege. Get the old one

      // To allow for diffs against spike :/
      def printf_inst(uop: MicroOp) = {
        when (uop.is_rvc) {
          printf("(0x%x)", uop.debug_inst(15,0))
        } .otherwise {
          printf("(0x%x)", uop.debug_inst)
        }
      }

      when (rob.io.commit.arch_valids(w)) {
        printf("%d 0x%x ",
          priv,
          Sext(rob.io.commit.uops(w).debug_pc(vaddrBits-1,0), xLen))

とりあえずCOMMIT_LOG_PRINTFを除去して問答無用で出力するようにする。

3つのテストケースで実行されている命令を確認する。

$ ag " v" rvv_int_arithmetic_1_3828467586_2.log
90:3 0x000000008000139c vsetivli s3, 4, e32, m1, ta, ma x19 0x0000000000000004
93:3 0x00000000800013a8 vslide1up.vx v24, v9, s3
98:3 0x00000000800013bc vslide1up.vx v9, v24, s3
101:3 0x00000000800013c8 vslide1up.vx v24, v9, s3
106:3 0x00000000800013dc vslide1up.vx v9, v24, s3
107:3 0x00000000800013e0 vmv.v.v v24, v9
112:3 0x00000000800013f4 vslide1up.vx v30, v26, s3
115:3 0x0000000080001400 vslide1up.vx v26, v30, s3
118:3 0x000000008000140c vslide1up.vx v30, v26, s3
123:3 0x0000000080001420 vslide1up.vx v26, v30, s3
124:3 0x0000000080001424 vmv.v.v v30, v26
127:3 0x0000000080001430 vmaxu.vx v30, v24, s5
130:3 0x000000008000143c vmv.x.s s0, v30 x 8 0xffffffff8acf763a
132:3 0x0000000080001444 vslide1down.vx v21, v30, zero
135:3 0x0000000080001450 vmv.x.s s0, v21 x 8 0x0000000071010810
137:3 0x0000000080001458 vslide1down.vx v30, v21, zero
140:3 0x0000000080001464 vmv.x.s s0, v30 x 8 0xffffffff8d41f927
142:3 0x000000008000146c vslide1down.vx v21, v30, zero
145:3 0x0000000080001478 vmv.x.s s0, v21 x 8 0x000000003d80261a
178:3 0x0000000080001b58 vsetivli s3, 4, e32, m1, ta, ma x19 0x0000000000000004
181:3 0x0000000080001b64 vslide1up.vx v9, v26, s3
184:3 0x0000000080001b70 vslide1up.vx v26, v9, s3
189:3 0x0000000080001b84 vslide1up.vx v9, v26, s3
194:3 0x0000000080001b98 vslide1up.vx v26, v9, s3
...