Chisel 學習筆記(七)

2022-08-30 03:36:11 字數 2101 閱讀 9902

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...