Skip to content

Commit 7a1d727

Browse files
author
Oron Port
committed
add finish command
1 parent fb82daa commit 7a1d727

File tree

5 files changed

+9
-3
lines changed

5 files changed

+9
-3
lines changed

compiler/ir/src/main/scala/dfhdl/compiler/ir/DFMember.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1560,7 +1560,7 @@ object TextOut:
15601560
enum Severity derives CanEqual:
15611561
case Info, Warning, Error, Fatal
15621562
enum Op extends HasRefCompare[Op] derives CanEqual:
1563-
case Print, Println, Debug
1563+
case Print, Println, Debug, Finish
15641564
case Report(severity: Severity) extends Op
15651565
case Assert(assertionRef: AssertionRef, severity: Severity) extends Op
15661566
lazy val getRefs: List[DFRef.TwoWayAny] = this match

compiler/ir/src/main/scala/dfhdl/compiler/printing/Printer.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ class DFPrinter(using val getSet: MemberGetSet, val printerOptions: PrinterOptio
329329
).mkString.emptyOr(m => s"s\"$m\"")
330330
end match
331331
textOut.op match
332+
case TextOut.Op.Finish => "finish()"
332333
case TextOut.Op.Report(severity) =>
333334
val csSeverity = if (severity == TextOut.Severity.Info) "" else s", Severity.${severity}"
334335
s"report($msg$csSeverity)"
@@ -393,7 +394,7 @@ class DFPrinter(using val getSet: MemberGetSet, val printerOptions: PrinterOptio
393394
val dfhdlKW: Set[String] =
394395
Set("VAR", "REG", "din", "IN", "OUT", "INOUT", "VAL", "DFRET", "CONST", "DFDesign", "RTDesign",
395396
"EDDesign", "DFDomain", "RTDomain", "EDDomain", "process", "forever", "all", "init", "step",
396-
"goto", "wait", "assert", "report", "print", "println", "debug")
397+
"goto", "wait", "assert", "report", "print", "println", "debug", "finish")
397398
val dfhdlOps: Set[String] = Set("<>", ":=", ":==")
398399
val dfhdlTypes: Set[String] =
399400
Set("Bit", "Boolean", "Int", "UInt", "SInt", "Bits", "X", "Encoded", "Struct", "Opaque",

compiler/stages/src/main/scala/dfhdl/compiler/stages/verilog/VerilogPrinter.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class VerilogPrinter(val dialect: VerilogDialect)(using
126126
def csDisplay(severity: TextOut.Severity, msg: String) =
127127
s"""$$display("${severity.toString.toUpperCase()}: ", $msg);${csFinish(severity)}"""
128128
textOut.op match
129+
case TextOut.Op.Finish => "$finish;"
129130
case TextOut.Op.Report(severity) =>
130131
if (assertIsSupported) s"${csSeverity(severity)}($msg);"
131132
else csDisplay(severity, msg)

compiler/stages/src/main/scala/dfhdl/compiler/stages/vhdl/VHDLPrinter.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class VHDLPrinter(val dialect: VHDLDialect)(using
123123
case TextOut.Severity.Error => "ERROR"
124124
case TextOut.Severity.Fatal => "FAILURE"
125125
textOut.op match
126+
case TextOut.Op.Finish => "std.env.finish;"
126127
case TextOut.Op.Report(severity) => csReport(severity, msg)
127128
case TextOut.Op.Assert(assertionRef, severity) =>
128129
if (msg.isEmpty)

core/src/main/scala/dfhdl/core/TextOut.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,16 @@ object TextOut:
2424
severity: Severity
2525
)(using DFC): ir.TextOut.Op =
2626
ir.TextOut.Op.Assert(assertion.asIR.refTW[ir.TextOut], severity)
27-
export ir.TextOut.Op.{Print, Println, Report, Debug}
27+
export ir.TextOut.Op.{Print, Println, Report, Debug, Finish}
2828
end Op
2929

3030
object Ops:
3131
def debug(args: DFValAny*)(using DFC): Unit =
3232
TextOut(Op.Debug, Nil, args.toList)
3333

34+
def finish()(using DFC): Unit =
35+
TextOut(Op.Finish, Nil, Nil)
36+
3437
transparent inline def print(inline msg: Any): Unit =
3538
compiletime.summonFrom {
3639
case given DomainType =>

0 commit comments

Comments
 (0)