Chisel 筆記java
Chisel自己具備面向對象的特性,基於Scala:一門多範式的編程語言,一種相似java的編程語言,設計初衷是實現可伸縮的語言、並集成面向對象編程和函數式編程的各類特性。簡言之,在Chisel的實現中,全部單元(電路、模塊、端口等等)都是對象。編程
Note:關於 operand = 和 operand :=編程語言
這可能很讓人困惑,由於綜合電路過程當中,節點只有可能被鏈接一次,爲何還有reassignment呢?其實緣由在於,在Verilog中,一般都是先聲明變量是wire型 or reg型 or others,在後續語句中才會經過assign xxx = xxx或者 xxx = xxx或 xxx <= xxx來賦值。那麼再看看Scala的變量語法:函數式編程
var myVar : String = "Foo" 和 val myVal : String = "Foo"
變量的類型在變量名以後等號以前聲明。定義變量的類型的語法格式以下:函數
var VariableName : DataType [= Initial Value] 或 val VariableName : DataType [= Initial Value]
變量聲明必定須要初始值,不然會報錯。spa
回到chisel中,因爲在定義I/O時採用的Bundle裏就已經對一些對象賦予了初始值(as default),因此在後續操做中一定是reassignment。Puzzle solved !設計
補充:orm
Chisel | Generic form | Compile-time | Hardware / Run-time | Verilog |
= | var foo = [...] | Yes | [indirectly] | (aliasing operation, analogous to wire assignment in Verilog) 對象 wire foo = [...];內存 |
:= | foo := [...] | Yes | assign myWire = [...]; |
waiting