当前位置:主页 > 书籍配套资源 > 处理器配套资源
《手把手教你设计CPU—RISC-V处理器篇》配套代码

《手把手教你设计CPU—RISC-V处理器篇》配套代码

  • 更新:2022-10-18
  • 大小:21.73 MB
  • 类别:处理器
  • 作者:胡振波
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

编辑推荐

系统介绍RISC-V指令集架构。结合实际RISC-V开源实例进行教学。深入剖析RISC-V处理器的微架构以及代码实现。使读者能够快速掌握并轻松使用RISC-V架构处理器。通过学习实例蜂鸟E200的Verilog代码,您将能成为一名合格的数字IC设计工程师。通过学习本书推荐的完整开源SoC平台,您也可以快速搭建FPGA原型平台,运行完整的软件实例。

内容简介

本书是一本介绍通用CPU设计的入门书,以通俗的语言系统介绍了CPU和RISC-V架构,力求为读者揭开CPU设计的神秘面纱,打开计算机体系结构的大门。本书共分为四部分。靠前部分是CPU与RISC-V的综述,帮助初学者对CPU和RISC-V快速地建立起认识。第二部分讲解如何使用Verilog设计CPU,使读者掌握处理器核的设计精髓。第三部分主要介绍蜂鸟E203配套的SoC和软件平台,使读者实现蜂鸟E203 RISC-V处理器在FPGA原型平台上的运行。第四部分是附录,介绍了RISC-V指令集架构,辅以作者加入的背景知识解读和注解,以便于读者理解。本书不仅适合CPU或芯片设计相关从业者阅读使用,也适合作为大中专院校相关师生学习RISC-V处理器设计(使用Verilog语言)和CPU设计的指导用书。

作者简介

胡振波,上海交通大学电子工程系本科、微电子学院硕士。拥有业界多年ASIC和CPU设计与验证经验,先后在Marvell任职ARM架构CPU设计不错工程师、在Synopsys任职研发经理、在比特大陆任职IC设计总监、在武汉聚芯微电子任职架构师,现致力于推动RISC-V架构在靠前的传播和发展。

