diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/Emitter.scala | 10 | ||||
| -rw-r--r-- | src/test/resources/blackboxes/LargeParam.v | 7 | ||||
| -rw-r--r-- | src/test/resources/blackboxes/LargeParamTester.fir | 43 | ||||
| -rw-r--r-- | src/test/scala/firrtlTests/ExtModuleSpec.scala | 1 |
4 files changed, 60 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/Emitter.scala index 3bbba289..27348c6a 100644 --- a/src/main/scala/firrtl/Emitter.scala +++ b/src/main/scala/firrtl/Emitter.scala @@ -204,7 +204,15 @@ class VerilogEmitter extends SeqTransform with Emitter { } /** Turn Params into Verilog Strings */ def stringify(param: Param): String = param match { - case IntParam(name, value) => s".$name($value)" + case IntParam(name, value) => + val lit = + if (value.isValidInt) { + s"$value" + } else { + val blen = value.bitLength + if (value > 0) s"$blen'd$value" else s"-${blen+1}'sd${value.abs}" + } + s".$name($lit)" case DoubleParam(name, value) => s".$name($value)" case StringParam(name, value) => s".${name}(${value.verilogEscape})" case RawStringParam(name, value) => s".$name($value)" diff --git a/src/test/resources/blackboxes/LargeParam.v b/src/test/resources/blackboxes/LargeParam.v new file mode 100644 index 00000000..84e1a1cf --- /dev/null +++ b/src/test/resources/blackboxes/LargeParam.v @@ -0,0 +1,7 @@ +// See LICENSE for license details. +module LargeParam #(parameter DATA=0, WIDTH=1) ( + output [WIDTH-1:0] out +); + assign out = DATA; +endmodule + diff --git a/src/test/resources/blackboxes/LargeParamTester.fir b/src/test/resources/blackboxes/LargeParamTester.fir new file mode 100644 index 00000000..bb0ebdf5 --- /dev/null +++ b/src/test/resources/blackboxes/LargeParamTester.fir @@ -0,0 +1,43 @@ +; See LICENSE for license details. +circuit LargeParamTester : + extmodule LargeParam : + output out : UInt<1> + + defname = LargeParam + parameter WIDTH = 1 + parameter DATA = 0 + + extmodule LargeParam_1 : + output out : UInt<128> + + defname = LargeParam + parameter WIDTH = 128 + parameter DATA = 9223372036854775807000 + + extmodule LargeParam_2 : + output out : SInt<128> + + defname = LargeParam + parameter WIDTH = 128 + parameter DATA = -9223372036854775807000 + + module LargeParamTester : + input clock : Clock + input reset : UInt<1> + + inst mod1 of LargeParam + inst mod2 of LargeParam_1 + inst mod3 of LargeParam_2 + + when not(reset) : + when neq(mod1.out, UInt(0)) : + printf(clock, UInt(1), "Assertion failed\nTest Failed!\n") + stop(clock, UInt(1), 1) + when neq(mod2.out, UInt<128>(9223372036854775807000)) : + printf(clock, UInt(1), "Assertion failed\nTest Failed!\n") + stop(clock, UInt(1), 1) + when neq(mod3.out, SInt<128>(-9223372036854775807000)) : + printf(clock, UInt(1), "Assertion failed\nTest Failed!\n") + stop(clock, UInt(1), 1) + stop(clock, UInt(1), 0) + diff --git a/src/test/scala/firrtlTests/ExtModuleSpec.scala b/src/test/scala/firrtlTests/ExtModuleSpec.scala index 598d6e3b..96668222 100644 --- a/src/test/scala/firrtlTests/ExtModuleSpec.scala +++ b/src/test/scala/firrtlTests/ExtModuleSpec.scala @@ -11,3 +11,4 @@ class RenamedExtModuleExecutionTest extends ExecutionTest("RenamedExtModuleTeste class ParameterizedExtModuleExecutionTest extends ExecutionTest( "ParameterizedExtModuleTester", "/blackboxes", Seq("ParameterizedExtModule")) +class LargeParamExecutionTest extends ExecutionTest("LargeParamTester", "/blackboxes", Seq("LargeParam")) |
