天天看點

chisel的初級參數化(verilog也可以)

0 簡介

這篇文章講chisel的參數化。chisel的參數化東西是比較多的,打算分兩次講,将其分為初級參數化手段以及進階參數化手段,一次初級參數化,然後兩篇進階參數化。

chisel的初級參數化(verilog也可以)

初級參數化比較簡單,但是作為後續内容的了解,還是需要講一下。其中部分内容直接引用自《Digital Design With Chisel》。

初級參數化有兩種手段:采用類構造函數的參數化,以及采用類模闆的參數化。為什麼叫初級參數化?因為其背後的思想和

Verilog 使用 parameter傳遞參數

無差別,都是給每個module傳入參數,再例化module即可。

一、基于類構造函數的參數化

原理是采用scala的構造函數。如下面的代碼。scala的構造函數和類聲明是一體的。比如聲明一個參數n。

chisel的初級參數化(verilog也可以)

在例化的時候直接代入參數即可。

chisel的初級參數化(verilog也可以)

二、基于類模闆的參數化

scala作為面向對象的語言,和c++一樣有類模闆。一些複雜的參數,比如類型都不确定可以直接使用類模闆。

chisel的初級參數化(verilog也可以)

如上面所示采用類模闆的參數化。子產品存在兩個參數,dt和n。其中n确定是int, 但是dt的類型需要參數化。這時候就需要用到類模闆。

NocRouter是一個類模闆,存在一個模闆參數T。T可以是任意的data類型比如int, double什麼的。[T<:Data]是限定T的範圍。T隻能是Data的派生類。

此處我們給T代入一個自定義的類型Payload,如下:

chisel的初級參數化(verilog也可以)

在例化的時候T的類型其實是可以被自動推斷的,是以不需要顯示的寫入。例如:

chisel的初級參數化(verilog也可以)

其中NocRouter的dt參數是new Payload, n參數是2。

三、初級參數化總結

chisel的初級參數化還是非常簡單的。其思路和verilog沒有差別。還是以module級别參數化,這種思維方式是一種自底向下的思維,效率并不能和verilog拉開差距。下一篇開始講講chisel真正的利器進階參數化,如何采用架構級思維将參數效率提升n倍!

繼續閱讀