使用SpinalHDL和Cocotb进行敏捷数字芯片设计和验证

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

摘要:领域特定架构已成为计算机发展的一种趋势。在提供更高效算力的同时,它也给底层硬件的开发带来了更大的挑战。传统的芯片设计和验证技术已越来越无法应对这些新的要求和挑战。在芯片设计上,本文将介绍如何使用SpinalHDL,一种基于Scala的新型硬件描述语言(HDL),或者更准确地说是硬件构造语言,提高硬件设计的效率和质量。对于SpinalHDL,本文还介绍了如何利用Scala的类型系统高效地进行复杂硬件的设计。对于验证,本文将介绍基于Python的验证环境Cocotb,以及如何利用Python简洁高效的语言特性及其繁荣的开源社区,提升芯片验证的效率。

1. 引言

1.1 背景

近年来,计算需求不断演进并且多样化。就高性能计算而言,过去二十年间,互联网的迅速扩张产生了大量的数据,而深度学习等技术提供了许多有效利用这些数据的方法。然而,这些技术的实现对大规模高性能计算能力有着强烈的需求。例如,深度神经网络发展中的一个里程碑AlexNet的实现,很大程度上依赖于Nivida GPU的使用,后者为运行这一模型提供了足够的计算能力。与此同时,在工业应用中,提供节能型硬件以降低成本同时提供高计算能力也是相当重要的。在低功耗计算方面,随着物联网的快速发展,芯片的应用场景变得多样化,我们希望为每种场景选择最适合的芯片,这提出了多样化的芯片开发需求。

随着摩尔定律和丹纳德缩放的减速,简单地通过提高CPU或GPU性能来实现这种计算能力的增长已经不能满足需求。而且,简单地将低功耗CPU部署到边缘场景无法满足低功耗和定制功能的需求。因此,许多特定领域架构设计任务出现了,其中大部分呈现出软硬件协同设计的范式。硬件架构的研究和设计成为业界和学术界的热门话题,毫无疑问,当前正处于架构创新的黄金时代。这也是硬件描述语言(HDL)创新最好的时代,因为HDL是描述计算机架构最直接的方式,我们需要更高效的HDL来加快我们的架构设计实现。

与这些新兴的设计需求相比,目前业界主流的设计工具远远落后。Verilog和VHDL已经超过30年历史了,而SystemVerilog在设计方面只是对Verilog进行了一些小修改。与C等经典语言不同,Verilog/VHDL并没有通过多个版本的迭代演进,也没有发展大量的第三方库来补充语言,因此在很大程度上,我们使用Verilog/HDL时仍然像它们最初发布时一样。

1.2 HDL的演变

1.2.1 主流HDL的历史

传统HDL的历史可追溯到20世纪60年代,其中在20世纪80年代发布的Verilog和VHDL是最受欢迎的两种语言。Verilog和VHDL被认为是HDL的黄金标准,因为几乎所有电子设计自动化(EDA)工具都广泛支持它们。

最初,Verilog和VHDL用于记录和模拟以其他形式捕获和描述的电路设计,比如原理图文件。换句话说,它们并不是为了描述数字同步集成电路(IC)的RTL级模型而设计的。Verilog和VHDL的“读者”被认为是一个模拟器,而不是一个综合工具或工程师。在实践中,逻辑综合为HDL的引入将HDL从后台推到了数字硬件设计的前台,为此添加了“可综合”规则,但这些规则从未成为语言标准的一部分。

21世纪的第一个十年见证了SystemVerilog的出现,它是Verilog的超集。在验证方面,SystemVerilog借鉴了许多高级语言的特性,例如面向对象、更丰富的类型系统等。然而,在设计方面,它只是添加了一些功能,例如:• 增强的类型系统,包括枚举、联合等。• 带有接口的强度输入/输出描述。• 通过引入新的always comb、always ff和always -latch关键字,限制对敏感性列表的使用。

尽管如此,这些新引入的SystemVerilog设计功能直到现在也没有得到EDA供应商的全面支持,因此单独这些变化并不能使其具备处理复杂的软硬件协同设计任务的能力。

1.2.2 其他HDL的历史

