summaryrefslogtreecommitdiff
path: root/docs/src/cookbooks/naming.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/src/cookbooks/naming.md')
-rw-r--r--docs/src/cookbooks/naming.md66
1 files changed, 57 insertions, 9 deletions
diff --git a/docs/src/cookbooks/naming.md b/docs/src/cookbooks/naming.md
index c7ccdd96..ff3cb892 100644
--- a/docs/src/cookbooks/naming.md
+++ b/docs/src/cookbooks/naming.md
@@ -6,20 +6,66 @@ section: "chisel3"
```scala mdoc:invisible
import chisel3._
-import chisel3.experimental.prefix
-import chisel3.experimental.noPrefix
import chisel3.stage.ChiselStage
```
# Naming Cookbook
+
### I still have _T signals, can this be fixed?
-First check - is the compiler plugin properly enabled? Scalac plugins are enabled via the scalac option
-`-Xplugin:<path/to/jar>`. You can check which compiler plugins are enabled by running `show Compile / scalacOptions` in
-the sbt prompt.
+See the next answer!
+
+### I have so many wires with the same name, like `x`, `x_1` and `x_2`. How can I make them easier to understand?
+
+Signals with `_T` names or names that Chisel has to uniquify
+often are intermediate values generated within loops, function calls, or `when` predicates.
+They can also be consumed by verification statements like `assert` or `prints`.
+In these cases, the compiler plugin often can't find a good prefix for the generated
+intermediate signals and can't name them at all or has to make up a unique name for them.
+
+We recommend you manually insert calls to `prefix` to clarify these cases:
+
+```scala mdoc:silent
+import chisel3.experimental.prefix
+class ExamplePrefix extends Module {
+
+ Seq.tabulate{2} {i =>
+ Seq.tabulate{2}{ j =>
+ prefix(s"loop_${i}_${j}"){
+ val x = WireInit((i*0x10+j).U(8.W))
+ dontTouch(x)
+ }
+ }
+ }
+}
+```
+```scala mdoc:verilog
+ChiselStage.emitVerilog(new ExamplePrefix)
+```
+### How can I get better names for code generated by `when` clauses?
+
+The `prefix` API can help with code inside `when` clauses:
+
+```scala mdoc:silent
+class ExampleWhenPrefix extends Module {
-If the plugin is enabled, these signals could be intermediate values which are consumed by either assertions or when
-predicates. In these cases, the compiler plugin often can't find a good prefix for the generated intermediate signals.
-We recommend you manually insert calls to `prefix` to fix these cases. We did this to Rocket Chip and saw huge benefits!
+ val in = IO(Input(UInt(4.W)))
+ val out = IO(Output(UInt(4.W)))
+
+ out := DontCare
+
+ Seq.tabulate{2}{ i =>
+ val j = i + 1
+ when (in === j.U) { prefix(s"clause_${j}"){
+ val foo = Wire(UInt(4.W))
+ foo := in +& j.U(4.W)
+ out := foo
+ }}
+ }
+}
+```
+```scala mdoc:verilog
+ChiselStage.emitVerilog(new ExampleWhenPrefix)
+```
### I still see _GEN signals, can this be fixed?
@@ -43,11 +89,13 @@ name collisions, which are what triggers all those annoying signal name bumps!
Use the `.suggestName` method, which is on all classes which subtype `Data`.
-### All this prefixing is annoying, how do I fix it?
+### How can I omit the prefix in certain parts of the code?
You can use the `noPrefix { ... }` to strip the prefix from all signals generated in that scope.
```scala mdoc
+import chisel3.experimental.noPrefix
+
class ExampleNoPrefix extends Module {
val in = IO(Input(UInt(2.W)))
val out = IO(Output(UInt()))