chisel
chisel中的所有類都要繼承module
類中必須要定義io型別,用來表示該模組的輸入輸出埠
每乙個輸入輸出埠,需要說明是有符號數還是無符號數,以及資料位寬
class
myoperatorstwo
extends
module)}
class
myoperators(val length : int
) extends
module
)}
chisel中所有的變數只能用val,不能用var
chisel中的資料型別有uint,sint,bool,並且chisel中的資料型別只能和chisel中的資料型別進行運算,因此運算時如果需要操作常數,需寫成2.u的形式
class
myoperators
extends
module
) val s = true.b
io.out_add := 1.
u + 4.
u io.out_sub := 2.
u - 1.
u io.out_mul := 4.
u * 2.
u}
在變數初始化時使用等號,在賦值時使用:=,代表左側變數由右側表示式驅動
另外scala中提供比較常見的如多選器,聯結器
val s = true.b
io.out_mux := mux(s, 3.
u, 0.
u) io.out_cat := cat(2.
u, 1.
u)
對於加法運算,chisel提供了兩種加法運算,+&表示會保留進製,+不保留進製
如果有多條賦值語句驅動相同左側變數,則選擇最後乙個,如下
class
lastconnect
extends
module
) io.out := 1.
u io.out := 2.
u io.out := 3.
u io.out := 4.
u//編譯器選擇這一條
}
chisel中提供條件語句when, elsewhen和otherwise
使用方式和if-else語句一樣
語法如下:
when(somebooleancondition) .elsewhen(someotherbooleancondition) .otherwise
示例如下:
class
max3
extends
module
)
when(io.in1 > io.in2 && io.in1 > io.in3) .elsewhen(io.in2 > io.in1 && io.in2 > io.in3) .otherwise
}
需要注意的是,chisel中的條件語句不像scala中的那樣,最後一行為返回值
val result = when(squareit) .otherwise
這樣是不行的
chisel學習筆記1
chisel是在scala的基礎上建立起來的,初學chisel可能有點摸不著頭腦,建議去菜鳥學學scala先。碼一下scala的筆記,賊適合入門。scala是乙個物件導向的程式語言,了解這一點很重要,這也是scala和chisel的乙個很大的優勢。變數是物件。運用val宣告的常量也是物件。甚至lit...
chisel學習筆記2
第乙個chisel模組 1 直接上 chisel 定義乙個模組 class passthrough extends module io.out io.in 以上 定義了乙個名字叫做passthrough的chiselmodule,它有乙個4位元的輸入,名字叫做in,還有乙個4位元的輸出out。這個模...
Chisel 學習筆記(七)
chisel 在chisel中,我們既可以使用scala中自帶的集合,包括list,seq,arraybuffer list的使用方式在學習筆記 一 中有所體現 seq與list類似,但是在chisel中,我們更常使用seq來表述某個模組的引數 arraybuffer的特性是不用描述出長度,且通過 ...