前言
INFO
本笔记完全是对Martin Schoeberl的著作《Digital Design with Chisel》的内容的学习记录,一切以原版为准。
数字设计领域正处于一个激动人心的时代。随着Dennard定律的终结和摩尔定律的放缓,创新的需求变得前所未有地迫切。半导体公司依然致力于挖掘性能潜力,但这种提升的成本正在急剧增加。在此背景下,Chisel 提供了一种降低成本的方法,通过提升生产效率让设计者以更短时间完成更多设计,同时通过设计复用分摊验证成本。这不仅降低了非重复性工程(Non-Recurring Engineering, NRE)的开销,也为学生和个人创新者提供了便利。
Chisel 的特点与理念
Chisel 有别于传统硬件描述语言(如 VHDL 或 SystemVerilog),它是嵌套在 Scala 编程语言中的一组类和函数库,用于表达同步数字电路的基本构造单元。从本质上讲,Chisel 设计是一段运行后生成电路的 Scala 程序。虽然这种嵌套设计方式可能让人感到反直觉,但选择 Scala 而非创建独立硬件语言的背后逻辑是,软件领域在过去几十年中在设计方法上取得了巨大进步,直接采用现代编程语言可以直接利用这些成果,而无需额外适配。
Chisel 的学习挑战与教材意义
Chisel 一直被认为“难以学习”,这种观点主要源自领域专家为研究或商业需求所创建的大型复杂设计。然而,学习流行语言(如 C++)的人不会从 GCC 源码开始,而是通过丰富的课程、教材和面向新手的资源入门。《Digital Design with Chisel》这本书由 Martin 编写,作为学习 Chisel 的重要资源,以系统的结构和深入的练习帮助读者打牢基础。书中逐步引导,从安装和基础知识开始,通过练习巩固概念,最终使读者掌握设计简单实用的数字电路(例如 RISC 处理器)的技能。
五个版本的演进
书的每一版都基于最新的 Chisel 和 Scala 版本,并添加了内容改进:
- 第二版:
- 扩展了测试章节和时序构建模块的实例电路。
- 新增输入处理章节,包括输入同步、按键去抖设计和噪声信号滤波。
- 增强了示例设计章节,展示了多种 FIFO 实现及其在参数化和继承方面的应用。
- 第三版:
- 所有示例更新至 Chisel 3.5.3 和 Scala 2.12.13。
- 测试框架从 PeekPokeTester 过渡到 ChiselTest。
- 新增如何在 Maven Central 发布 Chisel 设计的章节,展示硬件构件作为开源 Java 库发布的便利性。
- 提供更简单的示例来解释组件,同时扩展硬件生成章节,涵盖函数式编程的生成器写法。
- 第四版:
- 升级到 Chisel 3.5.4,新增仲裁器、优先编码器和比较器等组合电路模块。
- 硬件生成章节新增更多函数式实例,例如利用简单的 2:1 仲裁电路构建公平仲裁树。
- 新增总线接口和 IO 设备存储映射连接的章节。
- 引入了一个关于调试、测试和验证的章节,后续计划进一步扩展。
- 处理器章节增加了更温和的微处理器介绍及数据路径示意图。
- 第五版:
- 升级至 Chisel 3.5.6 和 Scala 2.13,移除旧版 Chisel 2 和 PeekPokeTester 的附录。
- 新增 ChiselEnum 等便捷特性。
- 扩展了处理器章节,并更新了 Leros 示例代码。
重要致谢与语言翻译
书籍已被翻译为中文、日语和越南语,可免费获取。这离不开各位译者的努力和 Chisel 社区的支持。作者感谢学生和社区成员的反馈与努力,这些都为书籍内容的完善作出了重要贡献。