凿子和 When 块中的声明和变量范围

declaration and Variable scope in chisel and When block

所以我在代码中的一行周围添加了 when 块,但问题是在块更改范围时添加了这个,使得在它内部声明的变量在程序的其他部分看不到

问题是在这种情况下

  val (_, _, d_done, refill_cnt) = edge_out.count(tl_out.d)}

他们在不更改范围的情况下将这一行添加到 when 块中也是一种方法

要点是在 when 块之外声明它然后分配值需要我知道它的类型 并且有很多变量可能会变得困难

我想要达到的目标是这样的

when (refill_addr <80000000.U){
 val (_, _, d_done, refill_cnt) = edge_out.count(tl_out.d)}

不改变范围

您好,感谢您对 Chisel 和 rocket-chip 的关注!

您想做的事在 Scala 中是不可能的。这超出了 Chisel 作为嵌入式 DSL 的范围(双关语)。

但从根本上说,尚不清楚它是否有意义。 when 块表示连接在条件下发生。如果你能写出类似的东西,当条件为假时连接的值是什么?例如:

when (value > 100.U) {
  val wire = 123.U
}
io.out := wire

value <= 100.Uwire应该得到什么值?

另一种方法可以让您获得不知道类型的好处,可以使用 when 条件和 opposite 条件给出您想要的任何其他值

val (_, _, _d_done, _refill_cnt) = edge_out.count(tl_out.d)

// Note the wires here, the references above might be read-only references
val d_done = WireInit(_d_done)
val refill_cnt = WireInit(_refill_cnt)

when (refill_addr >= 80000000.U) {
  d_done := something
  refill_cnt := something_else
}