[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作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...
随机推荐
- 基于vite3+tauri模拟QQ登录切换窗体|Tauri自定义拖拽|最小/大/关闭
前两天有给大家分享tauri+vue3快速搭建项目.封装桌面端多开窗口.今天继续来分享tauri创建启动窗口.登录窗口切换到主窗口及自定义拖拽区域的一些知识.希望对想要学习或正在学习的小伙伴有些帮助. ...
- 【pytest官方文档】解读- 开发可pip安装的第三方插件
在上一篇的 hooks 函数分享中,开发了一个本地插件示例,其实已经算是在编写插件了.今天继续跟着官方文档学习更多知识点. 一个插件包含一个或多个钩子函数,pytest 正是通过调用各种钩子组成的插件 ...
- 使用rsync向服务器迁移大文件
场景 本人将12G本地单文件(12G大小h5文件数据集)向Linux服务器进行大文件上传时传输失败.最初使用 scp 命令或 rsync 直接对大文件进行传输,会出现网络断开或服务器端管道破裂情况,而 ...
- vue使用elementUI组件提交表单(带图片)到node后台
1.方法一(图片与表单分开,请求2次) 1.1 前台代码 // elementUI表单 <el-form ref="form" class="forms" ...
- Modbus协议及python库实现
基础知识 硬件层协议:解决0和1的可靠传输,常有RS232.RS485.CAN.IIC.SPI - 软件层协议:解决传输目的,常有Modbus.TCP/IP.CANopen - 协议优点: Modbu ...
- .Net 7里的函数.Ctor和.CCtor是干啥用的呢?你知道吗
楔子 有小伙伴被面试官问到这个问题,本篇彻底解析下这个问题. 为了彻底点,注意本篇是最底层的.Net 7 RC CLR运行模型(汇编)为基础进行全局剖析,局部业务分析. 如有疏漏,请斧正. 目的非手段 ...
- Python用yield form 实现异步协程爬虫
很古老的用法了,现在大多用的aiohttp库实现,这篇记录仅仅用做个人的协程底层实现的学习. 争取用看得懂的字来描述问题. 1.什么是yield 如果还没有怎么用过的话,直接把yield看做成一种特殊 ...
- Perl语言中一些内置变量等,$x、qw、cmp、eq、ne等
转载 Perl语言中一些内置变量等,$x.qw.cmp.eq.ne等 字母 符号 释义 eq = = equal(等于) ne != not equal(不等于) cmp 比较 qq " ...
- 【云原生 · Kubernetes】部署高可用kube-scheduler集群
个人名片: 因为云计算成为了监控工程师 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying 部署高可用kube-scheduler集群 13.1 创建 kube-scheduler 证 ...
- 简单使用Nginx反向代理和负载均衡
配置文件主要是三点: events . http . server 配置反向代理和负载均衡策略 #配置tomcat的IP地址和访问端口||负载均衡:权重就是比例 upstream guotong { ...