91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

淺析SpinalHDL中Pipeline中的復位定制

Spinal FPGA ? 來源:Spinal FPGA ? 2024-03-17 17:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前有系列文章介紹了SpinalHDL中Pipeline的使用,最近在一個功能模塊中真實的使用了這個lib。雖然在使用上基于Flow/Stream的抽象已基本滿足大多數使用場景,但在FPGA端有時為了優化時序往往不得不做一些邏輯打散,此時發現Pipeline中的標準化組件就有點難以滿足需求了。

》舉個例子

考慮下面的一個使用pipeline簡單的邏輯代碼:

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

這是一個很簡單的邏輯,port_in打兩拍輸出至port_out。邏輯里有這樣一個動作需求:

當port_out.valid為高且port_out.data1為true時,checked為真

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

那么也許想當然的將checked的判斷條件聲明一個Stageable變量在stage1中完成判斷,stage2中直接使用,就像這么來做:

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

如此,我們將組合邏輯前移,checked輸出為時序邏輯??此仆昝朗前伞?

然而,如果你在VCS仿真器仿真你會發現,checked可能剛一上電就是高電平導致后續邏輯異常。其原因就是cond_matched沒有賦初值。

在pipeline的架構里,在Connection中實現了不同Stage之間的連接,其中也包含了時序協議的實現。以這里我們調用的M2S為例:

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

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

由于有valid信號指示,paylaod不賦初值無可厚非,奔著控制路徑添加復位,數據路徑不添加復位的原則,這里并沒有問題。然而我們在針對一些時序優化的場景需要將部分paylaod賦初值,這里就不太符合我們的需求了。

》M2SExt

既然滿足不了需求,那就擴展。這里的實現可能略顯丑陋,但能解決問題。Stageable類型在Pipeline中例化為對象時會以我們聲明的Stageable變量名作為結尾,我們只需在M2S的on實現基礎上添加匹配規則即可。由于M2S是Class不可繼承,這里重新定義了一個M2SExt來實現:

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定義了一個addInitValue方法,從而能使得我們能夠為某個ConnectionLogic中制定的Stageable映射電路對象添加復位值。在on實現函數最后通過添加PrePopTask來遍歷搜索當前ConnectionLogic中對應的payload并賦初始值。

最終我們可以在實現里如此:

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

stage1To2Connection通過調用addInitValue來為cond_matched添加復位值,以此滿足需求:

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

pipe_stage2_cond_matched添加復位控制。




審核編輯:劉清

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

    關注

    1646

    文章

    22054

    瀏覽量

    618821
  • 寄存器
    +關注

    關注

    31

    文章

    5435

    瀏覽量

    124610
  • 仿真器
    +關注

    關注

    14

    文章

    1039

    瀏覽量

    85442
  • VCS
    VCS
    +關注

    關注

    0

    文章

    80

    瀏覽量

    9934
  • Pipeline
    +關注

    關注

    0

    文章

    29

    瀏覽量

    9700

