所以,我有一個關於鑿碼轉換的理論問題。鑿碼轉換
我知道鑿子實際上是一組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