處理器:資料路徑與控制

資料路徑/控制的分工

退一步看整個處理器,你會看到它乾淨地一分為二。一半——資料路徑——是保存與轉換資料的元件集合(暫存器、ALU、記憶體、多工器,以及它們之間的導線)。另一半——控制——是替每道指令、藉由設定控制訊號決定資料路徑該執行哪些運算的邏輯。把「做工的東西」與「決定要做什麼工的東西」這樣劃分,就是資料路徑/控制的分工,也是整個計算機設計裡最可重複利用的想法之一。

這個分工之所以強大,是因為兩半幾乎可以各自獨立地設計、推理與更動。資料路徑大致是固定的管線:鋪好導線、一個有能力的 ALU、快速的暫存器存取。控制則是一張表,逐指令說明要扳哪些開關。想加一道新指令,而它的資料搬移已存在於資料路徑中?往往你只要在控制表加一列——不必重接線。想要更快的資料路徑?你可以重組管線,同時保留同樣的控制意圖。這正是單週期、多週期、管線化各種組織以不同方式重新安排、卻保留同一個 ISA 的那道接縫。

而這道接縫,正是下一個大章節的起點。管線化保留資料路徑/控制的分工,但把資料路徑拉長成各階段、階段之間放暫存器,並複製控制讓每個階段帶著自己的訊號。誠實地說:這套教科書式的分工是一個教學模型。真實處理器把它弄模糊了——控制可能是分散的、被預測的、或推測式的,資料路徑也寬得多——但每一個真實設計,仍建立在同一個根本想法之上:「資料流向何處」與「是什麼在引導它」是可分離的兩件事。

若一個已有「and」的 CPU 要加一道「or」指令,通常不需要新導線:資料路徑的 ALU 本來就能做 OR,所以你只要擴充控制(多一個 ALU 控制情形、多一列控制表),替新運算碼拉高 OR 運算即可。

資料路徑=搬移與運算資料者;控制=做決定者;把兩者分開,是一個關鍵的組織原則。

這個乾淨的分工是教學模型,並非現代晶片的字面地圖。真實的控制常是分散且推測式的,資料路徑也寬得多——但「資料流」與「引導」是可分離關注點這個想法,在每個真實設計中都留存著。

又稱
separation of datapath and control資料路徑與控制的分離