猜你喜欢
基于FPGA与RISC-V的嵌入式系统设计

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

书籍作者:顾长怡 ISBN:9787302545385
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:10187
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书详细介绍了RISC-V指令集及其设计思想,并在此基础上引入了一种称为FARM的软硬件开发模式,将FPGA同RISC-V CPU软核相结合,并利用Arduino与Make作为软件快速开发工具,有效地提高了开发效率,使系统设计具有更好的通用性和可移植性。

除了上述有关软硬件的讨论之外,本书的作者还与国内小脚丫FPGA的团队进行了合作,成功地将书中的大部分内容移植到了小脚丫FPGA旗下的STEP CYC10开发板上,并将相关的技术细节在书中做了详细陈述,以方便读者的动手实践。

本书内容既有深度,又有广度,对各类从事软硬件开发的科技人员会有很大的参考价值。对高校相关专业的学生,本书也是一部很好的参考书。

作者简介

顾长怡 于1995年免试直升上海交通大学本硕联读班,1998年获该校计算机科学与工程学士学位,2001年获该校通信与信息系统工程硕士学位。


同年赴美,在美国加州的多家高科技公司从事嵌入式系统和FPGA的开发工作,其间还曾获得美国南加州大学集成电路设计专业硕士学位。

顾长怡先生对软硬件开发和数字信号处理有着丰富的业界经验,他也是美国PulseRain Technology公司的创始人。

在2018年由RISC-V 基金会官方举办的全球首届RISC-V Soft CPU 设计大赛中,由顾长怡先生主持设计的PulseRain Reindeer 处理器内核在激烈的竞争中脱颖而出,荣获季军。在2019年以物联网安全为主题的第二届竞赛中,他主持设计的PulseRain Rattlesnake处理器成功挫败了所有的黑客模拟攻击,并获综合成绩第一而夺冠。

他同时还是英文学术专著 Building Embedded System - Programmable Hardware 的作者(该书已由美国APress出版社于2016年出版),以及开源软硬件的狂热支持者。

编辑推荐

全球CPU主流架构只有Intel的x86和软银的Arm,两家都需要向设计者收取高昂的授权费。直到加州大学伯克利分校的4位老师开发出免费的开源RISC-V指令集,芯片行业被垄断的局面彻底改变了。

RISC-V架构从未像今天一样被广泛重视,目前基于RISC-V架构下的开发人员相对较少,企业界的RISC-V技术沉淀也不够深厚,当RISC-V指令集开发突然被摆上台面的时候,很多芯片设计厂商发现困难重重,不仅没有合适的开发人员,而且连专业的RISC-V开发资料都很难找到。

本书作者顾长怡先生是FPGA和嵌入式开发的专家,受硬禾理工学院院长苏公雨老师和清华大学出版社编辑的邀请,引发了这位“开源软硬件的狂热支持者”的奋笔疾书,才有了这本图书的问世。老顾不仅文笔流畅,而且图书的内容架构体系非常详尽。

本书为读者们有兴趣了解RISC-V的构建和开发的朋友们提供了一个全景的技术讲解:
FPGA及设计要点
RISC - V指令集
如何设计基于RISC-V指令集的Soft CPU

如何在RISC-V内核上构建外围设备接口
嵌入式软件开发
嵌入式操作系统的移植(以开源的RTOS为例)
如何使用Arduino IDE来开发FPGA上的RISC-V处理器在各种FPGA开发板上如何跑成功RISC-V项目。

这本书围绕RISC-V架构及应用开发,以FPGA为载体,结合主流的Arduino 开发板生态,将RISC-V指令架构、处理核设计、SoC系统搭建、FPGA开发、嵌入式操作系统娓娓道来。让我们一起体会2019 RISC-V官方 CPU设计大赛的一等奖得主的作品。

前言

序语1


