注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)操作系統(tǒng)處理器架構(gòu)設(shè)計:基于高層次綜合的RISC-V實現(xiàn)

處理器架構(gòu)設(shè)計:基于高層次綜合的RISC-V實現(xiàn)

處理器架構(gòu)設(shè)計:基于高層次綜合的RISC-V實現(xiàn)

定 價:¥179.00

作 者: [法]伯納德·古森斯
出版社: 機械工業(yè)出版社
叢編項:
標 簽: 暫缺

購買這本書可以去


ISBN: 9787111772927 出版時間: 2025-03-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字數(shù):  

內(nèi)容簡介

  本書是一本非常實用的計算機體系結(jié)構(gòu)入門書,所基于的RISC-V指令集架構(gòu)是一種開源的機器語言,有望成為主流的設(shè)計語言。本書旨在指導讀者動手設(shè)計RISC-V處理器,實現(xiàn)不同的處理器組織,如普通流水線、多周期操作流水線、多線程、多核等。在每一步的實現(xiàn)環(huán)節(jié),都給出開源的C++ HLS代碼,可以在基于FPGA的開發(fā)板上進行集成和測試。本書從設(shè)計的角度介紹計算機體系結(jié)構(gòu),既涵蓋足夠的理論知識,又提供豐富的實驗資源,既可作為面向本科生的計算機體系結(jié)構(gòu)入門教程,又可作為面向FPGA工程師的高層次綜合和RISC-V的實戰(zhàn)指南。

作者簡介

  伯納德·古森斯(Bernard Goossens) 法國佩皮尼昂大學理學院教授,研究領(lǐng)域包括處理器微架構(gòu)、計算機系統(tǒng)等。著有Architecture et micro-architecture des processeurs(Springer,2002)(法語)。

圖書目錄

譯者序
前 言
致 謝
第一部分 單核處理器
第1章 FPGA及高層次綜合概述2
1.1 FPGA中可放置的硬件2
1.2 查找表:一種存儲真值表的硬件3
1.3 組合LUT4
1.4 FPGA的結(jié)構(gòu)6
1.5 FPGA編程7
參考文獻8
第2章 Vitis_HLS、Vivado和Vitis
     IDE工具的設(shè)置和使用9
2.1 獲取硬件9
2.2 獲取軟件:Xilinx Vitis工具10
2.3 在Vitis軟件中安裝開發(fā)板的定義11
2.4 安裝圖書資源12
2.5 使用軟件12
2.5.1 創(chuàng)建項目12
2.5.2 創(chuàng)建IP16
2.5.3 仿真IP20
2.5.4 綜合IP24
2.6 使用Vivado創(chuàng)建設(shè)計32
2.7 加載IP并使用Vitis運行FPGA50
參考文獻61
第3章 RISC-V工具的安裝和使用62
3.1 安裝RISC-V工具鏈和模擬
   器/調(diào)試器62
3.1.1 安裝RISC-V工具鏈62
3.1.2 spike模擬器64
3.1.3 為基于RISC-V FPGA的處理
   器構(gòu)建可執(zhí)行代碼67
3.2 使用GDB進行調(diào)試68
3.2.1 安裝GDB69
3.2.2 安裝OpenOCD69
3.2.3 定義與spike模擬器兼容的
    鏈接器描述文件69
3.2.4 使用鏈接器描述文件進行
   編譯70
3.2.5 為OpenOCD定義spike配置
   文件70
3.2.6 連接spike、OpenOCD和GDB70
3.2.7 調(diào)試過程71
3.3 使用GDB調(diào)試復雜代碼73
第4章 RISC-V體系結(jié)構(gòu)77
4.1 RISC-V指令集體系結(jié)構(gòu)77
4.1.1 RV32I寄存器和RISC-V
   應(yīng)用程序二進制接口77
4.1.2 RV32I指令79
4.1.3 RV32I指令格式80
4.1.4 匯編語法84
4.2 代碼示例86
4.2.1 表達式86
4.2.2 測試87
4.2.3 循環(huán)89
4.2.4 函數(shù)調(diào)用89
參考文獻91
第5章 構(gòu)建具有“取指”“譯碼”
        和“執(zhí)行”功能的處理器92
