有没有办法使凿子中未在模块范围内定义的信号在波形中可见?



如果我们以以下代码摘录为例(在模块的顶部(:

val write_indices = WireInit(VecInit(Seq.fill(wordsPerBeat)(0.U((log2Ceil(nWays)+log2Ceil(nSets)+log2Ceil(cacheBlockBytes/wordBytes)).W))))
val write_line_indices = WireInit(VecInit(Seq.fill(wordsPerBeat)(0.U(log2Ceil(cacheBlockBytes/wordBytes).W))))
dontTouch(write_indices)
dontTouch(write_line_indices)
// refill logic
when(mem_response_present) {
for (i <- 0 until wordsPerBeat) {
val beatIdx = i.U(log2Ceil(wordsPerBeat).W)
val write_line_index = Cat(d_refill_cnt(log2Ceil(cacheBlockBytes/wordsPerBeat/wordBytes)-1, 0), beatIdx)
val write_idx = Cat(refill_way, refill_set, write_line_index)
write_indices(i) := write_idx
write_line_indices(i) := write_line_index
cache_line(write_idx) := tl_out.d.bits.data((i + 1) * wordBits - 1, i * wordBits)
}
}

两个顶级信号的唯一原因是在波形中获得可见的较低信号。 有没有办法在不手动创建这些信号的情况下达到相同的效果? 在此示例中,一半的代码仅用于获得调试功能。 这似乎有点过分。

似乎有点过分

完全同意,幸运的是有一个解决方案。出于实现原因,默认情况下,Chisel只能命名 Module 类的公共字段。也就是说,仅模块顶级范围内的值。但是,有一个漂亮的宏chisel3.experimental.chiselName可以在for循环中命名这些 val。尝试像这样注释模块:

import chisel3._
import chisel3.experimental.chiselName
@chiselName
class MyModule extends Module {
...
}

请查看前面讨论命名的答案,它包含的信息比单独回答此问题有关的信息要多,但它还有其他有关 Chisel 中命名如何工作的有用信息。

最新更新