Chisel 學習筆記(四)

2022-08-30 03:36:11 字數 1707 閱讀 6810

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的特性是不用描述出長度,且通過 ...