1. 程式人生 > >[計算機硬體] Chisel 筆記/待更新

[計算機硬體] Chisel 筆記/待更新

Chisel 筆記

 

Chisel本身具有面向物件的特性,基於Scala:一門多正規化的程式語言,一種類似java的程式語言,設計初衷是實現可伸縮的語言、並整合面向物件程式設計和函數語言程式設計的各種特性。簡言之,在Chisel的實現中,所有單元(電路、模組、埠等等)都是物件。

 

 

 

 

Note:關於 operand = 和 operand :=

  • =   告訴chisel給物件分配一個值。
  • :=  表示的是Reassignment。比如某個物件被 operand = 分配了值,那麼在後續的“電路綜合/連線”過程中必須使用 :=

  這可能很讓人困惑,因為綜合電路過程中,節點只有可能被連線一次,為什麼還有reassignment呢?(本人就百思不得其解)其實原因在於,在Verilog中,通常都是先宣告變數是wire型 or reg型 or others,在後續語句中才會通過assign xxx = xxx或者 xxx = xxx或 xxx <= xxx來賦值。那麼再看看Scala的變數語法:

  1. Scala變數是一種使用方便的佔位符,用於引用計算機記憶體地址,變數建立後會佔用一定的記憶體空間。
  2. 在 Scala 中,使用關鍵詞 "var" 宣告變數,使用關鍵詞 "val"
     宣告常量。如 
    var myVar : String = "Foo" val myVal : String = "Foo"
  3. 變數的型別在變數名之後等號之前宣告。定義變數的型別的語法格式如下:

    var VariableName : DataType [= Initial Value]  val VariableName : DataType [= Initial Value]

    變數宣告一定需要初始值,否則會報錯。

  回到chisel中,由於在定義I/O時採用的Bundle裡就已經對一些物件賦予了初始值(as default),所以在後續操作中必定是reassignment。

Puzzle solved !

補充:

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 = [...];

 

的的的的