幫助中心 | 我的帳號 | 關於我們

CPU製作入門(基於RISC-V和Chisel電子工程關鍵共性技術)

  • 作者:(日)西山悠太朗//井田健太|責編:喻永光//楊凱|譯者:蔣萌
  • 出版社:科學
  • ISBN:9787030769657
  • 出版日期:2024/01/01
  • 裝幀:平裝
  • 頁數:317
人民幣:RMB 98 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書基於RISC-V和Chisel講解自定義CPU的實現。全書分為5個部分,立足於CPU、存儲器、電腦架構等基礎知識,逐步帶領讀者實現簡單的加減法、分支、比較等基礎指令,理解流水線對於CPU高速化的重要意義及實現,最後應用向量擴展語言實現自定義CPU。要提醒的是,本書所指的「CPU製作」僅限於軟體上的設計和模擬,不涉及FPGA上的實現,
    本書適用於RISC-V初學者,想了解CPU、指令集等底層實現的軟體工程師,工科院校微電子技術、信息技術、電腦科學相關專業的學生。

作者介紹
(日)西山悠太朗//井田健太|責編:喻永光//楊凱|譯者:蔣萌

目錄
第Ⅰ部分  CPU製作的基礎知識
  第1章  什麼是CPU
    1.1  電路能夠描述邏輯的理由
      1.1.1  轉換為數字信號
      1.1.2  描述邏輯運算的電路
      1.1.3  可以描述任何真值表的基本邏輯電路
    1.2  為何能用基本邏輯電路實現CPU
      1.2.1  時序邏輯電路:鎖存器
      1.2.2  有限狀態機
      1.2.3  通過時鐘信號同步
    1.3  CPU的製造流程
  第2章  電腦架構
    2.1  存儲器
      2.1.1  寄存器
      2.1.2  主存
    2.2  電腦的基本處理流程
      2.2.1  取指令(IF)
      2.2.2  指令解碼(ID)
      2.2.3  運算(EX)
      2.2.4  訪存(MEM)
      2.2.5  回寫
  第3章  Chisel基礎
    3.1  什麼是Chisel
    3.2  什麼是面向對象
      3.2.1  類和實例
      3.2.2  繼承
    3.3  Scala的基本語法
      3.3.1  變數var和val
      3.3.2  方法:def()
      3.3.3  集合:Seq
      3.3.4  for表達式
      3.3.5  對象
      3.3.6  命名空間
    3.4  Chisel的基本語法
      3.4.1  位值的基本類型
      3.4.2  運算符
      3.4.3  Module類
      3.4.4  IO對象
      3.4.5  Flipped對象
      3.4.6  信號連接
      3.4.7  組合邏輯電路:Wire/WireDefault
      3.4.8  時序邏輯電路:RegInit
      3.4.9  用Mem定義寄存器文件
      3.4.10  控制電路
      3.4.11  位操作
      3.4.12  用printf調試
