一個全流水線的設計理論上每拍都會往下走,為什麼需要FIFO/buffer來存一些數據呢?因為需要用FIFO來掩蓋(cover)延遲(latency),比如有如下幾種情況
1. FIFO的上遊從發出寫指令到寫進FIFO需要X個周期,那麼當停頓發生時(stall)為瞭使得FIFO下遊可以一直有東西處理,FIFO深度至少為X。issue to wr_en of fifo latency is X. FIFO depth at least X, if out-of-stall wants downstream continuous output
2. 一個模塊吞吐量(throughput)為每周期處理一條指令,但延遲(latency)為X(好比RAM read),如需保存一些信息直到輸出端使用,則需要一個至少深度為X的FIFO存儲這些信息。這裡的FIFO就好比X級流水線保存有效信息。實際用途可參考MSHR(miss status holding register)。 hold side info until it comes back. need at least X entries/pipeline stages to avoid back pressure
3. 再就是好比面試問題,假設一個模塊輸入速率為5個數據每10個周期,而輸出速率為1個數據每2個周期,則需要至少5entry的FIFO來存突發數據(burst data)
有些人以前說“小學生做一個蓄水池一端加水一端放水的數學題有什麼用,誰會用這個啊?”,下次該問他”你說呢?“
就這