书籍详情

敏捷硬件开发语言Chisel与数字系统设计

敏捷硬件开发语言Chisel与数字系统设计

作者:梁峰 等

出版社:电子工业出版社

出版时间:2022-06-01

ISBN:9787121434129

定价:¥69.00

购买这本书可以去
内容简介
  从20世纪90年代开始,利用硬件描述语言和综合技术设计实现复杂数字系统的方法已经在集成电路设计领域得到普及。随着集成电路集成度的不断提高,传统硬件描述语言和设计方法的开发效率低下的问题越来越明显。近年来逐渐崭露头角的敏捷化设计方法将把集成电路设计带入一个新的阶段。与此同时,集成电路设计也需要一种适应敏捷化设计方法的新型硬件开发语言。本书从实用性和先进性出发,较全面地介绍新型硬件开发语言Chisel和数字系统敏捷化设计方法。全书分两篇。第一篇共10章,主要内容包括Chisel语言简介、Chisel的数据类型、Chisel的模块与硬件类型、Chisel常用的硬件原语、如何将Chisel代码转换生成Verilog HDL代码及基本测试方法、Chisel的黑盒、用Chisel实现多时钟域设计、Chisel的函数应用及其他议题等。第二篇共9章,介绍编写Chisel需要掌握的Scala语言编程基础知识。读者可以根据自身情况,跳过第二篇Scala基础部分,直接学习Chisel的硬件开发功能。本书提供配套的课后练习参考答案、仿真程序代码等。本书可作为集成电路科学与工程、电子信息类、计算机类等相关专业的高年级本科生及研究生的教学用书,也可供从事集成电路设计的工程人员和EDA专业人员学习、参考。
作者简介
  梁峰,西安交通大学微电子学院教授,博士生导师,从事高性能计算架构、高性能计算单元设计、高级设计方法学、数字信号处理算法及电路设计、智能软硬件系统开发、未来非冯诺依曼计算架构等研究,近年来主持国家、军队、省部级及企业合作项目十余项,与国内知名企业和研究所建立了广泛的合作关系,积累了一系列可工程化和产业化的科研成果,在各种学术期刊和国际会议上发表学术论文60多篇,指导本科生、研究生参加***竞赛获奖二十余项,累计培养了几十名研究生。
