gpt4 book ai didi

chisel - 扩展数据类型或添加信息的方式

转载 作者:行者123 更新时间:2023-12-04 08:52:56 34 4
gpt4 key购买 nike

似乎大部分/全部 Data Chisel 中的类型是密封类,不允许用户从它们扩展。是否可以添加有关某些用户定义字段的信息或将来添加支持?
我认为在某些情况下,获取更多信息可能会有所帮助:

  • 端口描述可能用于文档
  • 电压电平/偏置
  • 如果您正在做一些芯片顶层连接,您可能需要进行某些连接
  • 很多时候信号都会有 set_dont_touch (一个 SDC,不要与 Chisel dontTouch 混淆)放置在它们上面,因此可以添加这些用于自动 SDC 约束。

  • 建模目的
  • Chisel 显然不处理行为建模,但有时 Verilog/SV real用于建模。这可用于打印出这些信号用于任何后期处理的位置。


  • 我不希望 Chisel 处理所有实际案例(例如制作文档或处理连接),但是如果可以添加/扩展这些成员,用户可以在构建期间和/或在详细说明额外流程之后检查这些.
    谢谢

    最佳答案

    Chisel 和 FIRRTL 有一个相当健壮的注释系统来处理这些元数据。这是一个积极开发的领域,注释实例(而不是模块)的处理在即将发布的 Chisel 3.4.0/FIRRTL 1.4.0 中得到了改进。话虽如此,我可以提供一个简单的例子来说明它是如何工作的
    基本上,FIRRTL 有一个注释的概念,它可以与零个、一个或多个目标相关联。目标是硬件组件(如寄存器或电线)或模块的名称。这正是 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 相当简单(尽管没有详细记录)。不幸的是,这个流程没有 Chisel API 那么多的文档,但整体结构已经存在,并且在 FireSim ( https://fires.im/) 等项目中大量使用。
    注释的一个常见用途是将某些元数据与注释(如物理设计信息)相关联,通过编译传播它,然后以任何格式发出文件以 Hook 到后续流程。
    Chisel 3.4 中任何令人兴奋的功能都有助于实现这一点,那就是新的“CustomFileEmission”API。在编写自定义注解时,可以告诉 FIRRTL 如何发出注解,例如,您可以有一些带有物理设计信息的注解并发出 TCL 文件。

    关于chisel - 扩展数据类型或添加信息的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64001435/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com