
1. 項目概述從零開始理解計算機的“語言”如果你剛開始接觸計算機組成原理可能會覺得那些二進制、補碼、校驗碼的概念離我們日常敲的代碼、用的軟件很遠。但事實上理解數據在計算機內部是如何被表示和處理的是理解整個計算機如何工作的基石。這就好比你要學一門外語總得先認識它的字母和基本單詞。這次我們要做的就是利用Logisim這個直觀的電路仿真工具親手搭建一些最基礎的數字電路來“看見”和“觸摸”計算機的數據表示。Logisim對于學習計組來說是個不可多得的好工具。它把抽象的二進制位、邏輯門、寄存器變成了可以拖拽、連線的可視化元件。你不再需要去死記硬背“與門真值表是111”而是可以自己接上兩個開關和一個燈泡親手撥動開關觀察燈泡的亮滅來理解“與”的邏輯。這種從抽象理論到具象操作的轉變對于建立直觀理解至關重要。我們這次實驗的核心目標就是通過幾個經典的實驗案例將《計算機組成原理》課本上前幾章關于數制轉換、原反補碼、字符編碼、校驗碼等知識從紙面公式變成可以運行、可以調試的電路模型。這個實驗非常適合兩類朋友一是正在學習計算機組成原理課程的學生無論是為了應對實驗課作業還是為了深化對課本知識的理解二是對計算機底層工作原理充滿好奇的自學者想要擺脫純理論的枯燥通過動手實踐來一探究竟。整個過程不需要任何實際的物理電路板只需要一臺電腦和Logisim軟件就能開啟你的計算機內部世界探索之旅。我會基于常見的實驗安排和教學重點帶你一步步拆解其中關鍵的數據表示實驗分享從電路搭建到調試排錯的全過程心得。2. 實驗環境準備與Logisim核心操作速成工欲善其事必先利其器。在開始構建復雜的加法器或存儲器之前我們必須先和Logisim這個工具混個臉熟。很多初學者卡在第一步不是不理解原理而是不熟悉工具的操作導致連線混亂、信號無法傳遞最終挫敗感滿滿。我們先花點時間把Logisim的核心操作邏輯和幾個必知必會的技巧搞清楚。2.1 Logisim的安裝與界面初識Logisim是一款用Java編寫的開源軟件因此你需要在電腦上先安裝Java運行環境JRE。完成之后直接從其官網下載jar包雙擊即可運行非常綠色便攜。啟動后的主界面主要分為幾個區域左側是元件庫面板像工具箱一樣分門別類地存放著各種邏輯門、導線、輸入輸出設備等中間大片區域是電路繪制主畫布我們在這里進行搭建右側是屬性表當你選中某個元件時這里可以修改它的屬性比如位寬、標簽名稱等。首先你需要建立的第一個重要認知是Logisim中的電路是分層次的。主畫布默認打開的是一個叫“main”的電路。你可以通過“項目”菜單創建新的電路比如“加法器”、“移位器”。這些電路本身可以被打包成一個“子電路”元件然后像使用普通門電路一樣被拖放到更高層級的電路中使用。這種模塊化設計對于構建大型實驗項目至關重要。我建議在實驗開始時就規劃好電路模塊為每個核心功能創建獨立的子電路這樣畫布不會變得一團糟調試時也能隔離問題。一個非常實用的技巧是善用“手形工具”和“選擇工具”。手形工具用于拖動整個畫布視圖而選擇工具用于選中和移動元件。在連線時Logisim會自動在導線交叉且連接的地方顯示一個圓點沒有圓點則表示只是跨過而未連接。務必注意這些連接點這是排查電路不通時第一個要檢查的地方。2.2 核心元件庫詳解與位寬設置要點左側的元件庫是我們所有的“磚瓦”。幾個最常用的庫需要重點掌握導線庫提供普通導線和總線。總線用于傳輸多位數據比如8位、16位。在放置總線時務必在屬性表中設置正確的“數據位寬”這是后續所有操作的基礎。門電路庫包含與、或、非、異或等所有基本邏輯門以及多輸入的門電路。拖出門后同樣可以在屬性中設置輸入端口數量和位寬。例如你可以設置一個2輸入、8位寬的與門它會對兩個8位向量的每一位分別進行與操作。** plexer庫**包含多路選擇器、解碼器、分路器等組合邏輯元件。多路選擇器MUX在數據通路中選擇信號時極其常用。算術庫這里有加法器、減法器、比較器、移位器等。我們實驗的核心之一——可控加減法器就會直接用到這里的加法器元件或者用更基礎的門電路來構建它。存儲器庫包含觸發器、寄存器、RAM、ROM等。做存儲器實驗或需要暫存數據時必不可少。輸入輸出庫這是你和電路交互的窗口。包括針腳用于子電路接口、常量、按鈕、開關、鍵盤、LED、七段數碼管等。開關和按鈕提供輸入信號LED和數碼管用于觀察輸出結果。這里有一個貫穿始終的關鍵概念位寬一致性。Logisim中絕大多數元件都有“數據位寬”屬性。你必須保證連接到一個元件輸入端口的所有導線其位寬與該端口期望的位寬一致。例如如果你用一個8位寬的開關組輸出連接到另一個元件比如加法器的輸入那么加法器的輸入位寬也必須設置為8位。位寬不匹配是導致電路行為詭異甚至無法仿真的最常見原因之一。在開始連線前花幾秒鐘雙擊每個重要元件檢查一下位寬設置能省去后面大量的調試時間。3. 實驗一漢字編碼轉換器的設計與實現很多計組實驗都會從字符編碼開始因為它連接了人類可讀的信息和計算機內部的二進制世界。其中漢字國標碼GB2312及其相關的區位碼、機內碼的轉換是一個非常經典且能串聯多個知識點的實驗項目。這個實驗不僅能讓你理解編碼原理還能熟練掌握Logisim中常數、加法器、顯示器的使用。3.1 區位碼、國標碼與機內碼的關系梳理在動手畫電路之前我們必須把轉換關系的數學本質搞清楚。對于GB2312編碼的漢字區位碼可以看作一個漢字的“坐標”。它由一個區號1-94和一個位號1-94組成。例如“啊”字的區位碼是160116區01位。注意這里的區號和位號都是十進制數。國標碼為了傳輸和交換將區位碼的區號和位號分別加上32十進制即20H得到。因為ASCII碼中0-31是控制字符32是空格從32開始才是可顯示字符。加上32是為了避開控制字符區域。“啊”字的國標碼就是 (1632, 132) (48, 33)用十六進制表示為3021H。機內碼在計算機內部存儲時為了與ASCII碼區分避免二義性將國標碼的兩個字節的最高位都置為1。即分別在國標碼的兩個字節上加上128十進制80H。所以“啊”字的機內碼 國標碼3021H 8080H B0A1H。轉換公式總結如下區位碼十進制區、位 - 國標碼十六進制國標高字節 區號 20H國標低字節 位號 20H國標碼 - 機內碼機內碼 國標碼 8080H區位碼 - 機內碼一步到位機內高字節 區號 A0H機內低字節 位號 A0H因為20H80HA0H3.2 在Logisim中搭建轉換電路理解了公式電路設計就清晰了我們需要一個輸入接口用于輸入區號和位號兩個加法器分別計算高字節和低字節以及一個輸出顯示接口。步驟一建立輸入模塊。創建兩個輸入引腳分別命名為“Qu”和“Wei”作為區號和位號的輸入端口。它們的位寬設置為8位因為我們要進行加法運算8位足夠表示94以內的數。為了便于測試我們可以用兩個“常量”元件來代替手動輸入。放置兩個常量分別設置其值為16和1代表“啊”字并將其輸出連接到“Qu”和“Wei”引腳。注意常量元件的“數據位寬”也要設為8位數值格式可以選十進制或十六進制但心里要清楚其二進制值。步驟二構建加法計算模塊。從算術庫拖出兩個加法器。每個加法器有兩個輸入A, B和一個輸出Sum。對于高字節通路將“Qu”輸入連接到第一個加法器的A端。加法器的B端我們需要連接一個常數A0H即十進制的160。在Logisim中你可以直接放置一個“常量”元件將其值設置為“0xA0”十六進制或“160”十進制位寬設為8位然后連接到加法器的B端。對于低字節通路完全對稱。將“Wei”輸入連接到第二個加法器的A端B端同樣連接常量0xA0。關鍵點加法器的“數據位寬”必須設置為8位。同時注意觀察加法器輸出是否有“溢出”標識。因為我們計算的范圍94160254小于255所以8位內不會溢出溢出引腳可以忽略。步驟三實現輸出與顯示。兩個加法器的輸出就是機內碼的高字節和低字節。我們可以用兩個“探針”或“LED陣列”來顯示它們。放置兩個“LED陣列”元件位寬設為8位分別連接到兩個加法器的輸出。LED陣列會以一排小圓點亮/滅的形式顯示8位二進制值非常直觀。為了更友好地顯示我們還可以添加“十六進制顯示器”。放置兩個“十六進制數字顯示”元件位寬設為8位分別連接到高、低字節。這樣就能直接看到“B0”和“A1”這樣的十六進制結果。最后為了將高低字節合并成一個16位的機內碼輸出可以使用“隧道”標簽。分別給高字節和低字節的輸出線命名標簽例如“HIGH_BYTE”和“LOW_BYTE”。然后在一個新的地方放置一個“引腳”位寬設為16位在其屬性中“輸出類型”選擇“輸出”然后在“標簽”欄輸入“HIGH_BYTE[7..0] LOW_BYTE[7..0]”。Logisim會自動將兩個8位總線合并成一個16位總線輸出。你也可以用“分路器/合并器”元件來實現總線合并。實操心得與排錯常量值格式Logisim中常量支持十進制、十六進制、二進制等多種格式。在涉及編碼轉換時使用十六進制如0xA0最不容易出錯也最貼近原理描述。位寬匹配再強調確保輸入常量、加法器、顯示器的位寬全部一致本例中均為8位。如果顯示器不亮或顯示異常首先檢查整條通路上的位寬設置。子電路封裝完成上述電路后強烈建議將其封裝成子電路。選中所有相關元件點擊“項目”-“添加電路”命名為“漢字機內碼轉換器”。然后在子電路界面定義好輸入引腳區、位和輸出引腳16位機內碼、高字節、低字節等。這樣在主電路中你就可以像一個黑盒元件一樣使用它方便后續集成到更復雜的系統中。測試用例除了“啊”1601 - B0A1多測幾個字比如“中”5448 - D6D0。用計算器或心算驗證結果確保電路邏輯正確。4. 實驗二8位可控加減法器的邏輯設計與優化加減法器是運算器的核心。一個“可控”的加減法器意味著它能通過一個控制信號在加法和減法功能之間切換。這個實驗能讓你深刻理解減法如何通過補碼轉化為加法以及如何用邏輯門來實現這一控制邏輯。4.1 補碼運算原理與電路實現基礎計算機內部使用補碼來表示有符號數最大的好處就是可以將減法運算統一為加法運算。對于兩個數A和BA - B等價于A (-B)而-B就是B的補碼按位取反再加1。所以一個可控加減法器的核心思想就是當進行加法時直接計算AB當進行減法時計算A(~B1)。在Logisim中我們可以利用一個控制信號Sub0表示加1表示減來控制這個過程被加數A通路直接進入加法器。加數B通路需要經過一個受控的變換。當Sub0時B原樣進入加法器當Sub1時B需要先按位取反然后再加上1這個“加1”可以通過設置加法器的低位進位輸入Cin為1來實現。4.2 逐位搭建可控加減法器電路我們不直接使用Logisim算術庫里的現成加法器而是從門電路開始搭建以理解其內部構造。這里我們采用經典的行波進位加法器結構并加入控制邏輯。步驟一構建一位全加器FA子電路。全加器有三個輸入A_i, B_i, 低位進位C_i-1兩個輸出和S_i, 向高位進位C_i。 其邏輯表達式為S_i A_i ⊕ B_i ⊕ C_i-1 異或C_i (A_i B_i) | ((A_i ⊕ B_i) C_i-1)新建一個子電路命名為“FullAdder”。放置三個輸入引腳A, B, Cin。放置兩個輸出引腳Sum, Cout。用異或門、與門、或門按照上述表達式搭建電路。可以先計算A⊕B將其結果與Cin再進行一次異或得到Sum。同時用與門得到AB再用與門得到(A⊕B)Cin最后用一個或門將這兩個結果相或得到Cout。封裝好這個一位全加器它將是我們構建多位加法器的基本單元。步驟二構建8位行波進位加法器。新建子電路“RippleCarryAdder_8bit”。放置兩個8位輸入引腳A[7..0]和B[7..0]一個1位輸入引腳Cin一個8位輸出引腳S[7..0]一個1位輸出引腳Cout表示最高位進位。從元件庫中將剛才制作的“FullAdder”子電路拖入8次排成一排。連線將A[0]和B[0]連接到第一個全加器的A和B將外部Cin連接到第一個全加器的Cin。將第一個全加器的Sum連接到S[0]將其Cout連接到第二個全加器的Cin。以此類推串聯所有全加器。最后一個全加器的Cout連接到外部Cout引腳。這樣一個8位的行波進位加法器就完成了。它的缺點是進位信號需要從最低位依次傳遞到最高位速度較慢但結構簡單易于理解。步驟三加入“可控”邏輯形成最終加減法器。核心在于輸入到加法器B端的數需要根據Sub信號進行變換Sub0時為B原值Sub1時為B的反碼。新建頂層電路“ControlledALU_8bit”。放置輸入8位A8位B1位Sub。放置輸出8位Result1位Cout進位/借位1位Overflow溢出。B輸入變換電路我們需要8個二輸入異或門。將B的每一位B[0]到B[7]分別連接到一個異或門的一個輸入端。所有異或門的另一個輸入端都連接到Sub信號。根據異或門的特性輸出 B_i ⊕ Sub。當Sub0時輸出等于B_i當Sub1時輸出等于~B_i因為與1異或等于取反。這樣我們就得到了B或者~B。連接加法器將A[7..0]連接到我們自建的8位行波進位加法器的A端。將8個異或門的輸出連接到加法器的B端。將Sub信號直接連接到加法器的Cin輸入端。這里非常巧妙當做減法時Sub1我們不僅將B取反通過異或門同時將Cin置為1這就完成了“取反加一”得到補碼的操作。當做加法時Sub0B不變Cin0就是普通的加法。溢出判斷對于有符號數加減溢出發生在正數加正數得負數或負數加負數得正數。具體到電路可以通過檢查最高位的進位輸入倒數第二個全加器的Cout和最高位的進位輸出最后一個全加器的Cout是否不同來判斷。即Overflow C_in[最高位] ⊕ C_out[最高位]。你需要從加法器子電路中引出相應的中間信號來實現這個異或判斷。結果輸出加法器的Sum輸出即為最終的Result。加法器的最終Cout可以作為無符號數加法的進位或有符號數減法的借位標志通常需要結合Sub信號解讀。注意事項與優化思考子電路封裝與測試將完整的可控加減法器封裝好提供清晰的輸入輸出接口。測試時使用Logisim的“手戳”工具模擬輸入信號用LED或十六進制顯示器觀察輸出。測試用例要覆蓋正數、負數、加法、減法、溢出、進位等各種邊界情況。行波進位的性能問題我們搭建的是最基礎的行波進位加法器。在實際的計算機組成原理課程中你可能會進一步實驗“超前進位加法器”來加速進位鏈。這需要根據進位生成G和進位傳播P信號來提前計算所有位的進位電路更復雜但速度更快。這是對加法器的一個很好的優化方向。關于“可控”的擴展我們這個電路只實現了加/減控制。一個完整的簡易算術邏輯單元ALU還會有控制信號來選擇與、或、非等邏輯運算。你可以嘗試增加多路選擇器根據不同的控制信號碼選擇將加法器結果、邏輯運算結果等輸出到最終結果總線上。5. 實驗三漢明校驗碼生成與檢錯電路設計數據在存儲和傳輸過程中可能會出錯校驗碼就是用來檢測甚至糾正這些錯誤的。漢明碼是一種高效的線性糾錯碼它通過在數據位中插入多個校驗位使得碼字之間存在特定的監督關系。設計漢明碼電路能讓你深入理解奇偶校驗、監督關系等概念并鍛煉復雜的組合邏輯設計能力。5.1 漢明碼編碼原理與位序安排漢明碼的核心思想是將校驗位插入到數據位中特定的位置這些位置是2的冪次方即1, 2, 4, 8...每個校驗位負責校驗一組特定的數據位。 以一個簡單的例子說明對4位數據位D3, D2, D1, D0進行漢明編碼需要3位校驗位P2, P1, P0。確定編碼后總位長滿足 2^r m r 1其中m是數據位長4r是校驗位長。計算可得r3總位長N7。安排位序將位置編號為1到7。校驗位P0放在位置12^0P1放在位置22^1P2放在位置42^2。數據位按順序填入剩余位置3,5,6,7。位置1: P0位置2: P1位置3: D0位置4: P2位置5: D1位置6: D2位置7: D3確定校驗關系每個校驗位負責校驗那些位置編號中對應二進制位為1的所有位。P0位置1二進制001校驗所有位置編號第0位為1的位1,3,5,7 (即 P0, D0, D1, D3)P1位置2二進制010校驗所有位置編號第1位為1的位2,3,6,7 (即 P1, D0, D2, D3)P2位置4二進制100校驗所有位置編號第2位為1的位4,5,6,7 (即 P2, D1, D2, D3)計算校驗位使所負責的位進行異或運算偶校驗結果為0。即P0 D0 ⊕ D1 ⊕ D3P1 D0 ⊕ D2 ⊕ D3P2 D1 ⊕ D2 ⊕ D3這樣我們就得到了7位的漢明碼P2 D3 D2 P1 D1 P0 D0按位置7到1排列。5.2 在Logisim中搭建編碼與檢錯電路我們將設計兩個主要模塊編碼器根據4位輸入數據生成7位漢明碼和檢錯器根據接收到的7位碼字判斷是否出錯并定位錯誤位。步驟一搭建漢明碼編碼器電路。新建子電路“Hamming_Encoder_4bit”。放置4個輸入引腳代表原始數據位D3, D2, D1, D0通常D3為最高位。根據上面的公式我們需要用異或門來計算三個校驗位。放置一個三輸入異或門連接D0, D1, D3其輸出即為P0。放置另一個三輸入異或門連接D0, D2, D3其輸出為P1。放置第三個三輸入異或門連接D1, D2, D3其輸出為P2。Logisim默認可能只有兩輸入異或門你可以將兩個兩輸入異或門級聯來實現三輸入異或A⊕B⊕C或者使用“異或門”屬性將輸入端口數改為3。按照漢明碼的最終位序位置7到1P2, D3, D2, P1, D1, P0, D0將7個信號輸出。你可以使用一個“隧道”或“分路器”來合并這7位輸出也可以直接放置7個獨立的輸出引腳并按順序命名。封裝電路提供4位數據輸入和7位編碼輸出。步驟二搭建漢明碼檢錯譯碼電路。檢錯原理接收端重新計算三個校驗因子SyndromeS2, S1, S0。計算方法與發送端計算校驗位類似但這次是用接收到的所有位包括校驗位和數據位按照同樣的監督關系進行計算。 對于接收到的碼字 R7, R6, R5, R4, R3, R2, R1 (對應位置7到1)S0 R1 ⊕ R3 ⊕ R5 ⊕ R7 即P0, D0, D1, D3的位置S1 R2 ⊕ R3 ⊕ R6 ⊕ R7 即P1, D0, D2, D3的位置S2 R4 ⊕ R5 ⊕ R6 ⊕ R7 即P2, D1, D2, D3的位置如果S2S1S0 000則認為無錯。如果不為000則其二進制值直接指出了出錯的位置編號。例如S2S1S0101二進制5則表示位置5即D1出錯了。新建子電路“Hamming_Decoder_7bit”。放置7個輸入引腳對應接收到的7位漢明碼R7..R1。放置三個四輸入異或門分別按照上述公式計算S0, S1, S2。同樣可能需要用多個兩輸入異或門組合實現四輸入。將S2, S1, S0合并為一個3位的二進制數這個數就是錯誤位置。可以將其連接到一個3位的輸出引腳命名為“Error_Position”。錯誤糾正可選如果想實現糾錯功能需要根據Error_Position的值對相應位進行取反。這可以通過一個3-8線解碼器和一個多路選擇網絡來實現復雜度較高。作為基礎實驗通常做到檢錯并指出位置即可。無錯指示添加一個邏輯電路來判斷S2S1S0是否全為0。可以用一個三輸入或非門輸入為S2,S1,S0輸出為“No_Error”信號。當No_Error為1時表示傳輸正確。調試技巧與深入應用分層設計與測試先單獨測試編碼器輸入不同的4位數據手動計算或對照表格檢查輸出的7位編碼是否正確。再單獨測試檢錯器可以手動修改編碼器輸出的某一位模擬傳輸錯誤輸入檢錯器觀察Error_Position輸出是否正確指出了錯誤位置。可視化顯示使用LED陣列或十六進制顯示器來顯示輸入數據、輸出編碼、校驗因子和錯誤位置讓整個流程一目了然。擴展到更多數據位4位數據只是一個起點。你可以挑戰設計對8位數據需要4位校驗位總長12位進行漢明編碼和檢錯的電路。這需要你重新計算校驗位的位置和監督關系是很好的練習。理解局限性漢明碼只能糾正單比特錯誤檢測雙比特錯誤。你可以思考一下如果發生兩位錯誤你的檢錯電路會有什么表現如何修改電路使其能檢測但不糾正雙比特錯誤這涉及到擴展漢明碼增加一個總體奇偶校驗位的概念。6. 實驗四Logisim中的存儲器模型與簡單CPU數據通路初探在理解了基本的數據表示和運算后我們可以嘗試將這些模塊組合起來形成一個最簡單的、能夠執行指令的模型。這個實驗通常被稱為“理想流水線設計”或“簡單CPU設計”的起點其核心是構建一個將運算器、寄存器、存儲器連接起來的數據通路。6.1 寄存器與存儲器的搭建與使用Logisim的存儲器庫提供了現成的寄存器Register和RAM/ROM組件我們可以直接使用。寄存器用于暫存數據。放置一個“寄存器”元件設置其位寬如8位或16位。它有一個數據輸入D一個時鐘輸入一個使能端有時叫“加載”Load以及數據輸出Q。當時鐘上升沿到來且使能有效時輸入D的值會被鎖存到寄存器中并從Q端輸出。在簡單的同步電路中我們通常用一個全局時鐘來驅動所有寄存器。RAM隨機存取存儲器用于存儲程序和數據。放置一個“RAM”元件。你需要配置的關鍵屬性包括地址位寬決定尋址空間大小如10位可尋址1024個單元、數據位寬每個單元存儲的數據位數如8位、內容可以初始化為特定值。RAM有地址輸入、數據輸入、數據輸出、讀寫控制等端口。ROM只讀存儲器用于存儲固定的程序或數據。其配置與RAM類似但沒有寫端口。你可以通過編輯其內容將預先編寫好的機器指令碼存入其中。實操要點在連接存儲器和總線時一定要注意三態門的概念。總線是共享的通信線路同一時刻只能有一個設備向總線輸出數據。寄存器或RAM的輸出端不能直接并聯到總線上否則會發生信號沖突。我們需要用“三態門”來控制輸出。Logisim中有“三態緩沖器”元件。將寄存器的輸出連接到三態緩沖器的輸入將三態緩沖器的輸出連接到總線用一個控制信號如Reg_OUT來控制三態門的使能。只有當Reg_OUT有效時寄存器的值才會被放到總線上。6.2 構建一個極簡的累加器ACC型數據通路我們設計一個能執行“從內存取數到ACC”和“ACC加內存數”兩條指令的簡單數據通路。元件準備一個程序計數器PC寄存器用于存放下一條指令的地址。一個指令寄存器IR寄存器用于存放當前執行的指令。一個累加器ACC寄存器用于存放操作數和結果。一個算術邏輯單元ALU可以使用我們之前做的可控加減法器固定為加法模式。一個存儲器RAM存放指令和數據。多個多路選擇器MUX用于選擇不同的數據來源。一個時鐘源用于提供時鐘信號。必要的三態門和導線。取指階段通路設計PC的輸出通過三態門控制信號PC_OUT送到地址總線。地址總線連接到RAM的地址輸入端。將RAM的數據輸出端連接到指令總線。指令總線連接到IR的輸入端。當時鐘上升沿到來且IR_LOAD有效時指令被存入IR。PC自增邏輯用一個加法器將PC的當前值與常數1相加結果在下一個時鐘上升沿當PC_INC有效時存回PC。這可以通過將加法器輸出通過一個MUX選擇后反饋給PC輸入來實現。執行階段通路設計以加法指令為例假設指令格式為操作碼高幾位| 內存地址低幾位。IR的高位部分譯碼產生ADD控制信號低位部分是操作數地址。當ADD有效時將IR中的地址字段送到地址總線通過一個MUX選擇控制信號可能是ADDR_FROM_IR從RAM中讀取操作數到數據總線。同時將ACC的輸出通過三態門ACC_OUT有效送到ALU的A輸入端。將從數據總線讀出的操作數送到ALU的B輸入端。ALU執行加法結果輸出到數據總線。在下一個時鐘上升沿將數據總線上的結果寫回ACCACC_LOAD有效。控制信號的產生這是最復雜的部分。你需要一個“控制單元”根據當前指令IR中的操作碼和時鐘周期產生一系列有序的控制信號如PC_OUT,IR_LOAD,PC_INC,ACC_OUT,ALU_OP,ACC_LOAD等。在最初的模型中你可以用一個“只讀存儲器ROM”作為硬連線控制器將指令操作碼作為地址ROM中存儲的內容就是對應指令所需的所有控制信號組成的位模式。調試與心得分模塊調試先讓取指周期跑通確保PC能自動遞增并能從RAM中正確讀出指令加載到IR。你可以將RAM的前幾個地址預先存入一些簡單的、你知道的指令碼比如全0代表NOP空操作用時鐘單步推進觀察各總線和寄存器的值。控制信號的時序這是成敗關鍵。每個控制信號必須在正確的時鐘周期內有效。畫一個詳細的時序圖會非常有幫助。在Logisim中你可以通過“仿真”菜單啟用時鐘自動步進或者手動點擊時鐘按鈕來單步觀察。從簡單開始不要一開始就追求復雜的指令集。先實現一條指令比如LOAD再實現第二條比如ADD。每增加一條指令就仔細測試其執行通路和控制信號。可視化是關鍵大量使用LED陣列、十六進制顯示器、甚至簡單的七段數碼管來顯示PC、IR、ACC、總線、控制信號等的當前值。這能讓你直觀地看到數據在通路中的流動是排查問題最有效的手段。這個簡單的數據通路實驗是理解現代CPU工作原理的敲門磚。雖然它離真正的流水線、高速緩存、超標量等復雜技術還很遠但它清晰地展示了指令如何被讀取、解碼、執行數據如何在寄存器、運算器、存儲器之間流動。通過Logisim親手搭建并調試這樣一個系統所獲得的直觀感受是任何教科書和理論講解都無法替代的。