summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorjackkoenig2016-09-22 22:38:33 -0700
committerjackkoenig2016-11-18 11:05:33 -0800
commit822160cc8e76e70643fb56707bb39f6f7526b6fd (patch)
tree50b9e132c6e7d2d5113195683ef3cc3fc5fc1113 /src/test
parent6929ca0fc64b562f4852a49df617a1836e083563 (diff)
Add support for parameterized BlackBoxes
Also restrict black boxes to not allow hardware inside of them since it was being silently dropped anyway. Resolves #289
Diffstat (limited to 'src/test')
-rw-r--r--src/test/resources/BlackBoxTest.v25
-rw-r--r--src/test/scala/chiselTests/BlackBox.scala49
2 files changed, 66 insertions, 8 deletions
diff --git a/src/test/resources/BlackBoxTest.v b/src/test/resources/BlackBoxTest.v
index 910b09ff..edf321a8 100644
--- a/src/test/resources/BlackBoxTest.v
+++ b/src/test/resources/BlackBoxTest.v
@@ -32,3 +32,28 @@ module BlackBoxConstant #(
);
assign out = VALUE;
endmodule
+
+module BlackBoxStringParam #(
+ parameter string STRING = "zero"
+) (
+ output [31:0] out
+);
+ assign out = (STRING == "one" )? 1 :
+ (STRING == "two" )? 2 : 0;
+endmodule
+
+module BlackBoxRealParam #(
+ parameter real REAL = 0.0
+) (
+ output [63:0] out
+);
+ assign out = $realtobits(REAL);
+endmodule
+
+module BlackBoxTypeParam #(
+ parameter type T = bit
+) (
+ output T out
+);
+ assign out = 32'hdeadbeef;
+endmodule
diff --git a/src/test/scala/chiselTests/BlackBox.scala b/src/test/scala/chiselTests/BlackBox.scala
index 344754e1..d8821134 100644
--- a/src/test/scala/chiselTests/BlackBox.scala
+++ b/src/test/scala/chiselTests/BlackBox.scala
@@ -6,6 +6,7 @@ import java.io.File
import org.scalatest._
import chisel3._
+import chisel3.experimental._
import chisel3.testers.BasicTester
import chisel3.util._
//import chisel3.core.ExplicitCompileOptions.Strict
@@ -84,27 +85,55 @@ class BlackBoxWithClockTester extends BasicTester {
when(end) { stop() }
}
-/*
-// Must determine how to handle parameterized Verilog
-class BlackBoxConstant(value: Int) extends BlackBox {
- val io = IO(new Bundle() {
- val out = Output(UInt(width=log2Up(value)))
+class BlackBoxConstant(value: Int) extends BlackBox(
+ Map("VALUE" -> value, "WIDTH" -> log2Up(value + 1))) {
+ require(value >= 0, "value must be a UInt!")
+ val io = IO(new Bundle {
+ val out = UInt(width = log2Up(value + 1)).asOutput
+ })
+}
+
+class BlackBoxStringParam(str: String) extends BlackBox(Map("STRING" -> str)) {
+ val io = IO(new Bundle {
+ val out = UInt(width = 32)
+ })
+}
+
+class BlackBoxRealParam(dbl: Double) extends BlackBox(Map("REAL" -> dbl)) {
+ val io = IO(new Bundle {
+ val out = UInt(width = 64)
+ })
+}
+
+class BlackBoxTypeParam(w: Int, raw: String) extends BlackBox(Map("T" -> RawParam(raw))) {
+ val io = IO(new Bundle {
+ val out = UInt(width = w)
})
- override val name = s"#(WIDTH=${log2Up(value)},VALUE=$value) "
}
class BlackBoxWithParamsTester extends BasicTester {
val blackBoxOne = Module(new BlackBoxConstant(1))
- val blackBoxFour = Module(new BlackBoxConstant(4))
+ val blackBoxFour = Module(new BlackBoxConstant(4))
+ val blackBoxStringParamOne = Module(new BlackBoxStringParam("one"))
+ val blackBoxStringParamTwo = Module(new BlackBoxStringParam("two"))
+ val blackBoxRealParamOne = Module(new BlackBoxRealParam(1.0))
+ val blackBoxRealParamNeg = Module(new BlackBoxRealParam(-1.0))
+ val blackBoxTypeParamBit = Module(new BlackBoxTypeParam(1, "bit"))
+ val blackBoxTypeParamWord = Module(new BlackBoxTypeParam(32, "bit [31:0]"))
val (cycles, end) = Counter(Bool(true), 4)
assert(blackBoxOne.io.out === UInt(1))
assert(blackBoxFour.io.out === UInt(4))
+ assert(blackBoxStringParamOne.io.out === UInt(1))
+ assert(blackBoxStringParamTwo.io.out === UInt(2))
+ assert(blackBoxRealParamOne.io.out === UInt(0x3ff0000000000000L))
+ assert(blackBoxRealParamNeg.io.out === UInt(BigInt("bff0000000000000", 16)))
+ assert(blackBoxTypeParamBit.io.out === UInt(1))
+ assert(blackBoxTypeParamWord.io.out === UInt("hdeadbeef", 32))
when(end) { stop() }
}
-*/
class BlackBoxSpec extends ChiselFlatSpec {
"A BlackBoxed inverter" should "work" in {
@@ -119,4 +148,8 @@ class BlackBoxSpec extends ChiselFlatSpec {
assertTesterPasses({ new BlackBoxWithClockTester },
Seq("/BlackBoxTest.v"))
}
+ "BlackBoxes with parameters" should "work" in {
+ assertTesterPasses({ new BlackBoxWithParamsTester },
+ Seq("/BlackBoxTest.v"))
+ }
}