目录
第一篇 敏捷硬件开发语言Chisel
第1章 新型敏捷硬件开发语言――Chisel和Scala\t2
1.1 最好的宿主――什么是Scala\t2
1.2 敏捷开发――什么是Chisel\t2
1.3 Scala入门――让你的代码跑起来\t4
1.3.1 Scala的安装方法\t4
1.3.2 使用Scala解释器\t4
1.3.3 运行Scala脚本\t4
1.3.4 编译非脚本文件\t5
1.3.5 使用IDEA开发Scala项目\t5
1.3.6 总结\t7
1.4 章节安排\t7
1.5 参考文献\t8
1.6 课后练习\t8
第2章 Chisel入门及数据类型\t9
2.1 Chisel开发环境的安装步骤\t9
2.1.1 安装步骤\t9
2.1.2 开发环境测试\t10
2.1.3 小结\t11
2.2 Chisel的常见问题\t11
2.3 Chisel的变量与数据类型\t12
2.3.1 数据字面量与数据类型\t13
2.3.2 数据宽度\t14
2.3.3 类型转换\t14
2.3.4 向量\t15
2.3.5 混合向量\t16
2.3.6 包裹\t16
2.3.7 Chisel的内建操作符\t17
2.3.8 位宽推断\t18
2.3.9 Chisel泛型\t19
2.4 总结\t19
2.5 课后练习\t19
第3章 模块与硬件类型\t20
3.1 Chisel是如何赋值的\t20
3.2 端口(IO)\t21
3.2.1 定义端口列表\t21
3.2.2 翻转端口列表的方向\t21
3.2.3 整体连接\t22
3.2.4 动态修改端口\t23
3.3 模块\t24
3.3.1 模块分类\t24
3.3.2 定义模块\t26
3.3.3 例化模块\t27
3.3.4 例化多个模块\t28
3.4 线网\t28
3.4.1 Wire\t28
3.4.2 WireDefault\t29
3.4.3 未驱动的线网\t30
3.5 寄存器\t31
3.5.1 Reg\t31
3.5.2 RegNext\t32
3.5.3 RegInit\t32
3.5.4 RegEnable\t33
3.5.5 ShiftRegister\t34
3.5.6 寄存器实例\t34
3.5.7 异步寄存器\t39
3.6 寄存器组\t41
3.7 用when给电路赋值\t42
3.8 总结\t44
3.9 参考文献\t45
3.10 课后练习\t46
第4章 Chisel常用的硬件原语\t47
4.1 多路选择器\t47
4.2 优先编码器\t48
4.3 仲裁器\t48
4.4 队列\t51
4.5 ROM\t54
4.6 RAM\t55
4.7 带写掩码的RAM\t57
4.8 从文件读取数据到RAM\t58
4.9 计数器\t62
4.10 线性反馈移位寄存器\t66
4.11 状态机\t70
4.12 总结\t73
4.13 参考文献\t73
4.14 课后练习\t73
第5章 生成Verilog HDL代码与基本测试\t74
5.1 生成Verilog HDL代码\t74
5.1.1 execute\t74
5.1.2 emitVerilog\t76
5.2 增加参数的方法\t77
5.2.1 Firrtl传递参数\t77
5.2.2 给主函数传递参数\t78
5.3 编写chisel-iotesters测试\t79
5.4 运行chisel-iotesters测试\t81
5.5 使用chiseltest进行测试\t82
5.6 总结\t85
5.7 课后练习\t85
第6章 黑盒\t86
6.1 例化黑盒\t86
6.2 复制Verilog文件\t88
6.3 内联Verilog文件\t90
6.4 inout端口\t91
6.5 总结\t92
6.6 课后练习\t92
第7章 多时钟域设计\t94
7.1 没有隐式端口的模块\t94
7.2 定义一个时钟域和复位域\t95
7.2.1 withClockAndReset\t95
7.2.2 withClock和withReset\t96
7.2.3 复位信号的三种类型\t103
7.3 使用时钟负沿和低有效的复位信号\t103
7.4 示例:异步FIFO\t105
7.5 总结\t108
7.6 参考文献\t108
7.7 课后练习\t108
第8章 函数的应用\t109
8.1 用函数抽象组合逻辑\t109
8.2 用工厂方法简化模块的例化\t110
8.3 用Scala的函数简化代码\t113
8.4 Chisel的打印函数\t114
8.4.1 Scala风格\t114
8.4.2 C风格\t116
8.5 使用打印函数实例\t116
8.6 Chisel的对数函数\t119
8.7 与硬件相关的函数\t119
8.8 隐式类的应用\t122
8.9 递归函数的应用\t123
8.10 总结\t125
8.11 参考文献\t125
8.12 课后练习\t125
第9章 其他议题\t126
9.1 重命名模块名称\t126
9.2 命名规则\t127
9.3 重命名模块内信号名称\t131
9.3.1 前缀\t131
9.3.2 suggestName\t132
9.3.3 forceName\t133
9.4 参数化的Bundle\t135
9.5 FixedPoint\t137
9.6 assert\t138
9.7 总结\t140
9.8 参考文献\t140
9.9 课后练习\t140
第10章 riscv-mini\t141
10.1 riscv-mini简介\t141
10.2 数据通路\t141
10.3 riscv-mini的子模块\t142
10.3.1 ALU模块\t142
10.3.2 BrCond模块\t143
10.3.3 Cache模块\t144
10.3.4 Control模块\t145
10.3.5 CSR模块\t146
10.3.6 ImmGen模块\t147
10.3.7 Instructions模块\t147
10.3.8 RegFile模块\t148
10.3.9 Datapath模块\t148
10.3.10 Core模块\t149
10.4 riscv-mini参数化机制\t149
10.4.1 Field[T]类\t149
10.4.2 View类\t150
10.4.3 Parameters类及其伴生对象\t151
10.4.4 Config类\t152
10.5 参数化机制的应用\t152
10.6 总结\t157
10.7 参考文献\t157
10.8 课后练习\t158
第二篇 Scala语言编程基础知识
第11章 Scala的变量及函数\t160
11.1 变量定义与基本类型\t160
11.1.1 定义一个变量\t160
11.1.2 Scala的基本类型\t161
11.1.3 小结\t164
11.2 函数及其几种形式\t164
11.2.1 定义一个函数\t164
11.2.2 方法\t166
11.2.3 嵌套函数\t166
11.2.4 函数字面量\t166
11.2.5 部分应用函数\t167
11.2.6 闭包\t168
11.2.7 函数的特殊调用形式\t169
11.2.8 柯里化\t170
11.2.9 传名参数\t170
11.2.10 小结\t172
11.3 参考文献\t172
第12章 Scala面向对象编程\t173
12.1 类和对象\t173
12.1.1 类\t173
12.1.2 类的构造方法\t174
12.1.3 重写toString方法\t175
12.1.4 方法重载\t176
12.1.5 类参数\t176
12.1.6 单例对象与伴生对象\t176
12.1.7 工厂对象与工厂方法\t178
12.1.8 apply方法\t178
12.1.9 主函数\t179
12.1.10 小结\t180
12.2 操作符即方法\t180
12.2.1 操作符在Scala中的解释\t180
12.2.2 三种操作符\t181
12.2.3 操作符的优先级和结合性\t183
12.2.4 预设操作符\t184
12.2.5 对象的相等性\t184
12.2.6 小结\t185
12.3 类继承\t185
12.3.1 Scala的类继承\t185
12.3.2 调用超类的构造方法\t186
12.3.3 重写超类的成员\t187
12.3.4 子类型多态与动态绑定\t189
12.3.5 抽象类\t189
12.3.6 关于多重继承\t190
12.3.7 Scala类的层次结构\t190
12.3.8 小结\t192
12.4 特质\t192
12.4.1 什么是特质\t192
12.4.2 特质的层次\t193
12.4.3 混入特质的简便方法\t194
12.4.4 特质的线性化叠加计算\t194
12.4.5 小结\t197
12.5 参考文献\t197
第13章 包和导入\t198
13.1 包\t198
13.2 包的层次和精确代码访问\t198
13.3 import导入\t201
13.4 自引用\t201
13.5 访问修饰符\t202
13.6 包对象\t203
13.7 总结\t203
13.8 参考文献\t203
第14章 集合\t204
14.1 数组\t204
14.1.1 数组的定义\t204
14.1.2 数组的索引与元素修改\t204
14.2 列表\t205
14.2.1 列表的定义\t205
14.2.2 列表添加数据\t205
14.2.3 列表子对象Nil\t206
14.3 数组缓冲与列表缓冲\t207
14.4 元组\t208
14.4.1 元组的定义\t208
14.4.2 元组的索引\t208
14.4.3 元组作为函数的入口参数\t209
14.4.4 元组的遍历\t209
14.5 映射\t209
14.5.1 映射的定义\t209
14.5.2 映射的三种取值方式\t210
14.5.3 映射遍历的四种方式\t210
14.6 集\t211
14.7 序列\t211
14.8 集合的常用方法\t211
14.8.1 map\t211
14.8.2 foreach\t211
14.8.3 zip\t212
14.8.4 reduce\t212
14.8.5 fold\t212
14.8.6 scan\t212
14.9 总结\t212
第15章 内建控制结构\t213
15.1 if表达式\t213
15.2 while循环\t214
15.3 for表达式与for循环\t214
15.4 用try表达式处理异常\t216
15.4.1 抛出一个异常\t216
15.4.2 try-catch\t217
15.4.3 finally\t217
15.5 match表达式\t217
15.6 关于continue和break\t218
15.7 关于变量的作用域\t219
15.8 总结\t220
15.9 参考文献\t220
第16章 模式匹配\t221
16.1 样例类和对象\t221
16.2 模式匹配\t222
16.3 模式的种类\t222
16.3.1 通配模式\t222
16.3.2 常量模式\t223
16.3.3 变量模式\t223
16.3.4 构造方法模式\t224
16.3.5 序列模式\t225
16.3.6 元组模式\t225
16.3.7 带类型的模式\t226
16.3.8 变量绑定模式\t226
16.4 模式守卫\t226
16.5 密封类\t227
16.6 可选值\t228
16.7 模式匹配的另类用法\t228
16.8 偏函数\t229
16.9 总结\t230
16.10 参考文献\t230
第17章 类型参数化\t231
17.1 var类型的字段\t231
17.2 类型构造器\t232
17.3 型变注解\t233
17.4 检查型变注解\t233
17.5 类型构造器的继承关系\t235
17.6 上界和下界\t235
17.7 方法的类型参数\t236
17.8 对象私有数据\t236
17.9 总结\t238
第18章 抽象成员\t239
18.1 抽象成员\t239
18.2 初始化抽象val字段\t240
18.2.1 预初始化字段\t241
18.2.2 惰性的val字段\t242
18.3 抽象类型\t243
18.4 细化类型\t244
18.5 Scala的枚举\t245
18.6 总结\t246
18.7 参考文献\t246
第19章 隐式转换与隐式参数\t247
19.1 隐式定义的规则\t247
19.2 隐式地转换到期望类型\t248
19.3 隐式地转换接收端\t248
19.4 隐式类\t249
19.5 隐式参数\t250
19.6 含有隐式参数的主构造方法\t251
19.7 上下文界定\t252
19.8 多个匹配的隐式定义\t253
19.9 总结\t255
19.10 参考文献\t255
猜您喜欢

读书导航