精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一覽pipeline中所出現的五個基本要素

Spinal FPGA ? 來源:Spinal FPGA ? 2023-08-12 11:24 ? 次閱讀

》Stageable、StageableKey stageable、StageableKey是最整個pipeline中的基本數據類型元素:

object Stageable{
def apply[T <: Data](gen : => T) = new Stageable(gen)
def apply[T <: Data](gen : HardType[T]) = new Stageable(gen.craft())
}

class Stageable[T <: Data](gen : => T) extends HardType(gen) with Nameable {

}
case class StageableOffset(val value : Any)
object StageableOffsetNone extends StageableOffset(null)
case class StageableKey(stageable: Stageable[Data], key : Any){
override def toString = {
var name = stageable.getName()
if(key != null) name = name + "_" + key
name
}
}

對于Stageabel,我們可以傳入任何SpinalHDL下面定義的隸屬于Data的類型,不同于我們在電路里生命一個電路對象:

vala=UInt(8bits)

此時,電路對象是立即生命存在的,如果我們不對他進行賦值會報錯。而:

valb=Stageable(UInt(8bits))

此時b并未真正生成電路對象,即使不對他進行賦值也并不會報錯。

對于StageableKey,字如其名,其主要用作Key使用,用于建立Stageable映射時的key使用。

》Stage

借用上一篇文章中的圖:

b0b125e2-38b3-11ee-9e74-dac502259ad0.jpg

Stage主要用于實現pipeline的功能實現。那么Stage則定義了這些功能的輸入、輸出:

val input = new{
val valid = Bool()
varready : Bool = null
}

val output = newArea {
val valid = Bool()
varready : Bool = null
}

以及一些列的內部保存變量:

val arbitration = new{
varisRemoved : Bool = null
varisFlushed : Bool = null
varisThrown : Bool = null
varisForked : Bool = null
varisFlushingNext : Bool = null
varisFlushingRoot : Bool = null
varisHalted : Bool = null
varisHaltedByOthers : Bool = null
varpropagateReady = false
}

val request = new{
val halts = ArrayBuffer[Bool]()
val throws = ArrayBuffer[Bool]()
val throwsRoot = ArrayBuffer[Bool]()
val forks = ArrayBuffer[Bool]()
val spawns = ArrayBuffer[Bool]()
val flush = ArrayBuffer[Bool]()
val flushRoot = ArrayBuffer[Bool]()
val flushNext = ArrayBuffer[Bool]()
}

val stageableToData = mutable.LinkedHashMap[StageableKey, Data]()
val stageableOverloadedToData = mutable.LinkedHashMap[StageableKey, Data]()
val stageableResultingToData = mutable.LinkedHashMap[StageableKey, Data]()
val stageableTerminal = mutable.LinkedHashSet[StageableKey]()

這些變量暫時看不懂也沒關系,后續會通過例子逐一進行講解。通過這些內部變量,pipeline在構建電路時處理Stage之間的依賴關系。

》Connection

顧名思義,Connection用于負責Stage之間的連接關系,即其負責處理上一級Stage的output與下一級Stage的input之間的連接。在Lib中,Connection定義了四種連接關系:

DIRECT:類似一兩個Stream直接相連

M2S:類似于Stream中的M2SPipe,對valid、payload進行打拍輸出

S2M:類似于Stream中的S2MPipe,對于ready進行打拍輸出

乍看其實現你會發現其中有好多參數一時不知用途,無妨,先放一放,回頭逐一講解。

》pipeline

Pipeline中核心是一個build函數。當我們描述完各Stage的功能之后,通過調用Pipeline的build函數即可構建整個的流水線電路,其也是整個pipelines構建的核心,直接上來看可能會略覺麻煩,后面通過例子一點點來理解。

》第一個例子

先有個概念之后,我們再來一個pipeline的第一個例子:

caseclassdemo() extendsComponent{
val io=newBundle{
val data_in=slave Flow(UInt(8bits))
val data_out=master Flow(UInt(8bits))
}
noIoPrefix()
val pip=newPipeline{
val paylaod=Stageable(UInt(8bits))
val stage0=newStage{
importinternals._
input.valid:=io.data_in.valid
this(paylaod):=io.data_in.payload
}
val stage1=newStage(Connection.M2S())
val stage2=newStage(Connection.M2S()){
io.data_out.valid:=internals.output.valid
io.data_out.payload:=this(paylaod)
}
}
pip.build()
}

這個例子的功能是將Flow data_in打兩拍輸出給data_out,一個最簡單的流水線結構,不牽涉到任何halt、flush等相關操作。如果你看不懂,可以先看它生成的RTL代碼:

