summaryrefslogtreecommitdiff
path: root/core/src/main/scala/chisel3/internal
diff options
context:
space:
mode:
authorJack2021-12-18 08:27:38 +0000
committerJack2021-12-18 08:27:38 +0000
commitdd9ad534771247ac16eaa47eb9794102736b5102 (patch)
treed4566d317cb8526b79017de1e438aea8217dd1d4 /core/src/main/scala/chisel3/internal
parent440edc4436fb3a8a4175ae425a0d31c4997ee60f (diff)
parentf50f74f583fba7b98e550c440df091e559ce32b8 (diff)
Merge branch 'master' into 3.5-release
Diffstat (limited to 'core/src/main/scala/chisel3/internal')
-rw-r--r--core/src/main/scala/chisel3/internal/Builder.scala92
-rw-r--r--core/src/main/scala/chisel3/internal/MonoConnect.scala72
-rw-r--r--core/src/main/scala/chisel3/internal/firrtl/Converter.scala7
-rw-r--r--core/src/main/scala/chisel3/internal/firrtl/IR.scala27
-rw-r--r--core/src/main/scala/chisel3/internal/plugin/package.scala19
-rw-r--r--core/src/main/scala/chisel3/internal/prefix.scala4
6 files changed, 96 insertions, 125 deletions
diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala
index 441abc92..71894887 100644
--- a/core/src/main/scala/chisel3/internal/Builder.scala
+++ b/core/src/main/scala/chisel3/internal/Builder.scala
@@ -6,7 +6,7 @@ import scala.util.DynamicVariable
import scala.collection.mutable.ArrayBuffer
import chisel3._
import chisel3.experimental._
-import chisel3.experimental.hierarchy.Instance
+import chisel3.experimental.hierarchy.{Instance, Clone}
import chisel3.internal.firrtl._
import chisel3.internal.naming._
import _root_.firrtl.annotations.{CircuitName, ComponentName, IsMember, ModuleName, Named, ReferenceTarget}
@@ -105,7 +105,7 @@ private[chisel3] trait HasId extends InstanceId {
private var auto_seed: Option[String] = None
// Prefix at time when this class is constructed
- private val construction_prefix: Prefix = Builder.getPrefix()
+ private val construction_prefix: Prefix = Builder.getPrefix
// Prefix when the latest [[suggestSeed]] or [[autoSeed]] is called
private var prefix_seed: Prefix = Nil
@@ -133,7 +133,7 @@ private[chisel3] trait HasId extends InstanceId {
private[chisel3] def forceAutoSeed(seed: String): this.type = {
auto_seed = Some(seed)
for(hook <- auto_postseed_hooks) { hook(seed) }
- prefix_seed = Builder.getPrefix()
+ prefix_seed = Builder.getPrefix
this
}
@@ -149,17 +149,28 @@ private[chisel3] trait HasId extends InstanceId {
*/
def suggestName(seed: =>String): this.type = {
if(suggested_seed.isEmpty) suggested_seed = Some(seed)
- prefix_seed = Builder.getPrefix()
+ prefix_seed = Builder.getPrefix
for(hook <- suggest_postseed_hooks) { hook(seed) }
this
}
+ // Internal version of .suggestName that can override a user-suggested name
+ // This only exists for maintaining "val io" naming in compatibility-mode Modules without IO
+ // wrapping
+ private[chisel3] def forceFinalName(seed: String): this.type = {
+ // This could be called with user prefixes, ignore them
+ noPrefix {
+ suggested_seed = Some(seed)
+ this.suggestName(seed)
+ }
+ }
+
/** Computes the name of this HasId, if one exists
* @param defaultPrefix Optionally provide a default prefix for computing the name
* @param defaultSeed Optionally provide default seed for computing the name
* @return the name, if it can be computed
*/
- def computeName(defaultPrefix: Option[String], defaultSeed: Option[String]): Option[String] = {
+ private[chisel3] def _computeName(defaultPrefix: Option[String], defaultSeed: Option[String]): Option[String] = {
/** Computes a name of this signal, given the seed and prefix
* @param seed
* @param prefix
@@ -203,7 +214,7 @@ private[chisel3] trait HasId extends InstanceId {
// (e.g. tried to suggest a name to part of a Record)
private[chisel3] def forceName(prefix: Option[String], default: =>String, namespace: Namespace): Unit =
if(_ref.isEmpty) {
- val candidate_name = computeName(prefix, Some(default)).get
+ val candidate_name = _computeName(prefix, Some(default)).get
val available_name = namespace.name(candidate_name)
setRef(Ref(available_name))
}
@@ -223,7 +234,7 @@ private[chisel3] trait HasId extends InstanceId {
private def refName(c: Component): String = _ref match {
case Some(arg) => arg fullName c
- case None => computeName(None, None).get
+ case None => _computeName(None, None).get
}
// Helper for reifying views if they map to a single Target
@@ -332,9 +343,6 @@ private[chisel3] trait NamedComponent extends HasId {
private[chisel3] class ChiselContext() {
val idGen = new IdGen
- // Record the Bundle instance, class name, method name, and reverse stack trace position of open Bundles
- val bundleStack: ArrayBuffer[(Bundle, String, String, Int)] = ArrayBuffer()
-
// Records the different prefixes which have been scoped at this point in time
var prefixStack: Prefix = Nil
@@ -349,8 +357,6 @@ private[chisel3] class DynamicContext(val annotationSeq: AnnotationSeq) {
val components = ArrayBuffer[Component]()
val annotations = ArrayBuffer[ChiselAnnotation]()
var currentModule: Option[BaseModule] = None
- // This is only used for testing, it can be removed if the plugin becomes mandatory
- var allowReflectiveAutoCloneType = true
/** Contains a mapping from a elaborated module to their aspect
* Set by [[ModuleAspect]]
@@ -485,7 +491,7 @@ private[chisel3] object Builder extends LazyLogging {
}
// Returns the prefix stack at this moment
- def getPrefix(): Prefix = chiselContext.get().prefixStack
+ def getPrefix: Prefix = chiselContext.get().prefixStack
def currentModule: Option[BaseModule] = dynamicContextVar.value match {
case Some(dyanmicContext) => dynamicContext.currentModule
@@ -550,6 +556,8 @@ private[chisel3] object Builder extends LazyLogging {
// A bare api call is, e.g. calling Wire() from the scala console).
)
}
+ def hasDynamicContext: Boolean = dynamicContextVar.value.isDefined
+
def readyForModuleConstr: Boolean = dynamicContext.readyForModuleConstr
def readyForModuleConstr_=(target: Boolean): Unit = {
dynamicContext.readyForModuleConstr = target
@@ -572,7 +580,7 @@ private[chisel3] object Builder extends LazyLogging {
dynamicContext.whenStack = s
}
- def currentWhen(): Option[WhenContext] = dynamicContext.whenStack.headOption
+ def currentWhen: Option[WhenContext] = dynamicContext.whenStack.headOption
def currentClock: Option[Clock] = dynamicContext.currentClock
def currentClock_=(newClock: Option[Clock]): Unit = {
@@ -590,16 +598,6 @@ private[chisel3] object Builder extends LazyLogging {
.getOrElse(false)
}
- // This should only be used for testing, must be true outside of Builder context
- def allowReflectiveAutoCloneType: Boolean = {
- dynamicContextVar.value
- .map(_.allowReflectiveAutoCloneType)
- .getOrElse(true)
- }
- def allowReflectiveAutoCloneType_=(value: Boolean): Unit = {
- dynamicContext.allowReflectiveAutoCloneType = value
- }
-
def forcedClock: Clock = currentClock.getOrElse(
throwException("Error: No implicit clock.")
)
@@ -615,52 +613,18 @@ private[chisel3] object Builder extends LazyLogging {
}
def pushOp[T <: Data](cmd: DefPrim[T]): T = {
// Bind each element of the returned Data to being a Op
- cmd.id.bind(OpBinding(forcedUserModule, currentWhen()))
+ cmd.id.bind(OpBinding(forcedUserModule, currentWhen))
pushCommand(cmd).id
}
- // Called when Bundle construction begins, used to record a stack of open Bundle constructors to
- // record candidates for Bundle autoclonetype. This is a best-effort guess.
- // Returns the current stack of open Bundles
- // Note: elt will NOT have finished construction, its elements cannot be accessed
- def updateBundleStack(elt: Bundle): Seq[Bundle] = {
- val stackElts = Thread.currentThread().getStackTrace()
- .reverse // so stack frame numbers are deterministic across calls
- .dropRight(2) // discard Thread.getStackTrace and updateBundleStack
-
- // Determine where we are in the Bundle stack
- val eltClassName = elt.getClass.getName
- val eltStackPos = stackElts.map(_.getClassName).lastIndexOf(eltClassName)
-
- // Prune the existing Bundle stack of closed Bundles
- // If we know where we are in the stack, discard frames above that
- val stackEltsTop = if (eltStackPos >= 0) eltStackPos else stackElts.size
- val pruneLength = chiselContext.get.bundleStack.reverse.prefixLength { case (_, cname, mname, pos) =>
- pos >= stackEltsTop || stackElts(pos).getClassName != cname || stackElts(pos).getMethodName != mname
- }
- chiselContext.get.bundleStack.trimEnd(pruneLength)
-
- // Return the stack state before adding the most recent bundle
- val lastStack = chiselContext.get.bundleStack.map(_._1).toSeq
-
- // Append the current Bundle to the stack, if it's on the stack trace
- if (eltStackPos >= 0) {
- val stackElt = stackElts(eltStackPos)
- chiselContext.get.bundleStack.append((elt, eltClassName, stackElt.getMethodName, eltStackPos))
- }
- // Otherwise discard the stack frame, this shouldn't fail noisily
-
- lastStack
- }
-
/** Recursively suggests names to supported "container" classes
* Arbitrary nestings of supported classes are allowed so long as the
* innermost element is of type HasId
* (Note: Map is Iterable[Tuple2[_,_]] and thus excluded)
*/
def nameRecursively(prefix: String, nameMe: Any, namer: (HasId, String) => Unit): Unit = nameMe match {
- case (id: Instance[_]) => id.cloned match {
- case Right(m: internal.BaseModule.ModuleClone[_]) => namer(m.getPorts, prefix)
+ case (id: Instance[_]) => id.underlying match {
+ case Clone(m: internal.BaseModule.ModuleClone[_]) => namer(m.getPorts, prefix)
case _ =>
}
case (id: HasId) => namer(id, prefix)
@@ -727,14 +691,16 @@ private[chisel3] object Builder extends LazyLogging {
renames
}
- private [chisel3] def build[T <: BaseModule](f: => T, dynamicContext: DynamicContext): (Circuit, T) = {
+ private[chisel3] def build[T <: BaseModule](f: => T, dynamicContext: DynamicContext, forceModName: Boolean = true): (Circuit, T) = {
dynamicContextVar.withValue(Some(dynamicContext)) {
ViewParent // Must initialize the singleton in a Builder context or weird things can happen
// in tiny designs/testcases that never access anything in chisel3.internal
checkScalaVersion()
logger.info("Elaborating design...")
val mod = f
- mod.forceName(None, mod.name, globalNamespace)
+ if (forceModName) { // This avoids definition name index skipping with D/I
+ mod.forceName(None, mod.name, globalNamespace)
+ }
errors.checkpoint(logger)
logger.info("Done elaborating.")
diff --git a/core/src/main/scala/chisel3/internal/MonoConnect.scala b/core/src/main/scala/chisel3/internal/MonoConnect.scala
index 5cbab329..6173fc91 100644
--- a/core/src/main/scala/chisel3/internal/MonoConnect.scala
+++ b/core/src/main/scala/chisel3/internal/MonoConnect.scala
@@ -36,33 +36,35 @@ import chisel3.internal.sourceinfo.SourceInfo
*/
private[chisel3] object MonoConnect {
+ def formatName(data: Data) = s"""${data.earlyName} in ${data.parentNameOpt.getOrElse("(unknown)")}"""
+
// These are all the possible exceptions that can be thrown.
// These are from element-level connection
- def UnreadableSourceException =
- MonoConnectException(": Source is unreadable from current module.")
- def UnwritableSinkException =
- MonoConnectException(": Sink is unwriteable by current module.")
- def SourceEscapedWhenScopeException =
- MonoConnectException(": Source has escaped the scope of the when in which it was constructed.")
- def SinkEscapedWhenScopeException =
- MonoConnectException(": Sink has escaped the scope of the when in which it was constructed.")
+ def UnreadableSourceException(sink: Data, source: Data) =
+ MonoConnectException(s"""${formatName(source)} cannot be read from module ${sink.parentNameOpt.getOrElse("(unknown)")}.""")
+ def UnwritableSinkException(sink: Data, source: Data) =
+ MonoConnectException(s"""${formatName(sink)} cannot be written from module ${source.parentNameOpt.getOrElse("(unknown)")}.""")
+ def SourceEscapedWhenScopeException(source: Data) =
+ MonoConnectException(s"Source ${formatName(source)} has escaped the scope of the when in which it was constructed.")
+ def SinkEscapedWhenScopeException(sink: Data) =
+ MonoConnectException(s"Sink ${formatName(sink)} has escaped the scope of the when in which it was constructed.")
def UnknownRelationException =
- MonoConnectException(": Sink or source unavailable to current module.")
+ MonoConnectException("Sink or source unavailable to current module.")
// These are when recursing down aggregate types
def MismatchedVecException =
- MonoConnectException(": Sink and Source are different length Vecs.")
+ MonoConnectException("Sink and Source are different length Vecs.")
def MissingFieldException(field: String) =
- MonoConnectException(s": Source Record missing field ($field).")
- def MismatchedException(sink: String, source: String) =
- MonoConnectException(s": Sink ($sink) and Source ($source) have different types.")
+ MonoConnectException(s"Source Record missing field ($field).")
+ def MismatchedException(sink: Data, source: Data) =
+ MonoConnectException(s"Sink (${sink.cloneType.toString}) and Source (${source.cloneType.toString}) have different types.")
def DontCareCantBeSink =
- MonoConnectException(": DontCare cannot be a connection sink (LHS)")
- def AnalogCantBeMonoSink =
- MonoConnectException(": Analog cannot participate in a mono connection (sink - LHS)")
- def AnalogCantBeMonoSource =
- MonoConnectException(": Analog cannot participate in a mono connection (source - RHS)")
- def AnalogMonoConnectionException =
- MonoConnectException(": Analog cannot participate in a mono connection (source and sink)")
+ MonoConnectException("DontCare cannot be a connection sink")
+ def AnalogCantBeMonoSink(sink: Data) =
+ MonoConnectException(s"Sink ${formatName(sink)} of type Analog cannot participate in a mono connection (:=)")
+ def AnalogCantBeMonoSource(source: Data) =
+ MonoConnectException(s"Source ${formatName(source)} of type Analog cannot participate in a mono connection (:=)")
+ def AnalogMonoConnectionException(source: Data, sink: Data) =
+ MonoConnectException(s"Source ${formatName(source)} and sink ${formatName(sink)} of type Analog cannot participate in a mono connection (:=)")
def checkWhenVisibility(x: Data): Boolean = {
x.topBinding match {
@@ -169,13 +171,13 @@ private[chisel3] object MonoConnect {
// DontCare as a sink is illegal.
case (DontCare, _) => throw DontCareCantBeSink
// Analog is illegal in mono connections.
- case (_: Analog, _:Analog) => throw AnalogMonoConnectionException
+ case (_: Analog, _:Analog) => throw AnalogMonoConnectionException(source, sink)
// Analog is illegal in mono connections.
- case (_: Analog, _) => throw AnalogCantBeMonoSink
+ case (_: Analog, _) => throw AnalogCantBeMonoSink(sink)
// Analog is illegal in mono connections.
- case (_, _: Analog) => throw AnalogCantBeMonoSource
+ case (_, _: Analog) => throw AnalogCantBeMonoSource(source)
// Sink and source are different subtypes of data so fail
- case (sink, source) => throw MismatchedException(sink.toString, source.toString)
+ case (sink, source) => throw MismatchedException(sink, source)
}
// This function (finally) issues the connection operation
@@ -196,7 +198,7 @@ private[chisel3] object MonoConnect {
val source = reify(_source)
// If source has no location, assume in context module
// This can occur if is a literal, unbound will error previously
- val sink_mod: BaseModule = sink.topBinding.location.getOrElse(throw UnwritableSinkException)
+ val sink_mod: BaseModule = sink.topBinding.location.getOrElse(throw UnwritableSinkException(sink, source))
val source_mod: BaseModule = source.topBinding.location.getOrElse(context_mod)
val sink_parent = Builder.retrieveParent(sink_mod, context_mod).getOrElse(None)
@@ -206,11 +208,11 @@ private[chisel3] object MonoConnect {
val source_direction = BindingDirection.from(source.topBinding, source.direction)
if (!checkWhenVisibility(sink)) {
- throw SinkEscapedWhenScopeException
+ throw SinkEscapedWhenScopeException(sink)
}
if (!checkWhenVisibility(source)) {
- throw SourceEscapedWhenScopeException
+ throw SourceEscapedWhenScopeException(source)
}
// CASE: Context is same module that both left node and right node are in
@@ -220,7 +222,7 @@ private[chisel3] object MonoConnect {
// CURRENT MOD CURRENT MOD
case (Output, _) => issueConnect(sink, source)
case (Internal, _) => issueConnect(sink, source)
- case (Input, _) => throw UnwritableSinkException
+ case (Input, _) => throw UnwritableSinkException(sink, source)
}
}
@@ -238,11 +240,11 @@ private[chisel3] object MonoConnect {
if (!(connectCompileOptions.dontAssumeDirectionality)) {
issueConnect(sink, source)
} else {
- throw UnreadableSourceException
+ throw UnreadableSourceException(sink, source)
}
}
case (Input, Output) if (!(connectCompileOptions.dontTryConnectionsSwapped)) => issueConnect(source, sink)
- case (Input, _) => throw UnwritableSinkException
+ case (Input, _) => throw UnwritableSinkException(sink, source)
}
}
@@ -253,8 +255,8 @@ private[chisel3] object MonoConnect {
// SINK SOURCE
// CHILD MOD CURRENT MOD
case (Input, _) => issueConnect(sink, source)
- case (Output, _) => throw UnwritableSinkException
- case (Internal, _) => throw UnwritableSinkException
+ case (Output, _) => throw UnwritableSinkException(sink, source)
+ case (Internal, _) => throw UnwritableSinkException(sink, source)
}
}
@@ -268,15 +270,15 @@ private[chisel3] object MonoConnect {
// CHILD MOD CHILD MOD
case (Input, Input) => issueConnect(sink, source)
case (Input, Output) => issueConnect(sink, source)
- case (Output, _) => throw UnwritableSinkException
+ case (Output, _) => throw UnwritableSinkException(sink, source)
case (_, Internal) => {
if (!(connectCompileOptions.dontAssumeDirectionality)) {
issueConnect(sink, source)
} else {
- throw UnreadableSourceException
+ throw UnreadableSourceException(sink, source)
}
}
- case (Internal, _) => throw UnwritableSinkException
+ case (Internal, _) => throw UnwritableSinkException(sink, source)
}
}
diff --git a/core/src/main/scala/chisel3/internal/firrtl/Converter.scala b/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
index f56c3b15..ac784882 100644
--- a/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
+++ b/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
@@ -7,10 +7,11 @@ import chisel3.internal.sourceinfo.{NoSourceInfo, SourceInfo, SourceLine, Unloca
import firrtl.{ir => fir}
import chisel3.internal.{HasId, castToInt, throwException}
-import scala.annotation.tailrec
+import scala.annotation.{nowarn, tailrec}
import scala.collection.immutable.Queue
import scala.collection.immutable.LazyList // Needed for 2.12 alias
+@nowarn("msg=class Port") // delete when Port becomes private
private[chisel3] object Converter {
// TODO modeled on unpack method on Printable, refactor?
def unpack(pable: Printable, ctx: Component): (String, Seq[Arg]) = pable match {
@@ -142,8 +143,8 @@ private[chisel3] object Converter {
Some(fir.IsInvalid(convert(info), convert(arg, ctx, info)))
case e @ DefInstance(info, id, _) =>
Some(fir.DefInstance(convert(info), e.name, id.name))
- case Stop(info, clock, ret) =>
- Some(fir.Stop(convert(info), ret, convert(clock, ctx, info), firrtl.Utils.one))
+ case e @ Stop(_, info, clock, ret) =>
+ Some(fir.Stop(convert(info), ret, convert(clock, ctx, info), firrtl.Utils.one, e.name))
case e @ Printf(_, info, clock, pable) =>
val (fmt, args) = unpack(pable, ctx)
Some(fir.Print(convert(info), fir.StringLit(fmt),
diff --git a/core/src/main/scala/chisel3/internal/firrtl/IR.scala b/core/src/main/scala/chisel3/internal/firrtl/IR.scala
index 0b568548..68f5f18e 100644
--- a/core/src/main/scala/chisel3/internal/firrtl/IR.scala
+++ b/core/src/main/scala/chisel3/internal/firrtl/IR.scala
@@ -13,6 +13,7 @@ import _root_.firrtl.annotations.Annotation
import scala.collection.immutable.NumericRange
import scala.math.BigDecimal.RoundingMode
+import scala.annotation.nowarn
case class PrimOp(name: String) {
@@ -64,7 +65,7 @@ object PrimOp {
val AsAsyncResetOp = PrimOp("asAsyncReset")
}
-abstract class Arg {
+sealed abstract class Arg {
def localName: String = name
def contextualName(ctx: Component): String = name
def fullName(ctx: Component): String = contextualName(ctx)
@@ -86,6 +87,19 @@ case class Node(id: HasId) extends Arg {
}
}
+object Arg {
+ def earlyLocalName(id: HasId): String = id.getOptionRef match {
+ case Some(Index(Node(imm), Node(value))) => s"${earlyLocalName(imm)}[${earlyLocalName(imm)}]"
+ case Some(Index(Node(imm), arg)) => s"${earlyLocalName(imm)}[${arg.localName}]"
+ case Some(Slot(Node(imm), name)) => s"${earlyLocalName(imm)}.$name"
+ case Some(arg) => arg.name
+ case None => id match {
+ case data: Data => data._computeName(None, Some("?")).get
+ case _ => "?"
+ }
+ }
+}
+
abstract class LitArg(val num: BigInt, widthArg: Width) extends Arg {
private[chisel3] def forcedWidth = widthArg.known
private[chisel3] def width: Width = if (forcedWidth) widthArg else Width(minWidth)
@@ -196,6 +210,7 @@ case class Slot(imm: Node, name: String) extends Arg {
if (immName.isEmpty) name else s"$immName.$name"
}
}
+
case class Index(imm: Arg, value: Arg) extends Arg {
def name: String = s"[$value]"
override def contextualName(ctx: Component): String = s"${imm.contextualName(ctx)}[${value.contextualName(ctx)}]"
@@ -775,6 +790,7 @@ case class DefRegInit(sourceInfo: SourceInfo, id: Data, clock: Arg, reset: Arg,
case class DefMemory(sourceInfo: SourceInfo, id: HasId, t: Data, size: BigInt) extends Definition
case class DefSeqMemory(sourceInfo: SourceInfo, id: HasId, t: Data, size: BigInt, readUnderWrite: fir.ReadUnderWrite.Value) extends Definition
case class DefMemPort[T <: Data](sourceInfo: SourceInfo, id: T, source: Node, dir: MemPortDirection, index: Arg, clock: Arg) extends Definition
+@nowarn("msg=class Port") // delete when Port becomes private
case class DefInstance(sourceInfo: SourceInfo, id: BaseModule, ports: Seq[Port]) extends Definition
case class WhenBegin(sourceInfo: SourceInfo, pred: Arg) extends Command
case class WhenEnd(sourceInfo: SourceInfo, firrtlDepth: Int, hasAlt: Boolean = false) extends Command
@@ -784,7 +800,9 @@ case class Connect(sourceInfo: SourceInfo, loc: Node, exp: Arg) extends Command
case class BulkConnect(sourceInfo: SourceInfo, loc1: Node, loc2: Node) extends Command
case class Attach(sourceInfo: SourceInfo, locs: Seq[Node]) extends Command
case class ConnectInit(sourceInfo: SourceInfo, loc: Node, exp: Arg) extends Command
-case class Stop(sourceInfo: SourceInfo, clock: Arg, ret: Int) extends Command
+case class Stop(id: stop.Stop, sourceInfo: SourceInfo, clock: Arg, ret: Int) extends Definition
+// Note this is just deprecated which will cause deprecation warnings, use @nowarn
+@deprecated("This API should never have been public, for Module port reflection, use DataMirror.modulePorts", "Chisel 3.5")
case class Port(id: Data, dir: SpecifiedDirection)
case class Printf(id: printf.Printf, sourceInfo: SourceInfo, clock: Arg, pable: Printable) extends Definition
object Formal extends Enumeration {
@@ -792,14 +810,17 @@ object Formal extends Enumeration {
val Assume = Value("assume")
val Cover = Value("cover")
}
-case class Verification[T <: BaseSim](id: T, op: Formal.Value, sourceInfo: SourceInfo, clock: Arg,
+case class Verification[T <: VerificationStatement](id: T, op: Formal.Value, sourceInfo: SourceInfo, clock: Arg,
predicate: Arg, message: String) extends Definition
+@nowarn("msg=class Port") // delete when Port becomes private
abstract class Component extends Arg {
def id: BaseModule
def name: String
def ports: Seq[Port]
}
+@nowarn("msg=class Port") // delete when Port becomes private
case class DefModule(id: RawModule, name: String, ports: Seq[Port], commands: Seq[Command]) extends Component
+@nowarn("msg=class Port") // delete when Port becomes private
case class DefBlackBox(id: BaseBlackBox, name: String, ports: Seq[Port], topDir: SpecifiedDirection, params: Map[String, Param]) extends Component
case class Circuit(name: String, components: Seq[Component], annotations: Seq[ChiselAnnotation], renames: RenameMap) {
diff --git a/core/src/main/scala/chisel3/internal/plugin/package.scala b/core/src/main/scala/chisel3/internal/plugin/package.scala
index c17baf22..9b9b41cd 100644
--- a/core/src/main/scala/chisel3/internal/plugin/package.scala
+++ b/core/src/main/scala/chisel3/internal/plugin/package.scala
@@ -3,27 +3,8 @@
package chisel3.internal
package object plugin {
- /** Used by Chisel's compiler plugin to automatically name signals
- * DO NOT USE in your normal Chisel code!!!
- *
- * @param name The name to use
- * @param nameMe The thing to be named
- * @tparam T The type of the thing to be named
- * @return The thing, but now named
- * @note This is the version called by chisel3-plugin prior to v3.4.1
- */
- def autoNameRecursively[T <: Any](name: String, nameMe: T): T = {
- chisel3.internal.Builder.nameRecursively(
- name.replace(" ", ""),
- nameMe,
- (id: chisel3.internal.HasId, n: String) => id.autoSeed(n)
- )
- nameMe
- }
// The actual implementation
- // Cannot be unified with (String, T) => T (v3.4.0 version) because of special behavior of ports
- // in .autoSeed
private def _autoNameRecursively[T <: Any](prevId: Long, name: String, nameMe: T): T = {
chisel3.internal.Builder.nameRecursively(
name,
diff --git a/core/src/main/scala/chisel3/internal/prefix.scala b/core/src/main/scala/chisel3/internal/prefix.scala
index 9dc14901..620d0864 100644
--- a/core/src/main/scala/chisel3/internal/prefix.scala
+++ b/core/src/main/scala/chisel3/internal/prefix.scala
@@ -51,7 +51,7 @@ private[chisel3] object prefix { // scalastyle:ignore
// This causes extra prefixes to be added, and subsequently cleared in the
// Module constructor. Thus, we need to just make sure if the previous push
// was an incorrect one, to not pop off an empty stack
- if(Builder.getPrefix().nonEmpty) Builder.popPrefix()
+ if(Builder.getPrefix.nonEmpty) Builder.popPrefix()
ret
}
}
@@ -77,7 +77,7 @@ private[chisel3] object noPrefix {
* @return The return value of the provided function
*/
def apply[T](f: => T): T = {
- val prefix = Builder.getPrefix()
+ val prefix = Builder.getPrefix
Builder.clearPrefix()
val ret = f
Builder.setPrefix(prefix)