在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一覽pipeline中所出現(xiàn)的五個(gè)基本要素

Spinal FPGA ? 來(lái)源:Spinal FPGA ? 2023-08-12 11:24 ? 次閱讀

》Stageable、StageableKey stageable、StageableKey是最整個(gè)pipeline中的基本數(shù)據(jù)類(lèi)型元素:

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
}
}

對(duì)于Stageabel,我們可以傳入任何SpinalHDL下面定義的隸屬于Data的類(lèi)型,不同于我們?cè)陔娐防锷粋€(gè)電路對(duì)象:

vala=UInt(8bits)

此時(shí),電路對(duì)象是立即生命存在的,如果我們不對(duì)他進(jìn)行賦值會(huì)報(bào)錯(cuò)。而:

valb=Stageable(UInt(8bits))

此時(shí)b并未真正生成電路對(duì)象,即使不對(duì)他進(jìn)行賦值也并不會(huì)報(bào)錯(cuò)。

對(duì)于StageableKey,字如其名,其主要用作Key使用,用于建立Stageable映射時(shí)的key使用。

》Stage

借用上一篇文章中的圖:

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

Stage主要用于實(shí)現(xiàn)pipeline的功能實(shí)現(xiàn)。那么Stage則定義了這些功能的輸入、輸出:

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

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

以及一些列的內(nèi)部保存變量:

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]()

這些變量暫時(shí)看不懂也沒(méi)關(guān)系,后續(xù)會(huì)通過(guò)例子逐一進(jìn)行講解。通過(guò)這些內(nèi)部變量,pipeline在構(gòu)建電路時(shí)處理Stage之間的依賴(lài)關(guān)系。

》Connection

顧名思義,Connection用于負(fù)責(zé)Stage之間的連接關(guān)系,即其負(fù)責(zé)處理上一級(jí)Stage的output與下一級(jí)Stage的input之間的連接。在Lib中,Connection定義了四種連接關(guān)系:

DIRECT:類(lèi)似一兩個(gè)Stream直接相連

M2S:類(lèi)似于Stream中的M2SPipe,對(duì)valid、payload進(jìn)行打拍輸出

S2M:類(lèi)似于Stream中的S2MPipe,對(duì)于ready進(jìn)行打拍輸出

乍看其實(shí)現(xiàn)你會(huì)發(fā)現(xiàn)其中有好多參數(shù)一時(shí)不知用途,無(wú)妨,先放一放,回頭逐一講解。

》pipeline

Pipeline中核心是一個(gè)build函數(shù)。當(dāng)我們描述完各Stage的功能之后,通過(guò)調(diào)用Pipeline的build函數(shù)即可構(gòu)建整個(gè)的流水線電路,其也是整個(gè)pipelines構(gòu)建的核心,直接上來(lái)看可能會(huì)略覺(jué)麻煩,后面通過(guò)例子一點(diǎn)點(diǎn)來(lái)理解。

》第一個(gè)例子

先有個(gè)概念之后,我們?cè)賮?lái)一個(gè)pipeline的第一個(gè)例子:

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()
}

這個(gè)例子的功能是將Flow data_in打兩拍輸出給data_out,一個(gè)最簡(jiǎn)單的流水線結(jié)構(gòu),不牽涉到任何halt、flush等相關(guān)操作。如果你看不懂,可以先看它生成的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

一眼看去,可能覺(jué)得很怪,有很多疑問(wèn)。比如說(shuō)data_in的valid信號(hào)是如何從stage0傳輸?shù)絪tage1的等等。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19395

    瀏覽量

    230671
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59896
  • Pipeline
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    9377
  • VaR
    VaR
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    11361
  • HDL語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    8942

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

