- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上我想开始对 Chisel/FIRRTL 的内部进行黑客攻击。如果有人能指出我可以开始研究的地方,那将会有所帮助。
我已经阅读了源代码。到目前为止,我了解到 Chisel 已作为 Scala 库实现。每个 Chisel 对象都有一些发出 FIRRTL 的方法。特定的Scala程序运行后,会遍历对象并生成FIRRTL。
我想知道的是我的方向是否正确。我仍然没有弄清楚 Chisel 模块的 AST 形成和类型推断发生在哪里。最终我会到达那里,但如果有人可以向我总结我应该看的地方,那就太好了。
当然,这对 Chisel 开发人员来说要求太高了,但即使是一些基本信息也会有所帮助!
最佳答案
我想说有两个基本的起点。Firrtl 是一个好的开始,因为它比 chisel 新,而且总体代码库也更新。 Firrtl 是一个解析器、转换器和发射器,这些都非常简单。转换很好地封装了大多数操作
Chisel 作为 EDSL 更加复杂和古怪。开始的地方是 chiselFrontend。 Builder 类是构建用于发出 chirrtl/high-firrtl 的内部图的魔法的根源。它使用动态变量来提供模块及其组件注册其创建以及与图的连接的位置。
希望对您有所帮助,祝您调查愉快
关于chisel - Chisel 开发者指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58510182/
这是在凿子库里面 object Module { // returns a new Module of type T, initialized with a Parameters instance
基本上我想开始对 Chisel/FIRRTL 的内部进行黑客攻击。如果有人能指出我可以开始研究的地方,那将会有所帮助。 我已经阅读了源代码。到目前为止,我了解到 Chisel 已作为 Scala 库实
我有一个通常不需要的可选功能。然而,为了支持此功能,一些 I/O 端口应添加到原始模块 I/O 端口。 我是这样做的: import Chisel._ class TestModule extends
如果我们以下面的代码摘录为例(在模块的顶部): val write_indices = WireInit(VecInit(Seq.fill(wordsPerBeat)(0.U((log2Ceil(nW
我希望在 Chisel3 中编写计数器,用于寻址子单元。如果计数器与子单元中的某个寄存器匹配,则子单元触发,否则不触发。 我宁愿用格雷码而不是二进制来循环地址。在 Chisel 中编写二进制计数器很容
我是 Chisel 的新手,我想知道是否可以在 Chisel 开始设计任何电路之前在软件中计算常量。例如,我有一个带有一个参数的模块,myParameter,但是我想从这个参数中导出更多变量(cons
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
使用 > 运算符实现逻辑移位很容易,但是算术右移(符号扩展)如何在 Chisel 中实现呢? 在 Chisel 备忘单中提到 >> 运算符用于算术右移,与逻辑右移运算符相同。 最佳答案 我认为如果类型
在 Chisel iotesters 中,我们将创建 Chisel 设计的工厂传递给测试仪,例如() => 新建DUT,如下: "Test" should "simulate" in { chis
我有一些类似的寄存器定义,我想写在 regmap 结构下。 我的代码目前看起来像这样: val regs = RegInit(Vec(Seq.fill(5)(0.U(32.W)))) regmap (
我有以下测试代码并使用 --genHarness 调用 chiseMain。 Verilog 是为线束生成的,但它不包含 Tester 类中的任何逻辑。关于为什么我没有得到我期望的逻辑有什么想法吗?我
我正在尝试使用 chisel Queue 类并希望能够在重置时刷新它。好像以前Class的构造函数里面有reset的选项 @deprecated("Module constructor with ov
我正在生成要由 Chisel 编译的输入。以简单的方式进行操作可能会导致 bool 表达式不理想。例如,我倾向于生成嵌套的 Mux()-es 链,如下所示: x := Mux(!a &&
如何动态地将输入或输出添加到 Bundle 以实现与此伪代码等效的效果。 class MyBundle extends Bundle { for( i = UInt(i.W) } } 请注意
我在凿子代码中遇到以下异常。 [info] - should correctly write and read data *** FAILED *** [info] chisel3.core.Bi
我一直在研究 Chisel 以及各种 Lavas(Kansas、Chalmers 和 Xilinx 口味)和 CLaSH 的来源。我试图了解 Chisel 与其他产品的主要卖点是什么。我发现的主要方法
我为我的特定数据声明了一个 Bundle : class RValue (val cSize: Int = 16) extends Bundle { val rvalue = Output(UIn
我想从存储在 scala 变量中的规范生成模块 IO 接口(interface)。 我想生成这个类定义: class AddIfc extends Module { val io = IO(ne
这就是我想要完成的事情:我有一个 Chisel 加速器,它调用另一个 Chisel 加速器并传入一个值。我希望第二个在其中有一个 while 循环,其中条件部分基于输入值。下面是一些示例代码: cla
我正在尝试获取 UInt 向量中 Max 元素的索引。我的代码看起来像这样 val pwr = Vec.tabulate(N) {i => energyMeters(i).io.pwr} val ma
我是一名优秀的程序员,十分优秀!