《基于FPGA与RISC-V的嵌入式系统设计》求取 ⇩

第1章概述1

1.1背景阐述2

1.2 FPGA6

1.3 RISC-V7

1.4小脚丫FPGA开发平台7

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

1.6嵌入式操作系统8

1.7 Arduino集成开发环境8

1.8模块授权方式8

1.9 PulseRain RTL库9

1.10资料来源9

1.11 代码资源10

第2章FPGA11

2.1 FPGA背景概述12

2.2 FPGA与数字芯片的异同15

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

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

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

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

2.2.5避免使用锁存器19

2.3 FPGA与CPLD的区别20

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

2.4.1VHDL与System Verilog/Verilog21

2.4.2 H LS22

2.4.3 System C23

2.4.4 Chisel/SpinalHDL23

2.5 FPGA的片上内存24

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

2.7 FPGA的DSP Block29

2.8时钟与复位30

2.9时钟域跨越34

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

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

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

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

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

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

2.12.1数字滤波器51

2.12.24倍频采样55

2.12.3复数乘法56

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

2.12.5除法56

2.12.6正弦函数与余弦函数57

2.12.7 CORDIC算法57

2.13其他技巧59

2.13.1寄存器重定时59

2.13.2异或树与多路复用器60

2.13.3虚拟输入输出61

2.13.4迁移路径61

2.14面积与性能的平衡62

2.14.1流水线与并行62

2.14.2小面积设计64

2.14.3 AT2定律65

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

第3章RISC-V指令集69

3.1 RISC-V的历史70

3.28051的CISC指令集与RISC-V的比较71

3.2.1 8051指令集简介71

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

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

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

3.4 RISC-V基础指令集(RV321与RV32E)80

3.4.1RV321与RV32E基础指令集简介81

3.4.2 RISC-V地址空间81

3.4.3 RV321通用寄存器与函数调用约定82

3.4.4 RV321指令格式84

3.4.5 RV321算术与逻辑指令84

3.4.6控制转移指令90

3.4.7内存载入与存储指令99

3.4.8 RV321内存同步指令101

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

3.4.10环境调用与软件断点104

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

3.5RISC-V扩展指令集105

3.5.1乘除法扩展(M Extension)106

3.5.2压缩指令集扩展107

3.6RISC-V特权架构116

3.6.1特权层级117

3.6.2控制状态寄存器118

3.6.3定时器123

3.6.4中断与异常125

3.6.5程序的调试136

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

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

4.2适合于FPGA的设计目标143

4.3 PulseRain Reindeer的设计策略146

4.4PulseRain Reindeer的RTL设计151

4.4.1与FPGA平台相关部分151

4.4.2独立于FPGA平台部分152

4.4.3通用寄存器的设计153

4.4.4 CSR寄存器的实现155

4.4.5时钟定时器的实现155

4.4.6流水线的设计156

4.5处理器验证的方式159

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

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

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

第5章外围设备接口165

5.1 UART166

5.2 I2C和SMBus167

5.3 SPI170

5.4 PWM171

5.5 microSD存储卡172

5.6 PS/2接口173

5.7旋转编码器175

5.8 7段数码管显示器176

5.9 USB177

5.10以太网179

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

6.1目标文件格式186

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

6.3工具链190

6.3.1readelf190

6.3.2 objdump190

6.3.3 objcopy191

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

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

6.5.1 C语言的模块封装192

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

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

6.5.4 volatile与const198

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

6.6.1 C++语言的口水仗199

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

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

6.7MAKE212

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

6.7.2支持内核配置语言的Makefile217

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

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

7.1.1裸金属系统232

7.1.2实时操作系统233

7.1.3通用操作系统234

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

7.2.1Zephyr操作系统简介234

7.2.2串行口的支持235

7.2.3定时器的支持238

7.2.4中断的设置239

7.2.5修改编译链接选项240

7.2.6样本应用程序240

第8章Arduino开发系统243

8.1 Arduino的历史244

8.2 Arduino的技术贡献244

8.3 Arduino开发板245

8.4 Arduino IDE集成开发环境和Arduino Language247

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

8.4.2 Arduino Language250

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

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

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

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

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

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

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

9.1 STEP CYC10开发板简介272

9.2 RISC-V for Step FPGA274

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

9.3.1动态内存的仿真275

9.3.2动态内存的时钟设置277

9.3.3动态内存的时序约束279

9.3.4动态内存的读写测试284

9.4处理器仿真284

9.4.1用Verilator做仿真284

9.4.2用Modelsim做仿真286

9.5外围设备与中断290

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

9.5.2中断映射291

9.5.3中断处理程序292

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

9.7串行口299

9.8GPIO300

9.9 5向按键302

9.10 7段管显示器303

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

9.12开发板示范Sketch305

第10章知识产权保护307

10.1知识产权保护的方式308

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

10.3逆向工程309

10.4协议授权310

10.4.1GPL310

10.4.2 LGPL311

10.4.3 Apache311

10.4.4知识共享312

10.4.5双授权协议312

2020《基于FPGA与RISC-V的嵌入式系统设计》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件。对合法合规的求助,我会当即受理并将下载地址发送给你。