色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

淺析SpinalHDL中Pipeline中的復(fù)位定制

Spinal FPGA ? 來(lái)源:Spinal FPGA ? 2024-03-17 17:31 ? 次閱讀

之前有系列文章介紹了SpinalHDL中Pipeline的使用,最近在一個(gè)功能模塊中真實(shí)的使用了這個(gè)lib。雖然在使用上基于Flow/Stream的抽象已基本滿足大多數(shù)使用場(chǎng)景,但在FPGA端有時(shí)為了優(yōu)化時(shí)序往往不得不做一些邏輯打散,此時(shí)發(fā)現(xiàn)Pipeline中的標(biāo)準(zhǔn)化組件就有點(diǎn)難以滿足需求了。

》舉個(gè)例子

考慮下面的一個(gè)使用pipeline簡(jiǎn)單的邏輯代碼:

d868be28-e2d2-11ee-a297-92fbcf53809c.png

這是一個(gè)很簡(jiǎn)單的邏輯,port_in打兩拍輸出至port_out。邏輯里有這樣一個(gè)動(dòng)作需求:

當(dāng)port_out.valid為高且port_out.data1為true時(shí),checked為真

這里checked輸出為一個(gè)組合邏輯,如果外部在使用時(shí)還需要其他許多類(lèi)似的條件那么就有可能會(huì)對(duì)時(shí)序收斂帶來(lái)困難了(這里僅用來(lái)舉個(gè)例子闡述這種類(lèi)似的需求)。

那么也許想當(dāng)然的將checked的判斷條件聲明一個(gè)Stageable變量在stage1中完成判斷,stage2中直接使用,就像這么來(lái)做:

d8721ee6-e2d2-11ee-a297-92fbcf53809c.png

如此,我們將組合邏輯前移,checked輸出為時(shí)序邏輯。看似完美是吧~

然而,如果你在VCS仿真器仿真你會(huì)發(fā)現(xiàn),checked可能剛一上電就是高電平導(dǎo)致后續(xù)邏輯異常。其原因就是cond_matched沒(méi)有賦初值。

在pipeline的架構(gòu)里,在Connection中實(shí)現(xiàn)了不同Stage之間的連接,其中也包含了時(shí)序協(xié)議的實(shí)現(xiàn)。以這里我們調(diào)用的M2S為例:

d87ce394-e2d2-11ee-a297-92fbcf53809c.png

其將valid聲明為Reg并賦給初始值False,然而對(duì)于payload僅聲明為寄存器并未賦初值。

由于有valid信號(hào)指示,paylaod不賦初值無(wú)可厚非,奔著控制路徑添加復(fù)位,數(shù)據(jù)路徑不添加復(fù)位的原則,這里并沒(méi)有問(wèn)題。然而我們?cè)卺槍?duì)一些時(shí)序優(yōu)化的場(chǎng)景需要將部分paylaod賦初值,這里就不太符合我們的需求了。

》M2SExt

既然滿足不了需求,那就擴(kuò)展。這里的實(shí)現(xiàn)可能略顯丑陋,但能解決問(wèn)題。Stageable類(lèi)型在Pipeline中例化為對(duì)象時(shí)會(huì)以我們聲明的Stageable變量名作為結(jié)尾,我們只需在M2S的on實(shí)現(xiàn)基礎(chǔ)上添加匹配規(guī)則即可。由于M2S是Class不可繼承,這里重新定義了一個(gè)M2SExt來(lái)實(shí)現(xiàn):

caseclassM2SExt(collapse: Boolean= true,
holdPayload: Boolean= false,
flushPreserveInput: Boolean= false) extendsConnectionLogic {
val initMap = LinkedHashMap[String, Data]()

def addInitValue[T <: Data](target: Stageable[T], initValue: T) = {
????initMap.update(target.getName(), initValue)
??}

??def on(m: ConnectionPoint,
?????????s: ConnectionPoint,
?????????flush: Bool, flushNext: Bool, flushNextHit: Bool,
?????????throwHead: Bool, throwHeadHit: Bool) = new?Area {

????s.valid.setAsReg() init (False)
????s.payload.foreach(_.setAsReg())


????m.ready match {
??????case?null?=>
s.valid := m.valid
(s.payload, m.payload).zipped.foreach(_ := _)
caser=>{
if(flush != null&& flushPreserveInput) s.valid clearWhen (flush)
if(throwHead != null) s.valid clearWhen (throwHead)
when(r) {
s.valid := m.valid
}
when(if(holdPayload) m.valid && r elser) {
(s.payload, m.payload).zipped.foreach(_ := _)
}
}
}


if(flush != null&& !flushPreserveInput) s.valid clearWhen (flush)
if(flushNext != null&& !flushPreserveInput) s.valid clearWhen (flushNext && s.ready)
if(flushNextHit != null) flushNextHit := True

// assert(!(flushNext != null && flushPreserveInput))

if(m.ready != null) {
m.ready := s.ready
if(collapse) m.ready setWhen (!s.valid)
}

Component.current.addPrePopTask(()=>{
s.payload.foreach(paylaod=>{
initMap.foreach { case(signalEndName, initValue) =>{
if(paylaod.getName().endsWith(signalEndName)) {
paylaod.init(initValue)
}
}
}
})

})
}

這里為M2S定義了一個(gè)addInitValue方法,從而能使得我們能夠?yàn)槟硞€(gè)ConnectionLogic中制定的Stageable映射電路對(duì)象添加復(fù)位值。在on實(shí)現(xiàn)函數(shù)最后通過(guò)添加PrePopTask來(lái)遍歷搜索當(dāng)前ConnectionLogic中對(duì)應(yīng)的payload并賦初始值。

