Altifigence Academy

6 / 24 · 概念

使用 FSM 安排共用資源

以一個加法器累加四個數值,同時訂定狀態轉移與擷取時機。

控制狀態表達操作排程

共用資源需要將操作分配到不同時間。考慮使用一個加法器與十位元累加器,將 x0 到 x3 相加。在請求被接受時,擷取全部四個運算元。後續外部輸入的變化,不得改變尚未完成的請求。控制器選擇運算元、致能累加,並決定結果何時有效。

使用 IDLE、ADD0、ADD1、ADD2、ADD3 與 DONE 狀態。在 IDLE 的接受邊緣擷取輸入,並清除 acc。接下來四個邊緣各加入一個已儲存的運算元。ADD3 邊緣之後,最終總和已儲存,狀態也轉為 DONE。DONE 保持結果,直到消費端接受。此簡單版本會在該邊緣返回 IDLE,不會同時接受新請求。

邊緣舊狀態動作新 acc
0IDLE擷取 3,5,7,9 並清除 acc0
1ADD0加入 33
2ADD1加入 58
3ADD2加入 715
4ADD3加入 9,進入 DONE24
5DONE消費端接受結果24

要區分邊緣 4 之後可取得結果,與邊緣 5 進行傳輸。消費端停頓可能讓 DONE 無限期延長。資源重用減少算術硬體,但相較於每個週期都可接受輸入的管線,會限制吞吐量。若要支援完成與新請求同時發生,必須明確訂定舊結果交付與新請求初始化之間的優先順序。

四數累加器
  1. IDLE: 接受並擷取全部四個數值
  2. ADD0..ADD3: 在四個邊緣重用同一個加法器
  3. DONE: 保持結果,直到消費端取走

由狀態推導控制訊號:ADD 狀態中的累加器致能、與狀態相符的運算元選擇,以及 DONE 中的結果 valid。為組合控制輸出提供預設值。明確定義接受條件,避免持續成立的請求意外重複執行。重設返回 IDLE,並捨棄尚未完成的工作。以計數器為基礎的實作可以減少狀態編碼,但仍需要相同的逐邊緣排程。

自己試試看

四個輸入都是 255 時,ADD0 到 ADD3 之後的 acc 各是多少?若邊緣 5 的 output ready 為零,應如何處理?

查看解說

數值依序為 255、510、765、1020,皆可容納於十位元。ready=0 時不進行交付;保持 DONE、acc=1020 與 valid=1。

此選擇適用於本瀏覽器,隨時可從頁尾變更。