乒乓操作(Ping-Pong)的理解:为什么是另一种pipeline?
1.乒乓操作的原理
? ? ? ? 乒乓操作用于數據流控制的處理技巧。
? ? ? ? 在兩個功能塊(function block)對接時,由于瞬時數據率的差異(如block A的寫數據頻率為200Mhz,而block B的讀數據頻率為50Mhz),或數據順序的差異(如block A發送的數據為順序發送,block B接收數據的順序為逆序接收,即從最后一個字節開始接收)等原因,導致這兩個模塊不能同時工作。為了提高電路的數據處理效能,可以用ping-pong buffer結構連接這兩個模塊,讓它們能夠同時工作,本質上也是用面積換速度的思想。
2.處理流程
? ? ? ? 如下圖,假設block A和block B以相同的時鐘頻率分別對SPRAM進行數據的讀寫操作。若只有一個SPRAM,由于其特性在任意時刻只能進行讀或寫,不能同時進行,所以block A和block B在任意時刻總有一方是空閑狀態。在這種情況下,也可以通過將SPRAM換成雙口RAM同時實現讀寫操作,但是如果block B的功能要求其必須從block A的最后一個數據開始接收,那么即使換成雙口RAM后顯然也需要等待。
? ? ????????????????? ? ?
? ? ? ? ?而在加入兩個buffer后,模塊A、B輪流對兩個buffer進行讀、寫,這樣這兩個模塊就能同時工作了。如下,block A先往其中的一個SPRAM中寫入數據,寫完后block B從中將數據讀出,同時block A又開始向另一個SPRAM中寫入數據。這樣,只有在第一段block A寫數據的時間內,block B是空閑狀態,其它時間內,兩個模塊都是同時工作的。
???????????????????????????????
????????乒乓操作可以看成是另一種形式的流水線技術,不同的是,在兩個block之間使用的是兩個或者多個的buffer進行切割,是function block級的pipeline。而傳統的pipeline是使用寄存器對組合邏輯進行切割,是cycle級的操作。
3.ping-pong速率控制
? ? ? ? 通常情況下,A與B的讀寫速率是不同的。如A的寫速率為50MHz,而B的讀速率為200MHz。如果還用上述的方法,單純地插入兩個buffer,會導致block A還沒將第二個SPRAM寫完,block B就要開始讀第二個SPRAM中的數據了。
? ? ? ? 這種情況下,可以用wptr/rptr指針來控制A/B的操作速率,類似于FIFO的空滿判斷指針。
??????????????????????????????????????
? ? ? ? ?B通過wptr與rptr的比較,得知某個SPRAM中的數據已經準備好,然后才將其讀出。而A得到某個SPRAM的數據為空時,就往里面寫數據,這樣就解決了速率不匹配的問題。
4.Ping-Pong級聯
? ? ? ? 剛才討論的僅僅是兩個block之間的連接。當有多個function block進行連接時,可以在每兩級之間插入一個ping-pong buffer結構,將它們一級一級連接起來,如下圖所示。
???????????????????????
?5.多個buffer的ping-pong
? ? ? ? 當block A和block B之間的速率差較高時,可以使用多個buffer構成的ping-pong結構,如下圖所示。
????????????????????????????????????????
?
?
?
總結
以上是生活随笔為你收集整理的乒乓操作(Ping-Pong)的理解:为什么是另一种pipeline?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从文档中提取关键字
- 下一篇: 【21-23】SKG 2023『未来之星