基于FPGA与RISC-V的嵌入式系统设计

基于FPGA与RISC-V的嵌入式系统设计"

作者:顾长怡
ISBN:9787302545385
定价:¥118
字数:千字
页数:
出版时间:2020.02.01
开本:
版次:1-2
装帧:
出版社:清华大学出版社
简介

本书详细介绍了RISC-V指令集及其设计思想,并在此基础上引入了一种称为FARM的软硬件

开发模式,将FPGA同RISC-V CPU软核相结合,并利用Arduino与Make作为软件快速开发工具,

有效地提高了开发效率,使系统设计具有更好的通用性和可移植性。

除了上述有关软硬件的讨论之外,本书的作者还与国内小脚丫FPGA的团队进行了合作,成

功地将书中的大部分内容移植到了小脚丫FPGA旗下的STEP CYC10开发板上,并将相关的技术细

节在书中做了详细陈述,以方便读者的动手实践。

本书内容既有深度,又有广度,对各类从事软硬件开发的科技人员会有很大的参考价值。对

高校相关专业的学生,本书也是一部很好的参考书。

前言

自1948年第一个三极管在美国贝尔实验室问世至今,电子工程领域发生了翻天覆地

的变化。与之相应的是计算机和软件产业的蓬勃兴起,以及嵌入式系统的大规模普及。

传统的嵌入式系统开发多围绕通用处理器展开。但是近年来,FPGA技术的普及和

软核处理器的出现改变了这一局面。特别是RISC-V开源指令集的逐渐普及,更进一步模

糊了软硬件的边界,并对定制化设计提出了更多、更高的要求。

这种新的技术趋势要求工程师能成为通晓软硬件技术的多面手。但是,目前的工程

师教育培训体系依然还停留在过去那种“一个萝卜一个坑”的状态,无论广度还是深度,

都无法跟上行业的发展。而讨论最新技术的相关书籍更是屈指可数。

这次我很高兴看到顾长怡先生愿意将他多年在海外学习与工作所获得的知识和经验

与国内的同行们分享。顾长怡先生是FPGA和嵌入式系统开发技术的专家,他主持设计

的RISC-V处理器,获得了行业设计竞赛的认可。我个人和他也曾有过合作,他在技术方

面的渊博知识和勤恳负责的工作态度,给我留下了深刻的印象。有一次在美国和他会面的

时候,向他提及了RISC-V技术相关的话题,最终引发了他的“奋笔疾书”和今天本书的面

世。相信这本书一定会给国内同行了解FPGA与RISC-V在嵌入式设计中的应用打开一个

新的窗口。

苏公雨

与非网创始人,硬禾理工学院院长

目录

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

作者简介

编辑推荐

随着开源软硬件在嵌入式系统中的广泛应用,基于RISC-V 的开源处理器开始被大家所接受和认可。同时,FPGA的出现模糊了软硬件的界限,使得开源处理器可以以软核的方式在FPGA上实现,并具体应用到嵌入式系统中去。这种FPGA + RISC-V 处理器软核的方式可以很快地针对用户需求,实现不同嵌入式平台的客制化,极大提高了系统的设计灵活度。但是,这种新的方式也对设计人员的知识与技能提出了更高的要求。

为此,笔者结合其多年的海外软硬件设计经验,将其设计的获奖RISC-V 软核引入中国,第一次在国内完整介绍如何从头设计一个基于RISC-V的CPU,将其在FPGA上实现,开发相应的驱动和应用软件,并移植嵌入式操作系统至该CPU的全过程。 本身将理论与实践相结合,以国内流行的小脚丫FPGA开发平台作为实验平台,让读者能自己动手,体会从无到有,实现一个具体软硬件嵌入式系统的乐趣。该书同时也介绍了基于Arduino 开发系统的快速开发方式,大大降低了开发的起步难度。

作者寄语

作者 顾长怡 于1995年免试直升进入上海交通大学本硕联读班,2001年获该校通信与信息系统工程硕士学位。同年赴美,在美国加州的多家高科技公司从事嵌入式系统和FPGA的开发工作,其间还曾获得美国南加州大学集成电路设计专业硕士学位。顾长怡先生对软硬件开发有超过15年的业界经验,他也是美国PulseRain Technology公司的创始人

电子资料

www.luweidong.cn

下一个