所以,我有一个关于凿码转换的理论问题。凿码转换
我知道凿子实际上是一组Scala的定义,所以它被编译成Java字节码,它依次运行在JVM中,就像魔法一样,它吐出了Verilog的等价描述,甚至是旧版本的C++描述的凿子。
问题是我无法弄清楚这个“魔法”是如何工作的。我的猜测是,从Chisel到Verilog/C++的代码转换全部基于Scala反射。但我不确定,因为我找不到与此主题相关的任何内容。
那么,这是关于反思吗?如果是这样,它是编译时间我们的运行时反射? 有人可以给我一个线索吗?
非常感谢。
但是凿子检查自己以便生成FIRRTL?当你编译并运行你给出的例子时,Chisel中的硬件描述如何解释并导出firrtl?我只能认为它适用于反思。 – Rafael
我会尽量做得更具体。当你用凿子写的时候,Scala的描述本身就是输出firrtl吗?还是有另一个外部工具可以扫描凿子的源代码并将其转换为firrtl?无论如何,谢谢你的回答。 – Rafael
这是斯卡拉描述本身,出口Firrtl。这不是真的*反思;凿子函数调用像'UInt'和':='实际上是在一个给定的模块内部改变由Chisel构造的AST。凿子从顶层模块开始走这个AST,以发射Firrtl。我们*实际使用反射,但仅用于命名连线和寄存器,而不是用于构建AST。 – jkoenig