图书目录

第 1 章  概述

1.1?背景阐述? 

1.2?FPGA? 

1.3?RISC-V? 

1.4?小脚丫 FPGA 开发平台? 

1.5?C/C++,Make 与工具链? 

1.6?嵌入式操作系统? 

1.7?Arduino 集成开发环境? 

1.8?模块授权方式? 

1.9?PulseRainRTL库? 

1.10?资料来源? 

1.11?代码资源?

第 2 章 FPGA

2.1?FPGA 背景概述? 

2.2?FPGA 与数字芯片的异同? 

2.2.1?FPGA 与数字芯片在设计流程上的异同? 

2.2.2?FPGA 与数字芯片在功耗上的区别? 

2.2.3?FPGA 与数字芯片在性能上的区别? 

2.2.4?逻辑设计规模的衡量单位? 

2.2.5?避免使用锁存器? 

2.3?FPGA 与 CPLD 的区别? 

2.4?FPGA 开发中硬件设计语言的选择? 

2.4.1?VHDL?与 System?Verilog?/?Verilog? 

2.4.2?HLS? 

2.4.3?System?C? 

2.4.4?Chisel/SpinalHDL? 

2.5?FPGA 的片上内存? 

2.6?用 FPGA 实现双向同步 SRAM 接口? 

2.7?FPGA 的 DSP?Block? 

2.8?时钟与复位? 

2.9?时钟域跨越? 

2.9.1?单个电平信号的时钟域跨越? 

2.9.2?单个脉冲信号的时钟域跨越? 

2.9.3?多比特总线的时钟域跨越? 

2.10?有限状态机的 System?Verilog 模板? 

2.11?高速 IO 与源同步总线(Source?Synchronous?Bus)? 

2.12?FPGA 在数字信号处理中的应用? 

2.12.1?数字滤波器? 

2.12.2?4 倍频采样? 

2.12.3?复数乘法? 

2.12.4?补码,值饱和,负值,绝对值,四舍五入? 

2.12.5?除法? 

2.12.6?正弦函数与余弦函数? 

2.12.7?CORDIC 算法? 

2.13?其他技巧? 

2.13.1?寄存器重定时? 

2.13.2?异或树与多路复用器? 

2.13.3?虚拟输入输出? 

2.13.4?迁移路径? 

2.14?面积与性能的平衡?

2.14.1?流水线与并行?

2.14.2?小面积设计? 

2.14.3? AT定律? 

2.15?数字逻辑与处理器各自适用的领域? 

第 3 章 RISC-V 指令集

3.1?RISC-V 的历史? 

3.2?8051的 CISC 指令集与 RISC-V 的比较? 

3.2.1?8051?指令集简介? 

3.2.2?8051?指令集对处理器设计的负面影响? 

3.2.3?RISC-V 指令集对处理器设计的正面影响? 

3.3?RISC-V 与其他 RISC 指令集的比较?

3.4?RISC-V 基础指令集(RV32I 与 RV32E)?

3.4.1?RV32I?与 RV32E 基础指令集简介?

3.4.2?RISC-V?地址空间? 

3.4.3?RV32I 通用寄存器与函数调用约定? 

3.4.4?RV32I 指令格式? 

3.4.5?RV32I 算术与逻辑指令? 

3.4.6?控制转移指令? 

3.4.7?内存载入与存储指令? 

3.4.8?RV32I 内存同步指令? 

3.4.9?控制与状态寄存器指令? 

3.4.10?环境调用与软件断点? 

3.4.11?基础指令集的面积优化方案? 

3.5?RISC-V 扩展指令集?

3.5.1?乘除法扩展(M?Extension)? 

3.5.2?压缩指令集扩展?

3.6?RISC-V 特权架构??

3.6.1?特权层级? 

3.6.2?控制状态寄存器?

3.6.3?定时器? 

3.6.4?中断与异常? 

3.6.5?程序的调试?

第 4 章  设计基于 RISC-V 指令集的 Soft—CPU

4.1?2018?RISC-V?Soft?CPU?Contest 获奖作品:PulseRain?Reindeer? 

4.2?适合于 FPGA 的设计目标? 

4.3?PulseRain?Reindeer 的设计策略? 

4.4?PulseRain?Reindeer 的 RTL 设计? 

4.4.1?与 FPGA 平台相关部分? 

4.4.2?独立于 FPGA 平台部分? 

4.4.3?通用寄存器的设计? 

4.4.4?CSR 寄存器的实现? 

4.4.5?时钟定时器的实现? 

4.4.6?流水线的设计?

4.5?处理器验证的方式?? 

4.5.1?黑盒(Black?Box)测试与白盒(White?Box)测试?

4.5.2?用 Verilator 做处理器内核的黑盒验证? 

4.5.3?用 Modelsim 做处理器的白盒验证? 

第 5 章 外围设备接口

5.1?UART?? 

5.2?I 2 C 和 SMBus?

5.3?SPI? 

5.4?PWM?

5.5?microSD 存储卡?? 

5.6?PS/2 接口? 

5.7?旋转编码器? 

5.8?7 段数码管显示器? 

5.9?USB? 

5.10?以太网? 

第 6 章  嵌入式软件开发基础

6.1?目标文件格式?

6.2?Link?Script(编译用链接脚本)? 

6.3?工具链?

6.3.1?readelf? 

6.3.2?objdump? 

6.3.3?objcopy? 

6.4?嵌入式系统中高级编程语言的选择? 

6.5?C 语言在嵌入式系统中的应用? 

6.5.1?C 语言的模块封装? 

6.5.2?C 语言的内存对齐访问? 

6.5.3?C 语言的静态编译检查? 

6.5.4?volatile?与?const? 

6.6?C++ 语言在嵌入式系统中的应用? 

6.6.1?C++ 语言的口水仗? 

6.6.2?C++ 语言对 C 的改进?

6.6.3?C++ 语言引入的新概念和新方法? 

6.7?MAKE? 

6.7.1?支持增量编译的 Makefile(Makefile?for?Incremental?Build)?

6.7.2?支持内核配置语言的 Makefile? 

第 7 章  嵌入式操作系统的移植

7.1?嵌入式操作系统的分类? 

7.1.1?裸金属系统? 

7.1.2?实时操作系统?? 

7.1.3?通用操作系统?? 

7.2?Zephyr 操作系统的 RISC-V 移植? 

7.2.1?Zephyr 操作系统简介? 

7.2.2?串行口的支持? 

7.2.3?定时器的支持? 

7.2.4?中断的设置? 

7.2.5?修改编译链接选项? 

7.2.6?样本应用程序? 

第 8 章  Arduino开发系统

8.1?Arduino 的历史? 

8.2?Arduino 的技术贡献? 

8.3?Arduino 开发板? 

8.4?Arduino?IDE 集成开发环境和 Arduino?Language? 

8.4.1?Arduino?IDE 集成开发环境的工作原理? 

8.4.2?Arduino?Language? 

8.5?Arduino?IDE 集成开发环境下第三方开发包的使用和制作? 

8.5.1?Arduino?IDE 第三方开发包的使用? 

8.5.2?Arduino?IDE 第三方开发包的制作? 

8.6?Arduino?IDE 集成开发环境下第三方支持库的使用和制作? 

8.6.1?Arduino?IDE 第三方支持库的使用? 

8.6.2?Arduino?IDE 第三方支持库的制作? 

第 9 章  综合实验平台:小脚丫 STEP FPGA开发板

9.1?STEP?CYC10?开发板简介? 

9.2?RISC-V?for?Step?FPGA? 

9.3?动态内存的访问与时序约束? 

9.3.1?动态内存的仿真? 

9.3.2?动态内存的时钟设置? 

9.3.3?动态内存的时序约束? 

9.3.4?动态内存的读写测试? 

9.4?处理器仿真? 

9.4.1?用 Verilator 做仿真? 

9.4.2?用 Modelsim 做仿真?

9.5?外围设备与中断?

9.5.1?外围设备(RTL 模块)与物理设备?

9.5.2?中断映射? 

9.5.3?中断处理程序?

9.6?外围设备寄存器地址列表? 

9.7?串行口? 

9.8?GPIO? 

9.9?5 向按键? 

9.10?7 段管显示器? 

9.11?三轴加速度传感器 (ADXL345)? 

9.12?开发板示范 Sketch?

 

第 10 章  知识产权保护

10.1?知识产权保护的方式? 

10.2?计算机指令集的知识产权保护? 

10.3?逆向工程? 

10.4?协议授权?? 

10.4.1?GPL? 

10.4.2?LGPL?? 

10.4.3?Apache? 

10.4.4?知识共享? 

10.4.5?双授权协议?