扩展数据类型或添加信息的方式
Extending Data Types or way to add information
Chisel 中 Data
类型中的 most/all 似乎是密封的 类,不允许用户从中扩展。是否可以添加有关某些用户定义字段的信息或在将来添加支持?
我认为在某些情况下获得更多信息可能会有所帮助:
可能用于文档的端口描述
电压levels/biases
- 如果你正在做一些芯片顶层连接,你可能需要建立特定的连接
- 而且很多时候信号上会有一个
set_dont_touch
(一个 SDC,不要与 Chisel dontTouch
混淆),因此可以添加这些以用于自动 SDC 约束。
建模目的
- Chisel 显然不处理行为建模,但有时 Verilog/SV
real
用于建模。这可用于打印出这些信号用于任何 post 处理的位置。
我不希望 Chisel 处理所有实际情况(例如制作文档或处理连接),但如果这些成员可以 added/extended 用户可以在构建期间检查这些 and/or 在详细说明额外流程后。
谢谢
Chisel 和 FIRRTL 有一个相当强大的注释系统来处理此类元数据。这是一个活跃的开发领域,在 soon-to-be-released Chisel 3.4.0 / FIRRTL 1.4.0 中改进了注释实例(而不是模块)的处理。话虽这么说,我可以提供一个简单的例子来说明它是如何工作的
基本上,FIRRTL 有一个 注释 的概念,它可以与零个、一个或多个 目标 相关联。 Target 是硬件组件(如寄存器或电线)或模块的名称。这正是 Chisel dontTouch
的实现方式
import chisel3._
import chisel3.stage._
import firrtl.annotations.JsonProtocol
import firrtl.transforms.DontTouchAnnotation
class Foo extends Module {
val io = IO(new Bundle {
val in = Input(Bool())
val out = Output(Bool())
})
dontTouch(io)
io.out := ~io.in
}
val resultAnnos = (new ChiselStage).run(ChiselGeneratorAnnotation(() => new Foo) :: Nil)
val dontTouches = resultAnnos.collect { case dt: DontTouchAnnotation => dt }
println(JsonProtocol.serialize(dontTouches))
/* Prints:
[
{
"class":"firrtl.transforms.DontTouchAnnotation",
"target":"~Foo|Foo>io_in"
},
{
"class":"firrtl.transforms.DontTouchAnnotation",
"target":"~Foo|Foo>io_out"
}
]
*/
请注意,这是完全可扩展的,定义您自己的“dontTouch-like”API 相当简单(虽然不是 well-documented)。不幸的是,此流程没有 Chisel API 那样多的文档,但整体结构存在并且在 FireSim (https://fires.im/).
等项目中大量使用
注释的一个常见用途是将某些元数据与注释(如物理设计信息)相关联,通过编译传播它,然后发出任何格式的文件以挂钩后续流程。
Chisel 3.4 中还有一个令人兴奋的功能,即新的“CustomFileEmission”API。在编写自定义注释时,可以告诉 FIRRTL 如何发出注释,例如,您可以使用一些带有物理设计信息的注释并发出 TCL 文件。
Chisel 中 Data
类型中的 most/all 似乎是密封的 类,不允许用户从中扩展。是否可以添加有关某些用户定义字段的信息或在将来添加支持?
我认为在某些情况下获得更多信息可能会有所帮助:
可能用于文档的端口描述
电压levels/biases
- 如果你正在做一些芯片顶层连接,你可能需要建立特定的连接
- 而且很多时候信号上会有一个
set_dont_touch
(一个 SDC,不要与 ChiseldontTouch
混淆),因此可以添加这些以用于自动 SDC 约束。
建模目的
- Chisel 显然不处理行为建模,但有时 Verilog/SV
real
用于建模。这可用于打印出这些信号用于任何 post 处理的位置。
- Chisel 显然不处理行为建模,但有时 Verilog/SV
我不希望 Chisel 处理所有实际情况(例如制作文档或处理连接),但如果这些成员可以 added/extended 用户可以在构建期间检查这些 and/or 在详细说明额外流程后。
谢谢
Chisel 和 FIRRTL 有一个相当强大的注释系统来处理此类元数据。这是一个活跃的开发领域,在 soon-to-be-released Chisel 3.4.0 / FIRRTL 1.4.0 中改进了注释实例(而不是模块)的处理。话虽这么说,我可以提供一个简单的例子来说明它是如何工作的
基本上,FIRRTL 有一个 注释 的概念,它可以与零个、一个或多个 目标 相关联。 Target 是硬件组件(如寄存器或电线)或模块的名称。这正是 Chisel dontTouch
的实现方式
import chisel3._
import chisel3.stage._
import firrtl.annotations.JsonProtocol
import firrtl.transforms.DontTouchAnnotation
class Foo extends Module {
val io = IO(new Bundle {
val in = Input(Bool())
val out = Output(Bool())
})
dontTouch(io)
io.out := ~io.in
}
val resultAnnos = (new ChiselStage).run(ChiselGeneratorAnnotation(() => new Foo) :: Nil)
val dontTouches = resultAnnos.collect { case dt: DontTouchAnnotation => dt }
println(JsonProtocol.serialize(dontTouches))
/* Prints:
[
{
"class":"firrtl.transforms.DontTouchAnnotation",
"target":"~Foo|Foo>io_in"
},
{
"class":"firrtl.transforms.DontTouchAnnotation",
"target":"~Foo|Foo>io_out"
}
]
*/
请注意,这是完全可扩展的,定义您自己的“dontTouch-like”API 相当简单(虽然不是 well-documented)。不幸的是,此流程没有 Chisel API 那样多的文档,但整体结构存在并且在 FireSim (https://fires.im/).
等项目中大量使用注释的一个常见用途是将某些元数据与注释(如物理设计信息)相关联,通过编译传播它,然后发出任何格式的文件以挂钩后续流程。
Chisel 3.4 中还有一个令人兴奋的功能,即新的“CustomFileEmission”API。在编写自定义注释时,可以告诉 FIRRTL 如何发出注释,例如,您可以使用一些带有物理设计信息的注释并发出 TCL 文件。