1 / 24 · 概念
將方程式轉成資料路徑契約
在算術規則之外,同時訂定位元寬度、接受事件與有效結果。
單元可免費閱讀,註冊課程即可儲存學習進度。
訂定電路所承諾的行為
資料路徑儲存、選擇並運算數值。控制器決定哪些數值要移動,以及何時移動。這是兩種不同的設計責任,但並非獨立執行的軟體工作。在時脈邊緣,控制訊號決定暫存器更新;這些暫存器值會在下一個週期成為組合邏輯的輸入。缺少這項時序契約的方程式,可能為錯誤的交易產生正確的數字。
我們的小型計算器接受無號八位元運算元 a、b,以及二位元操作碼。操作 0 執行加法,1 執行減法,2 執行 AND,3 執行 XOR。算術結果傳回最低八個位元,另外提供加法進位或減法借位。後續專案也會攜帶標籤。標籤不會改變運算,卻能辨識結果來自哪筆輸入,因此必須與結果一起傳遞。
| 契約項目 | 本課程的選擇 |
|---|---|
| 運算元意義 | 0 到 255 的無號整數 |
| 縮窄方式 | 最低八個位元,模 256 |
| 邊界資訊 | ADD 進位與 SUB 借位 |
| 接受條件 | valid 與 ready 同時成立的上升緣 |
| 順序 | 結果依輸入被接受的順序輸出 |
| 重設 | 捨棄尚未完成的工作,並清除有效狀態 |
當 a=250、b=10 且操作為 ADD 時,數學上的總和是 260。輸出為 4,carry=1。有號解讀或飽和處理會形成不同的契約。不要讓程式語言意外的型別轉換替你決定策略。回繞算術可能適合位址計數器,而亮度計算可能需要飽和處理。
- 接受: 擷取運算元、操作碼與標籤
- 運算: 套用指定的數值契約
- 交付: 傳輸結果與相符的標籤
無效的 ALU 輸出仍可能在電氣上改變;它並不代表一筆交易。有效結果若帶著舊標籤,同樣是錯誤的。應一起檢查資料、標籤與 valid。對每筆輸出,都要回答位元代表什麼,以及消費端何時能信任它。本課程的週期模型檢查功能與順序,不檢查實體邏輯閘延遲。在為延遲或吞吐量目標選擇暫存器分界之前,先將契約轉成參考模型。
自己試試看
寫出 a=250、b=10 時的八位元 ADD 結果與進位。解釋數值 4,以及為何標籤必須與結果一起儲存。
查看解說
260=1×256+4,因此 data=4 且 carry=1。最低八位元契約會將總和對 256 取模。標籤必須在與資料相同的接受、停頓及交付條件下儲存,才能維持結果與其輸入的關聯。