原文標題:審視下Pipeline中的復位定制

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SpinalHDL如何快速地實現總線連接

    教你在SpinalHDL總線連接時針對總線的部分信號位寬不同時的如何快速地實現總線連接。
    發表于 11-28 15:48 ?1084次閱讀

    關于SpinalHDL的驗證覆蓋率收集簡單說明

    在做RTL仿真驗證時,覆蓋率收集往往是我們在驗證需要注意的地方,本篇就SpinalHDL的驗證覆蓋率收集做一個簡單說明。sbt配置在SpinalHDL里進行仿真驗證時,我們的待測試
    發表于 06-24 15:56

    談談SpinalHDLStreamCCByToggle組件設計不足的地方

    到ack為低電平即可處理新的任務?! 懺谧詈蟆 £P于跨時鐘域處理在處理上相對來講還是一個易錯點,其處理也是新學者需要好好把握的。SpinalHDL的源代碼還是很值得一讀的。一方面
    發表于 06-30 15:11

    聊聊SpinalHDL的FIFO

    “痛苦”的事情。SpinalHDL關于RAM的抽象與思考在前文已提到過,這里不再做額外贅述。那么同樣,對于FIFO這類電路的出口時序和入口時序,其本質上也都屬于握手的一種,這一點也就體現了
    發表于 06-30 15:28

    SpinalHDL關于casez的使用

    SpinalHDL的switch在之前的文章中曾提到過SpinalHDLswitch的使用:通常情況下,switch對應著我們日常Verilog代碼
    發表于 07-06 10:59

    SpinalHDL仿真信號的驅動實現

    阻塞并沒有明確的界定,而至于仿真器內部的時隙調度,個人一直是看過明白,看后即忘。為了拋開這個煩惱,個人使用下來的體驗就是SpinalHDL的測試代碼對于信號的驅動都是立即生效的,類似于阻塞賦值
    發表于 07-27 14:37

    定制的STMF446RE MCU復位問題求解

    大家好,我們在定制板上使用 STM32F446RE MCU。我們附上了復位引腳的原理圖,我們可以看到 RESET 引腳變高或變低,但在 IDE 未觀察到 MCU 復位。我們在 Mai
    發表于 02-03 09:04

    SpinalHDL里時鐘域中的定制與命名

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

    SpinalHDL的SpiMasterCtrl模塊做使用說明詳解

    最近偶爾需要用到SPI模塊。正巧看到SpinalHDL中所提供的SPI-Master設計??赐曛笥葹榕宸绱撕啙嵍秩娴脑O計方式。本篇不對SPI協議進行講解,僅針對SpinalHDL的SpiMasterCtrl模塊做使用說
    的頭像 發表于 04-19 09:58 ?4001次閱讀

    SpinalHDL的對應關系及聲明形式

    針對SpinalHDL的兩大類型Reg、Wire,來梳理下在SpinalHDL的對應關系及聲明形式。
    的頭像 發表于 07-03 11:02 ?1921次閱讀

    SpinalHDLBundle數據類型的轉換

    SpinalHDLBundle與SystemVerilog的packed struct很像,在某些場景下,與普通數據類型之間的連接賦值可以通過asBits,assignFromBits來實現。
    的頭像 發表于 10-17 09:51 ?1642次閱讀

    SpinalHDL BlackBox時鐘與復位

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

    SpinalHDLpipeline的設計思路

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

    PipelinethrowIt的用法

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

    什么是pipeline?Go構建流數據pipeline的技術

    本文介紹了在 Go 構建流數據pipeline的技術。 處理此類pipeline的故障很棘手,因為pipeline
    的頭像 發表于 03-11 10:16 ?1127次閱讀
    主站蜘蛛池模板: 亚洲成人精品在线 | 老师受年下高h男 | 欧美日韩一区二区不卡 | 国产亚洲情侣久久精品 | 久久偷窥视频 | 8050网午夜一级毛片免费不卡 | 久久久久国产免费 | 性欧美高清极品猛交 | 狠狠五月深爱婷婷网 | 很很鲁在线视频播放影院 | 日日夜夜天天人人 | 国产精品日韩欧美亚洲另类 | 男女性生动态免费视频 | 五月婷婷六月丁香 | 最近的中文字幕免费动漫视频 | 色视频在线 | 午夜逼逼 | 午夜高清免费在线观看 | 在线国产资源 | 91破处视频 | 国产美女一区二区三区 | aⅴ一区二区三区 | 成人午夜大片免费7777 | 最近2018免费中文字幕视频 | 天天爽夜夜爽精品免费 | 97色综合| 天天干天天操天天爱 | 色爱综合网 | 午夜一区二区三区 | 丁香婷婷啪啪 | 国外免费精品视频在线观看 | 看全色黄大色大片免费 | 狠狠色丁香婷婷久久 | 天堂8中文在线最新版在线 天堂8资源8在线 | 久久综合图片 | 国产精品色婷婷在线观看 | www.热| 婷婷射| 欧美a色| 白嫩美女在线啪视频观看 | ssswww日本免费网站片 |