xref: /XiangShan/src/main/scala/xiangshan/transforms/PrintControl.scala (revision 5931ace35325a644a12f8ea27830a2de7489e7e7)
1*5931ace3STang Haojin/***************************************************************************************
2*5931ace3STang Haojin* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3*5931ace3STang Haojin* Copyright (c) 2020-2021 Peng Cheng Laboratory
4*5931ace3STang Haojin*
5*5931ace3STang Haojin* XiangShan is licensed under Mulan PSL v2.
6*5931ace3STang Haojin* You can use this software according to the terms and conditions of the Mulan PSL v2.
7*5931ace3STang Haojin* You may obtain a copy of Mulan PSL v2 at:
8*5931ace3STang Haojin*          http://license.coscl.org.cn/MulanPSL2
9*5931ace3STang Haojin*
10*5931ace3STang Haojin* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11*5931ace3STang Haojin* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12*5931ace3STang Haojin* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13*5931ace3STang Haojin*
14*5931ace3STang Haojin* See the Mulan PSL v2 for more details.
15*5931ace3STang Haojin***************************************************************************************/
16*5931ace3STang Haojin
17*5931ace3STang Haojinpackage xiangshan.transforms
18*5931ace3STang Haojin
19*5931ace3STang Haojinimport firrtl.annotations.NoTargetAnnotation
20*5931ace3STang Haojinimport firrtl.options.{HasShellOptions, ShellOption}
21*5931ace3STang Haojin
22*5931ace3STang Haojincase class DisablePrintfAnnotation(m: String) extends NoTargetAnnotation
23*5931ace3STang Haojinobject DisablePrintfAnnotation extends HasShellOptions{
24*5931ace3STang Haojin
25*5931ace3STang Haojin  val options = Seq(
26*5931ace3STang Haojin    new ShellOption[String](
27*5931ace3STang Haojin      longOption = "disable-module-print",
28*5931ace3STang Haojin      toAnnotationSeq = s => Seq(DisablePrintfAnnotation(s)),
29*5931ace3STang Haojin      helpText =
30*5931ace3STang Haojin        "The verilog 'printf' in the <module> and it's submodules will be removed\n",
31*5931ace3STang Haojin      shortOption = Some("dm"),
32*5931ace3STang Haojin      helpValueName = Some("<module>")
33*5931ace3STang Haojin    )
34*5931ace3STang Haojin  )
35*5931ace3STang Haojin
36*5931ace3STang Haojin}
37*5931ace3STang Haojin
38*5931ace3STang Haojincase class EnablePrintfAnnotation(m: String) extends NoTargetAnnotation
39*5931ace3STang Haojinobject EnablePrintfAnnotation extends HasShellOptions {
40*5931ace3STang Haojin  val options = Seq(
41*5931ace3STang Haojin    new ShellOption[String](
42*5931ace3STang Haojin      longOption = "enable-module-print",
43*5931ace3STang Haojin      toAnnotationSeq = s => Seq(EnablePrintfAnnotation(s)),
44*5931ace3STang Haojin      helpText =
45*5931ace3STang Haojin        "The verilog 'printf' except the <module> and it's submodules will be removed\n",
46*5931ace3STang Haojin      shortOption = Some("em"),
47*5931ace3STang Haojin      helpValueName = Some("<module>")
48*5931ace3STang Haojin    )
49*5931ace3STang Haojin  )
50*5931ace3STang Haojin
51*5931ace3STang Haojin}
52*5931ace3STang Haojin
53*5931ace3STang Haojincase class DisableAllPrintAnnotation() extends NoTargetAnnotation
54*5931ace3STang Haojinobject DisableAllPrintAnnotation extends HasShellOptions {
55*5931ace3STang Haojin  val options = Seq(
56*5931ace3STang Haojin    new ShellOption[Unit](
57*5931ace3STang Haojin      longOption = "disable-all",
58*5931ace3STang Haojin      toAnnotationSeq = _ => Seq(DisableAllPrintAnnotation()),
59*5931ace3STang Haojin      helpText =
60*5931ace3STang Haojin        "All the verilog 'printf' will be removed\n",
61*5931ace3STang Haojin      shortOption = Some("dall")
62*5931ace3STang Haojin    )
63*5931ace3STang Haojin  )
64*5931ace3STang Haojin}
65*5931ace3STang Haojin
66*5931ace3STang Haojincase class RemoveAssertAnnotation() extends NoTargetAnnotation
67*5931ace3STang Haojinobject RemoveAssertAnnotation extends HasShellOptions{
68*5931ace3STang Haojin  val options = Seq(
69*5931ace3STang Haojin    new ShellOption[Unit](
70*5931ace3STang Haojin      longOption = "remove-assert",
71*5931ace3STang Haojin      toAnnotationSeq = _ => Seq(RemoveAssertAnnotation()),
72*5931ace3STang Haojin      helpText = "All the 'assert' will be removed\n",
73*5931ace3STang Haojin      shortOption = None
74*5931ace3STang Haojin    )
75*5931ace3STang Haojin  )
76*5931ace3STang Haojin}
77