Logo

CIRCT: 开源电路IR编译器和工具项目

circt

CIRCT项目简介

CIRCT(Circuit IR Compilers and Tools)是一个开源的电路中间表示(IR)编译器和工具项目。该项目致力于将MLIR(Multi-Level Intermediate Representation)和LLVM开发方法论应用于硬件设计工具领域,旨在构建一个更加一致、模块化和可重用的基础设施。

CIRCT项目logo

CIRCT的名称可以递归地解释为"CIRCT IR Compiler and Tools"。项目名称中的"T"可以灵活地扩展为Tool(工具)、Translator(转换器)、Team(团队)、Technology(技术)、Target(目标)、Tree(树)、Type(类型)等,项目组对这种模糊性持开放态度。

项目动机

电子设计自动化(EDA)行业拥有众多广泛使用的专有和开源工具。然而,这些工具往往存在以下问题:

  • 工具之间不一致
  • 可用性存在问题
  • 工具设计时并未考虑作为一个统一平台
  • 大多数工具使用Verilog作为交换的中间表示,而Verilog存在一些已知的设计问题和局限性,例如位置跟踪支持不足

CIRCT项目是一项实验性努力,旨在将MLIR和LLVM的开发方法应用于硬件设计工具领域。项目的目标是构建一个可重用的基础设施,具有以下特点:

  • 模块化设计
  • 采用基于库的设计技术
  • 更加一致
  • 基于编译器基础设施和编译器设计技术的最佳实践

通过共同努力,CIRCT希望能够形成一个新的重心,吸引开源硬件工具领域的贡献者。这将推动开源工具的发展,实现硬件设计的新的高级抽象,并有可能被专有工具采用部分技术。

社区参与

CIRCT是一个开放和欢迎新成员的社区。如果你有兴趣参与,可以通过以下方式:

  1. 加入LLVM Discourse服务器上的CIRCT论坛。要获得类似邮件列表的体验,可以点击右上角的铃铛图标并切换到"Watching"。

  2. 加入LLVM discord服务器的CIRCT频道进行实时讨论。

  3. 参加每周的视频会议。详细信息请查看会议记录文档

  4. 贡献代码。CIRCT遵循所有LLVM政策:你可以为CIRCT仓库创建pull request,并按照标准LLVM政策获得提交权限。

CIRCT架构

CIRCT项目包含多个方言(Dialect),用于表示不同抽象级别的硬件设计。下图展示了当前的方言及其相互关系:

CIRCT方言关系图

主要方言包括:

  • FIRRTL: 用于表示RTL级硬件设计
  • HW: 表示硬件模块和接口
  • SV: 表示SystemVerilog结构
  • Comb: 表示组合逻辑
  • Seq: 表示时序逻辑
  • FSM: 表示有限状态机
  • Handshake: 表示数据流图
  • LLHD: 表示逻辑级硬件描述

这些方言之间可以进行转换和优化,形成一个完整的编译流程。

项目设置

要设置CIRCT项目,可以按照以下步骤操作:

  1. 安装LLVM/MLIR的依赖项,包括cmake和ninja。

  2. 克隆CIRCT仓库及其LLVM子模块:

git clone git@github.com:llvm/circt.git
cd circt
git submodule init
git submodule update
  1. 构建并测试LLVM/MLIR:
cd circt
mkdir llvm/build
cd llvm/build
cmake -G Ninja ../llvm \
    -DLLVM_ENABLE_PROJECTS="mlir" \
    -DLLVM_TARGETS_TO_BUILD="host" \
    -DLLVM_ENABLE_ASSERTIONS=ON \
    -DCMAKE_BUILD_TYPE=DEBUG
ninja
ninja check-mlir
  1. 构建并测试CIRCT:
cd circt
mkdir build
cd build
cmake -G Ninja .. \
    -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \
    -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \
    -DLLVM_ENABLE_ASSERTIONS=ON \
    -DCMAKE_BUILD_TYPE=DEBUG
ninja
ninja check-circt
ninja check-circt-integration  # 运行集成测试

这将编译CIRCT及其所有依赖项,并运行测试套件以确保一切正常工作。

使用CIRCT

CIRCT提供了多个工具和库,可以用于硬件设计和验证:

  • circt-opt: 用于应用CIRCT优化和转换的命令行工具
  • circt-translate: 用于在不同IR表示之间进行转换的工具
  • firtool: 用于编译和优化FIRRTL设计的工具
  • Verilator集成: 可以使用Verilator进行SystemVerilog代码检查

此外,CIRCT还提供了Python绑定,允许在Python脚本中使用CIRCT的功能。

未来发展

作为一个实验性项目,CIRCT正在快速发展中。未来的发展方向包括:

  • 改进现有方言和转换
  • 添加新的高级硬件描述语言前端
  • 增强与其他EDA工具的集成
  • 探索新的硬件设计和验证方法

CIRCT项目欢迎来自学术界和工业界的贡献,共同推动开源硬件设计工具的发展。

结论

CIRCT项目为硬件设计工具带来了现代编译器基础设施的优势。通过应用MLIR和LLVM的开发方法,CIRCT旨在构建一个更加一致、模块化和可扩展的硬件设计生态系统。尽管仍处于实验阶段,但CIRCT已经展现出了巨大的潜力,有望为硬件设计领域带来革命性的变化。

无论你是硬件设计工程师、编译器开发者,还是对开源硬件工具感兴趣的爱好者,CIRCT项目都为你提供了一个参与和贡献的机会。通过共同努力,我们可以推动硬件设计工具的创新,为未来的硬件设计带来更多可能性。

最新项目

Project Cover
豆包MarsCode
豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。
Project Cover
AI写歌
Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。
Project Cover
商汤小浣熊
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。
Project Cover
有言AI
有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。
Project Cover
Kimi
Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。
Project Cover
吐司
探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。
Project Cover
SubCat字幕猫
SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。
Project Cover
AIWritePaper论文写作
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。
Project Cover
稿定AI
稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。
投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号