芯片微架构设计语言(二)- Chisel
各专栏更新如下👇:
5G CPE终端: CPE功能组成及应用原理介绍;主流厂家CPE功能 性能评测;CPE关键技术分析及实践44 篇内容 · 30230 阅读
得力工具: 分享日常工作中一些有用、好用、高效的小工具和小技术27 篇内容 · 29941 阅读
北京开源芯片研究院,包云岗老师团队的“xiangshan"香山开源处理器微架构就是Chisel 实现。包老师团队曾经做过起初对比实验验证,Chisel 在容易上手、设计效率、性能等方面相对Verilog有综合优势。
香山代码仓库路径: GitHub - OpenXiangShan/XiangShan: Open-source high-performance RISC-V processor
Chisel(Constructing Hardware In a Scala Embedded Language)是一种基于 Scala 的硬件构造语言(Hardware Construction Language, HCL),由加州大学伯克利分校(UC Berkeley)的 RISC-V 团队主导开发,旨在简化硬件设计流程,尤其适用于复杂数字电路(如处理器、FPGA 加速器等)的高效建模与生成。与传统的 Verilog/VHDL 相比,Chisel 以代码简洁性、可重用性和参数化设计能力为核心优势,已成为 RISC-V 处理器及开源硬件生态中的重要工具。
核心特点
- 基于 Scala 的嵌入式语言
Chisel 并非独立语言,而是嵌入在 Scala(一种多范式编程语言)中的领域特定语言(DSL)。这意味着开发者可以直接利用 Scala 的编程特性(如面向对象、函数式编程、类型系统)进行硬件设计,同时借助 Scala 的生态工具(如 IDE、调试器)提升开发效率。 - 参数化与生成式设计
支持通过 “参数” 动态配置硬件模块的功能和结构,例如:- 定义一个可配置位宽的加法器(
width: Int
),通过修改参数即可生成 8 位、32 位或 64 位版本; - 设计可扩展的处理器核,通过参数开关启用 / 禁用特定指令(如 RISC-V 的乘法扩展
M
)。
这种特性极大减少了重复代码,尤其适合需要多版本适配的芯片设计(如不同性能、功耗需求的产品)。
- 定义一个可配置位宽的加法器(
- 高级抽象与硬件语义结合
提供比 Verilog 更高级的抽象能力,同时精确映射硬件行为:- 用
UInt(32.W)
表示 32 位无符号整数,RegInit(0.U)
定义初始值为 0 的寄存器,语义清晰; - 通过 “组合逻辑”(
:=
赋值)和 “时序逻辑”(Reg
寄存器)明确区分硬件中的组合电路和时序电路,避免 Verilog 中因always @(*)
带来的歧义。
- 用
- 可重用组件库与模块化
内置丰富的硬件原语(如多路选择器Mux
、加法器+
)和标准接口(如Decoupled
流接口),支持模块化设计。开发者可将常用功能封装为 “黑盒” 组件(如缓存控制器、总线接口),通过组合复用快速构建复杂系统。例如,RISC-V 处理器的整数核(ALU)、控制单元等模块可独立开发后拼接,大幅提升代码复用率。 - 自动生成 RTL 代码
Chisel 代码最终会通过编译器(如chisel3
)自动转换为 Verilog/VHDL 等传统硬件描述语言,供后续的综合、仿真和流片流程使用。这一过程无需手动编写 RTL,减少了人为错误,同时保持了与现有 EDA 工具链的兼容性。
与传统 HDL(Verilog/VHDL)的对比
维度 | Chisel | Verilog/VHDL |
---|---|---|
抽象层次 | 高级抽象,接近软件编程思维 | 底层抽象,需直接描述硬件结构(如门级、寄存器传输级) |
代码量 | 同等功能下代码量减少 50%-80% | 代码冗长,重复逻辑多 |
参数化能力 | 原生支持参数化设计,动态生成硬件结构 | 依赖generate 语句,语法繁琐且功能有限 |
可维护性 | 模块化和类型系统提升可读性,便于调试 | 缺乏类型检查,大型项目易出现 “线网混乱” |
适用场景 | 复杂处理器、可配置 IP 核、开源硬件项目 | 简单电路、ASIC/FPGA 的底层时序约束设计 |
典型应用场景
- RISC-V 处理器设计
Chisel 是 RISC-V 生态的 “官方推荐工具”,伯克利的 RISC-V 处理器(如 Rocket、BOOM)均由 Chisel 编写。例如,Rocket 处理器的整数核、缓存系统通过 Chisel 的参数化配置,可灵活支持 32 位 / 64 位架构、不同缓存大小,极大简化了多版本适配工作。 - 开源硬件项目
广泛应用于开源硬件社区,如:- LowRISC:基于 Chisel 开发开源 RISC-V 芯片,支持安全扩展;
- Sifive Freedom 系列:商用 RISC-V 处理器的 Chisel 实现,兼顾性能与可定制性。
- 复杂数字电路(如加速器)
适合设计 AI 加速器、网络处理器等需要高度并行和可配置的电路。例如,通过 Chisel 的 “向量类型” 快速建模深度学习加速器的并行计算单元。
工作流程
- 用 Chisel 编写硬件代码(
.scala
文件),定义模块、接口和连接关系; - 通过 Chisel 编译器(如
chiseltest
)生成 Verilog 代码; - 将生成的 Verilog 导入传统 EDA 工具(如 Synopsys Design Compiler)进行综合、时序分析和流片;
- 利用 Chisel 的测试框架(如
ChiselTest
)编写测试用例,验证硬件功能。
总结
Chisel 的出现革新了硬件设计模式 —— 它将软件领域的 “抽象思维” 和 “代码复用” 引入硬件开发,尤其适合大规模、可配置、需要快速迭代的数字电路设计(如 RISC-V 处理器)。对于开源硬件生态而言,Chisel 降低了复杂芯片的开发门槛,推动了硬件设计的 “民主化”(类似软件领域的开源协作)。如果你计划参与 RISC-V 处理器设计或复杂数字电路开发,Chisel 是值得优先掌握的工具。
感谢阅读,还请多多支持🌹 点赞👍收藏⭐评论✍️.
关注公众号 「月光技术杂谈」 ,获取技术资料!