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

标签 chisel

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

是否有一些方法可以在凿子库中弄乱或覆盖它?

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

最佳答案

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

多IO模块

这是一个更灵活的Module让您调用IO多次向模块添加端口的方法。 (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)))

这将产生以下 Verilog:
module Foo(
  input   clock,
  input   reset,
  input   i_bar,
  output  o_baz
);
  assign o_baz = ~ i_bar;
endmodule

建议名称

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

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

class Foo extends MultiIOModule {

  val a = IO(Input(Bool())).suggestName("i_bar")
  val b = IO(Output(Bool())).suggestName("o_baz")

  b := ~a

}

关于chisel - 如何覆盖/扩展凿子信号命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59407466/

相关文章:

chisel - 当设计中有未连接的 IO 时收到警告

scala - 如何在 Chisel 中将 Seq 与 Cat 一起使用?

凿子3 : False Combinational Loop in Fixed Priority Arbiter

scala - 是否可以根据 Chisel 数据类型的条件在 Chisel 中进行 while 循环?

chisel - 如何向火箭芯片外设添加 sbus 主控

scala - Chisel 中的 RegisterFile 测试

chisel - 在测试仪中使用多个时钟

scala - 凿子:如何避免错误 NO DEFAULT SPECIFIED FOR WIRE

scala - 如何理解这行凿子代码

chisel - 我可以在 Chisel 开始设计硬件之前在软件中计算常量吗?