文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    中東展會(huì)一覽

    水處理、電力、環(huán)保產(chǎn)品展(Wetex 2010)---迪拜2010.3.9---2010.3.11---屆石油類(lèi)展會(huì)一覽表:2010年第屆沙特國(guó)際石化技術(shù)博覽會(huì)(Saudi P
    發(fā)表于 02-25 10:05

    PCB設(shè)計(jì)基本要素

    syj工程編寫(xiě)的PCB設(shè)計(jì)基本要素
    發(fā)表于 12-13 14:05

    資料推薦:gatt的句柄一覽

    gatt的句柄一覽
    發(fā)表于 06-12 13:57

    小天線測(cè)試解決方案服務(wù)一覽

    小天線測(cè)試解決方案服務(wù)一覽
    發(fā)表于 09-06 09:51

    形成干擾的基本要素

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

    DMA通道一覽

    DMA通道一覽DMA1通道DMA2通道DMA內(nèi)容詳解DMA的定義直接存儲(chǔ)器存取(Direct MemoryAccess,DMA)是計(jì)算機(jī)科學(xué)中的種內(nèi)存訪問(wèn)技術(shù)。它允許某些電腦內(nèi)部的硬體子系統(tǒng)(電腦
    發(fā)表于 08-12 07:05

    安川伺服輔助功能參數(shù)一覽

    輔助功能一覽表,監(jiān)視模式一覽表,用戶(hù)參數(shù)一覽表,報(bào)警顯示一覽表輔助功能一覽表Fn000 顯示警報(bào)追蹤備份數(shù)據(jù)Fn001 設(shè)定在線自動(dòng)調(diào)諧時(shí)的
    發(fā)表于 09-06 07:10

    出差報(bào)告資料表一覽

    出差報(bào)告資料一覽表 出差報(bào)告資料一覽表科[    簽章]資料1 ?。病 。场 。础 。怠 。陡綀D1 ?。?nbsp;記錄1.錄影帶   
    發(fā)表于 03-01 15:21 ?16次下載

    般繼電器 (Relay)一覽

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

    國(guó)際標(biāo)準(zhǔn)規(guī)格一覽

    國(guó)際標(biāo)準(zhǔn)規(guī)格一覽
    發(fā)表于 04-11 14:30 ?2882次閱讀
    國(guó)際標(biāo)準(zhǔn)規(guī)格<b class='flag-5'>一覽</b>表

    DFT性質(zhì)一覽

    DFT性質(zhì)一覽
    發(fā)表于 07-25 11:41 ?4217次閱讀
    DFT性質(zhì)<b class='flag-5'>一覽</b>表

    SKYLAB 現(xiàn)有WiFi模塊一覽

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

    探頭附件線產(chǎn)品一覽

    探頭附件線產(chǎn)品一覽
    的頭像 發(fā)表于 09-08 15:41 ?900次閱讀
    探頭附件線產(chǎn)品<b class='flag-5'>一覽</b>

    汽車(chē) EMC 問(wèn)題一覽

    汽車(chē) EMC 問(wèn)題一覽
    的頭像 發(fā)表于 11-24 16:44 ?1255次閱讀
    汽車(chē) EMC 問(wèn)題<b class='flag-5'>一覽</b>

    PCB的個(gè)基本要素

    網(wǎng)絡(luò)。同時(shí)PCB板還具有絕緣,隔熱,防潮等功能。 3、PCB的個(gè)基本要素用 01 要素:載板 PCB的載板又稱(chēng)為基
    的頭像 發(fā)表于 01-07 09:30 ?251次閱讀
    主站蜘蛛池模板: 天天干视频网站| 久优草| www天天操| 午夜欧美精品久久久久久久久| 色激情综合网| 中文字幕在线乱码免费毛片| 加勒比视频一区| 9966国产精品视频| 免费的日本网站| 日本黄色一级大片| 网友偷自拍原创区| 99久久99久久| 白嫩少妇激情无码| 国产精品久久久久久久成人午夜| 丁香六月激情综合| 男人女人的免费视频网站| 91在线播放免费不卡无毒| 免费一级毛片在线播放| 日本在线网址| 国产精品福利一区二区亚瑟 | 国产女在线| 免费午夜在线视频| 久久毛片视频| 2022天天干| 在线视频一二三区| 久久国产99| 亚洲国产福利| 色妞妞网| 激情五月综合网| bt天堂电影| 奇米7777| 91大神网址| 资源新版在线天堂| 婷婷丁香亚洲| 美女网站一区二区三区| 国产色婷婷| 天堂在线资源网| 欧美系列在线播放| 高颜值美女啪啪| 色综合久久九月婷婷色综合| 久久综合九色综合精品|