關鍵路徑(critical path)
關鍵路徑是訊號穿過一塊組合邏輯時可能走的最慢路線——它決定了你能用多快的時脈來驅動電路。想像一場接力賽,全隊的成績完全由最慢的那一棒決定;只要那一棒還慢,把其他每個跑者都加速也改變不了什麼。在有時脈的電路裡,從一個正反器、穿過閘、到下一個正反器的最長延遲就是那關鍵的一棒:時脈週期必須長到連那條路徑都能完成,所以關鍵路徑決定了最高時脈速度。
具體來說,兩排正反器之間,訊號穿過組合邏輯有許多可能的路徑;每條路徑的延遲等於沿途閘延遲與線延遲的總和。關鍵路徑就是其中總延遲最大的那一條。最短時脈週期大約是那個延遲加上正反器自身的延遲、再加上所需的建立時間,而最高頻率就是 1 除以那個週期。設計者用時序分析工具找出關鍵路徑,然後攻擊它:化簡它上面的邏輯、改用更快的閘,或插入一個額外的管線暫存器把長路徑切斷,使這份工作分散到兩個時脈週期。
它為何重要:關鍵路徑是讓硬體更快的槓桿(也是更快的加法器或更深的管線有用的原因)。但要注意一個誠實的微妙之處。用管線化切斷關鍵路徑,能讓時脈跑得更快、改善每秒完成的指令數(吞吐量),但任何單一指令現在要穿過更多階段,所以它自己的延遲並不會縮短——甚至可能略增。而且只縮短第二慢的路徑是白費力氣,除非真正的關鍵路徑先被處理;唯有最長的路徑才限制時脈。
在一個 32 位元漣波進位加法器裡,關鍵路徑是進位鏈:在位元 0 誕生的進位,可能必須漣漪穿過全部 32 級,位元 31 的和才會定案。其他每個訊號都更早穩定,所以單單這一條路徑就決定了加法器的延遲——這正是為什麼設計者用進位前瞻取代漣波進位來縮短它。
只有最慢的路徑限制時脈;在那一條被修好之前,加速其他任何東西都是白費。
用管線化縮短關鍵路徑提升的是吞吐量,不是單一指令的延遲。一條指令從頭到尾還是一樣久(甚至更久);你只是把許多條重疊起來。把更快的時脈誤當成更快的工作,就是百萬赫茲迷思。