桌球操作是一種常見的數據流控制技巧,主要用於流水線式算法中,以實現數據的無縫緩衝與處理。其基本原理是利用兩個並行的數據緩衝區,一個用於讀取數據,另一個用於寫入數據。在一個緩衝區滿後,切換到另一個緩衝區進行讀寫操作,使數據處理模組可以連續不斷地從緩衝區讀取數據,同時將新的數據寫入另一個緩衝區。
桌球操作的存儲單元可以是雙口RAM(DPRAM)、單口RAM(SPRAM)、FIFO等。在每個緩衝周期,輸入數據流被等時分配到兩個數據緩衝區。例如,在第一個緩衝周期,數據流被快取到數據緩衝模組1;在第二個緩衝周期,數據流被快取到數據緩衝模組2,同時第一個緩衝區的數據被送到數據流運算處理模組;在第三個緩衝周期,數據流再次被快取到第一個緩衝區,第二個緩衝區的數據繼續被處理。通過這種方式,輸入和輸出數據流連續不斷,沒有停頓。
桌球操作的套用場景包括視頻圖像處理、高速數據傳輸等,涉及大量數據的實時傳輸。其邏輯相對簡單,易於在FPGA設計中實現和驗證。桌球操作的快取區可以是雙口BRAM、也可以是DDR中的記憶體區域。
與FIFO(先進先出)佇列相比,桌球操作更適合於非順序讀取數據的場景,如隨機讀取數據、改變數據輸出順序等。例如,按行寫入的數據快取兩行,變成2*2的塊數據順序依次輸出,這時使用基於BRAM的桌球操作更易於控制。