如何覆盖/扩展凿子信号命名

Hoo*_*hoo 3 chisel

这似乎不是一件容易的事情,甚至是不可能的,但我们正在使用一种命名约定,在 verilog 中为输入/输出使用前缀或后缀“i_”或“o_”的信号。

是否有一些方法可以在 chisel 库中混淆或覆盖它?

我看到除了时钟和复位,所有信号都有“io”前缀。是否可以只使用“i”作为输入和“o”作为输出?

sel*_*dge 6

最简单的方法是使用MultiIOModule. 但是,您也可以使用suggestName. 两种方法如下所示。

多IO模块

这是一个更灵活ModuleIO方法,可以让您多次调用该方法向模块添加端口。(Module要求您定义一个io成员,并且只允许您调用IO一次。)

因为MultiIOModule将您从约束中解放出来,val io = ...您可以将您想要的前缀/后缀命名与您的 val 名称一起使用。然后反射命名将在生成的 Verilog 中正确处理这些内容。

考虑以下 Chisel 代码:

import chisel3._
import chisel3.stage.{ChiselStage, ChiselGeneratorAnnotation}

class Foo extends MultiIOModule {

  val i_bar = IO(Input(Bool()))
  val o_baz = IO(Output(Bool()))

  o_baz := ~i_bar

}

(new ChiselStage).execute(Array.empty, Seq(ChiselGeneratorAnnotation(() => new Foo)))
Run Code Online (Sandbox Code Playgroud)

这将产生以下 Verilog:

module Foo(
  input   clock,
  input   reset,
  input   i_bar,
  output  o_baz
);
  assign o_baz = ~ i_bar;
endmodule
Run Code Online (Sandbox Code Playgroud)

建议名称

作为替代方案,您可以使用该suggestName方法将名称更改为与反射命名(从 的名称获取名称val)将使用的名称不同。

使用suggestName您可以将名称强制为您想要的任何名称。以下 Chisel 生成与上述相同的 Verilog:

module Foo(
  input   clock,
  input   reset,
  input   i_bar,
  output  o_baz
);
  assign o_baz = ~ i_bar;
endmodule
Run Code Online (Sandbox Code Playgroud)