[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作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...
随机推荐
- 9.pygame-键盘捕获
创建英雄类 """英雄精灵""" class Hero(GameSprite): def __init__(self): # 调用父类方法, ...
- 27.-Django发送邮件
一.邮件相关协议-SMTP SMTP全称是Simple Mail Transfer Protocol,即简单邮件传输协议(25端口号) 它是由一组从源地址到目的地址传输邮件的规范,通过它来控制邮件的中 ...
- 前端监控系列4 | SDK 体积与性能优化实践
背景 字节各类业务拥有众多用户群,作为字节前端性能监控 SDK,自身若存在性能问题,则会影响到数以亿计的真实用户的体验.所以此类 SDK 自身的性能在设计之初,就必须达到一个非常极致的水准. 与此同时 ...
- UVA10763
菜鸡退役人来水黄了-- \(\sf{Solution}\) 搞不懂为什么要排序,这不是两个数组直接模拟的数数题吗. 读入后,对于每个学生,令他要去的学校以及他现在所在学校人数对应加一,再 check ...
- 十三、Pod的资源控制器类型
Pod 的资源控制器类型 一.Pod 的资源控制器类型 什么是控制器呢?简单来说,控制器就好比是影视剧里面的剧本,演员会根据剧本所写的内容来针对不同的角色进行演绎,而我们的控制器就好比是剧本,Kube ...
- webpack4--按需加载
在做单页面应用的过程中,通常利用webpack打包文件,将依赖的外部问价单独打一个vendor.js.这样就会有个问题,这个文件会随着你引用的包的增多,体积会越来越大.在路由中利用import 引用文 ...
- 设计模式学习(二十四):Spring 中使用到的设计模式
设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...
- C#使用MathNet库来对进行曲线拟合
下面是用来求取一条直线和一条拟合曲线交点的代码 /// <summary> /// 拟合曲线所筛选的点的个数 /// </summary> const int CurveNum ...
- Ajax(下)
跨域 跨域的概念:非同源请求,均为跨域.如果两个页面拥有相同的协议(protocol),端口(port)和主机(host),那么这两个页面就属于同一个源(origin). 例如:主机:http://w ...
- 面试 个人摸底监测 考察考察JS三座⼤⼭ 1. 原型和原型链 2. 作⽤域与闭包 3. 异步和单线程 (第四天)
01.如何判断⼀个变量是不是数组? let arr = [1,2,3,4] function fun(){ return arr instanceof Array } 02.如何使⽤class实现继承 ...