这篇介绍Bluespec以及设计示例的文章,是在2021年ICCAD(International Conference On Computer-Aided Design)发布的论文。达坦科技的open-rdma项目和推广的MIT体系结构学习社区都用到Bluespec,因此将此论文翻译成中文,以便大家了解2020年Bluespec开源后相关的开源项目。
摘要:bsc编译器是一个商业可用的编译器,在过去的二十年中被广泛使用,于2020年1月作为免费开源工具发布。本文简要介绍了bsc及其流程,提供了可用的教程材料,并介绍了多个可重用的开源设计案例,其中许多设计聚焦在RISC-V上(覆盖了从嵌入式到支持Linux的CPU和系统),所有设计均可部署在FPGA上。
I. 引言
自2000年以来,bsc编译器及其库就一直在作为一款商业软件被开发。二十余年来,它曾是Bluespec公司的一款授权产品,尽管学术和研究许可证一直以来都是免费提供的。几家顶级半导体供应商和一家主要的搜索公司曾使用bsc来设计最新ASIC SoCs中复杂的IP。它被许多公司用于基于FPGA的原型开发,并且在许多大学里用于构建体系结构和复杂IP的研究。
2020年1月,Bluespec公司以BSD 3-Clause许可证的形式免费开源了编译器、库以及一个图形用户界面。这些可以在以下网址找到:
https://github.com/B-Lang-org/bsc
https://github.com/B-Lang-org/bsc-contrib
https://github.com/B-Lang-org/bdw。
bsc编译器接受以高级硬件描述语言BSV和BH(如下所述)编写的设计作为输入,并生成可用于标准RTL工具(仿真、综合、形式分析等)处理的Verilog代码。
本文将简要介绍BSV和BH、bsc及其流程,以及使用BSV/BH编写的几个免费开源设计。其中,许多设计都是RISC-V设计(包括CPU、IP和系统),并且这些设计都是高度可复用的,并可在FPGA上运行。
II. BSV和BH高级硬件设计语言的背景
BSV和BH起源于20世纪90年代在麻省理工学院的研究中[10],当时James Hoe和Arvind确认了将并发原子事务表达的行为编译高质量Verilog的可行性。这是很有吸引力的,因为它给对复杂并发系统进行形式化规范说明和分析的行为模型(例如,TLA+ [11],Event-B [12],UNITY [7])提供了一种选择。由于能够将这样的形式化规范说明编译成高质量的硬件,它可以成为自动化实现形式规范说明到实际硬件之间的桥梁。
启用组合形式验证一直是BSV/BH的核心动机和特性(例如,请参见MIT的Kami项目,网址为https://github.com/mit-plv/kami)。原子事务语义还能够在日常的非形式化验证中帮助工程师增强系统的正确性。
在2000年,Lennart Augustsson在一种新的语言BH(Bluespec Haskell)中实现了这些想法,该语言使用Haskell的语法和语义,包括具有多态和类型类的类型系统、单子和高阶函数,从而使其具有静态展开能力和非常强大的类型抽象和类型检查能力[2],[14]。
在2004-2005年,我们创建了BSV,它只是一种新的,类似于SystemVerilog的前端语法[6],但在其他方面保留了BH的类似于Haskell的表达能力。
在2005年,我们引入了对多个时钟和复位域的支持。强类型检查确保不可能将时钟和复位信号与普通信号混合在一起。通过bsc的静态检查保证了正确的时钟域规范。
A. HLS与RTL、Chisel和其他硬件描述语言的比较
BSV/BH、VHDL、Verilog、SystemVerilog和Chisel[3]都是硬件描述语言(HDL):设计者直接描述架构和微架构。在这方面,它们与所谓的“HLS”(高级综合)[9]完全不同,HLS工具会自动生成架构和微架构(这可能是在设计者的高级指导下进行的)。但这并不意味着HDL必须是低级的:强大的抽象和组合机制允许像描述低级微架构一样流畅地描述高级参数化架构[14]。BSV/BH通过模仿Haskell实现了这一点,而Chisel则通过嵌入到Scala中实现了这一点。
BSV和BH与