5.1 HLS編程的一般概念92
5.1.1 關(guān)鍵路徑92
5.1.2 使用更多的計算來減少關(guān)鍵
   路徑93
5.1.3 并行執(zhí)行93
5.2 基本的處理器執(zhí)行時間公式94
5.3 第一步:構(gòu)建更新pc的通路95
5.3.1 fetching_ip設(shè)計95
5.3.2 fetching_ip頂層函數(shù)96
5.3.3 fetch函數(shù)99
5.3.4 execute函數(shù)101
5.3.5 IP運行條件101
5.3.6 使用測試平臺進行IP仿真102
5.3.7 仿真輸出102
5.3.8 fetching_ip綜合103
5.3.9 z1_fetching_ip Vivado項目105
5.3.10 在FPGA上驅(qū)動fetching_ip
      的helloworld.c程序106
5.4 第二步:添加一點譯碼操作來
  計算下一個pc107
5.4.1 RISC-V指令編碼107
5.4.2 fetching_decoding_ip110
5.4.3 fetching_decoding_ip.h文件112
5.4.4 fetch函數(shù)和running_cond_
   update函數(shù)114
5.4.5 decode函數(shù)114
5.4.6 指令執(zhí)行(計算下一個pc)116
5.4.7 使用測試平臺模擬
   fetching_decoding_ip118
5.4.8 fetching_decoding_ip的綜合119
5.4.9 z1_fetching_decoding_ip
   Vivado項目119
5.4.10 驅(qū)動fetching_decoding_ip
     的helloworld.c代碼121
5.5 第三步:填充執(zhí)行級來構(gòu)建
  寄存器通路121
5.5.1 取指、譯碼和執(zhí)行IP:
   fde_ip設(shè)計121
5.5.2 兩種調(diào)試工具:寄存器文件
   轉(zhuǎn)存和代碼反匯編123
5.5.3 IP的運行條件124
5.5.4 fde_ip.h文件124
5.5.5 譯碼函數(shù)和執(zhí)行函數(shù)126
5.5.6 寄存器文件127
5.5.7 計算128
5.5.8 使用測試平臺模擬fde_ip132
5.5.9 fde_ip綜合138
5.5.10 z1_fde_ip Vivado項目138
5.5.11 使用helloworld.c程序
    驅(qū)動FPGA中的fde_ip139
參考文獻140
第6章 構(gòu)建RISC-V處理器141
6.1 rv32i_npp_ip頂層函數(shù)141
6.1.1 rv32i_npp_ip頂層函數(shù)原型、
   局部聲明和初始化141
6.1.2 do…while循環(huán)142
6.2 譯碼更新143
6.3 數(shù)據(jù)存儲器訪問:對齊和大小端143
6.4 execute函數(shù)144
6.4.1 訪存地址的計算144
6.4.2 compute_result函數(shù)145
6.4.3 mem_store函數(shù)146
6.4.4 mem_load函數(shù)147
6.4.5 write_reg函數(shù)148
6.5 用測試平臺模擬rv32i_npp_ip149
6.6 rv32i_npp_ip的綜合153
6.7 z1_rv32i_npp_ip Vivado項目154
6.8 在FPGA上驅(qū)動rv32i_npp_ip
   的helloworld.c程序154
第7章 測試RISC-V處理器156
7.1 用本書的測試程序測試
   rv32i_npp_ip處理器156
7.2 使用官方riscv-tests進行更多測試156
7.2.1 用spike運行riscv-tests156
7.2.2 riscv-tests結(jié)構(gòu)157
7.2.3 使riscv-tests結(jié)構(gòu)適配
   Vitis_HLS環(huán)境160
7.2.4 添加_start.S程序?qū)⑺?br />   測試合并161
7.2.5 在Vitis_HLS中仿真測試
   的testbench162
7.2.6 在Vitis_HLS環(huán)境中運行
   riscv-tests163
7.2.7 在FPGA上測試167
7.3 在rv32i_npp_ip處理器上運行
  基準測試集168