moduledemo (
input data_in_valid,
input [7:0] data_in_payload,
output data_out_valid,
output [7:0] data_out_payload,
input clk,
input reset
);

reg[7:0] pip_stage1_paylaod;
reg[7:0] pip_stage2_paylaod;
wire[7:0] pip_stage0_paylaod;
wirepip_stage0_valid;
regpip_stage1_valid;
regpip_stage2_valid;

assignpip_stage0_valid = data_in_valid;
assignpip_stage0_paylaod = data_in_payload;
assigndata_out_valid = pip_stage2_valid;
assigndata_out_payload = pip_stage2_paylaod;
always@(posedge clk or posedge reset) begin
if(reset) begin
pip_stage1_valid <= 1'b0;
??????pip_stage2_valid <= 1'b0;
????end?else begin
??????pip_stage1_valid <= pip_stage0_valid;
??????pip_stage2_valid?<= pip_stage1_valid;
????end
??end

??always @(posedge clk) begin
????pip_stage1_paylaod <= pip_stage0_paylaod;
????pip_stage2_paylaod?<= pip_stage1_paylaod;
??end


endmodule

一眼看去,可能覺得很怪,有很多疑問。比如說data_in的valid信號是如何從stage0傳輸到stage1的等等。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19165

    瀏覽量

    229131
  • RTL
    RTL
    +關注

    關注

    1

    文章

    385

    瀏覽量

    59703
  • Pipeline
    +關注

    關注

    0

    文章

    28

    瀏覽量

    9345
  • VaR
    VaR
    +關注

    關注

    0

    文章

    38

    瀏覽量

    11316
  • HDL語言
    +關注

    關注

    0

    文章

    46

    瀏覽量

    8910

原文標題:pipeline高端玩法(二)——成員一覽

文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    中東展會一覽

    水處理、電力、環保產品展(Wetex 2010)---迪拜2010.3.9---2010.3.11---屆石油類展會一覽表:2010年第屆沙特國際石化技術博覽會(Saudi P
    發表于 02-25 10:05

    PCB設計基本要素

    syj工程編寫的PCB設計基本要素
    發表于 12-13 14:05

    labview快捷鍵一覽

    labview快捷鍵一覽
    發表于 08-04 14:28

    資料推薦:gatt的句柄一覽

    gatt的句柄一覽
    發表于 06-12 13:57

    小天線測試解決方案服務一覽

    小天線測試解決方案服務一覽
    發表于 09-06 09:51

    形成干擾的基本要素

    形成干擾的基本要素切斷干擾傳播路徑的常用措施提高敏感器件的抗干擾性能
    發表于 02-05 06:26

    DMA通道一覽

    DMA通道一覽DMA1通道DMA2通道DMA內容詳解DMA的定義直接存儲器存取(Direct MemoryAccess,DMA)是計算機科學中的種內存訪問技術。它允許某些電腦內部的硬體子系統(電腦
    發表于 08-12 07:05

    安川伺服輔助功能參數一覽

    輔助功能一覽表,監視模式一覽表,用戶參數一覽表,報警顯示一覽表輔助功能一覽表Fn000 顯示警報追蹤備份數據Fn001 設定在線自動調諧時的
    發表于 09-06 07:10

    出差報告資料表一覽

    出差報告資料一覽表 出差報告資料一覽表科[    簽章]資料1  2  3  4  5  6附圖1  2 記錄1.錄影帶   
    發表于 03-01 15:21 ?16次下載

    般繼電器 (Relay)一覽

    般繼電器 (Relay)一覽
    發表于 11-26 11:56 ?40次下載

    國際標準規格一覽

    國際標準規格一覽
    發表于 04-11 14:30 ?2865次閱讀
    國際標準規格<b class='flag-5'>一覽</b>表

    DFT性質一覽

    DFT性質一覽
    發表于 07-25 11:41 ?4185次閱讀
    DFT性質<b class='flag-5'>一覽</b>表

    SKYLAB 現有WiFi模塊一覽

    WiFi模塊一覽
    發表于 07-27 16:42 ?10次下載

    探頭附件線產品一覽

    探頭附件線產品一覽
    的頭像 發表于 09-08 15:41 ?825次閱讀
    探頭附件線產品<b class='flag-5'>一覽</b>

    汽車 EMC 問題一覽

    汽車 EMC 問題一覽
    的頭像 發表于 11-24 16:44 ?1111次閱讀
    汽車 EMC 問題<b class='flag-5'>一覽</b>