目录

  • 第一部分CPU与RISC-V综述
  • 第1章一文读懂CPU之三生三世2
  • 1.1眼看他起高楼,眼看他宴宾客,眼看他楼塌了——CPU众生相3
  • 1.1.1ISA——CPU的灵魂4
  • 1.1.2CISC与RISC5
  • 1.1.332位与64位架构6
  • 1.1.4ISA众生相6
  • 1.1.5CPU的领域之分10
  • 1.2ISA请扛起这口锅——为什么国产CPU尚未足够成功12
  • 1.2.1MIPS系——龙芯和君正12
  • 1.2.2x86系——北大众志、兆芯和海光13
  • 1.2.3Power系——中晟宏芯13
  • 1.2.4Alpha系——申威14
  • 1.2.5ARM系——飞腾、华为海思、展讯和华芯通14
  • 1.2.6背锅侠ISA15
  • 1.3人生已是如此艰难,你又何必拆穿——CPU从业者的无奈17
  • 1.4无敌是多么寂寞——ARM统治着的世界18
  • 1.4.1独乐乐与众乐乐——ARM公司的盈利模式18
  • 1.4.2小个子有大力量——无处不在的Cortex-M系列21
  • 1.4.3移动王者——Cortex-A系列在手持设备领域的巨大成功23
  • 1.4.4进击的巨人——ARM进军PC与服务器领域的雄心25
  • 1.5东边日出西边雨,道是无晴却有晴——RISC-V登场25
  • 1.6原来你是这样的“薯片”——ARM的免费计划28
  • 1.7旧时王谢堂前燕,飞入寻常百姓家——你也可以设计自己的处理器28
  • 第2章大道至简——RISC-V架构之魂29
  • 2.1简单就是美——RISC-V架构的设计哲学30
  • 2.1.1无病一身轻——架构的篇幅30
  • 2.1.2能屈能伸——模块化的指令集32
  • 2.1.3浓缩的都是精华——指令的数量32
  • 2.2RISC-V指令集架构简介33
  • 2.2.1模块化的指令子集33
  • 2.2.2可配置的通用寄存器组34
  • 2.2.3规整的指令编码34
  • 2.2.4简洁的存储器访问指令34
  • 2.2.5高效的分支跳转指令35
  • 2.2.6简洁的子程序调用36
  • 2.2.7无条件码执行37
  • 2.2.8无分支延迟槽37
  • 2.2.9零开销硬件循环38
  • 2.2.10简洁的运算指令38
  • 2.2.11优雅的压缩指令子集39
  • 2.2.12特权模式40
  • 2.2.13CSR寄存器40
  • 2.2.14中断和异常40
  • 2.2.15矢量指令子集40
  • 2.2.16自定制指令扩展41
  • 2.2.17总结与比较41
  • 2.3RISC-V软件工具链42
  • 2.4RISC-V和其他开放架构有何不同44
  • 2.4.1平民英雄——OpenRISC44
  • 2.4.2豪门显贵——SPARC44
  • 2.4.3名校优生——RISC-V45
  • 第3章乱花渐欲迷人眼——盘点RISC-V商业版本与开源版本46
  • 3.1各商业版本与开源版本综述47
  • 3.1.1RocketCore(开源)47
  • 3.1.2BOOMCore(开源)49
  • 3.1.3FreedomSoC(开源)50
  • 3.1.4LowRISCSoC(开源)50
  • 3.1.5PULPinoCoreandSoC(开源)50
  • 3.1.6PicoRV32Core(开源)51
  • 3.1.7SCR1Core(开源)51
  • 3.1.8ORCACore(开源)51
  • 3.1.9AndesCore(商业IP)52
  • 3.1.10MicrosemiCore(商业IP)52
  • 3.1.11CodasipCore(商业IP)53
  • 3.1.12蜂鸟E200Core与SoC(开源)53
  • 3.2总结53
  • 第4章开源RISC-V——蜂鸟E200系列超低功耗Core与SoC54
  • 4.1与众不同的蜂鸟E200处理器55
  • 4.2蜂鸟E200简介——蜂鸟虽小,五脏俱全56
  • 4.3蜂鸟E200型号系列57
  • 4.4蜂鸟E200性能指标58
  • 4.5蜂鸟E200配套SoC59
  • 4.6蜂鸟E200配置选项60
  • 第二部分手把手教你使用Verilog设计CPU
  • 第5章先见森林,后观树木——蜂鸟E200设计总览和顶层介绍65
  • 5.1处理器硬件设计概述66
  • 5.1.1架构和微架构66
  • 5.1.2CPU、处理器、Core和处理器核66
  • 5.1.3处理器设计和验证的特点66
  • 5.2蜂鸟E200处理器核设计哲学67
  • 5.3蜂鸟E200处理器核RTL代码风格介绍68
  • 5.3.1使用标准DFF模块例化生成寄存器68
  • 5.3.2推荐使用assign语法替代if-else和case语法70
  • 5.3.3其他若干注意事项71
  • 5.3.4小结72
  • 5.4蜂鸟E200模块层次划分72
  • 5.5蜂鸟E200处理器核源代码73
  • 5.6蜂鸟E200处理器核配置选项73
  • 5.7蜂鸟E200处理器核支持的RISC-V指令子集74
  • 5.8蜂鸟E200处理器流水线结构74
  • 5.9蜂鸟E200处理器核顶层接口介绍74
  • 5.10总结77
  • 第6章流水线不是流水账——蜂鸟E200流水线介绍78
  • 6.1处理器流水线概述79
  • 6.1.1从经典的五级流水线说起79
  • 6.1.2可否不要流水线——流水线和状态机的关系81
  • 6.1.3深处种菱浅种稻,不深不浅种荷花——流水线的深度81
  • 6.1.4向上生长——越来越深的流水线82
  • 6.1.5向下生长——越来越浅的流水线83
  • 6.1.6总结83
  • 6.2处理器流水线中的乱序83
  • 6.3处理器流水线中的反压84
  • 6.4处理器流水线中的冲突84
  • 6.4.1流水线中的资源冲突84
  • 6.4.2流水线中的数据冲突85
  • 6.5蜂鸟E200处理器的流水线86
  • 6.5.1流水线总体结构86
  • 6.5.2流水线中的冲突87
  • 6.6总结87
  • 第7章万事开头难吗——一切从取指令开始88
  • 7.1取指概述89
  • 7.1.1取指特点89
  • 7.1.2如何快速取指90
  • 7.1.3如何处理非对齐指令91
  • 7.1.4如何处理分支指令92
  • 7.2RISC-V架构特点对于取指的简化97
  • 7.2.1规整的指令编码格式97
  • 7.2.2指令长度指示码放于低位97
  • 7.2.3简单的分支跳转指令98
  • 7.2.4没有分支延迟槽指令100
  • 7.2.5提供明确的静态分支预测依据100
  • 7.2.6提供明确的RAS依据101
  • 7.3蜂鸟E200处理器的取指实现101
  • 7.3.1IFU总体设计思路102
  • 7.3.2Mini-Decode103
  • 7.3.3Simple-BPU分支预测105
  • 7.3.4PC生成109
  • 7.3.5访问ITCM和BIU111
  • 7.3.6ITCM115
  • 7.3.7BIU116
  • 7.4总结116
  • 第8章一鼓作气,执行力是关键——执行117
  • 8.1执行概述118
  • 8.1.1指令译码118
  • 8.1.2指令执行118
  • 8.1.3流水线的冲突119
  • 8.1.4指令的交付119
  • 8.1.5指令发射、派遣、执行、写回的顺序119
  • 8.1.6分支解析121
  • 8.1.7小结121
  • 8.2RISC-V架构特点对于执行的简化121
  • 8.2.1规整的指令编码格式122
  • 8.2.2优雅的16位指令122
  • 8.2.3精简的指令个数122
  • 8.2.4整数指令都是两操作数122
  • 8.3蜂鸟E200处理器的执行实现123
  • 8.3.1执行指令列表123
  • 8.3.2EXU总体设计思路123
  • 8.3.3译码124
  • 8.3.4整数通用寄存器组130
  • 8.3.5CSR寄存器133
  • 8.3.6指令发射派遣134
  • 8.3.7流水线冲突、长指令和OITF139
  • 8.3.8ALU145
  • 8.3.9高性能乘除法157
  • 8.3.10浮点单元158
  • 8.3.11交付159
  • 8.3.12写回159
  • 8.3.13协处理器扩展160
  • 8.3.14小结160
  • 第9章善始者实繁,克终者盖寡——交付161
  • 9.1处理器交付、取消、冲刷162
  • 9.1.1处理器交付、取消、冲刷简介162
  • 9.1.2处理器交付常见实现策略163
  • 9.2RISC-V架构特点对于交付的简化164
  • 9.3蜂鸟E200处理器交付硬件实现164
  • 9.3.1分支预测指令的处理165
  • 9.3.2中断和异常的处理168
  • 9.3.3多周期执行指令的交付169
  • 9.3.4小结169
  • 第10章让子弹飞一会儿——写回170
  • 10.1处理器的写回171
  • 10.1.1处理器写回功能简介171
  • 10.1.2处理器写回常见策略171
  • 10.2蜂鸟E200处理器的写回硬件实现171
  • 10.2.1最终写回仲裁172
  • 10.2.2OITF和长指令写回仲裁174
  • 10.2.3小结177
  • 第11章哈弗还是比亚迪——存储器架构178
  • 11.1存储器架构概述179
  • 11.1.1谁说处理器一定要有缓存179
  • 11.1.2处理器一定要有存储器180
  • 11.1.3ITCM和DTCM182
  • 11.2RISC-V架构特点对于存储器访问指令的简化183
  • 11.2.1仅支持小端格式183
  • 11.2.2无地址自增自减模式183
  • 11.2.3无“一次读多个数据”和“一次写多个数据”指令183
  • 11.3RISC-V架构的存储器相关指令184
  • 11.3.1Load和Store指令184
  • 11.3.2Fence指令184
  • 11.3.3“A”扩展指令184
  • 11.4蜂鸟E200处理器存储器子系统硬件实现185
  • 11.4.1存储器子系统总体设计思路185
  • 11.4.2AGU186
  • 11.4.3LSU190
  • 11.4.4ITCM和DTCM192
  • 11.4.5“A”扩展指令处理195
  • 11.4.6Fence与Fence.I指令处理200
  • 11.4.7BIU202
  • 11.4.8ECC202
  • 11.4.9小结202
  • 第12章黑盒子的窗口——总线接口单元BIU203
  • 12.1片上总线协议概述204
  • 12.1.1AXI204
  • 12.1.2AHB204
  • 12.1.3APB205
  • 12.1.4TileLink205
  • 12.1.5总结比较205
  • 12.2自定义总线协议ICB206
  • 12.2.1ICB总线协议简介206
  • 12.2.2ICB总线协议信号207
  • 12.2.3ICB总线协议时序207
  • 12.3ICB总线的硬件实现210
  • 12.3.1一主多从210
  • 12.3.2多主一从211
  • 12.3.3多主多从212
  • 12.4蜂鸟E200处理器核BIU212
  • 12.4.1BIU简介212
  • 12.4.2BIU微架构213
  • 12.4.3BIU源码分析214
  • 12.5蜂鸟E200处理器SoC总线214
  • 12.5.1SoC总线简介215
  • 12.5.2SoC总线微架构215
  • 12.5.3SoC总线源码分析216
  • 12.6总结216
  • 第13章不得不说的故事——中断和异常217
  • 13.1中断和异常概述218
  • 13.1.1中断概述218
  • 13.1.2异常概述219
  • 13.1.3广义上的异常219
  • 13.2RISC-V架构异常处理机制221
  • 13.2.1进入异常221
  • 13.2.2退出异常224
  • 13.2.3异常服务程序225
  • 13.3RISC-V架构中断定义226
  • 13.3.1中断类型226
  • 13.3.2中断屏蔽228
  • 13.3.3中断等待229
  • 13.3.4中断优先级与仲裁230
  • 13.3.5中断嵌套230
  • 13.3.6总结比较231
  • 13.4RISC-V架构异常相关CSR寄存器232
  • 13.5蜂鸟E200异常处理的硬件实现232
  • 13.5.1蜂鸟E200处理器的异常和中断实现要点232
  • 13.5.2蜂鸟E200处理器的异常类型233
  • 13.5.3蜂鸟E200处理器对于mepc的处理234
  • 13.5.4蜂鸟E200处理器的中断接口234
  • 13.5.5蜂鸟E200处理器CLINT微架构及源码分析235
  • 13.5.6蜂鸟E200处理器PLIC微架构及源码分析238
  • 13.5.7蜂鸟E200处理器交付模块对中断和异常的处理242
  • 13.5.8小结245
  • 第14章最不起眼的,其实是最难的——调试机制246
  • 14.1调试机制概述247
  • 14.1.1交互调试概述247
  • 14.1.2跟踪调试概述249
  • 14.2RISC-V架构的调试机制249
  • 14.2.1调试器软件的实现250
  • 14.2.2调试模式250
  • 14.2.3调试指令251
  • 14.2.4调试机制CSR251
  • 14.2.5调试中断251
  • 14.3蜂鸟E200调试机制的硬件实现251
  • 14.3.1蜂鸟E200交互式调试概述251
  • 14.3.2DTM模块253
  • 14.3.3硬件调试模块253
  • 14.3.4调试中断处理257
  • 14.3.5调试机制CSR寄存器的实现258
  • 14.3.6调试机制指令的实现258
  • 14.3.7小结259
  • 第15章动如脱兔,静若处子——低功耗的诀窍260
  • 15.1处理器低功耗技术概述261
  • 15.1.1软件层面低功耗261
  • 15.1.2系统层面低功耗261
  • 15.1.3处理器层面低功耗262
  • 15.1.4单元层面低功耗262
  • 15.1.5寄存器层面低功耗263
  • 15.1.6锁存器层面低功耗264
  • 15.1.7SRAM层面低功耗264
  • 15.1.8组合逻辑层面低功耗264
  • 15.1.9工艺层面低功耗265
  • 15.2RISC-V架构的低功耗机制265
  • 15.3蜂鸟E200低功耗机制的硬件实现265
  • 15.3.1蜂鸟E200系统层面低功耗265
  • 15.3.2蜂鸟E200处理器层面低功耗267
  • 15.3.3蜂鸟E200单元层面低功耗269
  • 15.3.4蜂鸟E200寄存器层面低功耗269
  • 15.3.5蜂鸟E200锁存器层面低功耗272
  • 15.3.6蜂鸟E200SRAM层面低功耗273
  • 15.3.7蜂鸟E200组合逻辑层面低功耗274
  • 15.3.8蜂鸟E200工艺层面低功耗275
  • 15.4总结275
  • 第16章工欲善其事,必先利其器——RISC-V可扩展协处理器276
  • 16.1专用领域架构DSA277
  • 16.2RISC-V架构的可扩展性278
  • 16.2.1RISC-V的预留指令编码空间278
  • 16.2.2RISC-V的预定义的Custom指令279
  • 16.3蜂鸟E200的协处理器接口EAI279
  • 16.3.1EAI指令的编码279
  • 16.3.2EAI接口信号280
  • 16.3.3EAI流水线接口281
  • 16.3.4EAI存储器接口282
  • 16.3.5EAI接口时序283
  • 16.4蜂鸟E200的协处理器参考示例286
  • 16.4.1示例协处理器需求286
  • 16.4.2示例协处理器指令287
  • 16.4.3示例协处理器实现288
  • 16.4.4示例协处理器性能289
  • 16.4.5示例协处理器代码290
  • 第三部分使用Verilog进行仿真和在FPGASoC原型上运行软件
  • 第17章冒个烟先——运行Verilog仿真测试292
  • 17.1E200开源项目的代码层次结构293
  • 17.2E200开源项目的测试用例294
  • 17.2.1riscv-tests自测试用例294
  • 17.2.2编译ISA自测试用例295
  • 17.3E200开源项目的测试平台(TestBench)298
  • 17.4在VerilogTestBench中运行测试用例299
  • 第18章套上壳子上路——实现SoC和FPGA原型302
  • 18.1FreedomE310SoC简介303
  • 18.2HBird-E200-SoC简介304
  • 18.2.1HBird-E200-SoC组成结构304
  • 18.2.2HBird-E200-SoC代码结构309
  • 18.3HBird-E200-SoCFPGA原型平台311
  • 18.3.1FPGA开发板311
  • 18.3.2生成mcs文件烧写FPGA314
  • 18.3.3JTAG调试器317
  • 18.3.4FPGA原型平台DIY总结320
  • 18.4蜂鸟E200专用FPGA开发板320
  • 第19章画龙点睛——运行和调试软件示例321
  • 19.1Freedom-E-SDK平台简介322
  • 19.2SIRV-E-SDK平台简介323
  • 19.2.1SIRV-E-SDK简介323
  • 19.2.2SIRV-E-SDK代码结构324
  • 19.3使用SIRV-E-SDK运行示例程序325
  • 19.4使用GDB和OpenOCD调试示例程序328
  • 19.5Windows图形化IDE开发工具331
  • 第20章是骡子是马?拉出来遛遛——运行跑分程序332
  • 20.1跑分程序简介333
  • 20.2Dhrystone简介333
  • 20.3运行DhrystoneBenchmark335
  • 20.4CoreMark简介337
  • 20.5运行CoreMarkBenchmark338
  • 20.6总结与比较340
  • 附录部分RISC-V架构详述
  • 附录ARISC-V架构指令集介绍342
  • 附录BRISC-V架构CSR寄存器介绍374
  • 附录CRISC-V架构的PLIC介绍384
  • 附录D存储器模型背景介绍392
  • 附录E存储器原子操作指令背景介绍397
  • 附录FRISC-V指令编码列表400
  • 附录GRISC-V伪指令列表404

资源下载

资源下载地址1:https://box.lenovo.com/l/F5aPLI

相关资源

网友留言