From 4b8a0d2af52ceeb3ff5d05082af53bac76744361 Mon Sep 17 00:00:00 2001 From: jackkoenig Date: Thu, 22 Sep 2016 19:10:40 -0700 Subject: Add Support for Parameterized ExtModules and Name Override Adds support for Integer, Double/Real, and String parameters in external modules. Also add name field to extmodules so that emitted name can be different from Firrtl name. This is important because parameterized extmodules will frequently have differing IO even though they need to be emitted as instantiating the same Verilog module. --- .../resources/blackboxes/ParameterizedExtModule.v | 15 ++++++++ .../blackboxes/ParameterizedExtModuleTester.fir | 40 ++++++++++++++++++++++ .../blackboxes/RenamedExtModuleTester.fir | 22 ++++++++++++ src/test/scala/firrtlTests/ExtModuleSpec.scala | 4 +++ 4 files changed, 81 insertions(+) create mode 100644 src/test/resources/blackboxes/ParameterizedExtModule.v create mode 100644 src/test/resources/blackboxes/ParameterizedExtModuleTester.fir create mode 100644 src/test/resources/blackboxes/RenamedExtModuleTester.fir (limited to 'src/test') diff --git a/src/test/resources/blackboxes/ParameterizedExtModule.v b/src/test/resources/blackboxes/ParameterizedExtModule.v new file mode 100644 index 00000000..ee6e3ec3 --- /dev/null +++ b/src/test/resources/blackboxes/ParameterizedExtModule.v @@ -0,0 +1,15 @@ + +module ParameterizedExtModule( + input [15:0] foo, + output [15:0] bar +); + parameter VALUE = 0; + parameter STRING = "one"; + parameter REAL = 1.0; + wire [15:0] fizz; + wire [15:0] buzz; + assign bar = foo + VALUE + fizz + buzz; + assign fizz = (STRING == "two")? 2 : (STRING == "one")? 1 : 0; + assign buzz = (REAL > 2.5E50)? 2 : (REAL < 0.0)? 1 : 0; +endmodule + diff --git a/src/test/resources/blackboxes/ParameterizedExtModuleTester.fir b/src/test/resources/blackboxes/ParameterizedExtModuleTester.fir new file mode 100644 index 00000000..29769e84 --- /dev/null +++ b/src/test/resources/blackboxes/ParameterizedExtModuleTester.fir @@ -0,0 +1,40 @@ +circuit ParameterizedExtModuleTester : + extmodule ParameterizedExtModule_1 : + input foo : UInt<16> + output bar : UInt<16> + + defname = ParameterizedExtModule + parameter VALUE = 1 + parameter STRING = "one" + parameter REAL = -1.7 + + extmodule ParameterizedExtModule_2 : + input foo : UInt<16> + output bar : UInt<16> + + defname = ParameterizedExtModule + parameter VALUE = 2 + parameter STRING = "two" + parameter REAL = 2.6E50 + + module ParameterizedExtModuleTester : + input clk : Clock + input reset : UInt<1> + + inst dut1 of ParameterizedExtModule_1 + inst dut2 of ParameterizedExtModule_2 + + dut1.foo <= UInt(1000) + dut2.foo <= UInt(1000) + + when not(reset) : + when neq(dut1.bar, UInt(1003)) : + printf(clk, not(reset), "Assertion failed\nTest Failed!\n") + stop(clk, not(reset), 1) + else : + when neq(dut2.bar, UInt(1006)) : + printf(clk, not(reset), "Assertion failed\nTest Failed!\n") + stop(clk, not(reset), 1) + else : + stop(clk, not(reset), 0) + diff --git a/src/test/resources/blackboxes/RenamedExtModuleTester.fir b/src/test/resources/blackboxes/RenamedExtModuleTester.fir new file mode 100644 index 00000000..48b0886c --- /dev/null +++ b/src/test/resources/blackboxes/RenamedExtModuleTester.fir @@ -0,0 +1,22 @@ +circuit RenamedExtModuleTester : + extmodule ThisIsJustTheFirrtlName : + input foo : UInt<16> + output bar : UInt<16> + + defname = SimpleExtModule + + module RenamedExtModuleTester : + input clk : Clock + input reset : UInt<1> + + inst dut of ThisIsJustTheFirrtlName + + dut.foo <= UInt(1234) + + when not(reset) : + when neq(dut.bar, UInt(1234)) : + printf(clk, not(reset), "Assertion failed\nTest Failed!\n") + stop(clk, not(reset), 1) + else : + stop(clk, not(reset), 0) + diff --git a/src/test/scala/firrtlTests/ExtModuleSpec.scala b/src/test/scala/firrtlTests/ExtModuleSpec.scala index ba36e5f2..b7866de1 100644 --- a/src/test/scala/firrtlTests/ExtModuleSpec.scala +++ b/src/test/scala/firrtlTests/ExtModuleSpec.scala @@ -31,4 +31,8 @@ class SimpleExtModuleExecutionTest extends ExecutionTest("SimpleExtModuleTester" Seq("SimpleExtModule")) class MultiExtModuleExecutionTest extends ExecutionTest("MultiExtModuleTester", "/blackboxes", Seq("SimpleExtModule", "AdderExtModule")) +class RenamedExtModuleExecutionTest extends ExecutionTest("RenamedExtModuleTester", "/blackboxes", + Seq("SimpleExtModule")) +class ParameterizedExtModuleExecutionTest extends ExecutionTest( + "ParameterizedExtModuleTester", "/blackboxes", Seq("ParameterizedExtModule")) -- cgit v1.2.3