6 / 24 · 概念
使用 FSM 安排共用資源
以一個加法器累加四個數值,同時訂定狀態轉移與擷取時機。
單元可免費閱讀,註冊課程即可儲存學習進度。
控制狀態表達操作排程
共用資源需要將操作分配到不同時間。考慮使用一個加法器與十位元累加器,將 x0 到 x3 相加。在請求被接受時,擷取全部四個運算元。後續外部輸入的變化,不得改變尚未完成的請求。控制器選擇運算元、致能累加,並決定結果何時有效。
使用 IDLE、ADD0、ADD1、ADD2、ADD3 與 DONE 狀態。在 IDLE 的接受邊緣擷取輸入,並清除 acc。接下來四個邊緣各加入一個已儲存的運算元。ADD3 邊緣之後,最終總和已儲存,狀態也轉為 DONE。DONE 保持結果,直到消費端接受。此簡單版本會在該邊緣返回 IDLE,不會同時接受新請求。
| 邊緣 | 舊狀態 | 動作 | 新 acc |
|---|---|---|---|
| 0 | IDLE | 擷取 3,5,7,9 並清除 acc | 0 |
| 1 | ADD0 | 加入 3 | 3 |
| 2 | ADD1 | 加入 5 | 8 |
| 3 | ADD2 | 加入 7 | 15 |
| 4 | ADD3 | 加入 9,進入 DONE | 24 |
| 5 | DONE | 消費端接受結果 | 24 |
要區分邊緣 4 之後可取得結果,與邊緣 5 進行傳輸。消費端停頓可能讓 DONE 無限期延長。資源重用減少算術硬體,但相較於每個週期都可接受輸入的管線,會限制吞吐量。若要支援完成與新請求同時發生,必須明確訂定舊結果交付與新請求初始化之間的優先順序。
- IDLE: 接受並擷取全部四個數值
- ADD0..ADD3: 在四個邊緣重用同一個加法器
- DONE: 保持結果,直到消費端取走
由狀態推導控制訊號:ADD 狀態中的累加器致能、與狀態相符的運算元選擇,以及 DONE 中的結果 valid。為組合控制輸出提供預設值。明確定義接受條件,避免持續成立的請求意外重複執行。重設返回 IDLE,並捨棄尚未完成的工作。以計數器為基礎的實作可以減少狀態編碼,但仍需要相同的逐邊緣排程。
自己試試看
四個輸入都是 255 時,ADD0 到 ADD3 之後的 acc 各是多少?若邊緣 5 的 output ready 為零,應如何處理?
查看解說
數值依序為 255、510、765、1020,皆可容納於十位元。ready=0 時不進行交付;保持 DONE、acc=1020 與 valid=1。