微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决扩展数据类型或添加信息的方式

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

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

  • 可能是文档的端口说明

  • 电压水平/偏置

    • 如果您要进行某些芯片顶级连接,则可能必须进行某些连接
    • 很多时候信号上都会放置set_dont_touch一个SDC,不要与Chisel dontTouch混淆),因此可以为自动SDC约束添加这些信号。
    • li>
  • 建模目的

    • Chisel显然不处理行为建模,但是有时会使用Verilog / SV real进行建模。可以用来打印出这些信号在哪里进行任何后期处理。

我不希望Chisel处理所有实际情况(例如制作文档或处理连接),但是如果可以添加/扩展这些成员,则用户可以在构造过程中和/或在详细说明后进行检查。以获得更多流量。

谢谢

解决方法

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

基本上,FIRRTL具有 Annotation 的概念,该概念可以与零个,一个或多个 Target 相关联。 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的” API相当简单(尽管文档不足)。不幸的是,该流程没有Chisel API那样多的文档,但是整体结构在那里,并且在FireSim(https://fires.im/)等项目中大量使用。

注释的常见用法是将某些元数据与注释(例如物理设计信息)相关联,通过编译进行传播,然后以任何格式发出文件以吸引后续关注。

Chisel 3.4中还提供了任何令人兴奋的功能,新的“ CustomFileEmission” API可以帮助实现这一目标。编写自定义批注时,可以告诉FIRRTL如何发出批注,例如,您可以带有一些带有物理设计信息的批注并发出TCL文件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?