1. 程式人生 > >Chisel3 - bind - Wire, Reg, MemPort

Chisel3 - bind - Wire, Reg, MemPort

listt wire -s 種類型 種類 pan ada dbi actor

https://mp.weixin.qq.com/s/AxYlRtAXjd55eoGX5l1W-A 模塊(Module)從輸入端口(input ports)接收輸入,經過內部實現的轉換邏輯,從輸出端口(output ports)輸出。 在Chisel3中,模塊的輸入輸出端口,通過IO(new Bundle{...})的形式定義,其中定義了各種類型的數據變量。在實現模塊內部轉換邏輯的時候,也需要使用到各種類型的數據變量。這些變量如何加入到hardware graph中呢?就是通過WireBinding和RegBinding等。 ?技術分享圖片? 1. WireBinding 定義如下: case class WireBinding(enclosure: UserModule) extends ConstrainedBinding
a. Wire() 通過Wire()對一個變量進行Wire綁定,實例如下: ?技術分享圖片? Wire繼承自WireFactory: object Wire extends WireFactory b. WireFactory ?技術分享圖片? a. 生成一個t的克隆x; b. 對x進行綁定:x.bind(WireBinding(Builder.forcedUserModule)) c. 綁定的對象為WireBinding:WireBinding(Builder.forcedUserModule) d. Builder.forcedUserModule可以理解為當前模塊; 2. RegBinding
定義如下: case class RegBinding(enclosure: UserModule) extends ConstrainedBinding a. Reg() 通過Reg()對變量進行寄存器綁定,實例如下: ?技術分享圖片? ?技術分享圖片? a. 生成一個t的可能reg; b. 對reg進行綁定:reg.bind(RegBinding(Builder.forcedUserModule)) c. 綁定的對象為RegBinding: RegBinding(Builder.forcedUserModule) d. Builder.forcedUserModule可以理解為當前模塊;
3. MemPortBinding Mem中的每一個元素,在使用時都會使用MemPortBinding進行綁定。 a. 使用實例如下: ?技術分享圖片? b. 創建Mem()時並不會綁定 ?技術分享圖片? Mem()調用實現如下: ?技術分享圖片? Mem類繼承自MemBase: ?技術分享圖片? MemBase在創建時並不會進行綁定; c. 使用時進行綁定 如:stack_mem(sp) := io.dataIn 中,stack_mem(sp)會調用方法: ?技術分享圖片? 進而調用makePort進行綁定: ?技術分享圖片?

Chisel3 - bind - Wire, Reg, MemPort