7.3.1 mibench測試集中的
   basicmath_small基準
   測試169
7.3.2 在FPGA上運行basicmath_
   small基準測試174
7.3.3 mibench測試集的其他
   基準測試176
7.3.4 mibench和riscv-tests基準
   在rv32i_npp_ip實現(xiàn)上的
   執(zhí)行時間176
7.4 建議練習:RISC-V的M和F
   指令擴展177
7.4.1 使rv32i_npp_ip設(shè)計適應(yīng)
   RISC-V的M擴展177
7.4.2 使rv32i_npp_ip設(shè)計適應(yīng)
   RISC-V的F擴展178
7.5 調(diào)試提示179
7.5.1 綜合不是仿真:可以禁用
   仿真的某些部分179
7.5.2 無限仿真:用for循環(huán)替換
   do…while循環(huán)179
7.5.3 Frozen IP On FPGA:檢查
   ap_int和ap_uint變量179
7.5.4 Frozen IP On FPGA:檢查
   #ifndef__SYNTHESIS__
   內(nèi)部的計算180
7.5.5 Frozen IP On FPGA:用
   for循環(huán)代替“while
    (!IsDone(...)); ”循環(huán)180
7.5.6 Frozen IP On FPGA:減少
   RISC-V代碼的運行180
7.5.7 FPGA上的非確定性行為:
   檢查初始化180
7.5.8 在FPGA上運行時的調(diào)試
   輸出180
參考文獻180
第8章 構(gòu)建流水線RISC-V處理器181
8.1 第一步:流水線控制181
8.1.1 非流水線微架構(gòu)與流水線
   微架構(gòu)的區(qū)別181
8.1.2 流水級之間的連接結(jié)構(gòu)182
8.1.3 IP頂層函數(shù)183
8.1.4 流水線中的控制流指令
   處理185
8.1.5 fetch_decode流水級186
8.1.6 execute_wb流水級186
8.1.7 IP的仿真與綜合188
8.1.8 使用IP的Vivado項目189
8.1.9 在開發(fā)板上運行Vivado
   項目190
8.1.10 simple_pipeline_ip的進
   一步測試191
8.1.11 非流水線設(shè)計與流水線
    設(shè)計的比較191
8.2 第二步:將流水線分成多個
  流水級192
8.2.1 四級流水線192
8.2.2 流水級之間的連接192
8.2.3 fetch_decode流水級的
   decode部分194
8.2.4 IP的頂層函數(shù)194
8.2.5 執(zhí)行階段的旁路機制195
8.2.6 執(zhí)行階段197
8.2.7 內(nèi)存載入冒險201
8.2.8 訪存階段202
8.2.9 寫回階段202
8.2.10 testbench函數(shù)203
8.2.11 IP綜合204
8.2.12 Vivado項目204
8.2.13 Vivado項目在開發(fā)板上
    的執(zhí)行情況205
8.2.14 rv32i_pp_ip的進一步測試206
8.3 比較二級流水線與四級流水線206
第9章 構(gòu)建多周期流水線RISC-V
    處理器208
9.1 流水線與多周期流水線的區(qū)別208
9.1.1 凍結(jié)流水級的等待信號208
9.1.2 有效的輸入位和輸出位209
9.1.3 取指并計算下一個pc209
9.1.4 多周期流水級的安全結(jié)構(gòu)210
9.1.5 多個多周期流水級210
9.2 IP的頂層函數(shù)211
9.3 流水級213
9.3.1 取指階段213
9.3.2 譯碼階段215
9.3.3 發(fā)射階段217
9.3.4 執(zhí)行階段222
9.3.5 訪存階段226
9.3.6 寫回階段227
9.4 仿真、綜合與運行IP228
9.4.1 IP仿真與綜合228
9.4.2 Vivado項目及實現(xiàn)報告229
9.4.3 在開發(fā)板上運行IP230
9.4.4 multicycle_pipeline_ip的
   進一步測試231
9.5 比較多周期流水線與四級流水線231
9.6 建議練習:將II減少到1233
參考文獻234
第10章 使用多hart流水線構(gòu)建
      RISC-V處理器235
