数字系统设计与Chisel实现 / 高等学校计算机专业系列教材
定价:¥59.00
作者: 刘苍,黄玉金,张伟伟等
出版时间:2025-12-18
出版社:机械工业出版社
- 机械工业出版社
- 9787111793632
- 1-1
- 565462
- 平装
- 2025-12-18
- 291
内容简介
本书从实用性角度出发,对基于Chisel语言的数字系统设计的方法、技术和相关工具进行了系统介绍,主要内容包括:数字系统设计的基础知识、Chisel语言开发环境及仿真测试方法、使用Chisel语言进行数字系统设计的要素、使用Scala语言配置硬件生成的相关方法、复杂的数字系统功能模块的实例,以及对通用化FPGA逻辑结构的展望。书中引入大量设计示例,帮助读者在学习Chisel语法的同时,系统掌握数字系统设计的相关知识。本书既适合作为高校计算机类专业数字系统设计相关课程的教材,也适合从事数字系统设计相关工作的工程师阅读。
目录
目 录
前言
第 1 章 数字系统设计基础 1
1.1 数字系统设计概述 1
1.1.1 什么是数字信号 1
1.1.2 什么是数字电路 2
1.1.3 什么是数字系统 3
1.1.4 现代数字系统的设计流程 3
1.2 基于 FPGA 的数字系统设计
概述 5
1.2.1 FPGA 概述 5
1.2.2 基于 FPGA 的数字系统设计流程 7
1.3 数字系统设计的发展趋势 8
1.3.1 基于框架的低代码设计 8
1.3.2 领域专用处理器 9
1.3.3 异构计算架构 9
1.3.4 安全性设计 10
第 2 章 Chisel 语言概述 11
2.1 FPGA 逻辑设计方法 11
2.1.1 原理图输入法 11
2.1.2 VHDL 设计语言 12
2.1.3 Verilog 设计语言 13
2.1.4 Chisel 设计语言 13
2.1.5 各种设计方法的对比 15
2.2 开发工具的安装 16
2.2.1 IntelliJ IDEA 的安装 16
2.2.2 Icarus Verilog 的安装 19
2.3 使用 IntelliJ IDEA 进行 Chisel
逻辑设计的流程 24
第 3 章 基于 Chisel 语言的程序构建
和基础测试 28
3.1 使用 sbt 构建工程 28
3.1.1 代码组织 28
3.1.2 运行 sbt 脚本 30
3.1.3 生成 Verilog 代码文件 31
3.1.4 工具流 32
3.2 基于 Chisel 语言进行测试33
3.2.1 ScalaTest 33
3.2.2 ChiselTest 35
3.2.3 波形测试 40
3.2.4 打印调试 41
第 4 章 高阶测试及验证 43
4.1 调试 43
4.2 Chisel 设计的测试 43
4.3 多线程测试 48
4.4 仿真验证模拟器 49
第 5 章 数字系统的组成 51
5.1 Chisel 的数据类型和常数 51
5.2 组合逻辑电路 53
5.2.1 逻辑运算 53
VI
5.2.2 算术运算 54
5.2.3 多路选择器 56
5.3 寄存器 57
5.4 Bundle 和 Vec 59
5.4.1 Bundle 59
5.4.2 Vec 61
5.5 Wire、Reg 和 IO 66
第 6 章 模块的定义及例化 68
6.1 Chisel 语言的模块 68
6.2 模块嵌套 71
6.3 算术逻辑单元 74
6.4 批量连接 75
6.5 例化第三方模块 77
第 7 章 组合逻辑电路设计 81
7.1 组合逻辑电路 81
7.2 译码器 83
7.3 编码器 85
7.4 仲裁器 87
7.5 优先级编码器 90
7.6 比较器 90
第 8 章 时序逻辑电路设计 92
8.1 寄存器 92
8.2 计数器 96
8.2.1 递增计数器和递减计数器的
设计 97
8.2.2 通过计数器构造时序 99
8.2.3 计数器优化 100
8.2.4 定时器 101
8.2.5 脉冲宽度调制 102
8.3 移位寄存器 104
8.3.1 并行输出的移位寄存器 105
8.3.2 并行输入的移位寄存器 105
8.4 存储器 106
第 9 章 硬件生成器 110
9.1 Scala 语言简介 110
9.2 使用函数实现轻量级模块 112
9.3 含配置参数的数字电路设计 114
9.3.1 简单的参数化配置 114
9.3.2 样例类 115
9.3.3 含类型参数的函数 116
9.3.4 含类型参数的模块 118
9.3.5 参数化的 Bundle 类型 119
9.4 生成组合逻辑 120
9.5 继承的使用 122
9.6 使用函数式编程进行硬件
生成 125
9.6.1 搜索最小值 126
9.6.2 仲裁树 128
第 10 章 输入信号处理 133
10.1 异步输入 133
10.2 输入信号去抖动 134
10.3 输入信号滤波 136
10.4 将输入信号处理封装为函数 137
10.5 同步复位 138
第 11 章 有限状态机 139
11.1 基本有限状态机 139
11.2 快速输出的 Mealy 型有限状
态机 143
VII
11.3 Moore 型有限状态机和 Mealy
型有限状态机的对比 146
第 12 章 状态机通信互联 149
12.1 闪灯程序示例 149
12.2 含数据通路的状态机 153
12.3 ready/valid 流控接口 158
第 13 章 设计示例 162
13.1 FIFO 缓冲器 162
13.2 串口 165
13.3 FIFO 的设计变体 171
13.3.1 参数化的 FIFO 171
13.3.2 基于标准化接口设计
BubbleFifo 173
13.3.3 双缓冲 FIFO 缓冲器 174
13.3.4 基于寄存器堆的 FIFO 缓
冲器 176
13.3.5 基于片上存储器的 FIFO
缓冲器 179
13.4 多时钟域存储器 181
第 14 章 互联 183
14.1 经典的微处理器总线 183
14.2 片上总线 184
14.2.1 组合式握手协议 185
14.2.2 流水线握手协议 185
14.2.3 I/O 外设设计示例 187
14.2.4 存储器映射外设设计示例 188
14.3 总线和接口标准 191
14.3.1 Wishbone 总线 191
14.3.2 AXI 总线 192
14.3.3 Open Core Protocol 标准 192
14.3.4 其他总线标准 192
第 15 章 Leros 处理器设计 194
15.1 指令集 194
15.2 数据通路 197
15.3 算术逻辑单元 198
15.4 指令译码单元 203
15.5 汇编指令 206
15.6 指令存储器 209
15.7 数据通路的状态机设计 209
第 16 章 通用化 FPGA 逻辑结构
设计 213
16.1 为什么进行通用化 FPGA
逻辑结构设计 213
16.2 可重构通用化 FPGA 逻辑
设计 214
16.2.1 总体设计 214
16.2.2 数据交换模块 215
16.2.3 信号转换模块 216
16.3 原型系统设计和验证 217
16.3.1 可重构通用化 FPGA 逻辑结构
原型系统 217
16.3.2 下一步工作计划 218
16.4 对通用化、标准化逻辑设计
的展望 219
附录 A Chisel 3.6 手册 220
A.1 变量说明 220
A.2 关键词 220
A.3 wire 型信号创建及赋值 220
VIII
A.4 信号构造方法 220
A.5 枚举 Enum 的用法 221
A.6 集合类型 221
A.6.1 Bundle 方法 221
A.6.2 Vec 方法 223
A.7 操作符 224
A.8 代码生成 225
A.9 强制类型转换 226
A.10 标准单元库 227
A.10.1 位操作 227
A.10.2 状态组件及模块的标准单
元库 227
A.10.3 接口 228
A.11 模块的定义和例化 230
参考文献 231
前言
第 1 章 数字系统设计基础 1
1.1 数字系统设计概述 1
1.1.1 什么是数字信号 1
1.1.2 什么是数字电路 2
1.1.3 什么是数字系统 3
1.1.4 现代数字系统的设计流程 3
1.2 基于 FPGA 的数字系统设计
概述 5
1.2.1 FPGA 概述 5
1.2.2 基于 FPGA 的数字系统设计流程 7
1.3 数字系统设计的发展趋势 8
1.3.1 基于框架的低代码设计 8
1.3.2 领域专用处理器 9
1.3.3 异构计算架构 9
1.3.4 安全性设计 10
第 2 章 Chisel 语言概述 11
2.1 FPGA 逻辑设计方法 11
2.1.1 原理图输入法 11
2.1.2 VHDL 设计语言 12
2.1.3 Verilog 设计语言 13
2.1.4 Chisel 设计语言 13
2.1.5 各种设计方法的对比 15
2.2 开发工具的安装 16
2.2.1 IntelliJ IDEA 的安装 16
2.2.2 Icarus Verilog 的安装 19
2.3 使用 IntelliJ IDEA 进行 Chisel
逻辑设计的流程 24
第 3 章 基于 Chisel 语言的程序构建
和基础测试 28
3.1 使用 sbt 构建工程 28
3.1.1 代码组织 28
3.1.2 运行 sbt 脚本 30
3.1.3 生成 Verilog 代码文件 31
3.1.4 工具流 32
3.2 基于 Chisel 语言进行测试33
3.2.1 ScalaTest 33
3.2.2 ChiselTest 35
3.2.3 波形测试 40
3.2.4 打印调试 41
第 4 章 高阶测试及验证 43
4.1 调试 43
4.2 Chisel 设计的测试 43
4.3 多线程测试 48
4.4 仿真验证模拟器 49
第 5 章 数字系统的组成 51
5.1 Chisel 的数据类型和常数 51
5.2 组合逻辑电路 53
5.2.1 逻辑运算 53
VI
5.2.2 算术运算 54
5.2.3 多路选择器 56
5.3 寄存器 57
5.4 Bundle 和 Vec 59
5.4.1 Bundle 59
5.4.2 Vec 61
5.5 Wire、Reg 和 IO 66
第 6 章 模块的定义及例化 68
6.1 Chisel 语言的模块 68
6.2 模块嵌套 71
6.3 算术逻辑单元 74
6.4 批量连接 75
6.5 例化第三方模块 77
第 7 章 组合逻辑电路设计 81
7.1 组合逻辑电路 81
7.2 译码器 83
7.3 编码器 85
7.4 仲裁器 87
7.5 优先级编码器 90
7.6 比较器 90
第 8 章 时序逻辑电路设计 92
8.1 寄存器 92
8.2 计数器 96
8.2.1 递增计数器和递减计数器的
设计 97
8.2.2 通过计数器构造时序 99
8.2.3 计数器优化 100
8.2.4 定时器 101
8.2.5 脉冲宽度调制 102
8.3 移位寄存器 104
8.3.1 并行输出的移位寄存器 105
8.3.2 并行输入的移位寄存器 105
8.4 存储器 106
第 9 章 硬件生成器 110
9.1 Scala 语言简介 110
9.2 使用函数实现轻量级模块 112
9.3 含配置参数的数字电路设计 114
9.3.1 简单的参数化配置 114
9.3.2 样例类 115
9.3.3 含类型参数的函数 116
9.3.4 含类型参数的模块 118
9.3.5 参数化的 Bundle 类型 119
9.4 生成组合逻辑 120
9.5 继承的使用 122
9.6 使用函数式编程进行硬件
生成 125
9.6.1 搜索最小值 126
9.6.2 仲裁树 128
第 10 章 输入信号处理 133
10.1 异步输入 133
10.2 输入信号去抖动 134
10.3 输入信号滤波 136
10.4 将输入信号处理封装为函数 137
10.5 同步复位 138
第 11 章 有限状态机 139
11.1 基本有限状态机 139
11.2 快速输出的 Mealy 型有限状
态机 143
VII
11.3 Moore 型有限状态机和 Mealy
型有限状态机的对比 146
第 12 章 状态机通信互联 149
12.1 闪灯程序示例 149
12.2 含数据通路的状态机 153
12.3 ready/valid 流控接口 158
第 13 章 设计示例 162
13.1 FIFO 缓冲器 162
13.2 串口 165
13.3 FIFO 的设计变体 171
13.3.1 参数化的 FIFO 171
13.3.2 基于标准化接口设计
BubbleFifo 173
13.3.3 双缓冲 FIFO 缓冲器 174
13.3.4 基于寄存器堆的 FIFO 缓
冲器 176
13.3.5 基于片上存储器的 FIFO
缓冲器 179
13.4 多时钟域存储器 181
第 14 章 互联 183
14.1 经典的微处理器总线 183
14.2 片上总线 184
14.2.1 组合式握手协议 185
14.2.2 流水线握手协议 185
14.2.3 I/O 外设设计示例 187
14.2.4 存储器映射外设设计示例 188
14.3 总线和接口标准 191
14.3.1 Wishbone 总线 191
14.3.2 AXI 总线 192
14.3.3 Open Core Protocol 标准 192
14.3.4 其他总线标准 192
第 15 章 Leros 处理器设计 194
15.1 指令集 194
15.2 数据通路 197
15.3 算术逻辑单元 198
15.4 指令译码单元 203
15.5 汇编指令 206
15.6 指令存储器 209
15.7 数据通路的状态机设计 209
第 16 章 通用化 FPGA 逻辑结构
设计 213
16.1 为什么进行通用化 FPGA
逻辑结构设计 213
16.2 可重构通用化 FPGA 逻辑
设计 214
16.2.1 总体设计 214
16.2.2 数据交换模块 215
16.2.3 信号转换模块 216
16.3 原型系统设计和验证 217
16.3.1 可重构通用化 FPGA 逻辑结构
原型系统 217
16.3.2 下一步工作计划 218
16.4 对通用化、标准化逻辑设计
的展望 219
附录 A Chisel 3.6 手册 220
A.1 变量说明 220
A.2 关键词 220
A.3 wire 型信号创建及赋值 220
VIII
A.4 信号构造方法 220
A.5 枚举 Enum 的用法 221
A.6 集合类型 221
A.6.1 Bundle 方法 221
A.6.2 Vec 方法 223
A.7 操作符 224
A.8 代码生成 225
A.9 强制类型转换 226
A.10 标准单元库 227
A.10.1 位操作 227
A.10.2 状态组件及模块的标准单
元库 227
A.10.3 接口 228
A.11 模块的定义和例化 230
参考文献 231








