記憶體系統概觀
設計上存在三難:容量大、速度快、成本低無法同時滿足。存在以下權衡:存取時間愈快,每位元成本愈高;容量愈大,每位元成本愈低、但存取愈慢。出路是不依賴單一記憶體技術,而是建構階層
阅读文章 →半導體主記憶體
半導體記憶體的基本單位是記憶體單元(memory cell),共同性質:(1) 呈現兩種穩定狀態,表示 0 與 1;(2) 可被寫入以設定狀態;(3) 可被讀取以感測狀態。單元有三個功能端子:選擇(select)、控制(讀/寫)、資料/感測。
阅读文章 →磁碟
1988 年 Berkeley 提出 RAID(Redundant Array of Independent Disks):以多顆磁碟組成邏輯上單一的大磁碟,藉條帶化(striping)提升平行度、藉冗餘容忍磁碟失效。
阅读文章 →外部裝置與 I/O 模組
處理器發出 I/O 命令後繼續執行其他工作;裝置就緒時發出中斷請求,處理器在指令邊界回應:保存脈絡 跳到中斷服務常式(ISR) 傳輸一筆資料 恢復脈絡。
阅读文章 →作業系統概觀
早期一次一個作業(serial processing)浪費昂貴的機器時間;批次系統以監督程式(monitor)自動接續作業,但 I/O 等待仍使處理器閒置。多道程式設計(multiprogramming):記憶體中同時保有多個作業,一個作業等待 I/O 時切換到另一個,大幅提高使用率。分時(time sharing)把同一思想用於互動使用者:計時器中斷驅動時間片輪轉。
阅读文章 →ALU 概觀
ALU 是實際執行算術與邏輯運算的部件;其他部件(控制單元、暫存器、記憶體、I/O)主要是為它「備料」與「收貨」。ALU 接收暫存器提供的運算元,把結果存回暫存器,並在旗標(flags)中回報狀態(溢位、零、負、進位)。注意:RISC-V 刻意不設旗標暫存器,比較與分支合一(beq、blt 直接比較兩暫存器),避免旗標成為管線的隱性相依——這是新舊 ISA 設計哲學的有趣對照。
阅读文章 →機器指令特性
指令以位元組合表示(RV32I:固定 32 位元,欄位劃分見第 18 章)。人類使用助憶碼(mnemonic):ADD、LW、BEQ……;運算元亦以符號表示。組合語言到機器碼的翻譯由組譯器完成(第 19 章實際操作)。
阅读文章 →定址模式
opcode 位元數 vs. 位址位元數的拉鋸。技巧包括:擴展 opcode(部分編碼點展開為更長的 opcode)、依指令類型使用不同欄位佈局。原則:愈常用的資訊,位置愈固定——解碼器可以並行地「猜」。
阅读文章 →處理器組織
處理器必須:提取指令、解譯指令、提取資料、處理資料、寫回資料。為此需要:ALU、控制單元、暫存器,以及內部匯流排把它們連起來。
阅读文章 →起點:程式到底在做什麼
1970–80 年代,語意鴻溝(高階語言與機器語言的落差)推動 CISC:更豐富的指令、更複雜的定址,希望「一條指令做一件高階的事」。但對真實程式的動態量測顯示
阅读文章 →超純量 vs. 超管線
兩者可疊加。超純量的效益上限由程式本身的 ILP 決定:量測顯示一般整數程式相鄰指令間的可平行度平均僅 2–3,必須靠大視窗與投機執行去更遠處找平行。
阅读文章 →微操作
指令週期(提取、間接、執行、中斷)可分解為一系列微操作:暫存器間的一次傳輸、一次 ALU 運算、一次記憶體讀寫。每個微操作在一個時脈週期(或子週期)內完成。
阅读文章 →Flynn 分類法
SMP:多個能力相同的處理器,共享同一主記憶體與 I/O,由單一作業系統統一管理,任何處理器都能執行任何工作(對稱)。優點:效能(工作可真平行)、可用性(單一處理器失效不停機)、漸進擴充。
阅读文章 →RISC-V 的緣起與治理
RV32I 小到什麼程度?40 條指令、六種格式、無旗標、無條件碼——一名學生可以在一學期內以 Verilog 完整實作(第三部將證明這一點),卻足以支撐完整的編譯器目標與作業系統。
阅读文章 →總覽
注意兩件事:(1) funct7 的 bit 30 是 add/sub 與 srl/sra 的唯一區分——解碼器只需看這一位;(2) 移位量取 rs2 的低 5 位(0–31)。
阅读文章 →工具鏈與組譯流程
沒有安裝工具鏈也可以使用線上模擬器(如 RARS、Venus)練習;第 26 章我們則以「手工組譯+readmemh」的方式餵程式給自製 CPU。
阅读文章 →M 擴展:乘法與除法
RISC-V 不因除零觸發例外——語言運行期(如 C 的 UB、Java 的 ArithmeticException)自行檢查。硬體簡單、語意可移植。
阅读文章 →特權模式
CSR(Control and Status Register)有獨立的 12 位元位址空間(至多 4096 個)。六條指令(I 型,opcode=SYSTEM)
阅读文章 →硬體思維:與軟體語言的根本差異
模組是硬體的基本封裝單位;實例化一次就是放一份實體電路。第 23 章的 CPU 頂層就是把 ALU、暫存器檔、控制器等模組「接線」起來。
阅读文章 →設計規劃
要點:(1) signed() 讓 < 與 >>> 依二補數語意工作(第 9 章);(2) 移位量取 b[4:0]——正是規格「取 rs2 低 5 位」的直接翻譯;(3) 加法與減法會由合成器共享同一個加法器(B 取反 + 進位,圖見第 9 章)。
阅读文章 →頂層介面與資料路徑
CPU 核心只暴露兩組記憶體埠——把記憶體放在核外(top 模組接線),日後換成快取或匯流排介面(第 3、4 章)都不必改核心。
阅读文章 →管線切割:四組暫存器
兩個細節:(1) rd != 0——x0 永遠不構成相依;(2) exmem_fwd_data 不能直接用 alu_y:若 EX/MEM 那條是 jal,要前遞的是 pc+4;是 lui,要前遞的是 imm。因此前遞值本身也要過一個小多工器。
阅读文章 →驗證策略總覽
同一份測試程式在單週期與管線兩個實作上執行——兩者 ISA 相同、微架構不同,結果必須完全一致。這正是第 1 章「架構 vs. 組織」的實證:架構是合約,組織是實作。
阅读文章 →交通號誌控制系統設計 — PLC + Modbus + SCADA
方案 A(傳統工業自動化方案) > 適用情境:十字路口、產業道路、廠區出入口、隧道號誌等需要高可靠度(MTBF)與符合工業規範(IEC 61131-3、IEC 61508 SIL2)的場域。
阅读文章 →