敏捷硬件开发语言Chisel与数字系统设计(第2版)
定价:¥69.00
作者: 梁峰等
出版时间:2026-05
出版社:电子工业出版社
- 电子工业出版社
- 9787121526282
- 1-1
- 16开
- 2026-05
- 448
- 工学
- 电子信息类
- 电子信息与电气
- 本科 研究生及以上
内容简介
集成电路设计复杂度的攀升使传统硬件描述语言的局限凸显,Chisel凭借高层次抽象与敏捷特性成为产业的核心支撑。本书紧跟Chisel 7.x与CIRCT编译框架进展,优化内容体系、强化工程实践,契合芯片自主创新需求,为读者提供从理论到工业级设计的完整指引。全书共13章,形成了知识闭环:第1章奠定Chisel和Scala认知与环境基础;第2~3章详解Scala语法、Chisel 7.3配置及数据类型;第4~6章覆盖硬件类型使用、控制结构适配及标准库原语调用;第7~9章阐述Verilog生成、黑盒衔接、多时钟域设计及代码复用技巧;第10章解决命名管理、版本迁移等实践痛点;第11~13章通过处理器设计、流控体系及工业案例,呈现复杂系统设计全流程。本书提供配套的电子课件PPT、课后练习参考答案、教学大纲、程序源代码及相关工程案例源码等。
目录
目 录
第1章 新型敏捷硬件开发语言——Chisel和Scala 1
1.1 最好的宿主——什么是Scala 1
1.2 敏捷开发——什么是Chisel 1
1.3 Scala入门——让你的代码跑起来 3
1.3.1 Scala的安装方法 3
1.3.2 使用Scala解释器 4
1.3.3 运行Scala脚本 4
1.3.4 编译非脚本文件 5
1.3.5 使用IDEA开发Scala项目 5
1.3.6 总结 7
1.4 章节安排 7
1.5 芯片自主创新:历史传承、产业实践与技术路径 8
1.5.1 古代工程技术中的系统思维 8
1.5.2 芯片产业技术实践的多维观察 8
1.5.3 Chisel学习与工程实践方法 9
1.6 参考文献 9
1.7 课后练习 9
第2章 Chisel入门与Scala变量函数基础 11
2.1 Scala变量定义与基本类型 11
2.1.1 变量定义的本质与规则 11
2.1.2 Scala的基本类型体系 13
2.1.3 函数及其多种形态 15
2.2 Chisel 7.3开发环境搭建 22
2.2.1 环境要求与软件版本 22
2.2.2 安装步骤 23
2.2.3 项目结构与配置 24
2.2.4 开发环境测试 25
2.3 Chisel 7.3的核心特性与编译流程 26
2.3.1 Chisel 7.3的包结构 26
2.3.2 编译流程详解 26
2.3.3 为什么使用SystemVerilog 27
2.3.4 编译API详解 28
2.3.5 多时钟域处理 28
2.3.6 常见问题与解决方案 29
2.4 CIRCT后端与编译优化 30
2.4.1 CIRCT后端简介 30
2.4.2 firtool工具详解 31
2.4.3 与传统Chisel 3.x流程的对比 31
2.5 总结 32
2.6 课后练习 33
第3章 Chisel数据类型与Scala集合应用 35
3.1 Chisel数据类型概述 35
3.2 Chisel数据类型层次结构 35
3.3 基本数据类型 36
3.3.1 Bits抽象类型 36
3.3.2 UInt与SInt 37
3.3.3 Bool类型 37
3.3.4 Clock和Reset 38
3.4 复合数据类型 39
3.4.1 Bundle 39
3.4.2 Vec 40
3.4.3 MixedVec 41
3.5 类型转换 41
3.5.1 UInt与SInt的相互转换 41
3.5.2 Bool与UInt的相互转换 42
3.5.3 类型转换时的宽度处理 42
3.6 操作符 42
3.7 宽度推断 45
3.7.1 宽度推断规则详解 45
3.7.2 强制指定宽度 46
3.7.3 宽度控制的最佳实践 46
3.7.4 DontCare的使用 46
3.8 Scala集合在Chisel中的应用 46
3.8.1 数组与数组缓冲 47
3.8.2 列表与列表缓冲 48
3.8.3 元组 49
3.8.4 映射与集合 49
3.8.5 Scala集合与Chisel Vec的对比 50
3.9 总结 51
3.10 课后练习 51
第4章 Chisel硬件设计中的操作、控制与分层 53
4.1 基础硬件操作:构建电路的“原子部件” 53
4.1.1 硬件类型体系与核心特性 53
4.1.2 硬件赋值的核心规则 59
4.2 Scala控制结构:组织硬件逻辑的“工具” 59
4.2.1 条件控制结构:硬件的“分支逻辑” 60
4.2.2 循环控制结构:硬件的“重复逻辑” 62
4.2.3 异常与作用域控制:硬件的“安全性保障” 65
4.3 Layers概念:复杂电路的“分层抽象” 67
4.3.1 Layers的核心思想与原则 67
4.3.2 Layers的分层模型与实现步骤 68
4.3.3 Layers的核心优势与最佳实践 71
4.3.4 Layers的实际应用场景 72
4.4 总结 78
4.5 课后练习 78
第5章 Chisel中的面向对象设计与类型系统解析 81
5.1 Scala面向对象编程基础 81
5.1.1 类与对象的定义 81
5.1.2 构造方法:主构造与辅助构造 83
5.1.3 继承与多态 84
5.1.4 单例对象与伴生对象 86
5.2 Scala类型系统核心:参数化与抽象成员 87
5.2.1 类型参数化(泛型) 87
5.2.2 型变注解:协变、逆变与不变 89
5.2.3 抽象成员 91
5.3 从Scala到Chisel:面向对象硬件设计实践 94
5.3.1 Chisel模块的类封装 94
5.3.2 硬件接口的Bundle封装 96
5.3.3 泛型在Chisel中的应用:参数化硬件 98
5.3.4 继承与特质:硬件功能复用 101
5.4 总结 103
5.5 课后练习 103
第6章 Chisel硬件设计原语与高级生成器 106
6.1 多路选择器:组合逻辑的核心 106
6.1.1 基本二选一:Mux 106
6.1.2 多条件与查找表:MuxCase与MuxLookup 106
6.1.3 独热码与优先级:Mux1H与PriorityMux 108
6.2 优先编码器:从多路信号到编码索引 109
6.2.1 PriorityEncoder:输出二进制索引 109
6.2.2 PriorityEncoderOH:输出独热码 109
6.3 仲裁器:多个生产者共享一个通道 110
6.3.1 Decoupled 接口与 ready/valid 握手 110
6.3.2 Arbiter:固定优先级仲裁 111
6.3.3 RRArbiter:轮询公平仲裁 111
6.4 队列 Queue:基于ready/valid的同步FIFO 112
6.4.1 Queue 的构造与接口 112
6.4.2 工厂方法:一行接好FIFO 113
6.5 ROM与RAM:构造可综合存储器 113
6.5.1 VecInit构造组合ROM 113
6.5.2 Mem:组合读、同步写 114
6.5.3 SyncReadMem:同步读、同步写 115
6.6 常用位操作与寄存器小工具 115
6.6.1 PopCount与Reverse:统计与翻转 115
6.6.2 UIntToOH与OHToUInt:编码转换 116
6.6.3 RegEnable与ShiftRegister:条件更新与时序对齐 116
6.7 高级生成器:Counter、LFSR与ChiselEnum 116
6.7.1 Counter:参数化计数器生成器 117
6.7.2 LFSR:线性反馈移位寄存器 117
6.7.3 ChiselEnum:类型安全的状态机枚举 118
6.8 总结 119
6.9 课后练习 119
第7章 Chisel设计的生成、测试与优化 121
7.1 生成Verilog HDL代码 121
7.1.1 核心生成工具:CIRCT Stage 121
7.1.2 基础生成示例:全加器 122
7.1.3 灵活配置生成选项 124
7.1.4 命令行动态传参 124
7.2 参数化设计与生成 125
7.2.1 参
第1章 新型敏捷硬件开发语言——Chisel和Scala 1
1.1 最好的宿主——什么是Scala 1
1.2 敏捷开发——什么是Chisel 1
1.3 Scala入门——让你的代码跑起来 3
1.3.1 Scala的安装方法 3
1.3.2 使用Scala解释器 4
1.3.3 运行Scala脚本 4
1.3.4 编译非脚本文件 5
1.3.5 使用IDEA开发Scala项目 5
1.3.6 总结 7
1.4 章节安排 7
1.5 芯片自主创新:历史传承、产业实践与技术路径 8
1.5.1 古代工程技术中的系统思维 8
1.5.2 芯片产业技术实践的多维观察 8
1.5.3 Chisel学习与工程实践方法 9
1.6 参考文献 9
1.7 课后练习 9
第2章 Chisel入门与Scala变量函数基础 11
2.1 Scala变量定义与基本类型 11
2.1.1 变量定义的本质与规则 11
2.1.2 Scala的基本类型体系 13
2.1.3 函数及其多种形态 15
2.2 Chisel 7.3开发环境搭建 22
2.2.1 环境要求与软件版本 22
2.2.2 安装步骤 23
2.2.3 项目结构与配置 24
2.2.4 开发环境测试 25
2.3 Chisel 7.3的核心特性与编译流程 26
2.3.1 Chisel 7.3的包结构 26
2.3.2 编译流程详解 26
2.3.3 为什么使用SystemVerilog 27
2.3.4 编译API详解 28
2.3.5 多时钟域处理 28
2.3.6 常见问题与解决方案 29
2.4 CIRCT后端与编译优化 30
2.4.1 CIRCT后端简介 30
2.4.2 firtool工具详解 31
2.4.3 与传统Chisel 3.x流程的对比 31
2.5 总结 32
2.6 课后练习 33
第3章 Chisel数据类型与Scala集合应用 35
3.1 Chisel数据类型概述 35
3.2 Chisel数据类型层次结构 35
3.3 基本数据类型 36
3.3.1 Bits抽象类型 36
3.3.2 UInt与SInt 37
3.3.3 Bool类型 37
3.3.4 Clock和Reset 38
3.4 复合数据类型 39
3.4.1 Bundle 39
3.4.2 Vec 40
3.4.3 MixedVec 41
3.5 类型转换 41
3.5.1 UInt与SInt的相互转换 41
3.5.2 Bool与UInt的相互转换 42
3.5.3 类型转换时的宽度处理 42
3.6 操作符 42
3.7 宽度推断 45
3.7.1 宽度推断规则详解 45
3.7.2 强制指定宽度 46
3.7.3 宽度控制的最佳实践 46
3.7.4 DontCare的使用 46
3.8 Scala集合在Chisel中的应用 46
3.8.1 数组与数组缓冲 47
3.8.2 列表与列表缓冲 48
3.8.3 元组 49
3.8.4 映射与集合 49
3.8.5 Scala集合与Chisel Vec的对比 50
3.9 总结 51
3.10 课后练习 51
第4章 Chisel硬件设计中的操作、控制与分层 53
4.1 基础硬件操作:构建电路的“原子部件” 53
4.1.1 硬件类型体系与核心特性 53
4.1.2 硬件赋值的核心规则 59
4.2 Scala控制结构:组织硬件逻辑的“工具” 59
4.2.1 条件控制结构:硬件的“分支逻辑” 60
4.2.2 循环控制结构:硬件的“重复逻辑” 62
4.2.3 异常与作用域控制:硬件的“安全性保障” 65
4.3 Layers概念:复杂电路的“分层抽象” 67
4.3.1 Layers的核心思想与原则 67
4.3.2 Layers的分层模型与实现步骤 68
4.3.3 Layers的核心优势与最佳实践 71
4.3.4 Layers的实际应用场景 72
4.4 总结 78
4.5 课后练习 78
第5章 Chisel中的面向对象设计与类型系统解析 81
5.1 Scala面向对象编程基础 81
5.1.1 类与对象的定义 81
5.1.2 构造方法:主构造与辅助构造 83
5.1.3 继承与多态 84
5.1.4 单例对象与伴生对象 86
5.2 Scala类型系统核心:参数化与抽象成员 87
5.2.1 类型参数化(泛型) 87
5.2.2 型变注解:协变、逆变与不变 89
5.2.3 抽象成员 91
5.3 从Scala到Chisel:面向对象硬件设计实践 94
5.3.1 Chisel模块的类封装 94
5.3.2 硬件接口的Bundle封装 96
5.3.3 泛型在Chisel中的应用:参数化硬件 98
5.3.4 继承与特质:硬件功能复用 101
5.4 总结 103
5.5 课后练习 103
第6章 Chisel硬件设计原语与高级生成器 106
6.1 多路选择器:组合逻辑的核心 106
6.1.1 基本二选一:Mux 106
6.1.2 多条件与查找表:MuxCase与MuxLookup 106
6.1.3 独热码与优先级:Mux1H与PriorityMux 108
6.2 优先编码器:从多路信号到编码索引 109
6.2.1 PriorityEncoder:输出二进制索引 109
6.2.2 PriorityEncoderOH:输出独热码 109
6.3 仲裁器:多个生产者共享一个通道 110
6.3.1 Decoupled 接口与 ready/valid 握手 110
6.3.2 Arbiter:固定优先级仲裁 111
6.3.3 RRArbiter:轮询公平仲裁 111
6.4 队列 Queue:基于ready/valid的同步FIFO 112
6.4.1 Queue 的构造与接口 112
6.4.2 工厂方法:一行接好FIFO 113
6.5 ROM与RAM:构造可综合存储器 113
6.5.1 VecInit构造组合ROM 113
6.5.2 Mem:组合读、同步写 114
6.5.3 SyncReadMem:同步读、同步写 115
6.6 常用位操作与寄存器小工具 115
6.6.1 PopCount与Reverse:统计与翻转 115
6.6.2 UIntToOH与OHToUInt:编码转换 116
6.6.3 RegEnable与ShiftRegister:条件更新与时序对齐 116
6.7 高级生成器:Counter、LFSR与ChiselEnum 116
6.7.1 Counter:参数化计数器生成器 117
6.7.2 LFSR:线性反馈移位寄存器 117
6.7.3 ChiselEnum:类型安全的状态机枚举 118
6.8 总结 119
6.9 课后练习 119
第7章 Chisel设计的生成、测试与优化 121
7.1 生成Verilog HDL代码 121
7.1.1 核心生成工具:CIRCT Stage 121
7.1.2 基础生成示例:全加器 122
7.1.3 灵活配置生成选项 124
7.1.4 命令行动态传参 124
7.2 参数化设计与生成 125
7.2.1 参