第Ⅱ部分  簡單的CPU實現
  第4章  環境架構
    4.1  下載chisel-template
    4.2  用Docker架構運行環境

      4.2.1  安裝Docker
      4.2.2  創建Dockerfile
      4.2.3  創建鏡像
      4.2.4  創建容器
    4.3  指令位列和常量文件
      4.3.1  Instructions.scala
      4.3.2  Consts.scala
    4.4  第Ⅱ部分要實現的指令和Chisel完整代碼
  第5章  取指令的實現
    5.1  Chisel代碼概要
    5.2  Chisel的實現
  第6章  用ChiselTest進行取指令測試
    6.1  ChiselTest的實現
    6.2  測試流程
    6.3  創建Chisel測試代碼
      6.3.1  特徵:trait
      6.3.2  peek()方法
      6.3.3  clock.step()方法
    6.4  創建存儲器用HEX文件
    6.5  用printf輸出調試信號
    6.6  運行測試
    6.7  Docker容器的commit
  第7章  指令解碼器的實現
    7.1  Chisel的實現
      7.1.1  寄存器編號的解碼
      7.1.2  寄存器數據的讀取
      7.1.3  調試信號的輸出
    7.2  運行測試
  第8章  LW指令的實現
    8.1  RISC-V的LW指令定義
    8.2  Chisel的實現
      8.2.1  指令位模式的定義
      8.2.2  CPU和存儲器之間的埠定義
      8.2.3  CPU內部的處理實現
      8.2.4  存儲器的數據讀取實現
    8.3  運行測試
      8.3.1  創建指令文件lw.hex
      8.3.2  存儲器載入文件名的修改
      8.3.3  測試結束條件的修改
      8.3.4  添加調試信號
      8.3.5  運行測試
  第9章  SW指令的實現
    9.1  RISC-V的SW指令定義
    9.2  Chisel的實現
      9.2.1  指令位模式的定義
      9.2.2  CPU和存儲器間的埠定義
      9.2.3  CPU內部的處理實現
      9.2.4  存儲器的數據寫入實現
    9.3  運行測試
      9.3.1  創建指令文件sw.hex

      9.3.2  存儲器載入文件名的修改
      9.3.3  測試結束條件的修改
      9.3.4  添加調試信號
      9.3.5  運行測試
  第10章  加減法指令的實現
    10.1  RISC-V的加減法指令定義
    10.2  Chisel的實現
      10.2.1  指令位模式的定義
      10.2.2  加減法結果的連接(EX階段)
      10.2.3  加減法結果的寄存器回寫(WB階段)
  第11章  邏輯運算的實現
    11.1  RISC-V的邏輯運算指令定義
    11.2  Chisel的實現
      11.2.1  指令位模式的定義
      11.2.2  邏輯運算結果的連接(EX階段)
      11.2.3  邏輯運算結果的寄存器回寫(WB階段)
  第12章  解碼器的強化
    12.1  ALU解碼
      12.1.1  解碼器的強化(ID階段)
      12.1.2  利用解碼信號簡化ALU(EX階段)
    12.2  MEM解碼
      12.2.1  解碼器的強化(ID階段)
      12.2.2  指令解碼的非必要化(MEM階段)
    12.3  WB解碼
      12.3.1  解碼器強化(ID階段)
      12.3.2  指令解碼的非必要化(WB階段)
  第13章  移位運算的實現
    13.1  RISC-V的移位運算指令定義
    13.2  Chisel的實現
      13.2.1  指令位模式的定義
      13.2.2  解碼信號的生成(ID階段)
      13.2.3  移位運算結果的連接(EX階段)
  第14章  比較運算的實現
    14.1  RISC-V的比較運算指令定義
    14.2  Chisel的實現
      14.2.1  指令位模式的定義
      14.2.2  解碼信號的生成(ID階段)
      14.2.3  比較運算結果的連接(EX階段)
  第15章  分支指令的實現
    15.1  RISC-V的分支指令定義
    15.2  Chisel的實現
      15.2.1  指令位模式的定義
      15.2.2  PC的控制(IF階段)
      15.2.3  立即數和解碼信號的生成(ID階段)
      15.2.4  分支可否、跳轉目標地址的計算(EX階段)
  第16章  跳轉指令的實現
    16.1  RISC-V的跳轉指令定義
    16.2  Chisel的實現
      16.2.1  指令位模式的定義
      16.2.2  解碼和操作數數據的讀取(ID階段)

      16.2.3  添加JALR運算(EX階段)
      16.2.4  PC的控制(IF階段)
      16.2.5  ra的回寫(WB階段)
  第17章  立即數載入指令的實現
    17.1  RISC-V的立即數載入指令定義
    17.2  Chisel的實現
      17.2.1  指令位模式的定義
      17.2.2  解碼和操作數數據的讀取(ID階段)
  第18章  CSR指令的實現
    18.1  RISC-V的CSR指令定義
    18.2  Chisel的實現
      18.2.1  指令位模式的定義
      18.2.2  立即數和解碼信號的生成(ID階段)
      18.2.3  op1_data的連接(EX階段)
      18.2.4  CSR的讀寫(MEM階段)
      18.2.5  CSR讀取數據的寄存器回寫(WB階段)
  第19章  ECALL的實現
    19.1  RISC-V的ECALL指令定義
    19.2  Chisel的實現
      19.2.1  指令位模式的定義
      19.2.2  PC的控制(IF階段)
      19.2.3  解碼信號的生成(ID階段)
      19.2.4  CSR寫入(MEM階段)
  第20章  用riscv-tests進行測試
    20.1  riscv-tests的構建
    20.2  將ELF文件轉換為BIN文件
    20.3  BIN文件的十六進位化
    20.4  riscv-tests的路徑條件
    20.5  riscv-tests的執行
      20.5.1  Chisel的實現
      20.5.2  運行測試
    20.6  批量測試腳本
      20.6.1  HEX文件的批量生成:tohex.sh
      20.6.2  riscv-tests的批量運行:riscv-tests.sh
  第21章  試運行C程序
    21.1  創建C程序
    21.2  編譯
    21.3  鏈接
    21.4  機器語言的十六進位化和DUMP文件的創建
    21.5  運行測試
