chisel - 如何覆盖/扩展凿子信号命名
问题描述
这似乎不是一件容易的事情,甚至是不可能的事情,但我们正在使用一种命名约定,即前缀或后缀带有“i_”或“o_”的信号用于verilog中的输入/输出。
是否有一些方法可以在凿子库中弄乱或覆盖它?
我看到除了时钟和复位,所有信号都有“io”前缀。是否可以只使用“i”作为输入,“o”作为输出?
解决方案
最简单的方法可能是使用MultiIOModule
. 但是,您也可以使用suggestName
. 两种方法如下所示。
多IO模块
这是一种更灵活的方法Module
,可以让您多次调用该IO
方法向模块添加端口。(Module
要求您定义一个io
成员,并且只允许您调用IO
一次。)
因为您可以将您想要的前缀/后缀命名与您的 val 名称一起使用,从而MultiIOModule
使您摆脱束缚。val io = ...
然后,反射命名将在生成的 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
}
推荐阅读
- html - 在可变长度元素上使用省略号裁剪文本
- php - 在 Eloquent 模型中处理 ACL 的最佳模式或方法是什么?
- python - 将相同的字符串连接到数组或系列的所有元素
- javascript - 使用查询字符串刷新页面后如何保持在同一组件上
- java - 将长值列表转换为逗号分隔以及每个值周围的括号
- android - Android自定义通知按钮onClick不起作用
- sql - BigQuery SQL 'NOT IN' 不排除结果
- ios - 如何在模态视图控制器被解雇后更新父视图控制器的视图
- python - 什么算法对于实时检测视频帧中的可变形 ROI(不是对象)最有用?
- asp.net - 从 ASP.NET 执行 SSIS 包的问题