chisel
在chisel中,我們既可以使用scala中自帶的集合,包括list,seq,arraybuffer——list的使用方式在學習筆記(一)中有所體現;seq與list類似,但是在chisel中,我們更常使用seq來表述某個模組的引數;arraybuffer的特性是不用描述出長度,且通過+就可以簡單的新增元素(-可以刪除元素),較為方便——也可以使用chisel中所有的特殊集合vec,vec與其他scala中的集合功能類似,但是可以更貼合chisel。
正如上文所說
list是最原初的列表類,當然也有各種操作,不過較為繁瑣
seq經常作為chisel中建構函式的引數
arraybuffer有著更簡便的對集合的操作
class
scalafirfilter(taps: seq[int])
accumulator
}}
在chisel中,更常用的是通過seq傳參
class
mymanyelementfir(consts: seq[int], bitwidth: int
) extends
module
) val regs = mutable.arraybuffer[uint]() //arraybuffer的使用,先初始化成空
for(i <- 0 until consts.length)
val muls = mutable.arraybuffer[uint]()
for(i <- 0 until consts.length)
val scan = mutable.arraybuffer[uint]()
for(i <- 0 until consts.length)
io.out := scan.last
}
vec也是集合,且是為chisel專門打造的。在某些情況下,scala中的集合並不支援chisel的操作,主要是以下兩種情況:
在bundle中,特別是io bundle中,scala中的集合不再起作用
在某些需要用到chisel特性進行訪問或更改的操作中,例如處理器的暫存器堆設計,scala中的集合不再起作用
vec的使用如下
class
mymanydynamicelementvecfir(length: int
) extends
module
) val regs = reginit(vec.fill(length - 1)(0.
u(8.
w))) //對vec的初始化和list操作類似,說明長度和初始值
//val regs = reginit(vecinit(seq.fill(length - 1)(0.u(8.w)))) 最新一版中的vec初始化要這樣寫
for(i <- 0 until length - 1)
val muls = wire(vec(length, uint(8.
w))) //對一組導線的定義
for(i <- 0 until length)
val scan = wire(vec(length, uint(8.
w)))
for(i <- 0 until length)
io.out := scan(length - 1)
}
package
passthrough
import chisel3._
class
registerfile (readports: int
) extends
module
)// val regs = reginit(vec(32, uint(32.w)).frombits(0.u)) 另外一種初始化方法
val regs = reginit(vecinit(seq.fill(32)(0.
u(32.
w))))
when(io.wen & io.waddr=/=0.
u) for(i<-0 until readports)
}
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中的所有類都要繼承module 類中必須要定義io型別,用來表示該模組的輸入輸出埠 每乙個輸入輸出埠,需要說明是有符號數還是無符號數,以及資料位寬 class myoperatorstwo extends module class myoperators val lengt...