两本FPGA自制CPU的书《CPU设计实战》《 CPU自制入门》分享-FPGA CPLD资料源码分享论坛-FPGA CPLD-ChipDebug

两本FPGA自制CPU的书《CPU设计实战》《 CPU自制入门》分享

该帖子部分内容已隐藏
付费阅读
已售 5
3积分
此内容为付费阅读,请付费后查看

CPU是计算机的核心部件,其发展历程就是人类文明的发展史。随着计算机技术的不断发展, CPU也从一开始的功能简单,到现在已经变成功能强大、应用广泛的芯片。但要想更深入了解 CPU,你需要知道它是如何工作以及为什么这么做的。你需要了解很多与计算机相关的基础知识,才能更好地理解它。下面推荐几本关于 CPU相关的书籍,希望能帮助你了解 CPU,并在实际操作中更好地应用它。

01
CPU设计实战

本书面向CPU设计的初学者,采用循序渐进、层层推进的方式介绍CPU的完整开发过程。

全书包括三部分:第一部分(1~3章)介绍工程化CPU的研发过程以及设计CPU需要掌握的基础知识;第二部分(第4~10章)从一个基本的周期CPU设计开始,逐步引入流水线、指令、例外、中断等功能,并完成总线、TLBMMU、高速缓存等功能的设计;第三部分(11章)为进阶设计内容,涵盖Linux内核、提升主频、双发射流水线、动态调度、访存优化、多核处理器等功能的实现。

图片[1]-两本FPGA自制CPU的书《CPU设计实战》《 CPU自制入门》分享-FPGA CPLD资料源码分享论坛-FPGA CPLD-ChipDebug

图1 CPU设计实战

书籍目录如下:

