这似乎不是一件容易的事情,甚至是不可能的事情,但我们正在使用一种命名约定,即前缀或后缀带有“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/