最終我們可以在實(shí)現(xiàn)里如此:

d8817490-e2d2-11ee-a297-92fbcf53809c.png

stage1To2Connection通過(guò)調(diào)用addInitValue來(lái)為cond_matched添加復(fù)位值,以此滿足需求:

d8a639ec-e2d2-11ee-a297-92fbcf53809c.png

pipe_stage2_cond_matched添加復(fù)位控制。




審核編輯:劉清

聲明:本文內(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)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21790

    瀏覽量

    605089
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5363

    瀏覽量

    120921
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1019

    瀏覽量

    83878
  • VCS
    VCS
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    9628
  • Pipeline
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    9379

原文標(biāo)題:審視下Pipeline中的復(fù)位定制

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SpinalHDL如何快速地實(shí)現(xiàn)總線連接

    教你在SpinalHDL總線連接時(shí)針對(duì)總線的部分信號(hào)位寬不同時(shí)的如何快速地實(shí)現(xiàn)總線連接。
    發(fā)表于 11-28 15:48 ?882次閱讀

    關(guān)于SpinalHDL的驗(yàn)證覆蓋率收集簡(jiǎn)單說(shuō)明

    在做RTL仿真驗(yàn)證時(shí),覆蓋率收集往往是我們?cè)隍?yàn)證需要注意的地方,本篇就SpinalHDL的驗(yàn)證覆蓋率收集做一個(gè)簡(jiǎn)單說(shuō)明。sbt配置在SpinalHDL里進(jìn)行仿真驗(yàn)證時(shí),我們的待測(cè)試
    發(fā)表于 06-24 15:56

    談?wù)?b class='flag-5'>SpinalHDLStreamCCByToggle組件設(shè)計(jì)不足的地方

    到ack為低電平即可處理新的任務(wù)。  寫(xiě)在最后  關(guān)于跨時(shí)鐘域處理在處理上相對(duì)來(lái)講還是一個(gè)易錯(cuò)點(diǎn),其處理也是新學(xué)者需要好好把握的。SpinalHDL的源代碼還是很值得一讀的。一方面
    發(fā)表于 06-30 15:11

    聊聊SpinalHDL的FIFO

    “痛苦”的事情。SpinalHDL關(guān)于RAM的抽象與思考在前文已提到過(guò),這里不再做額外贅述。那么同樣,對(duì)于FIFO這類(lèi)電路的出口時(shí)序和入口時(shí)序,其本質(zhì)上也都屬于握手的一種,這一點(diǎn)也就體現(xiàn)了
    發(fā)表于 06-30 15:28

    SpinalHDL關(guān)于casez的使用

    SpinalHDL的switch在之前的文章中曾提到過(guò)SpinalHDLswitch的使用:通常情況下,switch對(duì)應(yīng)著我們?nèi)粘erilog代碼
    發(fā)表于 07-06 10:59

    SpinalHDL仿真信號(hào)的驅(qū)動(dòng)實(shí)現(xiàn)

    阻塞并沒(méi)有明確的界定,而至于仿真器內(nèi)部的時(shí)隙調(diào)度,個(gè)人一直是看過(guò)明白,看后即忘。為了拋開(kāi)這個(gè)煩惱,個(gè)人使用下來(lái)的體驗(yàn)就是SpinalHDL的測(cè)試代碼對(duì)于信號(hào)的驅(qū)動(dòng)都是立即生效的,類(lèi)似于阻塞賦值
    發(fā)表于 07-27 14:37

    定制的STMF446RE MCU復(fù)位問(wèn)題求解

    大家好,我們?cè)?b class='flag-5'>定制板上使用 STM32F446RE MCU。我們附上了復(fù)位引腳的原理圖,我們可以看到 RESET 引腳變高或變低,但在 IDE 未觀察到 MCU 復(fù)位。我們?cè)?Mai
    發(fā)表于 02-03 09:04

    SpinalHDL里時(shí)鐘域中的定制與命名

    聊一聊在SpinalHDL里時(shí)鐘域中時(shí)鐘的定制與命名。 相較于Verilog,在SpinalHDL里,其對(duì)時(shí)鐘域有著更細(xì)致的描述,從而也能夠更精細(xì)的控制和描述。而對(duì)于時(shí)鐘域,我們往往關(guān)系的是: 時(shí)鐘
    的頭像 發(fā)表于 03-22 10:14 ?2155次閱讀

    SpinalHDL的SpiMasterCtrl模塊做使用說(shuō)明詳解

    最近偶爾需要用到SPI模塊。正巧看到SpinalHDL中所提供的SPI-Master設(shè)計(jì)。看完之后尤為佩服如此簡(jiǎn)潔而又全面的設(shè)計(jì)方式。本篇不對(duì)SPI協(xié)議進(jìn)行講解,僅針對(duì)SpinalHDL的SpiMasterCtrl模塊做使用說(shuō)
    的頭像 發(fā)表于 04-19 09:58 ?3753次閱讀

    SpinalHDL的對(duì)應(yīng)關(guān)系及聲明形式

    針對(duì)SpinalHDL的兩大類(lèi)型Reg、Wire,來(lái)梳理下在SpinalHDL的對(duì)應(yīng)關(guān)系及聲明形式。
    的頭像 發(fā)表于 07-03 11:02 ?1596次閱讀

    SpinalHDLBundle數(shù)據(jù)類(lèi)型的轉(zhuǎn)換

    SpinalHDLBundle與SystemVerilog的packed struct很像,在某些場(chǎng)景下,與普通數(shù)據(jù)類(lèi)型之間的連接賦值可以通過(guò)asBits,assignFromBits來(lái)實(shí)現(xiàn)。
    的頭像 發(fā)表于 10-17 09:51 ?1347次閱讀

    SpinalHDL BlackBox時(shí)鐘與復(fù)位

    SpinalHDL中使用之前已有的Verilog等代碼的時(shí)候需要將這些代碼包在一個(gè)BlackBox里面,但是如果這些代碼里面有時(shí)鐘和復(fù)位,我們需要怎么將時(shí)鐘和復(fù)位端口和SpinalHDL
    的頭像 發(fā)表于 05-04 11:13 ?841次閱讀
    <b class='flag-5'>SpinalHDL</b> BlackBox時(shí)鐘與<b class='flag-5'>復(fù)位</b>

    SpinalHDLpipeline的設(shè)計(jì)思路

    如果你曾看過(guò)VexRSICV的設(shè)計(jì),對(duì)于從事邏輯設(shè)計(jì)的你會(huì)驚訝從未想過(guò)邏輯設(shè)計(jì)還能這么來(lái)做。針對(duì)VexRSICV所衍生出的pipeline Lib,該系列會(huì)對(duì)pipeline進(jìn)行一次梳理。誠(chéng)如之前一篇博客曾講,這是“勇者的游戲”。
    的頭像 發(fā)表于 08-16 15:11 ?994次閱讀
    <b class='flag-5'>SpinalHDL</b>里<b class='flag-5'>pipeline</b>的設(shè)計(jì)思路

    PipelinethrowIt的用法

    字如其名,來(lái)看下PipelinethrowIt的用法,是怎么個(gè)丟棄方式。
    的頭像 發(fā)表于 10-21 16:24 ?591次閱讀
    <b class='flag-5'>Pipeline</b><b class='flag-5'>中</b>throwIt的用法

    什么是pipeline?Go構(gòu)建流數(shù)據(jù)pipeline的技術(shù)

    本文介紹了在 Go 構(gòu)建流數(shù)據(jù)pipeline的技術(shù)。 處理此類(lèi)pipeline的故障很棘手,因?yàn)?b class='flag-5'>pipeline
    的頭像 發(fā)表于 03-11 10:16 ?653次閱讀
    主站蜘蛛池模板: 男gv纯肉免费视频| 亚洲成av人影院| 免费三级播放器| 欧美高清18| 日韩亚洲视频一区二区三区| 国产精品亚洲二线在线播放| 国产精品 日韩精品 欧美| 国产内射AV徐夜夜| 精品夜夜澡人妻无码AV| 久久全国免费久久青青小草| 免费一级毛片在线观看| 日本九九热在线观看官网| 无码专区无码专区视频网网址 | brazzers情欲狂欢| 北原多香子qvod| 99精品免费久久久久久久久蜜桃| AV天堂AV亚洲啪啪久久无码| 大岛优香久久中文字幕| 国产午夜理论片YY8840Y| 久久久久亚洲精品影视| 欧美精品华人在线| 睡觉被偷偷进入magnet| 亚洲免费视频日本一区二区| 在线免费公开视频| 一本道dvd久久综合高清免费| 2017必看无码作品| 风车动漫(p)_在线观看官网| 狠狠干.in| 男人免费网站| 五花大绑esebdsm国产| 欲香欲色天天影视大全| 超碰国产视频免费播放| 河南老太XXXXXHD| 女人高潮时一吸一夹| 视频一区亚洲视频无码| 一个人免费观看完整视频日本| beeg xxx日本老师| 国产在线精彩亚洲| 欧美激情视频一区二区| 亚洲bt区| gogogo在线观看|