summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/ExtModule.scala
diff options
context:
space:
mode:
authorRichard Lin2017-04-13 22:59:00 -0700
committerGitHub2017-04-13 22:59:00 -0700
commite07248b8f6022fafdb84f5d1c0ebe3fc90a5475a (patch)
treef2bb938fd35651b4fc7b88cbcd20e163cc75dd2e /src/test/scala/chiselTests/ExtModule.scala
parent97902cdc53eec52aa0cd806b8cb49a0e3f2fb769 (diff)
Module Hierarchy Refactor (#469)
Diffstat (limited to 'src/test/scala/chiselTests/ExtModule.scala')
-rw-r--r--src/test/scala/chiselTests/ExtModule.scala71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/ExtModule.scala b/src/test/scala/chiselTests/ExtModule.scala
new file mode 100644
index 00000000..f8927b9f
--- /dev/null
+++ b/src/test/scala/chiselTests/ExtModule.scala
@@ -0,0 +1,71 @@
+// See LICENSE for license details.
+
+package chiselTests
+
+import java.io.File
+
+import org.scalatest._
+import chisel3._
+import chisel3.experimental._
+import chisel3.testers.BasicTester
+import chisel3.util._
+
+// Avoid collisions with regular BlackBox tests by putting ExtModule blackboxes
+// in their own scope.
+package ExtModule {
+ class BlackBoxInverter extends ExtModule {
+ val in = IO(Input(Bool()))
+ val out = IO(Output(Bool()))
+ }
+
+ class BlackBoxPassthrough extends ExtModule {
+ val in = IO(Input(Bool()))
+ val out = IO(Output(Bool()))
+ }
+}
+
+class ExtModuleTester extends BasicTester {
+ val blackBoxPos = Module(new ExtModule.BlackBoxInverter)
+ val blackBoxNeg = Module(new ExtModule.BlackBoxInverter)
+
+ blackBoxPos.in := 1.U
+ blackBoxNeg.in := 0.U
+
+ assert(blackBoxNeg.out === 1.U)
+ assert(blackBoxPos.out === 0.U)
+ stop()
+}
+
+/** Instantiate multiple BlackBoxes with similar interfaces but different
+ * functionality. Used to detect failures in BlackBox naming and module
+ * deduplication.
+ */
+
+class MultiExtModuleTester extends BasicTester {
+ val blackBoxInvPos = Module(new ExtModule.BlackBoxInverter)
+ val blackBoxInvNeg = Module(new ExtModule.BlackBoxInverter)
+ val blackBoxPassPos = Module(new ExtModule.BlackBoxPassthrough)
+ val blackBoxPassNeg = Module(new ExtModule.BlackBoxPassthrough)
+
+ blackBoxInvPos.in := 1.U
+ blackBoxInvNeg.in := 0.U
+ blackBoxPassPos.in := 1.U
+ blackBoxPassNeg.in := 0.U
+
+ assert(blackBoxInvNeg.out === 1.U)
+ assert(blackBoxInvPos.out === 0.U)
+ assert(blackBoxPassNeg.out === 0.U)
+ assert(blackBoxPassPos.out === 1.U)
+ stop()
+}
+
+class ExtModuleSpec extends ChiselFlatSpec {
+ "A ExtModule inverter" should "work" in {
+ assertTesterPasses({ new ExtModuleTester },
+ Seq("/BlackBoxTest.v"))
+ }
+ "Multiple ExtModules" should "work" in {
+ assertTesterPasses({ new MultiExtModuleTester },
+ Seq("/BlackBoxTest.v"))
+ }
+}