首页 > 其他分享 >[0]为什么是SpinalHDL-Spinal简介

[0]为什么是SpinalHDL-Spinal简介

时间:2023-01-14 13:23:08浏览次数:68  
标签:Scala 简介 BSV SpinalHDL Spinal Verilog https Chisel

[0]为什么是SpinalHDL-Spinal简介

1. verilog/VHDL打咩

稍微先说两句SpinalHDL,硬件描述语言(HDL)分为verilog/VHDL和其他(雾),不过确实是这样,众多eda基本只对这两种语言有良好支持,但是这两门上古语言我一言难尽。。。

笔者用的是verilog,并没有写过什么大型的项目,光是一些小项目,他对类型检查的坑让笔者花了很多时间去查bug哈,比如一个最简单的位宽不匹配,坑了很多次/笑哭

所以需要一些比较新一些的语言,什么?SystemVerilog?好像也不是不行哈,确实vivado对SystemVerilog支持还是不错的,但是毕竟只是对上古语言的修修补补。

2. 几个基于DSL的HDL生成器

其实严格来讲很多语言都有,比如jshdl、pythonhdl有很多。

但是比较有名的基于scala的chisel和SpinalHDL、基于Haskell的bluespec。

由于Haskell是上世纪90年代出来的一个函数式的语言,估计比较怪异难学(参考lisp),先不考虑。

对于chisel,是伯里克利大学搞出来的,我翻阅了一下百度,感觉是为了写riscv而创造了chisel。而且有很多有名的riscv处理器都是用chisel写的。

但是和SpinalHDL相比,两者生成的verilog中SpinalHDL是可读可维护的。

3.BSV(BlueSpec Verilog)介绍

(1)BSV相对于chisel的可取之处(这篇文章很好,里面还有bsv的资料)

作者:parker liu
链接:https://www.zhihu.com/question/26816009/answer/1257445442
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

另外,Chisel只能用于电路设计的编程,不能用来写电路的验证程序,需要用Verilog来写验证程序。而Bluespec则是全面的,既可以用于电路设计,也可以用于电路的验证,而且可以用来写硬件电路的spec,硬件架构模型。

在电路设计的抽象机制上也有不同,Chisel和Verilog一样,都是基于时钟节拍的动作来设计电路的。而Bluespec则是使用了基于Term Rewrite System的Atomic rules的抽象来设计电路的,在设计高并发的电路时比Chisel要简洁很多,更不容易写错。

Bluespec是一个商业公司,而且是systemVerilog标准的制定者之一。有着很完善的文档,高质量的培训资料,和循序渐进的引导你入门的书。Chisel的资料则相对匮乏很多,学习资料的质量也不够好,让初学者刚开始时比较茫然。另外,作为个人的感觉,Scala的语法噪音比Haskell的多多了,相对Haskell要啰嗦很多。

Bluespec是一个广谱的电路设计工具,无论什么种类的电路都可以高效地设计出来。而C和C++,systemC则只适合用来设计比较规整的数据流计算的电路,其他控制类型的电路则实现的效率很低,不能用。

(2)bsv优势:写ip核

作者:WangXuan
链接:https://www.zhihu.com/question/54912932/answer/2374219869
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

BSV的优势包括但不限于:

  • 输入输出信号封装为method方法、自动生成握手信号
  • 可用复合数据类型来组织数据,提高代码可读性和可维护性。
  • 提供各种小型FIFO模块,在构成复杂的弹性流水线电路时,比Verilog更高效。
  • 可用顺序结构、瞬时结构、并行结构构成状态机,相比Verilog手动维护状态转移更加方便。
  • 支持多态,获得尽可能多的代码复用。
  • 在多态的加持下,BSV的模块库会比Verilog模块库的通用性更强,因此BSV具有大量的官方库或第三方库,来支持各种常见功能,例如定点数、浮点数、LSFR、CRC、AXI总线等

BSV生成的Verilog和手写Verilog相比,资源量和时钟频率不差多少。但 BSV 的代码量往往很低,并获得更高的可读性、可维护性。这里给出一些直观样例:

  • BSV 编写 RISC-V RV32I 流水线 CPU 只有200行(手写Verilog可能要600行),在 EP4CE115F29C8 FPGA 占 5kLE,时钟频率达到 77MHz 。
  • BSV 编写 JPEG 图像压缩器只有300行(手写Verilog可能要1000行),在 EP4CE115F29C8 FPGA 占 12kLE,时钟频率达到 43MHz,性能达到 344 M像素/秒 。

个人认为 BSV 非常适合编写模块 (IP核)。方法是:用BSV编写模块和testbench,在BSV阶段就做好验证,然后生成Verilog模块。另外你还能用BSV testbench来生成Verilog testbench,进行Verilog仿真。后续使用时,把 Verilog 模块嵌入到 FPGA 项目中即可。

如有兴趣,可阅读我的 BSV 教程:

4.总结

由上面所说,这三门工具独有自己的可取之处,bsv稳定、chisel的riscv实践丰富、spinal看起来更新鲜。其实我觉得是有必要三门都学习一下的。

5. 学习路径

以下内容摘自csdn

Scala入门

SpinalHDL是基于Scala来实现的,因此在学习SpinalHDL使用前需要对Scala语法有一定的了解。Scala是一门基于JVM的语言,其灵活性个人感觉与Python不相上下,这里学习Scala推荐博客:

Learning Chisel and Scala Scala Part I(https://vvviy.github.io/2018/12/01/Learning-Chisel-and-Scala-Part-I/)

Learning Chisel and Scala Scala Part II(https://vvviy.github.io/2018/12/12/Learning-Chisel-and-Scala-Part-II/)

通过两篇博客,可以对scala又一个快速的了解,有过Systemverilog面向对象经验的小伙伴理解起来可能更容易一些。

如果想更进一步细致的了解Scala,这里推荐两本书:

《Scala编程实战》(微信读书里可以直接看):

img

《Scala编程》第三版(有需要电子版的小伙伴可以私信我)

img

对于Scala,SpianlHDL里面用到的语法也不多,而开始的目的不是让我们去精通Scala去面试大数据的,所以不必太纠结于其中,当然爱好学习的人除外。

SpinalHDL资料

学习SpinalHDL首先要做的是:

​ 读SpinalHDL-Doc

​ 读SpinalHDL-Doc

​ 读SpinalHDL-Doc

在百度或谷歌可直接搜索SpinalHDL-Doc

除了SpinalHDL-Doc之外,这里推荐另外两个练手参照的地方:

https://gitee.com/peasent/SpinalWorkshop

https://github.com/jijingg/Spinal-bootcamp

把这些能够手把手的过一遍之后,相信拿SpinalHDL去做项目应该还是OK的。

最后,遇到问题可以去Gitter放胆去问,这里贴上链接:

https://gitter.im/SpinalHDL/SpinalHDL

SpinalHDL资料

最后,欢迎有更多的小伙伴来一起探讨SpinalHDL,让优秀的设计思路能够普及开来,提升RTL生产力。

标签:Scala,简介,BSV,SpinalHDL,Spinal,Verilog,https,Chisel
From: https://www.cnblogs.com/msuad/p/17051615.html

相关文章

  • ATX server简介
    简介atxserver是移动设备管理平台;搭建这样的一个平台,需要 python3.x+nodejs+rethinkdb,及atxserver2和atxserver2-android-provider 其他部件的作用:1、rethink......
  • Android sqlite 使用简介
    进行Android应用开发时经常会用到数据库。Android系统支持sqlite数据库,在app开发过程中很容易通过SQLiteOpenHelper使用数据库,SQLiteOpenHelper依赖于Context对象,但是基于ui......
  • AEAD加密算法简介
    copyfrom:https://ez.analog.com/ez-blogs/b/engineerzone-spotlight/posts/authenticated-encryption如果仅仅加密,显然只能保证confidentiality,不能证明message是否被......
  • JS简介
    JS历史JavaScript诞生于1995年。NetSpace发布NetspaceNavigator2浏览器,提供了免费开发工具LiveScript,设计的主要目的是处理以前由服务器端语言负责的一些输入验证操......
  • Kubernetes组件简介
    Kubernetes组件简介Kubernetes(简称k8s)致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。k8s是什么一个基于容器技术的分布式架构一个一站式......
  • 死锁简介
    哲学家就餐的问题。死锁:互相等待对方持有的资源而造成的谁的无法执行的情况叫做死锁。死锁处理:死锁预防死锁避免:判断一下该时间有没有一个进程处于安全序列死锁检测+......
  • CodeCogs LaTeX 在线 API 使用简介
    有些Markdown渲染器不支持LaTeX,只能换用兼容性更强的图片格式。CodeCogsLaTeXAPI是一个在线将LaTeX公式转换生成图片的工具,提供了URLAPI接口,方便使用。Usageh......
  • Nginx模块综合简介
    Nginx模块介绍对于Nginx来说,可能每个人都并不默认。多多少少都使用过,或者说是听说过。Nginx凭借其高并发、低消耗、热部署等特点,逐渐成为WEB服务器软件的首选。可以算作为Ap......
  • ABP Framework 7.0 RC 新增功能简介
    ABPFramework在架构上有四大目标:模块化、DDD、多租户和微服务。从7.0更新的功能来看,其侧重点转向微服务场景的实现,比如:Dapr集成、动态权限和功能、外部本地化、分布......
  • JavaScript数据类型简介以及简单的数据类型
    JavaScript前文回顾: ​​认识JavaScript到初体验​​​​JavaScript注释以及输入输出语句​​​​JavaScript变量的使用、语法扩展、命名规范​​一、数据类型简介1.1为......