10.1 使用多hart處理器同時處理
   多個線程235
10.2 多hart內(nèi)存模型236
10.3 multihart流水線238
10.3.1 hart的數(shù)量239
10.3.2 multihart的流水級狀態(tài)240
10.3.3 占用信息數(shù)組243
10.3.4 multihart_ip的頂層函數(shù)243
10.3.5 將_to_結(jié)構(gòu)復制到_from_
    結(jié)構(gòu)的new_cycle函數(shù)249
10.3.6 multihart取指階段250
10.3.7 譯碼階段252
10.3.8 發(fā)射階段253
10.3.9 執(zhí)行階段256
10.3.10 訪存階段257
10.3.11 寫回階段260
10.3.12 lock_unlock_update函數(shù)262
10.3.13 run_cond_update函數(shù)262
10.4 模擬multihart_ip263
10.4.1 用不相關(guān)的代碼填充hart263
10.4.2 用并行化代碼填充hart265
10.5 綜合IP269
10.6 Vivado項目和實施報告269
10.7 在開發(fā)板上運行multihart_ip271
10.7.1 運行獨立代碼271
10.7.2 運行并行應(yīng)用程序272
10.7.3 multihart_ip的進一步測試273
10.8 比較multihart_ip與四級流
   水線274
10.8.1 兩個hart274
10.8.2 四個hart275
10.8.3 八個hart276
參考文獻276
第二部分 多核處理器
第11章 連接IP278
11.1 AXI interconnect系統(tǒng)278
11.2 使用外部存儲器IP的非流水
   RISC-V處理器279
11.2.1 具有BRAM接口的頂層
    函數(shù)279
11.2.2 IP的綜合280
11.2.3 Vivado項目280
11.2.4 在開發(fā)板上運行IP284
11.3 通過AXI interconnect連接
    多個CPU和多塊RAM285
11.3.1 多IP設(shè)計285
11.3.2 CPU的頂層函數(shù)286
11.3.3 CPU頭文件和testbench
    代碼287
11.4 多IP設(shè)計的仿真、綜合和運行288
11.4.1 仿真288
11.4.2 綜合289
11.4.3 Vivado項目289
11.4.4 運行多IP設(shè)計294
第12章 多核RISC-V處理器296
12.1 multicycle_pipeline_ip到多核
   的適配296
12.1.1 向頂層函數(shù)原型添加IP的編號297
12.1.2 IP頂層函數(shù)聲明298
12.1.3 IP頂層函數(shù)初始化298
12.1.4 IP頂層函數(shù)主循環(huán)299
12.1.5 寄存器文件初始化299
12.1.6 訪存300
12.2 仿真IP303
12.2.1 在不同的IP上仿真獨立的
    程序303
12.2.2 仿真并行的程序305
12.3 綜合IP309
12.4 Vivado項目309
12.5 在開發(fā)板上運行IP311
12.5.1 運行獨立的程序311
12.5.2 運行并行的程序312
12.6 評估多核IP的并行效率314
參考文獻315
第13章 基于multihart核的多核
     RISC-V處理器316
13.1 從multihart_ip到多核316
13.1.1 multihart IP多核的頂層
   函數(shù)原型和局部聲明316
13.1.2 數(shù)據(jù)存儲器的訪問319
13.2 仿真IP322
13.2.1 仿真獨立的程序322
13.2.2 仿真并行的程序325
13.2.3 綜合IP328
13.2.4 Vivado項目328
13.3 在開發(fā)板上運行IP329
13.3.1 運行獨立的程序329
13.3.2 運行并行的程序331
13.4 評估多核multihart IP的并行
   效率333
第14章 使用Pynq-Z1/Z2開發(fā)
      板上的LED和按鈕進行
     探索335
14.1 訪問開發(fā)板上的按鈕和LED
  的Zynq設(shè)計335
14.2 通過RISC-V處理器訪問按鈕
  和LED的設(shè)計336
14.3 結(jié)論339
縮略詞340

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.stefanvlieger.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號