前几天,清华大学出版社的杨迪娜编辑在微信中告诉我,她正在编辑一本有关FPGA和RISC-V 系统设计的书。这本书马上就要付印,希望我能抽空浏览该书的电子版,如果觉得写得不错,请我为该书写一个序言,给作者一点鼓励,给读者们一点指点,顺便推荐一下。我一向鼓励年轻人主动工作的热情,于是欣然答应了她的请求。我用一周的空闲时间浏览了该书电子版的全部章节。因为年老力衰,已没有精力反复研读该书的全部内容,只能抽部分重要章节,细细研读。我与作者顾长怡先生素昧平生,从未有过交集。尽管如此,仅就认真阅读过的大部分内容而言,我能明显地感觉到作者是一个有国际阅历,并在嵌入式数字系统设计领域有过多年工作经验,担任过软硬件综合设计任务的高级设计师。他的写作态度十分认真,许多内容确实是作者本人在多年实际工作中的积累,凝聚了作者的全部心血。我从文字中能明显地体会到作者想与国内读者分享设计经验的赤诚之心。


全书文字简洁流畅,内容涉及面很广,几乎包括了现代数字嵌入式系统设计的全部概念。对电子信息专业基础扎实并有一些实际工作经验的年青工程师而言,本书阐述的概念准确清晰,全书各章节内容通俗易懂。为即将进入数字嵌入式应用设计行业的读者介绍了如何进行FPGA应用设计和验证,以及如何在设计中融入RISC-V固核的实用技术和方法。书中对设计者必须掌握的重要概念,例如RTL设计思路、多时钟域、软/硬件资源分配、模块和系统验证的策略等都有深入细致的分析和阐述。毫无疑问,对于想要进入数字嵌入式应用系统设计行业,并要成为一位能熟练应用RISC-V固核,有能力设计出性价比高、性能卓越的实时数据处理系统的优秀工程师,本书是必选读物之一;对于只是想了解硬件设计的软件工程师和系统设计的高级管理人员而言,本书也是一本很好的参考书,它能帮助你理解嵌入式数字应用系统设计中的难点,从而避免陷入困境。


作为在嵌入式数字系统设计领域服务多年的老工程师、老教授,我必须告诉想进入该行业的年轻朋友们:即使顶级聪明的年轻人,也不会只靠读几本书,就能轻易掌握复杂的嵌入式系统设计的全部诀窍。想要完成复杂的、高性价比的应用系统设计,没有任何捷径可走,只能凭借设计者对专业工作的极大兴趣,强烈的责任感,不屈不挠的顽强意志。只有在长期的日常工作中,保持严谨的科学作风,严格遵循数字系统设计方法学,在实践中坚持学习,积累经验,活到老,学到老,不断攀登,才能登上世界技术高峰。


年轻的朋友们,如果你们能以本书作者顾长怡为自己的学习榜样,全身心投入自己热爱并为之献身的数字应用系统设计的科学实践中,面对看似艰难的课题,相信自己的能力,大胆实践、虚心求教、积极交流,我相信你们每个人必定有辉煌的成就。未来属于不怕困难,坚持学习,永不满足,敢于攀登的勇者。


-----夏宇闻 北京航空航天大学退休教授


序语2


2010 年RISC-V诞生。RISC-V的开源战略,吸引了不少用户参与二次开发,也大力推动了RISC-V的生态建设。RISC-V指令集完全开源,吸引了众多IP供应商,IP供应商将提供不同程度的开源IP产品。2018年10月,中国RISC-V产业联盟成立,就吸引了千余家用户参与AI芯片开发,预计5年之内,RISC-V产业在应用量上会有突破性进展。在这一波嵌入式系统开发热潮中,我们欣喜地看到顾长怡先生编写的《基于FPGA与RISC-V的嵌入式系统设计》一书。该书从FPGA内核设计的视角全面介绍了在RISC-V基础上嵌入式系统的设计方法。该书的内容独特,反映了笔者近年来在RISC-V应用开发方面的实战经验。内容安排十分贴近国内近几十年在嵌入式系统领域走过的历程,这种亲近感有助于使原有从事嵌入式系统的人士迅速进入到RISC-V的嵌入式系统开发领域中。