第Ⅲ部分  流水線的實現
  第22章  什麼是流水線
    22.1  流水線的意義
    22.2  創建CPU流水線
    22.3  在第Ⅲ部分完成的Chisel代碼
  第23章  流水線寄存器的設置
    23.1  寄存器的定義
    23.2  IF階段
      23.2.1  取指令和PC控制
      23.2.2  IF/ID寄存器的寫入

    23.3  ID階段
      23.3.1  寄存器編號的解碼和寄存器數據的讀取
      23.3.2  立即數的解碼
      23.3.3  csignals的解碼
      23.3.4  操作數數據的選擇
      23.3.5  生成csr_addr
      23.3.6  ID/EX寄存器的寫入
    23.4  EX階段
      23.4.1  至alu_out的信號連接
      23.4.2  分支指令的處理
      23.4.3  EX/MEM寄存器的寫入
    23.5  MEM階段
      23.5.1  存儲器訪問
      23.5.2  CSR
      23.5.3  wb_data
      23.5.4  寫入MEM/WB寄存器
    23.6  WB階段
  第24章  分支冒險處理
    24.1  什麼是分支冒險
    24.2  Chisel的實現
      24.2.1  禁用IF階段
      24.2.2  禁用ID階段
      24.2.3  增加調試信號
    24.3  分支冒險的測試
      24.3.1  創建用於測試的C程序
      24.3.2  創建HEX文件和DUMP文件
      24.3.3  分支冒險處理前的CPU測試
      24.3.4  分支冒險處理后的CPU測試
  第25章  數據冒險處理
    25.1  什麼是數據冒險
    25.2  直通的Chisel實現
    25.3  停頓的Chisel實現
      25.3.1  添加stall_flg信號(ID階段)
      25.3.2  停頓處理(IF階段)
      25.3.3  BUBBLE化(ID階段)
      25.3.4  添加調試信號
    25.4  數據冒險測試
      25.4.1  ID/WB間數據冒險直通模式
      25.4.2  ID/EX間數據冒險引發停頓→ID/MEM間直通模式
      25.4.3  riscv-tests測試
