【问题标题】:Extending Data Types or way to add information扩展数据类型或添加信息的方式
【发布时间】:2020-09-22 00:15:21
【问题描述】:

Chisel 中的大多数/所有Data 类型似乎都是密封类,不允许用户从它们扩展。是否可以添加有关某些用户定义字段的信息或将来添加支持?

我认为在某些情况下,提供更多信息可能会有所帮助:

  • 可能用于文档的端口描述

  • 电压水平/偏置

    • 如果您要进行一些芯片顶层连接,您可能需要进行某些连接
    • 而且很多时候信号上会放置一个set_dont_touch(SDC,不要与 Chisel dontTouch 混淆),因此可以添加这些用于自动 SDC 约束。
  • 建模目的

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

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

谢谢

【问题讨论】:

    标签: chisel rocket-chip


    【解决方案1】:

    Chisel 和 FIRRTL 具有相当强大的注释系统来处理此类元数据。这是一个积极开发的领域,注释实例(而不是模块)的处理在即将发布的 Chisel 3.4.0 / FIRRTL 1.4.0 中得到了改进。话虽如此,我可以提供一个简单的例子来说明它是如何工作的

    基本上,FIRRTL 具有 Annotation 的概念,它可以与零个、一个或多个 Targets 相关联。 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 是相当简单的(虽然没有详细记录)。不幸的是,这个流程没有 Chisel API 那么多的文档,但整体结构已经存在,并且在 FireSim (https://fires.im/) 等项目中大量使用。

    注解的一个常见用途是将某些元数据与注解(如物理设计信息)相关联,通过编译传播它,然后以任何格式发出文件以挂钩到后续流程。

    Chisel 3.4 中的任何令人兴奋的功能都有助于实现这一点,那就是新的“CustomFileEmission”API。在编写自定义注解时,可以告诉 FIRRTL 如何发出注解,例如,您可以有一些带有物理设计信息的注解并发出 TCL 文件。

    【讨论】:

    • 太棒了!我见过Annotation 类型,但老实说我不知道​​他们做了什么。如果时间允许,我会试一试。当我在 2019 年开始关注 Chisel 时,要么不存在,要么我太笨了,没有注意到!
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2022-01-01
    • 2021-08-31
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多