Avec les dernières version de chisel le «backend» de génération du verilog a changé.
SystemVerilog
Avec circt on peut générer en systemVerilog avec la méthode emitSystemVerilogFile() inclue dans le package:
import circt.stage.ChiselStage
//...
class MonModule extends Module {
//...
}
object MonModule extends App {
ChiselStage.emitSystemVerilogFile( new MonModule(),
firtoolOpts = Array("-disable-all-randomization",
"--lowering-options=disallowLocalVariables",
"-strip-debug-info"))
}
Le fichier généré se nommera MonModule.sv
Verilog
Pour générer du Verilog il faut utiliser l’ancienne méthode que l’on trouve dans le package chisel3.
object MonModule extends App {
val filename = "MonModule.v"
println("Generate verilog source for ChisNesPad Module")
val verilog_src = chisel3.emitVerilog(new MonModule)
val filepath = os.pwd / filename
if (os.exists(file)) os.remove(file)
os.write(filepath, verilog_src)
}
Le choix
Et l’on peut s’ajouter une option à la ligne de commande si l’on veut avoir le choix.
import circt.stage.ChiselStage
//...
class MonModule extends Module {
//...
}
object MonModule extends App {
if (args.length == 0) {
} else if (args(0) == "--systemVerilog") {
ChiselStage.emitSystemVerilogFile( new MonModule(),
firtoolOpts = Array("-disable-all-randomization",
"--lowering-options=disallowLocalVariables",
"-strip-debug-info"))
}
}
On lancera les commandes suivantes pour générer l’un ou l’autre :
# générer le verilog
sbt "runMain MonModule"
# générer le systemVerilog
sbt "runMain MonModule --systemVerilog"