1. 程式人生 > >Chisel Tutorial(三)——組合電路

Chisel Tutorial(三)——組合電路

以下內容依據2015-7-10版的Chisel 2.2 Tutorial整理

組合電路

    在Chisel中每個電路都是一些node的集合,每個node是一個硬體操作單元,具有0個、1個或者多個輸入,依據輸入驅動一個輸出。上一篇部落格“Chisel Tutorial(二)——Chisel的資料型別”中介紹的變數就可以認為是一個0輸入的node,其輸出是一個固定值,也就是變數的值。不同的node可以通過操作符連線在一起,例如可以通過如下表達式表示一個簡單的組合邏輯電路:

(a & b) | (~c & d)

    上述表示式的語法應該很好理解,&表示bit與,|表示bit

或,~表示bit反,a-d表示一些命名wire

    任何一個簡單地表達式都可以被轉化為一個電路樹,命名wire作為葉子節點,操作符組成中間節點,電路的最終輸出是電路樹根節點的輸出,對於上面的簡單表示式而言,根節點就是bit或。

    在Chisel中給一個wire命名就是宣告一個變數,使用Scala中的關鍵詞val。如下:

val sel = a | b
val out = (sel & in1) | (~sel & in2)

    針對不同資料型別,Chisel定義了不同的硬體操作符,如下表所示。


Chisel有一個很大的特點就是變數寬度推測,wire的寬度是可以推測出來的,按照如下規則推測:


此處的wz就是z的寬度。

除了右移操作外,寬度推測機制得到的輸出wire的寬度始終大於或者等於輸入wire的寬度。