与Verilog/VHDL不同,功能型HDL可以追溯到上世纪70年代,最早用于硬件形式化。众所周知,最早用于描述硬件的记号系统可以追溯到约翰·李的著作《计算机语义学》。与早期不同的是,自上世纪90年代以来,开发新的用于数字硬件设计的HDL有两个主要趋势:首先,鉴于Verilog和VHDL是主流EDA的事实标准,为了避免构建新的特定于某种语言的工具链,开发者选择首先生成Verilog/VHDL代码,然后使用生成的代码进行后续流程,包括综合和实现。在这种情况下,Verilog/VHDL的作用类似于汇编语言或新HDL与现有工具链之间的接口层。更精确地说,这些新的HDL,如Spinal、Chisel和Clash,通常被定义或称为HCL(HCL:Hardware Construction Language)。在本文中提到的HCL仍然是HDL的一部分,因为它们可以执行HDL的所有功能。这意味着单个HCL的内容必须是Verilog/VHDL核心部分的超集。

其次,与从头开始不同,大多数这些新的HDL都嵌入到流行的高级编程语言中,或更准确地说,它们可以被视为高级程序语言的库。因此,它们可以重用现有成熟语言的基础设施,包括它们的编译器、测试系统、包管理系统、IDE(IDE:集成开发环境),以及最重要的是它们的社区。这种策略降低了学习的难度,并使这些新的HDL非常可扩展。例如,Lava(及其方言)和Clash嵌入到Haskell中,Chisel和SpinalHDL嵌入到Scala中,MyHDL嵌入到Python中。

2. SpinalHDL

2.1 SpinalHDL简介

正如上面提到的,SpinalHDL[3]是基于Scala的HCL,或更准确地说,是Scala中的一个包,专用于数字芯片设计。与Chisel类似,SpinalHDL也是基于Scala的,并且主要用于RISC-V CPU设计。在Spinal中设计硬件的过程主要可以分为三个步骤:1)使用Scala和SpinalHDL包来描述硬件设计的结构和逻辑;2)编译和执行Scala程序,生成对应的SystemVerilog/VHDL代码,该代码与Scala代码描述的结构相同;3)使用任何类型的模拟器,如Iverilog、Verilator或Synopsys VCS,进行硬件模拟和验证。SpinalHDL基于传统的Verilog或VHDL进行硬件设计过程。Scala程序不能直接用于硬件模拟,而是需要首先执行以生成Verilog或VHDL代码,这意味着现有丰富的基于Verilog的设计工具链,包括模拟器、综合器和FPGA开发套件,可以在整个设计过程中使用。

图1:基于SpinalHDL的设计流程

2.2 与传统HDL相同的描述粒度

与软件开发相比,SpinalHDL对于以Verilog为代表的传统HDL来说就像Java、C/C++和Python等高级编程语言对汇编语言的作用一样。显然,高级语言比汇编语言更具表达力和生产力,并大大降低了开发复杂软件系统(如操作系统)的难度。尽管高级编程语言提高了软件开发的效率,但与汇编语言相比,程序的性能也受到了很大的牺牲。类似地,与传统HDL相比,SpinalHDL具有各种优势,并提高了设计数字硬件的效率。然而,与高级语言不同的是,它不会牺牲生成的硬件的性能和资源利用率,而是简化和加速设计过程。SpinalHDL与传统HDL(如Verilog或VHDL)几乎具有相同的描述精度或粒度。它可以精细控制寄存器的数量和寄存器之间的逻辑路径的长度。关于近似描述粒度的最佳证明是,对于Verilog/VHDL中的所有RTL级语法元素,SpinalHDL都有对应的对应元素。为了明确起见,我们在图2中显示了RTL级描述的所有基本元素,并在表1中列出了从SpinalHDL到Verilog的映射。如图2所示,RTL级描述是具有一个或多个时钟域的同步数字系统的形式化定义,基本上由以下五个部分组成:• 时钟域。• 组合部分在图2中表示为f(x)。• 顺序部分,通常是寄存器和存储器,在图2中表示为DFF。• 信号和连接,在图1中块之间表示为线(信号)。• 输入/输出(接口)。

图2:RTL级别描述中的元素。

对于这五个部分中的每一个,SpinalHDL提供了完整的相同描述能力,列在表1中。对于最坏情况,尤其是对于初学者来说,您可以使用SpinalHDL作为带有不同关键字集的Verilog/VHDL。因此,对于因语义失真而导致性能损失的担忧是不必要的。

