如何删除chisel3顶层模块上的时钟信号?

时间:2017-01-02 13:23:41

标签: verilog xilinx chisel

我有一个使用差分时钟输入的闪烁LED设计(xilinx AC701套件)。 要实例化Xilinx差分缓冲区,我正在使用BlackBox,正如jkoening here所解释的那样:

class Top extends Module {
  val io = IO(new Bundle{
    val clock_p = Input(Clock())
    val clock_n = Input(Clock())
    val led = Output(Bool())
  })

  val ibufds = Module(new IBUFDS)
  ibufds.io.I := io.clock_p
  ibufds.io.IB:= io.clock_n

  val blink = Module(new Blink)
  blink.clock := ibufds.io.O
  io.led := blink.io.led  

}

这样可行,但在Top verilog模块中,我有一个无用的时钟输入:

module Top(
  input   clock,
  input   reset,
  input   io_clock_p,
  input   io_clock_n,
  output  io_led
);
...

然后在目标上只有io_clock_pio_clock_n用于时钟输入。 clock信号无用。有没有正确的方法来隐藏它?

2 个答案:

答案 0 :(得分:2)

在使用Chisel3团队discussion之后,我们添加了一项功能来支持此功能。

解决方案是使用RawModule:

class Top extends RawModule {
  val clock_p = IO(Input(Clock()))
  val clock_n = IO(Input(Clock()))
  val led = IO(Output(Bool()))

  val ibufds = Module(new IBUFDS)
  ibufds.io.I := clock_p
  ibufds.io.IB:= clock_n

  withClockAndReset(ibufds.io.O, false.B) {
    val blink = Module(new Blink)
    led := blink.io.led
  }
}

原始模块没有隐含信号,并且在verilog生成的文件中反映了«has it»,前缀中没有«io_»。

完全闪烁LED项目的源代码可在this github project上获得(闪烁的led项目:blp)。

Here是法语描述如何做到这一点。要使用此功能,必须使用最后一个git master版本的chisel3。

答案 1 :(得分:1)

目前无法在Chisel Modules上删除甚至重命名clockreset。他们总是在那里。由于Chisel使用正边沿时钟,您可以考虑删除io_clock_p并使用clock代替。

这是一个经常被请求的功能,因此可能会在将来添加,但目前不支持。