日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Chisel 学习笔记(四)

發(fā)布時(shí)間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chisel 学习笔记(四) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Chisel?

Chisel中的組合邏輯

Input與Output

Chisel中的所有類都要繼承Module
類中必須要定義io類型,用來(lái)表示該模塊的輸入輸出端口
每一個(gè)輸入輸出端口,需要說(shuō)明是有符號(hào)數(shù)還是無(wú)符號(hào)數(shù),以及數(shù)據(jù)位寬

class MyOperatorsTwo extends Module {val io = IO(new Bundle {val in = Input(UInt(4.W))val out_mux = Output(UInt(4.W))val out_cat = Output(UInt(4.W))}) }class MyOperators(val length : Int) extends Module {val io = IO(new Bundle {val in = Input(UInt(length.W))val out_mux = Output(UInt(length.W))val out_cat = Output(UInt(length.W))}) }

數(shù)據(jù)類型與賦值

Chisel中所有的變量只能用val,不能用var
Chisel中的數(shù)據(jù)類型有UInt,SInt,Bool,并且Chisel中的數(shù)據(jù)類型只能和Chisel中的數(shù)據(jù)類型進(jìn)行運(yùn)算,因此運(yùn)算時(shí)如果需要操作常數(shù),需寫(xiě)成2.U的形式

class MyOperators extends Module {val io = IO(new Bundle {val in = Input(UInt(4.W))val out_add = Output(UInt(4.W))val out_sub = Output(UInt(4.W))val out_mul = Output(UInt(4.W))})val s = true.Bio.out_add := 1.U + 4.Uio.out_sub := 2.U - 1.Uio.out_mul := 4.U * 2.U }

在變量初始化時(shí)使用等號(hào),在賦值時(shí)使用:=,代表左側(cè)變量由右側(cè)表達(dá)式驅(qū)動(dòng)
另外scala中提供比較常見(jiàn)的如多選器,連接器

val s = true.Bio.out_mux := Mux(s, 3.U, 0.U) io.out_cat := Cat(2.U, 1.U)

對(duì)于加法運(yùn)算,Chisel提供了兩種加法運(yùn)算,+&表示會(huì)保留進(jìn)位,+不保留進(jìn)位

控制語(yǔ)句

如果有多條賦值語(yǔ)句驅(qū)動(dòng)相同左側(cè)變量,則選擇最后一個(gè),如下

class LastConnect extends Module {val io = IO(new Bundle {val in = Input(UInt(4.W))val out = Output(UInt(4.W))})io.out := 1.Uio.out := 2.Uio.out := 3.Uio.out := 4.U //編譯器選擇這一條 }

when, elsewhen, otherwise

Chisel中提供條件語(yǔ)句when, elsewhen和otherwise
使用方式和if-else語(yǔ)句一樣
語(yǔ)法如下:

when(someBooleanCondition) {// things to do when true }.elsewhen(someOtherBooleanCondition) {// things to do on this condition }.otherwise {// things to do if none of th boolean conditions are true }

示例如下:

class Max3 extends Module {val io = IO(new Bundle {val in1 = Input(UInt(16.W))val in2 = Input(UInt(16.W))val in3 = Input(UInt(16.W))val out = Output(UInt(16.W))})when(io.in1 > io.in2 && io.in1 > io.in3) {io.out := io.in1 }.elsewhen(io.in2 > io.in1 && io.in2 > io.in3) {io.out := io.in2 }.otherwise {io.out := io.in3} }

需要注意的是,Chisel中的條件語(yǔ)句不像scala中的那樣,最后一行為返回值

val result = when(squareIt) { x * x }.otherwise { x }

這樣是不行的

轉(zhuǎn)載于:https://www.cnblogs.com/JamesDYX/p/10079689.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Chisel 学习笔记(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。