一、最基本形式:可用於型別宣告reg:
val clock = node(x._parent.get.clock)
時鐘跟復位訊號在chisel中是隱藏的。
reg(t,next,init)
如果沒有顯示式宣告,那這三個的預設值都是null
t: 是暫存器的資料型別next:是資料的輸入端,也就是要延遲一拍輸出的資料
init:復位時候賦給輸出的值
val b = reg(uint(width=3)) //指明型別和位寬
b := c //賦值
val d = reg(init=false.b) // 宣告、賦初值
二、幾種特別的reg
1.regnext
這個暫存器的功能正如他的名字一樣好理解,把輸入延遲乙個週期也就是在next週期輸出。
具體的用法有兩種:
1.1 regnext(next)
這裡的next就是你想延遲的輸入訊號,例如 b := regnext(a),這裡把a的訊號延遲了乙個週期送給了b。這種形式的用法沒有顯式的指出初始值。
1.2 regnext(next,init= initial_value)
這種形式顯式指出了初始值,也就是復位後的值initial_value, b := regnext(a,init=c),這個也好理解,如果復位的時候,延遲乙個時鐘週期將c輸出給b,否則,將a延遲一週期輸出給b,可能有人會問,這樣做只能是同步復位,那如果想非同步復位該怎麼辦呢?這確是是個問題,但是chisel語言到目前為止只支援同步電路,至於以後是否會把非同步加入語言特性,那就讓時間來說吧,或者解決的辦法就是用其他語言寫出你的非同步電路。
同樣可能有人注意到了,在這個暫存器裡根本就沒有復位訊號,為什麼要有init這個復位值呢?因為chisel將時鐘訊號和復位訊號已經連線到需要連線的地方,所以也就在用法上隱藏了。
2、reginit
這個只有一種用法,就是指明他的初始化或者是復位時候的值。
val r = reginit(resetdata)
3、regenable
這就是帶有使能端的reg,有兩種用法:
3.1 regnext(updatedata,enable)
這種形式有兩個參量,乙個是需要控制的資料,乙個控制訊號,當enable=1的時候,將updatedata在下個時鐘上公升沿輸出。
val r = reg(clonedupdatedata)
when (enable)
3.2 regnext(updatedata,resetdata,enable)
這個相比於上邊的也就多了乙個復位時候的值。
val r = reginit(resetdata)
when (enable)
4、shiftregister
4.1 shiftregister(in , n , en )
in:需要移位的資料n:需要移位的時鐘週期數
en:使能訊號,為true的時候移位
if (n != 0) else
4.2 shiftregister(in ,n ,resetdata,en)
resetdata :復位的時候為每個暫存器賦初值
if (n != 0) else
RestTemplate中幾種常見的請求方式
getforentity方法的返回值是乙個responseentity,responseentity是spring對http請求響應的封裝,包括了幾個重要的元素,如響應碼 contenttype contentlength 響應訊息體等。可以用乙個數字做佔位符,最後是乙個可變長度的引數,來一一替換前...
chisel中 和 的區別
學了chisel有一段時間了,最近發現一些基礎的概念還是不行不清楚,絕了。碼一下供參考 在chisel裡,所有物件都應該由val型別的變數來引用,因為硬體電路的不可變性。因此,乙個變數一旦初始化時繫結了乙個物件,就不能再發生更改。但是,引用的物件很可能需要被重新賦值。例如,輸出埠在定義時使用了 與埠...
java中幾種常見的排序演算法
本人只研究過氣泡排序 選擇排序和快速排序,下面是快速排序的 一 冒泡 bubble 排序 氣泡排序 bubblesort 的基本思想是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。如此重複下去,直至最終完成排序。時間複雜度為 o n n 適用於排序小列表。void bubblesortarr...