1章 CPU芯片研发过程概述 1
1.1 处理器和处理器核 1
1.2 芯片产品的研制过程 2
1.3 芯片设计的工作阶段 3
2章 硬件实验平台及FPGA设计流程 5
2.1 硬件实验平台 5
2.1.1 龙芯CPU设计与体系结构教学实验系统 5
2.1.2 龙芯计算机系统能力培养远程实验平台 7
2.2 FPGA的设计流程 8
2.2.1 FPGA的一般设计流程 9
2.2.2 基于Vivado的FPGA设计流程 10
2.2.3 Vivado使用小贴士 33
2.3 任务与实践 35
3章 数字逻辑电路设计基础 36
3.1 数字逻辑电路设计与Verilog代码开发 36
3.1.1 面向硬件电路的设计思维方式 37
3.1.2 行为描述的Verilog编程风格 38
3.1.3 自顶向下的设计划分过程 38
3.1.4 常用数字逻辑电路的Verilog描述 39
3.2 数字逻辑电路功能仿真的常见错误及其调试方法 55
3.2.1 功能仿真波形分析 56
3.2.2 波形异常类错误的调试 60
3.3 进一步使用Vivado 66
3.3.1 定制同步RAM IP核 66
3.3.2 定制异步RAM IP核 68
3.3.3 查看时序结果和资源利用率 69
3.4 任务与实践 69
3.4.1 实践任务一:寄存器堆仿真 70
3.4.2 实践任务二:同步RAM和异步RAM仿真、综合与实现 71
3.4.3 实践任务三:数字逻辑电路的设计与调试 72
4章 简单流水线CPU设计 74
4.1 设计一个简单的单周期CPU 75
4.1.1 设计单周期CPU的总体思路 75
4.1.2 单周期CPU的数据通路设计 76
4.1.3 单周期CPU的控制信号生成 88
4.1.4 复位的处理 91
4.2 不考虑相关冲突的流水线CPU设计 92
4.2.1 添加流水级间缓存 92
4.2.2 同步RAM的引入 93
4.2.3 调整更新PC的数据通路 96
4.2.4 不考虑相关冲突情况下流水线控制信号的设计 96
4.3 CPU设计开发环境(CPU_CDE) 97
4.3.1 快速上手CPU设计的开发环境 97
4.3.2 CPU设计开发环境的组织与结构 99
4.3.3 CPU设计开发环境使用进阶 113
4.4 CPU设计的功能仿真调试技术 117
4.4.1 为什么要用基于Trace比对的调试辅助手段 117
4.4.2 基于Trace比对调试手段的盲区及其对策 119
4.4.3 学会阅读汇编程序和反汇编代码 119
4.4.4 CPU调试中要抓取的信号以及如何看这些信号 124
4.5 指令相关与流水线冲突 125
4.5.1 处理寄存器写后读数据相关引发的流水线冲突 126
4.5.2 转移计算未完成 127
4.6 流水线数据的前递设计 127
4.6.1 前递的数据通路设计 128
4.6.2 前递的流水线控制信号调整 130
4.6.3 前递引发的主频下降 131
4.7 任务与实践 131
4.7.1 实践任务一:简单CPU参考设计调试 132
4.7.2 实践任务二:用阻塞技术解决相关引发的冲突 132
4.7.3 实践任务三:用前递技术解决相关引发的冲突 133
5章 在流水线中添加运算类指令 134
5.1 算术逻辑运算类指令的添加 134
5.1.1 ADD、ADDI和SUB指令的添加 134
5.1.2 SLTI和SLTIU指令的添加 135
5.1.3 ANDI、ORI和XORI指令的添加 135
5.1.4 SLLV、SRLV和SRAV指令的添加 135
5.2 乘除法运算类指令的添加 136
5.2.1 调用Xilin IP实现乘除法运算部件 136
5.2.2 电路级实现乘法器 140
5.2.3 电路级实现除法器 147
5.3 乘除法配套数据搬运指令的添加 154
5.3.1 乘法运算实现为单周期的情况 155
5.3.2 乘法运算实现为多周期流水的情况 155
5.4 任务与实践 156
6章 在流水线中添加转移指令和访存指令 157
6.1 转移指令的添加 157
6.1.1 BGEZ、BGTZ、BLEZ和BLTZ指令 158
6.1.2 J指令 158
6.1.3 BLTZAL和BGEZAL指令 158
6.1.4 JALR指令 158
6.2 访存指令的添加 158
6.2.1 LB、LBU、LH和LHU指令的添加 158
6.2.2 SB和SH指令的添加 159
6.2.3 非对齐访存指令的说明 160
6.2.4 LWL和LWR指令的添加 162
6.2.5 SWL和SWR指令的添加 164
6.3 任务与实践 164
7章 例外和中断的支持 166
7.1 例外和中断的基本概念 166
7.1.1 例外是一套软硬件协同处理的机制 166
7.1.2 精确例外 167
7.2 MIPS指令系统中与例外相关的功能定义 168
7.2.1 CP0寄存器 168
7.2.2 例外产生条件的判定 168
7.2.3 例外入口 170
7.2.4 MFC0和MTC0指令 170
7.2.5 ERET指令 170
7.3 流水线CPU实现例外和中断的设计要点 170
7.3.1 例外检测逻辑 170
7.3.2 精确例外的实现 172
7.3.3 CP0寄存器 173
7.3.4 CP0冲突 179
7.4 任务与实践 180
7.4.1 实践任务一:添加syscall例外支持 181
7.4.2 实践任务二:添加其他例外支持 181
8章 AXI总线接口设计 184
8.1 类SRAM总线 184
8.1.1 主方和从方 185
8.1.2 类SRAM总线接口信号的定义 185
8.1.3 类SRAM总线的读写时序 186
8.1.4 类SRAM总线的约束 189
8.2 类SRAM总线的设计 189
8.2.1 取指设计的考虑 190
8.2.2 访存设计的考虑 195
8.3 AXI总线协议 195
8.3.1 AXI总线信号一览 195
8.3.2 理解AXI总线协议 197
8.3.3 类SRAM总线接口信号与AXI总线接口信号的关系 202
8.4 类SRAM-AXI的转接桥设计 203
8.4.1 转接桥的顶层接口 203
8.4.2 转接桥的设计要求 204
8.4.3 转接桥的设计建议 204
8.5 任务与实践 205
8.5.1 实践任务一:添加类SRAM总线支持 205
8.5.2 实践任务二:添加AXI总线支持 208
8.5.3 实践任务三:完成AXI随机延迟验证 210
9章 TLB MMU设计 211
9.1 TLB模块的基础知识 212
9.1.1 TLB的虚实地址转换 212
9.1.2 TLB的软件访问 214
9.1.3 TLB的软硬件交互机制 215
9.2 TLB模块设计的分析 217
9.3 TLB相关的CP0寄存器与指令的实现 219
9.4 利用TLB进行虚实地址转换及TLB例外 221
9.5 任务与实践 222
9.5.1 实践任务一:TLB模块设计 222
9.5.2 实践任务二:添加TLB相关指令和CP0寄存器 224
9.5.3 实践任务三:添加TLB相关例外支持 225
10章 高速缓存设计 226
10.1 Cache模块的设计 227
10.1.1 Cache的设计规格 227
10.1.2 Cache模块的数据通路设计 228
10.1.3 Cache模块内部的控制逻辑设计 237
10.1.4 Cache的硬件初始化问题 241
10.2 将Cache模块集成至CPU中 242
10.2.1 Cache命中情况下的CPU流水线适配 242
10.2.2 Cache缺失情况下的CPU流水线适配 243
10.2.3 Uncache访问的处理 243
10.3 CACHE指令 245
10.3.1 CACHE指令的定义 245
10.3.2 CACHE指令的实现 247
10.4 性能测试程序 247
10.4.1 Dhrystone 247
10.4.2 Coremark 250
10.5 Cache的性能 251
10.6 任务与实践 252
10.6.1 实践任务一:Cache模块设计 252
10.6.2 实践任务二:在CPU中集成ICache 254
10.6.3 实践任务三:在CPU中集成DCache 255
10.6.4 实践任务:在CPU中添加CACHE指令 256
11章 进阶设计 258
11.1 运行Linu内核 258
11.1.1 复杂SoC搭建 259
11.1.2 CPU的进一步完善 259
11.1.3 调试建议 260
11.2 提升主频的常用方法 261
11.2.1 平衡各级流水线的延迟 261
11.2.2 优化大概率事件的处理逻辑 261
11.2.3 用面积和功耗换时序 262
11.2.4 进一步切分流水线 262
11.3 静态双发流水线的实现 262
11.4 动态调度机制的实现 263
11.4.1 一个双发动态调度流水线的设计实例 263
11.4.2 动态调度中常见电路结构的RTL实现 266
11.5 硬件转移预测技术 266
11.5.1 硬件转移预测的流水线设计框架 267
11.5.2 一个轻量级转移预测器的设计规格 268
11.6 访存优化技术 269
11.6.1 store buffer 269
11.6.2 n-blocking Cache 270
11.6.3 访存乱序执行 271
11.6.4 多级Cache 271
11.6.5 Cache预取 272
11.7 多核处理器的实现 272
11.7.1 多核互联结构 273
11.7.2 多核编号 273
11.7.3 核间中断 273
11.7.4 多核情况下的存储一致性 274
11.7.5 LL-SC指令对的访存原子性 282
附录A 龙芯CPU设计与体系结构教学实验系统 285

