aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/backends
diff options
context:
space:
mode:
authorCarlos Eduardo2021-03-09 15:49:37 -0300
committerGitHub2021-03-09 18:49:37 +0000
commitefdefde2a5fa13de8faa8c141f852391909225df (patch)
treef9b16501a688feedc8bcebff611148bc12f39de3 /src/main/scala/firrtl/backends
parent8a4c156f401c8bfab5f2d595c32c20534f0722d7 (diff)
Create annotation to allow inline readmem in Verilog (#2107)
This PR adds a new annotation allowing inline loading for memory files in Verilog code.
Diffstat (limited to 'src/main/scala/firrtl/backends')
-rw-r--r--src/main/scala/firrtl/backends/verilog/VerilogEmitter.scala12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/backends/verilog/VerilogEmitter.scala b/src/main/scala/firrtl/backends/verilog/VerilogEmitter.scala
index f1650ad7..bc4996df 100644
--- a/src/main/scala/firrtl/backends/verilog/VerilogEmitter.scala
+++ b/src/main/scala/firrtl/backends/verilog/VerilogEmitter.scala
@@ -7,7 +7,7 @@ import firrtl.PrimOps._
import firrtl.Utils._
import firrtl.WrappedExpression._
import firrtl.traversals.Foreachers._
-import firrtl.annotations.{CircuitTarget, ReferenceTarget, SingleTargetAnnotation}
+import firrtl.annotations.{CircuitTarget, MemoryLoadFileType, ReferenceTarget, SingleTargetAnnotation}
import firrtl.passes.LowerTypes
import firrtl.passes.MemPortUtils._
import firrtl.stage.TransformManager
@@ -849,6 +849,16 @@ class VerilogEmitter extends SeqTransform with Emitter {
rstring,
";"
)
+ case MemoryFileInlineInit(filename, hexOrBinary) =>
+ val readmem = hexOrBinary match {
+ case MemoryLoadFileType.Binary => "$readmemb"
+ case MemoryLoadFileType.Hex => "$readmemh"
+ }
+ val inlineLoad = s"""
+ |initial begin
+ | $readmem("$filename", ${s.name});
+ |end""".stripMargin
+ memoryInitials += Seq(inlineLoad)
}
}