从全书内容叙述中可以看出,笔者是长期从事嵌入式系统应用开发人士,一路从底层走来,进入到集成电路领域,对嵌入式系统软、硬件结构有深刻的认识与理解。笔者从嵌入式系统常规领域(FPGA、51指令集、操作系统移植等内容)出发,将有志于RISC-V的应用者带入了嵌入式系统应用的AI芯片开源平台的前沿技术领域。书中除了全面介绍基于FPGA的RISC-V指令集外,还对外设接口、嵌入式软件开发、操作系统移植、集成开发环境进行了详细论述,并为开发者提供了一个可立即用于实践的综合实验平台。从理论到实际再到实战,是本书的一大特点。


书中最后一章对知识产权保护的论述,无疑是本书的一大亮点。对当前开源平台嵌入式应用中知识产权保护知识的普及具有十分重要的意义

-----资深嵌入式开发专家


序语3



自1948年第一个三极管在美国贝尔实验室问世至今,电子工程领域发生了翻天覆地的变化。与之相应的是计算机和软件产业的蓬勃兴起,以及嵌入式系统的大规模普及。


传统的嵌入式系统开发多围绕通用处理器展开。但是近年来,FPGA技术的普及和软核处理器的出现改变了这一局面。特别是RISC-V开源指令集的逐渐普及,更进一步模糊了软硬件的边界,并对定制化设计提出了更多、更高的要求。


这种新的技术趋势要求工程师能成为通晓软硬件技术的多面手。但是,目前的工程师教育培训体系依然还停留在过去那种“一个萝卜一个坑”的状态,无论广度还是深度,都无法跟上行业的发展。而讨论最新技术的相关书籍更是屈指可数。


这次我很高兴看到顾长怡先生愿意将他多年在海外学习与工作所获得的知识和经验与国内的同行们分享。顾长怡先生是FPGA和嵌入式系统开发技术的专家,他主持设计的RISC-V处理器,获得了行业设计竞赛的认可。我个人和他也曾有过合作,他在技术方面的渊博知识和勤恳负责的工作态度,给我留下了深刻的印象。有一次在美国和他会面的时候,向他提及了RISC-V技术相关的话题,最终引发了他的“奋笔疾书”和今天本书的面世。相信这本书一定会给国内同行了解FPGA与RISC-V在嵌入式设计中的应用打开一个新的窗口。


-------苏公雨 与非网创始人,硬禾理工学院院长


序语4


RISC-V不仅仅是一场技术的革命,更是一场商业模式的伟大变革。在RISC-V之前,占据世界主流的处理器架构是Intel的x86架构和ARM架构,但是这些架构都是闭源指令架构,无论是企业还是个人都很难获得指令架构授权并进行半导体设计的创新。


RISC-V开创性地引领了指令架构的开放,并正在推动着硬件领域的开源创新。以Linux、GCC、LLVM、Hadoop等为代表的开源软件极大地推动了互联网时代的发展,以RISC-V为基石的开源硬件极有可能创造硬件领域的“Linux”,让企业和开发者可以像开发软件一样方便快捷地开发硬件,成为IoT时代伟大技术公司的技术底座。未来是一个让人充满期待的开源硬件时代!


RISC-V在全球学术界和产业界正刮起一阵热潮,但是目前RISC-V方面的书籍,尤其是中文的书籍还比较少,无论是高校还是应用开发者都需要一本具有实际操作指导的书籍,帮助他们了解RISC-V,并且快速地基于RISC-V指令架构进行应用开发。


顾长怡先生是FPGA和嵌入式系统开发的专家,具有丰富的计算机体系结构、嵌入式系统软硬件和FPGA的开发经验。本书中,顾长怡先生将围绕RISC-V架构及应用开发,以FPGA为载体,结合主流的Arduino 开发板生态,将RISC-V指令架构、处理核设计、SoC系统搭建、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 双授权协议

产品特色