表1:从SpinalHDL到Verilog的映射。

2.3 SpinalHDL相比传统HDL的优势

2.3.1 可靠性

使用SpinalHDL可以大大提高程序的可靠性,减少错误的可能性,从而减

2020一次转变:从Verilog到SpinalHDL 学习SpinalHDL已有近半年,其诚然小众,但“小家碧玉”未尝不是绝代佳人。 出坑Verilog 遥想当年本科之时画过电路PCB、玩儿过单片机、PLC,亦学过C#(给我那数块板子的毕设做个上位机),Python。直到研究生之时方才选择FPGA这条道路,除了对数字电路本身的兴趣之外(对于做软件感觉一直找不到自己的优势所在,虽然最终还是进了互联网行业,也算是冥冥之中自有天意吧),重要的便是Verilog语法简单,可以令我很快专注于电路硬件设计而非语法本身。 “成也萧何,败也萧何”,Verilog语法确实 阅读详情

相关推荐

cocotb使用指南(一)

关于对于cocotb这个芯片测试框架的理解。

小水的博客 1万+

SpinalHDL】Windows10系统搭建SpinalHDL 开发环境

本文主要记载如何从零开始在win平台搭建SpinalHDL开发环境并跑通第一个spinal project demo。

kissdragan的博客 6366

SpinalHDL之实用工具(上篇)

本文作为SpinalHDL学习笔记第十三篇,记录使用SpinalHDL的一些实用性语法工具。然后,通过使用这些功能可以定义数字硬件,并构建强大的库抽象。这也是 SpinalHDL 相对于其他常用 HDL 的主要优势之一,因为无需了解编译器内部原理即可扩展该语言。一个很好的例子是SpinalHDL lib,它添加了许多实用程序、工具、总线方法。许多工具实用程序都存在于spinal.lib 中,但有些工具实用程序已经存在于 SpinalHDL Core 中。语法返回类型描述Int。

m0_59092412的博客 2035

SpinalHDL快速入门】5.1、SpinalHDL组织结构之Componenthierarchy

SpinalHDL快速入门】5.1、SpinalHDL组织结构之Componenthierarchy

悟已往之不谏 知来者之可追 1647

硬件敏捷开发与验证方法学研讨

作为2022年第二届RISC-V中国峰会的同期活动,8月27日下午,达坦科技将在线上举办硬件敏捷开发与验证方法学研讨。

DatenLord的博客 671

从零搭建SpinalHDL芯片验证生态:当硬件语言遇见Python协程

本文探讨了SpinalHDL与Python协程框架Cocotb芯片验证中的创新应用。通过SpinalHDL的类型安全硬件建模Scala元编程能力,结合Python协程的灵活验证,显著提升了验证效率代码复用率。文章详细介绍了验证生态架构、敏捷工作流及AI加速器案例,展示了该方案在缩短验证周期提升调试效率方面的突破性优势。

seed的博客 124

从4亿美元投资看开源芯片设计:Chisel实战RISC-V计数器开发

芯片设计正经历从封闭昂贵向开放敏捷的范式转移,开源硬件敏捷设计成为行业新趋势。RISC-V开源指令集打破了传统架构垄断,而高级硬件设计语言如Chisel则通过软件化方法提升设计效率。这种模式通过模块化IP核开源验证工具链,大幅降低了芯片创新的资金与时间门槛,为边缘计算、物联网等定制化场景提供了灵活解决方案。本文以Chisel设计脉动计数器为例,展示了从环境搭建、代码编写到仿真验证的完整流程,帮助开发者理解开源芯片设计的技术栈与工程实践。

weixin_33709364的博客 355

介绍一下 SpinalHDL

还有用户可能关心它Chisel的区别,参考内容里提到SpinalHDL直接生成Verilog,而Chisel需要经过Firrtl转换,生成的代码可读性不如Spinal。需要结构清晰,分点说明核心特性、优势、设计流程、应用场景与Chisel的对比,避免使用技术术语过多,让读者容易理解。作为 Scala 的库,SpinalHDL 继承了 Scala 强大的函数式编程、类型系统元编程能力,支持复杂的参数化设计高层次抽象(如总线封装、流水线自动生成)。:模块例化时自动完成信号连接,减少手动连线的错误。

luoganttcc的博客 1814

SpinalHDL快速入门】1、SpinalHDL开发环境搭建(基于windows)

