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