You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Please provide the steps to reproduce the problem:
Use BoringUtils.tapAndRead on a literal, example:
//> using repository "sonatype-s01:snapshots"
//> using scala "2.13.14"
//> using dep "org.chipsalliance::chisel:7.0.0-M2+317-62ca9bdc-SNAPSHOT"
//> using plugin "org.chipsalliance:::chisel-plugin:7.0.0-M2+317-62ca9bdc-SNAPSHOT"
//> using options "-unchecked", "-deprecation", "-language:reflectiveCalls", "-feature", "-Xcheckinit", "-Xfatal-warnings", "-Ywarn-dead-code", "-Ywarn-unused", "-Ymacro-annotations"
import chisel3._
import circt.stage.ChiselStage
import chisel3.util.experimental.BoringUtils
class Foo extends RawModule {
val x = 5.U
val y = BoringUtils.tapAndRead(x)
}
object Main extends App {
println(ChiselStage.emitCHIRRTL(new Foo, Array("--full-stacktrace")))
}
What is the current behavior?
Exception in thread "main" java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:627)
at scala.None$.get(Option.scala:626)
at chisel3.util.experimental.BoringUtils$.parent$1(BoringUtils.scala:230)
at chisel3.util.experimental.BoringUtils$.boreOrTap(BoringUtils.scala:328)
at chisel3.util.experimental.BoringUtils$.$anonfun$tapAndRead$3(BoringUtils.scala:423)
at chisel3.experimental.skipPrefix$.apply(prefix.scala:102)
at chisel3.util.experimental.BoringUtils$.$anonfun$tapAndRead$2(BoringUtils.scala:423)
at chisel3.experimental.prefix$.apply(prefix.scala:50)
at chisel3.util.experimental.BoringUtils$.$anonfun$tapAndRead$1(BoringUtils.scala:422)
at chisel3.internal.plugin.package$.autoNameRecursively(package.scala:33)
at chisel3.util.experimental.BoringUtils$.tapAndRead(BoringUtils.scala:422)
at Foo.$anonfun$y$2(bore-literal.scala:13)
(snip)
What is the expected behavior?
Ability to use BoringUtils with literals.
Please tell us about your environment:
Other Information
What is the use case for changing the behavior?
Building library code using BoringUtils.
The text was updated successfully, but these errors were encountered:
One strategy is to spill literals to wires and then tapAndRead that.
The wire would likely be created where tapAndRead is invoked, which is probably fine if maybe unexpected?
For example, if you tapAndRead something like val foo = Module(new Foo); val x = BoringUtils.tapAndRead(foo.x), the Wire might be expected to be in Foo not at the location of tapAndRead. Maybe that's fine though, looks a bit like an optimization?
Type of issue: Bug Report
Please provide the steps to reproduce the problem:
Use
BoringUtils.tapAndRead
on a literal, example:What is the current behavior?
What is the expected behavior?
Ability to use BoringUtils with literals.
Please tell us about your environment:
Other Information
What is the use case for changing the behavior?
Building library code using BoringUtils.
The text was updated successfully, but these errors were encountered: