第 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?双授权协议?