[0]为什么是SpinalHDL-Spinal简介
[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编程实战》(微信读书里可以直接看):
《Scala编程》第三版(有需要电子版的小伙伴可以私信我)
对于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生产力。
[0]为什么是SpinalHDL-Spinal简介的更多相关文章
- 《HiWind企业快速开发框架实战》(0)目录及框架简介
<HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...
- 蓝牙4.0(包含BLE)简介
1. BLE (低功耗蓝牙)简介 国际蓝牙联盟( BT-SIG,TI 是 企业成员之一)通过的一个标准蓝牙无线协议. 主要的新特性是在蓝牙标准版本上添加了4.0 蓝牙规范 (2010 年6 月 ...
- 【0】Laravel 5.1 简介
1.简介 Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以 ...
- 精通Web Analytics 2.0 (2) 内容简介
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 这本书里有什么? 这本书是在我第一本书<网站分析:每天一小时>的基础上创作的.我并不打算绕弯子,第一章是网站分析2. ...
- zabbix3.0.4 部署之一 (简介)
官方网站:http://www.zabbix.com/ 下载地址:http://www.zabbix.com/download.php zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视 ...
- Android5.0新特性——Material Design简介
Material Design Material Design简介 Material Design是谷歌新的设计语言,谷歌希望寄由此来统一各种平台上的用户体验,Material Design的特点是干 ...
- android 5.0 受欢迎的API简介
android 5.0 作为系统的一次重大升级,给用户和开发者带来了全新的体验.Material Design不但在视觉和操作上更胜一筹,扩展UI工具包同时也引入了大量新的API. 1. 3D视图和实 ...
- Apple Watch 1.0 开发介绍 1.2 简介 配置Xcode工程
WatchKit app需要一个现有的iOS app.在iOS app工程中,添加一个新的WatchKit app target,它包含了WatchKit app和WatchKit extension ...
- [Cake] 0.C# Make自动化构建-简介
0.Cake是什么? Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统.它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等. 熟悉大名鼎鼎的M ...
- React Native 0.50版本新功能简介
React Native在2017年经历了众多版本的迭代,从接触的0.29版本开始,到前不久发布的0.52版本,React Native作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...
随机推荐
- 驱动开发:内核枚举Registry注册表回调
在笔者上一篇文章<驱动开发:内核枚举LoadImage映像回调>中LyShark教大家实现了枚举系统回调中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与 ...
- 齐博x1 小程序与公众号长期永久订阅消息的申请方法
要给用户发送消息提醒的话,需要申请订阅消息.订阅消息分一次性订阅与长期永久性订阅.一次性订阅没有实际意义,用户订阅一次就只能发送一次.这里主要是指导大家如何申请永久长期订阅功能.对于公众号而言,大家先 ...
- 【JavaSE】面向对象三大特征——封装、继承、多态
前言:本文主要介绍思想 封装 封装这一概念并不仅存在与面向对象中,甚至说封装这一概念不仅限于编程中,其实生活中的封装无处不在.比如 需求:你到银行取钱 参数:你只需要提供银行卡和密码 返回值:柜员会将 ...
- 测试架构师CAP原理(最简单)
测试架构师CAP原理(最简单) 很多人都不是很了解CAP理论,其实CAP很简单,不要想复杂了! C:一致性,就是数据一致性,就是数据不出错! A:可用性,就是说速度快,不延迟,无论请求成功失败都很快返 ...
- Linux网络管理命令
Linux网络管理命令 ifconfig 用于配置网卡ip地址信息等网络参数或显示网络接口状态,类似于windows的ipconfig命令. 可以用这个工具来临时性的配置网卡的IP地址.掩码.广播地址 ...
- 「MySQL高级篇」MySQL之MVCC实现原理&&事务隔离级别的实现
大家好,我是melo,一名大三后台练习生,死去的MVCC突然开始拷打我! 引言 MVCC,非常顺口的一个词,翻译起来却不是特别顺口:多版本并发控制. 其中多版本是指什么呢?一条记录的多个版本. 并发控 ...
- JMX port被占用
JMX port被占用 解决方案 win+R打开DOS窗口,进入window命令,注意:要以管理员身份打开(快捷键:ctrl+shift+enter): 使用命令:netstat -aon|finds ...
- nginx转发到uwsgi的配置
server{ server_name ; listen 80 default_server; add_header Access-Control-Allow-Origin *; add_header ...
- C++ using 编译指令与名称冲突
using 编译指令:它由名称空间名和它前面的关键字 using namespace 组成,它使名称空间中的所有名称都可用,而不需要使用作用域解析运算符.在全局声明区域中使用 using 编译指令,将 ...
- 如何安装Visual Studio Community2022
如何安装Visual Studio Community2022 Visual Studio是一款强大的IDE(集成开发环境),对于初学者可以选择使用社区版,下面是Visual Studio Commu ...