aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/firrtlTests/LoweringCompilersSpec.scala
diff options
context:
space:
mode:
authorTom Alcorn2020-06-23 13:12:05 -0700
committerGitHub2020-06-23 13:12:05 -0700
commit8322316a2f7c7fe7dad72f413e75d6b4600823f0 (patch)
treedb69527225ce78a9c33be6844c7836428d1f3af7 /src/test/scala/firrtlTests/LoweringCompilersSpec.scala
parentd1db9067309fe2d7765def39ac4085edfe53d7be (diff)
Basic model checking API (#1653)
* Add assume, assert, cover statements * Assert submodule assumptions * Add warning when removing verification statements * Remove System Verilog behaviour emitter warning * Add option to disable AssertSubmoduleAssumptions * Document verification statements in the spec The syntax for the new statements is assert(clk, cond, en, msg) assume(clk, cond, en, msg) cover(clk, cond, en, msg) With assert as a representative example, the semantics is as follows: `clk` is the clock, `cond` is the expression being asserted, `en` is the enable signal (if `en` is low then the assert is not checked) and `msg` is a string message intended to be reported as an error message by the model checker if the assertion fails. In the Verilog emitter, the new statements are handled by a new `formals` map, which groups the statements by clock domain. All model checking statements are then emitted within the context of an `ifdef FORMAL` block, which allows model checking tools (like Symbiyosys) to utilize the statements while keeping them out of synthesis flows. Co-authored-by: Albert Magyar <albert.magyar@gmail.com>
Diffstat (limited to 'src/test/scala/firrtlTests/LoweringCompilersSpec.scala')
-rw-r--r--src/test/scala/firrtlTests/LoweringCompilersSpec.scala12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/test/scala/firrtlTests/LoweringCompilersSpec.scala b/src/test/scala/firrtlTests/LoweringCompilersSpec.scala
index cc4914f2..75f2ea02 100644
--- a/src/test/scala/firrtlTests/LoweringCompilersSpec.scala
+++ b/src/test/scala/firrtlTests/LoweringCompilersSpec.scala
@@ -173,7 +173,9 @@ class LoweringCompilersSpec extends FlatSpec with Matchers {
Dependency[firrtl.passes.InferWidths])),
Del(14),
Add(15, Seq(Dependency(firrtl.passes.ResolveKinds),
- Dependency(firrtl.passes.InferTypes)))
+ Dependency(firrtl.passes.InferTypes))),
+ // TODO
+ Add(17, Seq(Dependency[firrtl.transforms.formal.AssertSubmoduleAssumptions]))
)
compare(legacyTransforms(new HighFirrtlToMiddleFirrtl), tm, patches)
}
@@ -351,7 +353,9 @@ class LoweringCompilersSpec extends FlatSpec with Matchers {
Seq(new Transforms.LowToLow, new firrtl.MinimumVerilogEmitter)
val tm = (new TransformManager(Seq(Dependency[firrtl.MinimumVerilogEmitter], Dependency[Transforms.LowToLow])))
val patches = Seq(
- Add(62, Seq(Dependency[firrtl.transforms.LegalizeAndReductionsTransform]))
+ Add(63, Seq(
+ Dependency[firrtl.transforms.formal.RemoveVerificationStatements],
+ Dependency[firrtl.transforms.LegalizeAndReductionsTransform]))
)
compare(expected, tm, patches)
}
@@ -362,7 +366,9 @@ class LoweringCompilersSpec extends FlatSpec with Matchers {
Seq(new Transforms.LowToLow, new firrtl.VerilogEmitter)
val tm = (new TransformManager(Seq(Dependency[firrtl.VerilogEmitter], Dependency[Transforms.LowToLow])))
val patches = Seq(
- Add(69, Seq(Dependency[firrtl.transforms.LegalizeAndReductionsTransform]))
+ Add(70, Seq(
+ Dependency[firrtl.transforms.formal.RemoveVerificationStatements],
+ Dependency[firrtl.transforms.LegalizeAndReductionsTransform]))
)
compare(expected, tm, patches)
}