[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作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...
随机推荐
- Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)
文章目录 1.系统功能列表 2.管理员端界面 2.1 商家登录界面 2.2 用户信息管理界面 2.3 汽车管理界面 2.4 订单界面 2.5 汽车图形报表 2.6 优惠券新增界面 3.普通用户界面 3 ...
- 云原生分布式 PostgreSQL+Citus 集群在 Sentry 后端的实践
优化一个分布式系统的吞吐能力,除了应用本身代码外,很大程度上是在优化它所依赖的中间件集群处理能力.如:kafka/redis/rabbitmq/postgresql/分布式存储(CephFS,Juic ...
- Mysql综合实验2-LAMP+MHA+MYcat分库
实验目标: 1.搭建主从半同步+GTID复制 2.搭建MHA主服务器高可用 3.Mycat实现分库:wordpress库和shopxo库 4.客户通过域名可以访问到wordpress和shopxo 实 ...
- ML-梯度下降法的详细推导与代码实现
计算 对于线性回归,梯度下降法的目标就是找到一个足够好的向量\(\theta\),使代价函数\(J(\theta) = \sum_{i=1}^{m}(\hat{y}-y_{i})^{2}\)取得最小值 ...
- ES6 学习笔记(八)基本类型Symbol
1.前言 大家都知道,在ES5的时候JavaScript的基本类型有Number.String.Boolean.undefined.object.Null共6种,在es6中,新增了Symbol类型,用 ...
- 学习Rust第一天 Rust语言特点
学习Rust之前,我觉得应该首先了解Rust语言的设计目的是什么?为什么会诞生这门语言?这门语言和其他的语言有什么不同. Rust语言的设计特点 高性能:rust拥有和C++相近的性能表现,所以在嵌入 ...
- 2022,一个Java程序猿的装机配置
起因 工作一年,身边的老同学都在让我推荐适合他们需求的PC主机.于是仔细研究了一下当下的主机配置.成功试水并积攒了经验后,也给自己装了我的第一台PC主机. 主机配置 CPU:12700 主板:华硕TU ...
- [数据结构-线性表1.2] 链表与 LinkedList<T>(.NET 源码学习)
[数据结构-线性表1.2] 链表与 LinkedList<T> [注:本篇文章源码内容较少,分析度较浅,请酌情选择阅读] 关键词:链表(数据结构) C#中的链表(源码) 可空类 ...
- 部署owncloud连接ladp迁移数据
定期 清理日志 echo '' > /var/www/html/data/owncloud.log 查询 用户 的 ldap 语句 (|(objectclass=inetOrgPerson)(o ...
- EntityFramework介绍
首先我们说明一下ORM是什么. 微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上.开发人员使用Linq语言,对数据库操作如同操作Object对象 一 ...