凿子和 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.U
时wire
应该得到什么值?
另一种方法可以让您获得不知道类型的好处,可以使用 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
}
所以我在代码中的一行周围添加了 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.U
时wire
应该得到什么值?
另一种方法可以让您获得不知道类型的好处,可以使用 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
}