第Ⅳ部分  向量擴展指令的實現
  第26章  什麼是向量指令
    26.1  什麼是SIMD
    26.2  既有的向量架構
    26.3  RISC-V向量指令和SIMD指令的不同
      26.3.1  SIMD指令的向量寄存器長度
      26.3.2  RVV指令的向量寄存器長度
    26.4  在第Ⅳ部分完成的Chisel代碼
  第27章  VSETVLI指令的實現
    27.1  RISC-V的VSETVLI指令定義

    27.2  VTYPE
      27.2.1  SEW和LMUL
      27.2.2  vill、vta、vma
    27.3  Chisel的實現
      27.3.1  指令位模式的定義
      27.3.2  解碼信號的生成(ID階段)
      27.3.3  向量CSR的寫入(MEM階段)
      27.3.4  VL的寄存器回寫(WB階段)
    27.4  運行測試
      27.4.1  e32/m1測試
      27.4.2  e64/m1測試
      27.4.3  e32/m2測試
  第28章  向量載入指令的實現
    28.1  unit-stride向量載入指令定義
      28.1.1  SEW和EEW
      28.1.2  位配置
    28.2  Chisel的實現
      28.2.1  指令位模式的定義
      28.2.2  DmemPortIo的擴展
      28.2.3  添加向量寄存器
      28.2.4  解碼信號的生成(ID階段)
      28.2.5  向量載入數據的寄存器回寫(WB階段)
      28.2.6  從存儲器讀取向量數據(使用Memory類)
      28.2.7  添加調試信號
    28.3  運行測試
      28.3.1  e32/m1測試
      28.3.2  e64/m1測試
      28.3.3  e32/m2測試
  第29章  向量加法指令VADD.VV的實現
    29.1  RISC-V的VADD.VV指令定義
    29.2  Chisel的實現
      29.2.1  指令位模式的定義
      29.2.2  向量寄存器的讀取(ID階段)
      29.2.3  解碼信號的生成(ID階段)
      29.2.4  添加向量加法器(EX階段)
      29.2.5  加法結果的寄存器回寫(WB階段)
      29.2.6  添加調試信號
    29.3  運行測試
      29.3.1  e32/m1測試
      29.3.2  e64/m1測試
      29.3.3  e32/m2測試
  第30章  向量存儲指令的實現
    30.1  unit-stride向量存儲指令定義
    30.2  Chisel的實現
      30.2.1  指令位模式的定義
      30.2.2  DmemPortIo的擴展
      30.2.3  解碼信號的生成,存儲數據的讀取(ID階段)
      30.2.4  存儲數據的連接(MEM階段)
      30.2.5  向量數據存儲器的寫入(使用Memory類)
    30.3  運行測試

      30.3.1  e32/m1測試
      30.3.2  e64/m1測試
      30.3.3  e32/m2測試
第Ⅴ部分  自定義指令的實現
  第31章  自定義指令的意義
    31.1  單核的性能提升和極限
      31.1.1  摩爾定律
      31.1.2  登納德定律
      31.1.3  登納德定律的崩潰
    31.2  多核並行處理的效率提升和極限
      31.2.1  轉向多核
      31.2.2  並行處理的效率提升極限
    31.3  DSA的可能性
      31.3.1  ASIC
      31.3.2  FPGA
      31.3.3  DSA的缺點
    31.4  DSA和RISC-V
      31.4.1  自由的架構設計
      31.4.2  自定義指令
  第32章  種群統計指令的實現
    32.1  什麼是種群統計指令
    32.2  不實現自定義指令時的種群統計程序
    32.3  自定義指令編譯器(彙編器)實現
      32.3.1  GNU Assembler概要
      32.3.2  添加PCNT指令到GAS
      32.3.3  編譯器的二次構建
      32.3.4  PCNT指令的編譯
    32.4  Chisel的實現
      32.4.1  指令列的定義
      32.4.2  解碼信號的生成(ID階段)
      32.4.3  添加ALU(EX階段)
    32.5  運行測試
附錄  RISC-V的價值
  A.1  開源ISA的重要性
  A.2  RISC-V的應用目標
    A.2.1  兼顧高性能和低成本的DSA
    A.2.2  廉價的通用CPU
    A.2.3  任何人都能輕鬆學習、實踐的教育環境
  A.3  晶元製造的成本壁壘及未來

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032