本书内容新颖、理论联系实际、图文并茂,适合作为高校计算机及相关专业计算机组成、计算机体系结构、CPU设计等课程的教材或参考书,也可作为从事CPU设计的技术人员的参考读物。

02
CPU自制入门

本书利用FPGA,为读者开启了一个崭新的自制CPU的世界。

全书分为3章,第 1章以介绍CPU为主,同时介绍如何制作存储程序与数据的内存、输入与输出的I/O以及将这些模块连接起来的总线,这些模块可以组合成一个简单的计算机系统。为了让这个计算机系统运转起来,第 2章介绍电路板的设计和制作。第3章为这个计算机系统编写程序,并上机测试。

图片[2]-两本FPGA自制CPU的书《CPU设计实战》《 CPU自制入门》分享-FPGA CPLD资料源码分享论坛-FPGA CPLD-ChipDebug

图2 CPU自制入门

书籍目录如下:

第 1章 CPU的设计与实现 1
1.1 序 2
1.2 计算机系统 4
1.2.1 什么是计算机 4
1.2.2 什么是CPU 5
专栏 CPU的位宽 8
1.2.3 什么是内存 8
1.2.4 什么是I/O 9
专栏 字节序 10
1.2.5 什么是总线 12
专栏 总线的优缺点 14
1.2.6 小结 14
专栏 计算机相关书籍 14
1.3 数字电路基础 15
1.3.1 什么是数字电路 15
1.3.2 数值表达 15
1.3.3 有符号二进制数 16
专栏 比特和字节 17
专栏 1K字节有多大 17
1.3.4 MOSFET的结构 17
1.3.5 逻辑运算 19
1.3.6 CMOS基本逻辑门电路 20
1.3.7 存储元件 21
专栏 建立时间与保持时间 24
1.3.8 组合电路和时序电路 25
1.3.9 时钟同步设计 25
1.3.10 小结 25
专栏 数字电路相关书籍 25
1.4 Verilog HDL语言 26
1.4.1 什么是Verilog HDL 26
1.4.2 电路描述 27
专栏 默认网络类型 32
专栏 组合电路描述中锁存器的推定与Don’t care 37
专栏 正逻辑与负逻辑 42
1.4.3 电路仿真 43
专栏 同步电路中信号变化的时序 45
1.4.4 Verilog HDL的仿真环境 50
1.4.5 小结 56
专栏 Verilog HDL相关书籍 56
1.5 系统蓝图 57
1.5.1 目标系统整体介绍 57
1.5.2 关于本章中的代码 58
专栏 字编址与字节位移 62
1.6 总线的设计与实现 63
1.6.1 总线的设计 63
1.6.2 总线的实现 66
1.6.3 小结 78
1.7 存储器的设计与实现 79
1.7.1 FPGA的RAM区域 79
1.7.2 ROM的设计与实现 81
1.7.3 小结 83
专栏 存储器相关书籍 83
1.8 AZ Processor的设计与实现 84
1.8.1 关于CPU 84
专栏 CPI和MIPS值 93
1.8.2 AZ Processor的设计 93
专栏 指令集架构与微架构 105
1.8.3 AZ Processor的实现 106
1.8.4 小结 159
专栏 计算机架构相关书籍 159
1.9 I/O的设计与实现 162
1.9.1 定时器 162
1.9.2 UART 167
专栏 UART实例 168
1.9.3 GPIO 181
1.9.4 小结 188
专栏 I/O相关书籍 188
1.10 AZPR SoC整体连接 189
1.10.1 各模块的连接 189
1.10.2 时钟模块的实现 191
1.10.3 顶层模块的实现 193
1.10.4 小结 193
1.11 AZPR SoC的仿真 194
1.11.1 仿真模型的编写 194
1.11.2 Testbench的编写 197
1.11.3 执行仿真 200
1.11.4 小结 201
1.12 本章总结 202
第 2章 电路板的设计与制作 203
2.1 序 204
2.2 电路板规格206
2.2.1 电路板名称 206
2.2.2 电路板的构成 206
2.2.3 电路板尺寸 206
2.2.4 电路板层数 207
2.2.5 FPGA选型 207
2.2.6 外围电路的选定 208
专栏 关于FPGA 209
专栏 关于JTAG 211
2.3 元件选型 212
2.3.1 元件选型标准 212
2.3.2 元件选型 212
2.3.3 元件的选购 218
2.4 电路设计 221
2.4.1 下载规格书 222
2.4.2 配置电路 223
2.4.3 外围电路 228
2.4.4 电源电路 232
2.4.5 电路板设计环境 234
2.4.6 使用Eagle设计电路图 236
专栏 关于ULP 241
专栏 Eagle使用方法相关的书籍/说明书 241
2.4.7 完成的电路图 241
2.5 布局设计 247
2.5.1 电路板设计约束条件及布线策略 247
2.5.2 FPGA板的布局设计 248
2.5.3 电源板的布局设计 252
2.5.4 使用Eagle布局 254
2.5.5 完成的布局 259
2.6 制作元件库261
2.6.1 制作Symbol 261
2.6.2 制作Package 263
2.6.3 制作Device 264
2.7 电路板3D模型 269
2.7.1 软件使用说明 269
2.7.2 准备3D模型库 271
专栏 关于3D模型库的管理 278
2.7.3 制作电路板模型 279
2.8 制作感光板电路板 280
2.8.1 整体流程 280
2.8.2 制作光罩 282
2.8.3 粘合光罩 284
2.8.4 曝光 285
2.8.5 显像 288
2.8.6 蚀刻 289
2.8.7 阻焊剂 291
2.8.8 开孔 296
2.8.9 在背面安装VPort接头时的处理 298
2.8.10 制作通孔 299
2.8.11 飞线 300
2.9 使用电路板制造服务 302
2.9.1 电路板制造服务 302
2.9.2 DRC 302
2.9.3 输出Gerber数据 305
2.9.4 检查Gerber数据 306
专栏 执行DFM检查的方法 309
专栏 阻焊层遮罩的印刷设置 312
2.9.5 向P板.com公司下单制板 312
专栏 拼板数据的准备 314
2.9.6 向OLIMEX公司下单制板 318
2.10 组装电路板 321
2.10.1 电源板 321
2.10.2 组装FPGA板 321
2.11 功能测试 323
2.11.1 识别FPGA 323
2.11.2 诊断程序 323
2.12 本章总结 326
第3章 编程 327
3.1 序 328
3.2 开发环境 329
3.2.1 准备工作 329
3.2.2 FPGA开发环境 330
3.2.3 ISE WebPACK 331
3.2.4 UrJTAG 359
专栏 cblsrv-0.1_ft2232 370
3.2.5 交叉汇编程序 370
3.2.6 第 一个程序 376
3.3 串口通信 381
3.3.1 安装Tera Term 381
3.3.2 编写程序 382
专栏 子程序 388
专栏 ASCII码 389
3.3.3 执行程序 390
3.4 程序加载器 391
3.4.1 XMODEM协议 391
3.4.2 编写程序 393
3.4.3 编写加载测试程序 402
3.4.4 执行程序 403
3.5 中断与异常 406
3.5.1 什么是中断 406
3.5.2 编写程序 410
3.5.3 执行程序 414
3.5.4 什么是异常 415
3.5.5 编写程序 415
3.5.6 执行程序 419
3.6 七段数码管 420
3.6.1 什么是七段数码管 420
3.6.2 七段数码管的控制 420
3.6.3 七段数码管计数器概要 422
3.6.4 编写程序 423
3.6.5 执行程序 428
3.7 制作一个实用程序 429
3.7.1 功能概要 429
3.7.2 制作程序 433
3.7.3 执行程序 446
3.8 结语 447

本书可以帮助软件工程师深入了解硬件与底层,开发出高效代码。硬件工程师可以在本书基础上设计定制硬件,开发高速计算机系统。

 

请登录后发表评论