Chisel Tutorial(三)——組合電路
阿新 • • 發佈:2018-12-25
以下內容依據2015-7-10版的Chisel 2.2 Tutorial整理
組合電路
在Chisel中每個電路都是一些node的集合,每個node是一個硬體操作單元,具有0個、1個或者多個輸入,依據輸入驅動一個輸出。上一篇部落格“Chisel Tutorial(二)——Chisel的資料型別”中介紹的變數就可以認為是一個0輸入的node,其輸出是一個固定值,也就是變數的值。不同的node可以通過操作符連線在一起,例如可以通過如下表達式表示一個簡單的組合邏輯電路:
(a & b) | (~c & d)
上述表示式的語法應該很好理解,&表示bit與,|表示bit
任何一個簡單地表達式都可以被轉化為一個電路樹,命名wire作為葉子節點,操作符組成中間節點,電路的最終輸出是電路樹根節點的輸出,對於上面的簡單表示式而言,根節點就是bit或。
在Chisel中給一個wire命名就是宣告一個變數,使用Scala中的關鍵詞val。如下:
val sel = a | b
val out = (sel & in1) | (~sel & in2)
針對不同資料型別,Chisel定義了不同的硬體操作符,如下表所示。
Chisel有一個很大的特點就是變數寬度推測,wire的寬度是可以推測出來的,按照如下規則推測:
此處的wz就是z的寬度。
除了右移操作外,寬度推測機制得到的輸出wire的寬度始終大於或者等於輸入wire的寬度。