SpinalHDL快速入门】一、SpinalHDL开发环境搭建

悟已往之不谏 知来者之可追 1329

spinal HDL - 02 - Spinal HDL数据类型 - 基本数据类型

写在前面 本文主要介绍了spinal HDL语言的基本数据类型,主要对Bool、Bits、UInt、SInt、Enum进行介绍。 数据类型简介 该语言提供了 5 种基本类型 2 种可以使用的复合类型。 基本类型:Bool,Bits,UInt用于无符号整数,SInt用于有符号整数Enum。 复合类型:BundleVec。 除了基本类型之外,Spinal 还支持开发: 定点数(部分支持) 浮点数(实验支持) 最后,有一种特殊类型可用于检查 BitVector 包含空洞(无关值)的位常量之间的相

Vuko_Coding Zone 3328

cocotb学习入门(一)

cocotb(Coroutine-based Co-simulation Testbench)是一种基于协程的联合仿真测试平台,主要用于硬件设计验证。与传统的硬件验证方法相比,cocotb 有许多显著的优势,特别是在现代硬件设计流程中。使用 Python 编写测试易于编写维护:Python 具有简洁易读的语法,这使得编写维护测试变得更加容易。丰富的库工具:Python 有丰富的库工具,可以用于文件操作、数据处理、网络通信等,这些在编写复杂的测试时非常有用。协程并发支持。

weixin_41685928的博客 2088

SpinalHDL学习

为什么迁移到SpinalHDL verilog的学习曲线过于陡峭,而且verilog自身演进太慢,即使systemverilog也有很多不如人意的地方。本身水平太菜,至今未成为一个资深的verilog 开发人员,对于自己来说,要么继续啃Verilog,要么拥抱新工具。 与HLS不同的是,SpinalHDL本身仍然是一种硬件描述语言,据称是“The overhead (of SpinalHDL generated RTL compared to human written VHDL/Verilog) is

Something 2417

cocotbCocotb--硬件验证中的瑞士军刀

oldmoney 1151

cocotb进行verilog的仿真

cocotb的官网介绍中说明了,python(cocotb)给到DUT的输入端输入,然后给到监控输出端的输出。dut也就是“Device Under Test。三​​​​、这段是什么意思。

weixin_44357071的博客 2087

SpinalHDL资料汇总

本文就学习SpinalHDL历程中所使用的资料进行汇总,有感兴趣的小伙伴欢迎学习交流。Scala入门SpinalHDL是基于Scala来实现的,因此在学习SpinalHD...

weixin_42905573的博客 5188

SpinalHDL中的Clock domains时钟域学习

SpinalHDL中的ClockDomain时钟域

weixin_42506418的博客 1066

SpinalHDL学习笔记(1)——Scalasbt安装

本文主要讲解Linux平台(Ubuntu)中Scala的安装,由于sbt资源下载速度较慢,建议使用科学上网方法,如果没有也可以尝试一下方法。Spinal是一个Scala库(使用Java VM的编程语言),因此需要设置Scala环境;有很多方法可以做到这一点。此外,它还生成 VHDL、Verilog 或 SystemVerilog,可供许多不同的工具使用。本节介绍支持的 SpinalHDL 描述到仿真 流程的安装方法,但可能还有其他方法。

qq_45362336的博客 2499

SpinalHDL】代码生成功能

在学习SpinalHDL学习的时候,大部分人可能已经掌握了一种或多种IC设计语言,例如verilog、vhdl或system verilog等。在最开始学习新的语言时,个人习惯是比较新语言代码与原来熟悉的语言代码相比较,这就用了SpinalHDL中非常常用的代码生成功能。 SpinalHDL从语言层次上来看是数字设计抽象语言,相比与verilog/vhdl/system verilog等语言更具抽象化,在实际使用过程中也是更多的利用SpinalHDL编写程序后转化为以上语言。本篇文章主要讲解如何将编写的S

kissdragan的博客 1173

手把手教你 SpinalHDL 在 Windows 下的环境搭建

spinalhdl的环境安装

weixin_42702224的博客 987
上一篇: Xline v0.6.1: 一个用于元数据管理的分布式KV存储
下一篇: Xline Jepsen 测试分析
达坦科技DatenLord
博客等级 码龄4年 529粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达坦科技DatenLord

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值