Chisel中的幾種常見的暫存器

2021-08-29 20:46:32 字數 1798 閱讀 5654

一、最基本形式:可用於型別宣告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...