目录
《手把手教你RISC-V CPU(上) 处理器设计》
第 **分 CPU与RISC-V综述
第 *章 CPU之三生三世 2
*.* 眼看他起*楼,眼看他宴宾客,眼看他楼塌了—CPU众生相 3
*.*.* ISA—CPU的灵魂 4
*.*.2 CISC架构与RISC架构 5
*.*.3 32位架构与64位架构 6
*.*.4 ISA众生相 6
*.*.5 CPU的*域之分 **
*.2 ISA请扛起这口锅—为什么*产CPU尚未足够成熟 *2
*.2.* MIPS系—龙芯和君正 *2
*.2.2 x86系—北大众志、上海兆芯和天津海光 *3
*.2.3 Power系—中晟宏芯 *4
*.2.4 Alpha系—申威 *4
*.2.5 ARM系—飞腾、海思、展讯 *4
*.2.6 RISC-V系—平头哥、芯来科技 *6
*.2.7 背锅侠ISA *6
*.3 人生已如此艰难,你又何*拆穿—CPU从业者的*奈 *8
*.4 *敌者是多么寂寞—ARM统治着的* *9
*.4.* *乐乐与众乐乐—ARM公司的盈利模式 *9
*.4.2 小个子有大力量—*处*在的Cortex-M系列 22
*.4.3 移动*者—Cortex-A系列在手持设备*域的巨大成功 23
*.4.4 进击的巨人—ARM进军PC与服务器*域的雄心 25
*.4.5 ARM当前发展 26
*.5 东边日出西边雨,道是*晴却有晴—RISC-V登场 26
*.5.* 缘起名校 26
*.5.2 兴于开源 27
*.5.3 本土发展 29
*.6 旧时*谢堂前燕,飞入寻常*姓家—你也可以设计自己的处理器 30
第 2章 大道*简—RISC-V架构之魂 3*
2.* 简单*是美—RISC-V架构的设计理念 32
2.*.* *病*身轻—架构的篇幅 32
2.*.2 能屈能伸—模块化的指令集 34
2.*.3 浓缩的*是*华—指令的数量 34
2.2 RISC-V架构简介 35
2.2.* 模块化的指令集 35
2.2.2 可配置的通用寄存器组 36
2.2.3 规整的指令编码 36
2.2.4 简洁的存储器访问指令 37
2.2.5 *效的分支跳转指令 38
2.2.6 简洁的子程序调用 38
2.2.7 *条件码执行 39
2.2.8 *分支延迟槽 40
2.2.9 零开销硬件循环指令 40
2.2.*0 简洁的运算指令 40
2.2.** *雅的压缩指令子集 4*
2.2.*2 *权模式 42
2.2.*3 CSR 42
2.2.*4 中断和异常 42
2.2.*5 P扩展指令子集 43
2.2.*6 矢量指令子集 43
2.2.*7 自定义指令扩展 43
2.2.*8 比较 43
2.3 RISC-V软件工具链 44
2.4 RISC-V和其他开放架构有何*同 47
2.4.* 平民英雄—OpenRISC 47
2.4.2 豪门显贵—SPARC 48
2.4.3 身出*—MIPS 48
2.4.4 名校*生—RISC-V 49
第3章 乱花渐欲迷人眼—盘点RISC-V商业版本与开源版本 50
3.* 各商业版本与开源版本综述 5*
3.*.* Rocket Core 5*
3.*.2 BOOM Core 53
3.*.3 Freedom E3*0 SoC 54
3.*.4 LowRISC SoC 54
3.*.5 PULPino Core与SoC 54
3.*.6 PicoRV32 Core 55
3.*.7 SCR* Core 56
3.*.8 ORCA Core 56
3.*.9 Andes Core 56
3.*.*0 Microsemi Core 56
3.*.** Codasip Core 57
3.*.*2 Nuclei Core 57
3.*.*3 蜂鸟E203处理器核与SoC 58
3.2 小结 59
第4章 开源RISC-V—蜂鸟E203处理器核与SoC 60
4.* 与众*同的蜂鸟E203处理器 6*
4.2 蜂鸟E203处理器简介—蜂鸟虽小,五脏俱* 62
4.3 蜂鸟E203处理器的性能指标 64
4.4 蜂鸟E203处理器的配套SoC 64
4.5 蜂鸟E203处理器的配置选项 66
第二*分 手把手教你使用Verilog设计CPU
第5章 先见森林,后观树木—蜂鸟E203处理器核设计总览和*层 70
5.* 处理器硬件设计概述 7*
5.*.* 架构和微架构 7*
5.*.2 CPU、处理器、Core和处理器核 7*
5.*.3 处理器设计和验证 7*
5.2 蜂鸟E203处理器核的设计理念 72
5.3 蜂鸟E203处理器核的RTL代码风格 73
5.3.* 使用标准DFF模块例化生成寄存器 73
5.3.2 推荐使用assign语法替代if-else和case语法 75
5.3.3 其他若干注意事项 77
5.4 蜂鸟E203模块层次划分 77
5.5 蜂鸟E203处理器核的源代码 78
5.6 蜂鸟E203处理器核的配置选项 78
5.7 蜂鸟E203处理器核支持的RISC-V指令子集 79
5.8 蜂鸟E203处理器核的流水线结构 79
5.9 蜂鸟E203处理器核的*层接口 79
5.*0 小结 82
第6章 流水线*是流水账—蜂鸟E203处理器核流水线 83
6.* 处理器流水线概述 84
6.*.* 从*的5级流水线说起 84
6.*.2 可否*要流水线—流水线和状态机的关系 86
6.*.3 深处种菱浅种稻,*深*浅种荷花—流水线的深度 86
6.*.4 向上生长—越来越深的流水线 87
6.*.5 向下生长—越来越浅的流水线 88
6.2 处理器流水线中的乱序 88
6.3 处理器流水线中的反压 88
6.4 处理器流水线中的冲突 89
6.4.* 流水线中的资源冲突 89
6.4.2 流水线中的数据冲突 90
6.5 蜂鸟E203处理器的流水线 9*
6.5.* 流水线总体结构 9*
6.5.2 流水线中的冲突 92
6.6 小结 92
第7章 万事开头难— *切从取指令开始 93
7.* 取指概述 94
7.*.* 取指*点 94
7.*.2 如何快速取指 95
7.*.3 如何处理地址*对齐的指令 96
7.*.4 如何处理分支指令 97
7.2 RISC-V架构*点对于取指的简化 *02
7.2.* 规整的指令编码格式 *02
7.2.2 指令长度指示码放于低位 *02
7.2.3 简单的分支跳转指令 *03
7.2.4 没有分支延迟槽指令 *04
7.2.5 提供明确的静态分支预测依据 *05
7.2.6 提供明确的RAS依据 *05
7.3 蜂鸟E203处理器的取指实现 *06
7.3.* IFU总体设计思路 *06
7.3.2 简单译码 *08
7.3.3 简单BPU **0
7.3.4 PC生成 **4
7.3.5 访问ITCM和BIU **6
7.3.6 ITCM *20
7.3.7 BIU *20
7.4 小结 *2*
第8章 *鼓作气,执行力是关键—执行 *22
8.* 执行概述 *23
8.*.* 指令译码 *23
8.*.2 指令执行 *23
8.*.3 流水线的冲突 *24
8.*.4 指令的交付 *24
8.*.5 指令发射、派遣、执行、写回的顺序 *24
8.*.6 分支解析 *26
8.2 RISC-V架构的*点对于执行的简化 *26
8.2.* 规整的指令编码格式 *27
8.2.2 *雅的*6位指令 *27
8.2.3 *简的指令个数 *27
8.2.4 整数指令的操作数个数是*或2 *27
8.3 蜂鸟E203处理器的执行实现 *27
8.3.* 执行指令列表 *28
8.3.2 EXU总体设计思路 *28
8.3.3 译码 *29
8.3.4 整数通用寄存器组 *35
8.3.5 CSR *38
8.3.6 指令发射、派遣 *39
8.3.7 流水线冲突、长指令和OITF *43
8.3.8 ALU *49
8.3.9 交付 *62
8.3.*0 写回 *62
8.3.** 协处理器扩展 *62
8.4 小结 *63
第9章 善始者实繁,克*者盖寡—交付 *64
9.* 处理器中指令的交付、取消、冲刷 *65
9.*.* 指令交付、取消、冲刷 *65
9.*.2 指令交付的常见实现策略 *66
9.2 RISC-V架构*点对于交付的简化 *66
9.3 蜂鸟E203处理器中指令交付的硬件实现 *67
9.3.* 分支预测指令的处理 *68
9.3.2 中断和异常的处理 *7*
9.3.3 多周期执行的指令的交付 *7*
9.4 小结 *72
第 *0章 让子弹飞*会儿—写回 *73
*0.* 处理器的写回 *74
*0.*.* 处理器写回功能简介 *74
*0.*.2 处理器常见写回策略 *74
*0.2 蜂鸟E203处理器的写回硬件实现 *74
*0.2.* 最*写回仲裁 *75
*0.2.2 OITF模块和长指令写回仲裁模块 *76
*0.3 小结 *79
第 **章 哈弗还是比亚迪—存储器 *8*
**.* 存储器概述 *82
**.*.* 谁说处理器*定要有缓存 *82
**.*.2 处理器*定要有存储器 *83
**.*.3 ITCM和DTCM *85
**.2 RISC-V架构*点对于存储器访问指令的简化 *86
**.2.* *支持小端格式 *86
**.2.2 *地址自增/自减模式 *86
**.2.3 **次读多个数据和*次写多个数据的指令 *86
**.3 RISC-V架构的存储器访问指令 *87
**.3.* 存储器读和写指令 *87
**.3.2 fence指令和fence.i指令 *87
**.3.3 A扩展指令集 *87
**.4 蜂鸟E203处理器核的存储器子系统硬件实现 *88
**.4.* 存储器子系统总体设计思路 *88
**.4.2 AGU *88
**.4.3 LSU *93
**.4.4 ITCM和DTCM *95
**.4.5 A扩展指令集的硬件实现 *98
**.4.6 fence与fence.i指令的硬件实现 202
**.4.7 BIU 204
**.4.8 ECC 204
**.5 小结 204
第 *2章 黑盒子的窗口—总线接口单元 205
*2.* 片上总线协议概述 206
*2.*.* AXI 206
*2.*.2 AHB 206
*2.*.3 APB 207
*2.*.4 TileLink 207
*2.*.5 总结比较 207
*2.2 自定义总线协议ICB 208
*2.2.* ICB协议简介 208
*2.2.2 ICB协议信号 209
*2.2.3 ICB协议的时序 209
*2.3 ICB的硬件实现 2*4
*2.3.* *主多从 2*4
*2.3.2 多主*从 2*5
*2.3.3 多主多从 2*6
*2.4 蜂鸟E203处理器核BIU 2*7
*2.4.* BIU简介 2*7
*2.4.2 BIU的微架构 2*8
*2.4.3 BIU的源代码 2*8
*2.5 蜂鸟E203处理器SoC总线 2*9
*2.5.* SoC总线简介 2*9
*2.5.2 SoC总线的微架构 220
*2.5.3 SoC总线的源代码 220
*2.6 小结 22*
第 *3章 *得*说的故事—中断和异常 222
*3.* 中断和异常概述 223
*3.*.* 中断概述 223
*3.*.2 异常概述 224
*3.*.3 广义上的异常 224
*3.2 RISC-V架构异常处理机制 226
*3.2.* 进入异常 226
*3.2.2 退出异常 229
*3.2.3 异常服务程序 230
*3.3 RISC-V架构中断定义 23*
*3.3.* 中断类型 23*
*3.3.2 中断屏蔽 233
*3.3.3 中断等待 233
*3.3.4 中断*先级与仲裁 234
*3.3.5 中断嵌套 235
*3.4 RISC-V架构中与中断和异常相关的CSR 236
*3.5 蜂鸟E203处理器中异常处理的硬件实现 236
*3.5.* 蜂鸟E203处理器的异常和中断实现要点 236
*3.5.2 蜂鸟E203处理器支持的中断和异常类型 237
*3.5.3 蜂鸟E203处理器对mepc寄存器的处理 237
*3.5.4 蜂鸟E203处理器的中断接口 238
*3.5.5 蜂鸟E203处理器CLINT微架构及源代码分析 239
*3.5.6 蜂鸟E203处理器PLIC微架构及源代码分析 242
*3.5.7 蜂鸟E203处理器中交付模块对中断和异常的处理 244
*3.6 小结 248
第 *4章 最*起眼的其实是最难的—调试机制 249
*4.* 调试机制概述 250
*4.*.* 交互调试概述 250
*4.*.2 跟踪调试概述 252
*4.2 RISC-V架构的调试机制 252
*4.2.* 调试器软件的实现 253
*4.2.2 调试模式 253
*4.2.3 调试指令 254
*4.2.4 调试模式下的CSR 254
*4.2.5 调试中断 254
*4.3 蜂鸟E203处理器中的调试机制 254
*4.3.* 蜂鸟E203处理器中的交互式调试 254
*4.3.2 DTM 255
*4.3.3 硬件调试模块 256
*4.3.4 调试中断处理 259
*4.3.5 调试模式下CSR的实现 260
*4.3.6 调试机制指令的实现 26*
*4.4 小结 262
第 *5章 动如脱兔,静若处子—低功耗的诀窍 263
*5.* 处理器低功耗技术概述 264
*5.*.* 软件层面的低功耗 264
*5.*.2 系统层面的低功耗 264
*5.*.3 处理器层面的低功耗 265
*5.*.4 模块和单元层面的低功耗 265
*5.*.5 寄存器层面的低功耗 266
*5.*.6 锁存器层面的低功耗 267
*5.*.7 SRAM层面的低功耗 267
*5.*.8 组合逻辑层面的低功耗 267
*5.*.9 工艺层面的低功耗 268
*5.2 RISC-V架构的低功耗机制 268
*5.3 蜂鸟E203处理器低功耗机制的硬件实现 268
*5.3.* 蜂鸟E203处理器在系统层面的低功耗 268
*5.3.2 蜂鸟E203处理器层面的低功耗 270
*5.3.3 蜂鸟E203处理器在单元层面的低功耗 272
*5.3.4 蜂鸟E203处理器在寄存器层面的低功耗 272
*5.3.5 蜂鸟E203处理器在锁存器层面的低功耗 275
*5.3.6 蜂鸟E203处理器在SRAM层面的低功耗 276
*5.3.7 蜂鸟E203处理器在组合逻辑层面的低功耗 277
*5.3.8 蜂鸟E203处理器在工艺层面的低功耗 278
*5.4 小结 278
第 *6章 工欲善其事,*先利其器—RISC-V可扩展协处理器 279
*6.* *域*定架构 280
*6.2 RISC-V架构的可扩展性 28*
*6.2.* RISC-V架构的预留指令编码空间 28*
*6.2.2 RISC-V架构的预定义指令 282
*6.3 蜂鸟E203处理器的协处理器扩展机制—NICE 282
*6.3.* NICE指令的编码 282
*6.3.2 NICE协处理器的接口信号 283
*6.3.3 NICE协处理器的流水线接口 284
*6.3.4 NICE协处理器的存储器接口 285
*6.3.5 NICE协处理器的接口时序 286
*6.4 蜂鸟E203处理器的协处理器参考示例 290
*6.4.* 示例协处理器的实现需求 290
*6.4.2 示例协处理器的自定义指令 29*
*6.4.3 示例协处理器的硬件实现 292
*6.4.4 示例协处理器的软件驱动 292
*6.4.5 示例协处理器的性能分析 294
第三*分 开发实战
第 *7章 先冒个烟—运行Verilog仿真测试 298
*7.* E203开源项目的代码层次结构 299
*7.2 E203开源项目的测试用例 300
*7.2.* riscv-tests自测试用例 300
*7.2.2 编译ISA自测试用例 30*
*7.3 E203 开源项目的测试平台 304
*7.4 在测试平台中运行测试用例 304
第 *8章 套上壳子上路—更多实践 308
附录A RISC-V架构的指令集 3**
附录B RISC-V架构的CSR 34*
附录C RISC-V架构的PLIC 35*
附录D 存储器模型背景 359
附录E 存储器原子操作指令背景 364
附录F RISC-V指令编码列表 367
附录G RISC-V伪指令列表 374
《手把手教你RISC-V CPU(下) 工程与实践》
第 *章 开源蜂鸟E203 MCU总体介绍 *
*.* 蜂鸟E203 MCU的系统结构和*性 *
*.2 蜂鸟E203 MCU的存储资源 2
*.2.* 片上存储资源 2
*.2.2 片外Flash存储资源 2
*.3 蜂鸟E203 MCU的外设资源 3
*.4 蜂鸟E203 MCU的地址分配 3
*.5 蜂鸟E203 MCU的时钟域划分 4
*.6 蜂鸟E203 MCU的电源域划分 5
*.7 蜂鸟E203 MCU的低功耗模式 5
*.8 蜂鸟E203 MCU的*局复位 6
*.9 蜂鸟E203 MCU的上电流程控制 7
*.*0 蜂鸟E203 MCU的*层引脚 7
*.** 蜂鸟E203 MCU的GPIO复用功能 8
*.*2 蜂鸟E203 MCU的中断处理 9
*.*2.* 蜂鸟E203处理器核的异常和中断处理 9
*.*2.2 蜂鸟E203处理器核的中断接口 **
*.*2.3 CLINT模块生成计时器中断和软件中断 *2
*.*2.4 PLIC管理多个外*中断 *3
第 2章 开源蜂鸟E203 MCU的外设 *7
2.* 蜂鸟E203 MCU的外设概述 *7
2.2 PLIC *7
2.3 CLINT *8
2.4 LCLKGEN *8
2.4.* LCLKGEN简介 *8
2.4.2 LCLKGEN的寄存器 *8
2.5 HCLKGEN *8
2.5.* HCLKGEN简介 *8
2.5.2 HCLKGEN的寄存器 *9
2.6 GPIO *9
2.6.* GPIO的功能 *9
2.6.2 GPIO的寄存器 *9
2.6.3 I/O结构和IOF模式 20
2.6.4 MCU各外设复用GPIO引脚 20
2.6.5 GPIO中断 2*
2.6.6 GPIO_PADDIR寄存器 2*
2.6.7 GPIO_PADIN寄存器 2*
2.6.8 GPIO_PADOUT寄存器 2*
2.6.9 GPIO_INTTEN寄存器 22
2.6.*0 GPIO_INTTYPE0和GPIO_INTTYPE*寄存器 22
2.6.** GPIO_INTSTATUS寄存器 22
2.6.*2 GPIO_IOFCFG寄存器 22
2.7 SPI 22
2.7.* SPI的背景知识 22
2.7.2 SPI的*性 25
2.7.3 SPI的寄存器 25
2.7.4 SPI数据线 26
2.7.5 QSPI0的寄存器配置 26
2.7.6 QSPI*和QSPI2的寄存器配置 38
2.8 I2C 4*
2.8.* I2C的背景知识 4*
2.8.2 I2C的功能 42
2.8.3 I2C的寄存器 43
2.8.4 I2C的接口数据线 43
2.8.5 I2C_PRE寄存器 43
2.8.6 I2C_CTR寄存器 44
2.8.7 I2C_TX寄存器和I2C_RX寄存器 44
2.8.8 I2C_CMD寄存器 45
2.8.9 I2C_STATUS寄存器 45
2.8.*0 I2C的常用操作序列 46
2.9 UART 48
2.9.* UART的背景知识 48
2.9.2 UART的*性和功能 49
2.9.3 UART的寄存器 49
2.9.4 UART的接口数据线 50
2.9.5 UART_DLL寄存器和UART_DLM寄存器 50
2.9.6 UART_RBR寄存器 5*
2.9.7 UART_THR寄存器 5*
2.9.8 UART_FCR寄存器 52
2.9.9 UART_LCR寄存器 52
2.9.*0 UART_LSR寄存器 53
2.9.** UART_IER寄存器 53
2.9.*2 UART_IIR寄存器 54
2.*0 PWM 54
2.*0.* PWM的背景知识 54
2.*0.2 PWM的功能和*性 54
2.*0.3 PWM的寄存器 55
2.*0.4 PWM模块的输出信号 55
2.*0.5 TIMx_CMD(x=0,*,2,3)寄存器 55
2.*0.6 TIMx_CFG(x=0,*,2,3)寄存器 56
2.*0.7 TIMx_TH(x=0,*,2,3)寄存器 57
2.*0.8 TIMx_CH0_TH(x=0,*,2,3)寄存器 57
2.*0.9 TIMx_CH*_TH(x=0,*,2,3)寄存器 58
2.*0.*0 TIMx_CH2_TH(x=0,*,2,3)寄存器 58
2.*0.** TIMx_CH3_TH(x=0,*,2,3)寄存器 59
2.*0.*2 TIMx_CNT(x=0,*,2,3)寄存器 60
2.*0.*3 PWM_ENT_CFG寄存器 60
2.*0.*4 PWM_TIMER_EN寄存器 6*
2.** WDT 62
2.**.* WDT的背景知识 62
2.**.2 WDT的*性、功能和结构 62
2.**.3 WDT的寄存器 63
2.**.4 通过WDOGCFG寄存器对WDT进行配置 63
2.**.5 WDT的计数器计数值寄存器—WDOGCOUNT 64
2.**.6 通过WDOGKEY寄存器解锁 65
2.**.7 通过WDOGFEED寄存器“喂狗” 65
2.**.8 WDT的计数器比较值寄存器—WDOGS 66
2.**.9 通过WDOGCMP寄存器配置阈值 66
2.**.*0 WDT产生*局复位 66
2.**.** WDT产生中断 67
2.*2 RTC 67
2.*2.* RTC的背景知识 67
2.*2.2 RTC的*性、功能和结构 67
2.*2.3 RTC的寄存器 68
2.*2.4 通过RTCCFG寄存器进行配置 68
2.*2.5 RTC的计数器计数值寄存器—RTCHI/RTCLO 69
2.*2.6 RTC的计数器比较值寄存器—RTCS 70
2.*2.7 通过RTCCMP寄存器配置阈值 70
2.*2.8 RTC产生中断 70
2.*3 PMU 70
2.*3.* PMU的背景知识 70
2.*3.2 PMU的*性、功能和结构 7*
2.*3.3 PMU的寄存器 72
2.*3.4 通过PMUKEY寄存器解锁 72
2.*3.5 通过PMUSLEEP寄存器进入休眠模式 73
2.*3.6 通过PMUSLEEPI0~PMUSLEEPI7寄存器配置休眠指令序列 73
2.*3.7 通过PMUBACKUP系列寄存器*存关键信息 75
2.*3.8 通过PMUIE寄存器设置唤醒条件 75
2.*3.9 通过PMUWAKEUPI0~PMUWAKEUPI7寄存器配置唤醒指令序列 76
2.*3.*0 通过PMUCAUSE寄存器查看唤醒原因 77
第3章 开源蜂鸟E203 MCU硬件开发平台 78
3.* Nuclei FPGA开发板 78
3.*.* Nuclei DDR200T开发板简介 79
3.*.2 Nuclei DDR200T开发板的硬件功能模块 80
3.*.3 蜂鸟E203 MCU的功能引脚分配 88
3.2 蜂鸟JTAG调试器 89
3.3 总结 90
第4章 软件编译过程 9*
4.* GCC工具链 9*
4.*.* GCC工具链简介 9*
4.*.2 binutils 92
4.*.3 C运行库 93
4.*.4 GCC命令行选项 94
4.2 准备工作 94
4.2.* 安装Linux 94
4.2.2 准备HelloWorld程序 94
4.3 编译过程 95
4.3.* 预处理 95
4.3.2 编译 96
4.3.3 汇编 96
4.3.4 * 97
4.3.5 *步到位的编译 99
4.4 ELF文件 99
4.4.* ELF文件的种类 99
4.4.2 ELF文件的段 *00
4.4.3 查看ELF文件 *00
4.4.4 反汇编 *0*
4.5 嵌入式系统编译的*殊性 *02
4.6 总结 *03
第5章 嵌入式开发的*点与RISC-V GCC工具链 *04
5.* 嵌入式系统开发的*点 *04
5.*.* 交叉编译和远程调试 *04
5.*.2 移植newlib或newlib-nano作为C运行库 *05
5.*.3 引导程序以及中断和异常处理 *06
5.*.4 嵌入式系统的*脚本 *06
5.*.5 减小代码规模 *06
5.*.6 支持printf()函数 *07
5.*.7 提供板级支持* *07
5.2 RISC-V GNU工具链 *08
5.2.* RISC-V GNU工具链的获取 *08
5.2.2 RISC-V GCC工具链的“-march”和“-mabi”选项 *09
5.2.3 RISC-V GCC工具链的“-mcmodel”选项 **3
5.2.4 RISC-V GCC工具链的预定义的宏 **4
5.2.5 RISC-V GNU工具链的使用实例 **5
第6章 RISC-V汇编语言程序设计 **6
6.* 汇编语言概述 **6
6.2 RISC-V汇编程序概述 **7
6.3 RISC-V汇编伪指令 **8
6.4 RISC-V汇编程序伪操作 **8
6.5 RISC-V汇编程序示例 *22
6.5.* 标签 *22
6.5.2 宏 *22
6.5.3 定义常数及其别名 *22
6.5.4 立*数赋值 *23
6.5.5 标签地址赋值 *23
6.5.6 设置浮点数舍入模式 *24
6.5.7 完整实例 *24
6.6 在C/C++程序中嵌入汇编程序 *25
6.6.* GCC内联汇编简介 *26
6.6.2 GCC内联汇编的“输出操作数”和“输入操作数”*分 *27
6.6.3 GCC内联汇编的“可能影响的寄存器或存储器”*分 *28
6.6.4 GCC内联汇编实例* *28
6.6.5 GCC内联汇编实例2 *29
6.6.6 小结 *30
6.7 在汇编程序中调用C/C++语言中的函数 *30
6.8 总结 *3*
第7章 开源蜂鸟E203 MCU的软件开发平台 *32
7.* HBird SDK概述 *32
7.2 HBird SDK的目录结构 *33
7.3 HBird SDK的底层实现解析 *34
7.3.* 移植了newlib的桩函数 *34
7.3.2 支持了printf()函数 *35
7.3.3 提供系统*脚本 *36
7.3.4 系统启动引导程序 *40
7.3.5 系统中断和异常处理 *45
7.3.6 使用newlib-nano减小代码规模 *49
7.4 HBird SDK的使用 *50
7.4.* HBird SDK的环境配置与工具链安装 *50
7.4.2 HBird SDK的运行 *54
第8章 集成开发环境——Nuclei Studio *58
8.* Nuclei Studio的简介、下载与启动 *58
8.*.* Nuclei Studio简介 *58
8.*.2 Nuclei Studio的下载与启动 *58
8.2 使用Nuclei Studio进行蜂鸟E203MCU的开发 *60
第9章 初试蜂鸟E203 MCU开发 *68
9.* 蜂鸟E203 MCU在Nuclei DDR200T开发板中的实现 *68
9.2 蜂鸟调试器的驱动程序的安装和蜂鸟调试器的设置 *75
9.3 基于HBird SDK运行HelloWorld程序 *77
9.3.* 将程序下载*DDR200T开发板 *77
9.3.2 将程序在DDR200T开发板上运行 *78
9.3.3 将程序在DDR200T开发板上调试 *80
9.4 基于Nuclei Studio运行HelloWorld程序 *83
9.4.* 将程序下载*DDR200T开发板 *83
9.4.2 将程序在DDR200T开发板上运行 *86
9.4.3 将程序在DDR200T开发板上调试 *87
第 *0章 Benchmark实验 *90
*0.* 实验目的 *90
*0.2 实验准备 *90
*0.3 实验原理 *90
*0.3.* Dhrystone简介 *9*
*0.3.2 Dhrystone示例程序 *93
*0.3.3 CoreMark简介 *94
*0.3.4 CoreMark示例程序 *95
*0.4 实验步骤 *96
*0.4.* 在HBird SDK中运行Dhrystone示例程序 *96
*0.4.2 在Nuclei Studio中运行Dhrystone示例程序 *98
*0.4.3 在HBird SDK中运行CoreMark示例程序 200
*0.4.4 在Nuclei Studio中运行CoreMark示例程序 202
第 **章 内联汇编实验 205
**.* 实验目的 205
**.2 实验准备 205
**.3 实验原理 205
**.3.* 在C/C++程序中嵌入汇编程序 205
**.3.2 内联汇编示例程序 206
**.4 实验步骤 206
**.4.* 在HBird SDK中运行内联汇编示例程序 206
**.4.2 在Nuclei Studio中运行内联汇编示例程序 208
第 *2章 GPIO实验 2*3
*2.* 实验目的 2*3
*2.2 实验准备 2*3
*2.3 实验原理 2*3
*2.3.* GPIO简介 2*3
*2.3.2 GPIO示例程序 2*4
*2.4 实验步骤 2*5
*2.4.* 在HBird SDK中运行GPIO示例程序 2*5
*2.4.2 在Nuclei Studio中运行GPIO示例程序 2*6
第 *3章 PWM实验 220
*3.* 实验目的 220
*3.2 实验准备 220
*3.3 实验原理 220
*3.3.* PWM简介 220
*3.3.2 PWM示例程序 22*
*3.4 实验步骤 222
*3.4.* 在HBird SDK中运行PWM示例程序 222
*3.4.2 在Nuclei Studio中运行PWM示例程序 224
第 *4章 SPI实验 227
*4.* 实验目的 227
*4.2 实验准备 227
*4.3 实验原理 227
*4.3.* SPI简介 227
*4.3.2 SPI示例程序 228
*4.4 实验步骤 229
*4.4.* 在HBird SDK中运行SPI示例程序 229
*4.4.2 在Nuclei Studio中运行SPI示例程序 23*
第 *5章 I2C实验 235
*5.* 实验目的 235
*5.2 实验准备 235
*5.3 实验原理 235
*5.3.* I2C简介 235
*5.3.2 I2C示例程序 236
*5.4 实验步骤 237
*5.4.* 在HBird SDK中运行I2C示例程序 237
*5.4.2 在Nuclei Studio中运行I2C示例程序 238
第 *6章 中断相关实验 243
*6.* 实验目的 243
*6.2 实验准备 243
*6.3 实验原理 243
*6.3.* 计时器中断和软件中断 243
*6.3.2 计时器中断和软件中断示例程序 244
*6.3.3 外*中断 244
*6.3.4 外*中断示例程序 245
*6.4 实验步骤 246
*6.4.* 在HBird SDK中运行计时器中断与软件中断示例程序 246
*6.4.2 在Nuclei Studio中运行计时器中断与软件中断示例程序 247
*6.4.3 在HBird SDK中运行外*中断示例程序 249
*6.4.4 在Nuclei Studio中运行外*中断示例程序 25*
第 *7章 FreeRTOS的移植与示例程序运行 253
*7.* RTOS概述 253
*7.*.* RTOS的定义 253
*7.*.2 基于RTOS的开发与裸机开发 254
*7.2 常用的实时操作系统 254
*7.3 FreeRTOS概述 255
*7.4 FreeRTOS在蜂鸟E203 MCU中的移植 257
*7.5 FreeRTOS示例程序的运行 26*
*7.5.* FreeRTOS示例程序 26*
*7.5.2 在HBird SDK中运行FreeRTOS示例程序 26*
*7.5.3 在Nuclei Studio中运行FreeRTOS示例程序 262
第 *8章 获取更多资源 265
*8.* 开源蜂鸟E203 MCU文档资源 265
*8.2 开源蜂鸟E203 MCU嵌入式开发实验 265
*8.3 开源蜂鸟E203处理器教学资源 266
*8.4 开源蜂鸟E203论坛 266
作者介绍
《手把手教你RISC-V CPU(上) 处理器设计》 胡振波,芯来科技*办人兼执行官,中*RISC-V*域的先行者,拥有丰富的处理器内核开发经验,曾长期*职于外企,担任处理器内核研发核心岗位负责人。其打造的*内RISC-V开源项目——蜂鸟E203,对*内RISC-V的普及和推广起到了巨大的推动作用。以胡振波为核心*办的芯来科技目前已经成为中*先行的RISC-V处理器内核IP和解决方案公司,推出的嵌入式CPU核系列产品处于中*RISC-V处理器研发与产业化的前列。 《手把手教你RISC-V CPU(下) 工程与实践》 胡振波,拥有上海交通大学电子工程系学士学位和微电子学硕士学位。*内RISC-V社区活跃的贡献者,具有*过*0处理器研发经验,在Marvell和Synopsys等企业负责过多款*性能和低能耗处理器研发工作。20*8年,*办了RISC-V处理器IP和芯片解决方案公司-----芯来科技。