如何软重置凿子计数器

How to soft reset Chisel Counter

我在我的逻辑中使用了凿子计数器,并且希望能够在清除输入信号时也将其重置。 我怎样才能做到这一点 ? 我在想这样的事情:

withReset(reset || io.clr) {val (count,wrap) = Counter(io.valid,512)}

我对此的问题(除了丑陋之外)是 val 名称在 withReset 的范围之外不可用。 有更好的方法吗? 如何尝试分配 0.U 计数器的内部值,我该怎么做?

withReset returns the last expression in the block,所以你可以这样写:

val (count, wrap) =  withReset(reset.asBool || io.clr)(Counter(io.valid,512))

请注意,我将 .asBool 添加到 reset,因为在 import chisel3._ 中,val reset 具有抽象类型 Reset。有关详细信息,请参阅 Chisel website docs on Reset

我认为以上是最好的方法,但您也可以使用 @chiselName macro 允许 Chisel 在范围内命名 vals:

import chisel3.experimental.chiselName

@chiselName
class MyModule extends Module {
  ...


  withReset(reset || io.clr) {val (count,wrap) = Counter(io.valid,512)}
  //                               ^ these ^ will now get named
}

请注意,我们正在努力在未来几周内将 @chiselName 的更好版本纳入 3.4.0 版本,但 @chiselName 暂时可用。