4.1~4.4節不做具體總結
這幾個小節只記錄以下我難以理解的點。當時沒理解好的。
不做總結是因為,這幾節的內容重度依賴特定的例子。
它就是需要一個例子去闡釋的,不好做總結,還有就是各小節相互依賴遞進,書上的內容足夠的好了。如果有遺忘還是回頭看書比較合適。
4.2節邏輯設計的一般方法
組合邏輯:
組合邏輯就是數字邏輯電路的與門還有就是或門組合而成的一個邏輯單元。這個單元沒有內置的存儲區,所以相同的輸入經過相同的邏輯運算就會得出相同的結果。如果有內置的存儲的空間,那么存儲的空間里的值可能會影響我們的計算結果。
狀態單元:
這個單元沒有組合邏輯,但是可以存儲一個狀態(或者說一個值)那么這個元素內部包含一個存儲的空間。
狀態單元有兩個輸入(數據的輸入和時鍾控制輸入),和一個輸出。
時鍾控制輸入時控制輸入狀態單元的數據什么時候可以被寫入。
時鍾策略
計算機不可存在不可預測性:
例如:
組合邏輯單元從狀態單元讀取數據的時候,狀態單元正在寫數據,那么組合邏輯單元就可能讀到的數據是新的或者是舊的或者是新舊混合的.這就是不可預測性.
時鍾策略就是用來解決這個問題的,規范好邏輯單元什么時候從狀態單元讀到數據,狀態單元什么時候可以寫入數據.
邊沿觸發器
就是在一個時鍾周期內,當初一個寄存器的內容,再經過組合邏輯得出結果寫入寄存器。這個操作要再一個時間周期內完成,不對因為競爭而導致不確定的數據。因為一個時鍾周期只能執行一條指令。
4.5流水線
流水線就是使得指令重疊執行,提高數據鏈路內的硬件資源的利用率。
一條指令的執行分為五步(以本書為例):
1.從指令存儲器中取指令
2.翻譯指令(主控制器),並且讀寄存器(寄存器文件)。
3.運算器執行操作
4.從數據存儲器中讀取操作數(load指令,store指令,如果有需要)
5.將運算器運算結果寫回寄存器中(如果有需要)
當前一條指令N執行完了第一步,此時pc寄存器和指令存儲器處於空閑狀態,那么就可以讓第N+1調指令執行取值操作,此時並不影響第N條指令執行第二部。這就是流水線,后一條執行執行前一條執行留下的空閑的數據鏈路中的硬件資源。
流水線並不是直接提高cpu的性能,而是通過提高cpu的吞吐率來提高cpu的執行性能。通過執行指令間中,同時,但是訪問不同資源硬件,進行並行操作。
例如有五條執行指令:
第一條:執行第五步
第二條:執行第四步
第三條:執行第三步
第四條:執行第二部
第五條:執行第五步
這樣不同執行雖然同時執行,但是並不互相影響.這就是並行思想的利用例子。
流水線冒險
就是在流水線執行中,會出現的問題。
-
結構冒險:
就是所第N條指令所需要數據通路中的硬件資源沒有得到釋放,即還被第N-1條指令所使用,導致第N條指令無法執行,這就是結構冒險。 例如: 如果數據存儲器和指令存儲器集成到一個存儲器中,那么當同一周期內有一條指令在執行第四步,那么執行的 指令就不能執行第一步,這就導致了結構冒險。
-
數據冒險:
執行指令所需要的數據還未准備好,就是說第N條指令的計算數據依賴前面的指令,但是那個指令還沒執行到第五步,把數據存入寄存器中去,導致第N條指令無法在該預定是時間內執行。 解決方法就是設置旁路,那第N條依賴的指令,在執行完第三步就直接將結果的一個備份傳送到該指令的運算器中的一端。
-
控制冒險:
就是流水線指令中有一條跳轉執行,這條指令下面的指令並不是我們想要執行的指令. 解決方法就是流水線阻塞:當執行的指令是分支指令時,阻塞流水線,直到分支指令得到下一條指令后才解除阻塞狀態。