xref: /XiangShan/src/main/scala/xiangshan/transforms/PrintModuleName.scala (revision e3da8bad334fc71ba0d72f0607e2e93245ddaece)
1*e3da8badSTang Haojin/***************************************************************************************
2*e3da8badSTang Haojin* Copyright (c) 2024 Beijing Institute of Open Source Chip (BOSC)
3*e3da8badSTang Haojin* Copyright (c) 2020-2024 Institute of Computing Technology, Chinese Academy of Sciences
4*e3da8badSTang Haojin* Copyright (c) 2020-2021 Peng Cheng Laboratory
5*e3da8badSTang Haojin*
6*e3da8badSTang Haojin* XiangShan is licensed under Mulan PSL v2.
7*e3da8badSTang Haojin* You can use this software according to the terms and conditions of the Mulan PSL v2.
8*e3da8badSTang Haojin* You may obtain a copy of Mulan PSL v2 at:
9*e3da8badSTang Haojin*          http://license.coscl.org.cn/MulanPSL2
10*e3da8badSTang Haojin*
11*e3da8badSTang Haojin* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
12*e3da8badSTang Haojin* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
13*e3da8badSTang Haojin* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
14*e3da8badSTang Haojin*
15*e3da8badSTang Haojin* See the Mulan PSL v2 for more details.
16*e3da8badSTang Haojin***************************************************************************************/
17*e3da8badSTang Haojin
18*e3da8badSTang Haojinpackage xiangshan.transforms
19*e3da8badSTang Haojin
20*e3da8badSTang Haojinclass PrintModuleName extends firrtl.options.Phase {
21*e3da8badSTang Haojin
22*e3da8badSTang Haojin  override def invalidates(a: firrtl.options.Phase) = false
23*e3da8badSTang Haojin
24*e3da8badSTang Haojin  override def transform(annotations: firrtl.AnnotationSeq): firrtl.AnnotationSeq = {
25*e3da8badSTang Haojin
26*e3da8badSTang Haojin    import xiangshan.transforms.Helpers._
27*e3da8badSTang Haojin
28*e3da8badSTang Haojin    val (Seq(circuitAnno: firrtl.stage.FirrtlCircuitAnnotation), otherAnnos) = annotations.partition {
29*e3da8badSTang Haojin      case _: firrtl.stage.FirrtlCircuitAnnotation => true
30*e3da8badSTang Haojin      case _ => false
31*e3da8badSTang Haojin    }
32*e3da8badSTang Haojin    val c = circuitAnno.circuit
33*e3da8badSTang Haojin
34*e3da8badSTang Haojin    def onStmt(s: firrtl.ir.Statement): firrtl.ir.Statement = s match {
35*e3da8badSTang Haojin      case firrtl.ir.Print(info, firrtl.ir.StringLit(string), args, clk, en) =>
36*e3da8badSTang Haojin        firrtl.ir.Print(info, firrtl.ir.StringLit(string.replace(utility.XSLog.MagicStr, "%m")), args, clk, en)
37*e3da8badSTang Haojin      case other: firrtl.ir.Statement =>
38*e3da8badSTang Haojin        other.mapStmt(onStmt)
39*e3da8badSTang Haojin    }
40*e3da8badSTang Haojin
41*e3da8badSTang Haojin    firrtl.stage.FirrtlCircuitAnnotation(c.mapModule(m => m.mapStmt(onStmt))) +: otherAnnos
42*e3da8badSTang Haojin  }
43*e3da8badSTang Haojin}
44