EETOP 创芯网论坛 (原名:电子顶级开发网)

标题: SpinalHDL一门真正具备生产力的HDL开发框架 [打印本页]

作者: goco    时间: 2020-6-23 11:13
标题: SpinalHDL一门真正具备生产力的HDL开发框架
本帖最后由 goco 于 2020-6-23 11:21 编辑

在Verilog/VHDL出生到现在,其他HDL一直层出不穷,更多的是玩票或者试验性质的,有的也只是在很小的范围内局部应用,并没有根本上解决Verilog的问题。SpinalHDL是基于SCALA语言上的DSL(还有一个兄弟叫Chisel),更准确的说是一个基于Scala的HDL开发框架,不同于以前的那些HDL,它解决了Verilog的痛点,并且和传统的IC-flow和谐共存,适合大规模的Soc系统的开发。
可以总结为八个字:高效可靠,方便复用


SpinalHDL相比Verilog/VHDL
1:彻底的参数化能力,自定义组件,自定义Lib,真正实现可重用
2:位宽推导,类型推导,写出的HDL简洁可靠3:内置Lint静态检查(位宽,端口,CDC),生成的代码不会有静态错误
4:大量高效的基础组件和可重用Lib,还在持续发展
5:至少一个Soc框架和RISCV处理器
6:自带仿真框架(后台基于Verilator),非常方便并且灵活强大,在此之上发展出一个UVM也不难
7:开源,跨平台开发SpinalHDL + Verilator(仿真) + GtkWave(波形),对于个人或者小团队再也不必上Linux装盗版全家桶
8:不光适合HDL,参考平台,测试激励都可以用Scala完成,一个平台全部搞定

SpinalHDL相比MyHDL
1: MyHDL的硬件代码更像python,而基于Scala的SpinalHDL代码更像HDL,硬件工程师阅读书写转变成本低
2: MyHDL测试基于Python,对于稍大规模仿真很难胜任,SpinalHDL仿真测试基于verilator,毫不逊色商业软件VCS
3: Scala比Python更简洁跟安全,Scala非常适合DSL,对于满眼钉子的你,Scala就是手握各种锤子

SpinalHDL相比HLS
1:SpinalHDL的代码是基于RTL,思考过程跟verilog开发完全一致,并不会产生冗余逻辑,只会参数化生成,时序问题完全取决于设计者
2:HLSL的效率逻辑冗余一致被人诟病,对于低成本低功耗的消费级IC,面积功耗是一道过不去的门槛,需要精细化的设计。


SpinalHDL相比Chisel
1:chisel源于学校,缺乏工程经验,不管是chisel源码还是生成的Verilog可读性较差,有大量的争议设计
2:SpinalHDL对硬件工程师更为友好,对于有IC开发背景的工程师,阅读SpinalHDL源码几乎没有太大障碍。
3:SpinalHDL有完整的文档, 清晰的软硬件概念,生成的verilog代码非常接近工程师手工书写风格,适合团队混合开发。

SpinalHDL并不替代现有IC开发Flow,它是一个高效的生成器,对传统IC团队较为友好,对于混合开发(部分人SpinalHDL, 部分人Verilog)也完全没有阻碍,不做强制。

缺点:
算不上缺点的缺点,Scala是基于JVM上的一门面向对象函数式编程语言,对于传统的IC工程师需要一些学习成本。
但是如果有python或者C,java使用经验,学习Scala花不了多久,另外Scala也是一门非常值得学习的语言,有很多先进的元素。
如果之前你认为python是一门最简洁方便的语言,那么用了Scala你可能会改变主意 : )

担心:
    回到之初的那个问题,会不会是一个玩具,值得花时间去学习吗? 对于IC工程师,我在自己公司会不会用不了?
    是否需要花时间学习一门新的语言,因人而异,看自己的兴趣和需求,但是SpinalHDL确实具备生产力,能开发大型系统,而且更适合开发大型系统,所以它不是玩具。
    SpinalHDL跟现有团队以及Flow不冲突,可以自由组合,平滑过渡。

SpinalHDL2015左右出现的,还算比较新,但是已经在IC图像处理,通信基带,神经网络,以及SOC有实实在在的应用,并没有遇到严重的缺点。另外SpinalHDL是开源的,对于不满意的地方,或者自己有好的lib或者组件,每个人都可以不断的完善,而且也不难。

资料:
1 官方文档:https://spinalhdl.github.io/SpinalDoc-RTD/index.html
2 社区讨论:https://gitter.im/SpinalHDL/SpinalHDL
3 新手教程:https://github.com/jijingg/Spinal-bootcamp
4 知乎专栏:https://zhuanlan.zhihu.com/c_1172895565598920704



作者: abeey    时间: 2020-6-23 19:49
现在就是文档跟不上,小规模逻辑开放绰绰有余。
作者: goco    时间: 2020-7-7 14:34


   
abeey 发表于 2020-6-23 19:49
现在就是文档跟不上,小规模逻辑开放绰绰有余。


SpinalHDL的文档已经算是相当全面了,另外源码可读性很高。对硬件工程比较友好很容易上手

作者: abeey    时间: 2020-7-7 20:46


   
goco 发表于 2020-7-7 14:34
SpinalHDL的文档已经算是相当全面了,另外源码可读性很高。对硬件工程比较友好很容易上手
...


library 的使用和接口是没有具体的文档的,全靠自己读。

作者: Kingdoms_Guo    时间: 2020-7-8 15:58
本帖最后由 xiaojia102003 于 2020-7-8 16:02 编辑

关注下,后端工具对Spinal HDL的支持怎么样?
作者: abeey    时间: 2020-7-9 09:45


   
xiaojia102003 发表于 2020-7-8 15:58
关注下,后端工具对Spinal HDL的支持怎么样?


SpinalHDL 最终生成 verilog 或者 VHDL,所以 EDA 工具没有啥问题。


作者: quanqiutong    时间: 2020-7-9 10:14
这种我试过,感觉还是不成熟
1. 环境问题,要配置java,scala 工作环境,不熟悉的人很头疼,没有统一的平台
2. scala语言过于复杂,scala可以说是最复杂的编程语言,即使是计算机专业的也很头疼
3. 生成的verilog代码可读性太差
4. 版本变换快,新的版本不支持旧版本的语句
5. 出现问题没法解决到底是哪里有问题

作者: Kingdoms_Guo    时间: 2020-7-9 10:35


   
abeey 发表于 2020-7-9 09:45
SpinalHDL 最终生成 verilog 或者 VHDL,所以 EDA 工具没有啥问题。


谢谢解答。

作者: abeey    时间: 2020-7-9 15:22


   
quanqiutong 发表于 2020-7-9 10:14
这种我试过,感觉还是不成熟
1. 环境问题,要配置java,scala 工作环境,不熟悉的人很头疼,没有统一的平台 ...


如果你不玩复杂的技巧,那么可以把 SpinalHDL 当初纯粹的 verilog/VHDL 的简化版本。

环境非常容易配制,我自己 windows 下配制出了一个便携版本。IDE 工具友好程度不是好一点点。

作者: 要你命3000    时间: 2020-7-30 22:20
最近想从Verilog入坑SpinalHDL,有几点问题想请教下:
1、环境问题:习惯了Windows+VSCode,这个环境能支持么?
2、仿真调试问题:貌似需要先将SpinalHDL转成Verilog,再上Verilator,这个调试就可能有些麻烦,要返回去定位错误。不知道有什么经验
3、语言稳定性问题:版本升级,是否会带来不兼容的问题
4、其他:粗略看了一下SpinalHDL、Chisel3,貌似两者还是比较相似的,是否有工具支持把Chisel3转成SpinalHDL代码,这样可能有比较丰富的IP库可以用
作者: goco    时间: 2020-8-13 17:51


   
abeey 发表于 2020-6-23 19:49
现在就是文档跟不上,小规模逻辑开放绰绰有余。


SpinalHDL有官方文档,你能遇到的80%的文档都能在文档上找到。其余的问题可以在社区https://gitter.im/SpinalHDL/SpinalHDL中提问,社区对新人比较友好,不管是比较简单或者复杂的问题都会有人及时解答

作者: goco    时间: 2020-8-13 17:53


   
xiaojia102003 发表于 2020-7-8 15:58
关注下,后端工具对Spinal HDL的支持怎么样?


SpinalHDL是一个高效的Verilog生成器,它的输出是verilog,对验证,后端是透明的,后续FLOW完全跟原来的开发流程一致。

作者: goco    时间: 2020-8-13 18:19


   
quanqiutong 发表于 2020-7-9 10:14
这种我试过,感觉还是不成熟
1. 环境问题,要配置java,scala 工作环境,不熟悉的人很头疼,没有统一的平台 ...


你说的关于环境或者语言的复杂度对于新手确实有,但是我觉的这个并不是一个很大的障碍。
1. 环境和平台我认为恰恰是这套开发方法的优势,SpinalHDL + verilator + IDEA + gtkwave, 都是跨平台开源免费软件,
在windows上,在mac上都能无障碍开发。环境的安装不应该是一个很困难的事情,好歹我们也自称工程师,这个不应该是问题。

2. scala 语言复杂,绝大多数是人云亦云。就像很多人说python简单一样, python简单吗,python 作为工具使用可能会比较方便,但作为一门开发语言,我并不认为它简单。反而Scala学起来并没有什么秘密,一切都能追根溯源。由于Scala强大的表达能力,类型推断,模式匹配,函数式编程特性,写出来的代码往往比python要简洁漂亮的多。一开始可能给人感觉有点复杂,有点像VIM,花点时间会用了基本上回不去了。所以不妨尝试花一点点时间系统的学习一下,相信你会爱上它。

3. 可读性差,chisel、SpinalHDL 都有这样的问题,不过最新版本的SpinalHDL生成代码已经非常接近手工写的,spinalHDL会原封不动的保留所有的信号名,并不会擅自优化修改信号,目前SpinalHDL对于可读性唯一的不足的地方是匿名变量,匿名变量是个历史问题,是偷懒比较安全的做法。将来的版本里面会把匿名变量也拿掉,重复信号会有后缀index替代,这样可读性基本上就基本上没什么值得诟病的地方。

4. 这个目前我还没发现,如果你有例子可以提供上来,原则上SpinalHDL一定会保持后向兼容,即便个别的API有变动会在提前n个版本之前就有过期警告,一般你编译的时候就能看到这样的信息,不会突然废弃API。

5. 出现问题不知道怎么解决,欢迎到社区https://gitter.im/SpinalHDL/SpinalHDL提问,这里有最耐心的Dolu1990帮你解答。




作者: goco    时间: 2020-8-13 18:39
本帖最后由 goco 于 2020-8-13 18:49 编辑


   
要你命3000 发表于 2020-7-30 22:20
最近想从Verilog入坑SpinalHDL,有几点问题想请教下:
1、环境问题:习惯了Windows+VSCode,这个环境能支持 ...


1. 首先对于前段开发用到的工具SpinalHDL +verilator +gtkwave 是全平台开源免费软件,所以在Windows上完全没问题,我本人有一半时间就是在windows上开发,VScode我没用过,如果它能支持Java开发的话,原则上是没有问题,不过IDEA确实很不错,不妨试试

2. 仿真调试以前我比较习惯Verdi来追踪波形,不过现在用gtkwave习惯了也还好没什么障碍,由于spinalHDL生成的verilog原封不动的保留了信号名,所以一般我都很少看Verilog代码,直接拉信号对着SpinalHDL代码debug,没有任何问题。另外verilator 跟VCS是个仿真器,对debug来说完全透明的,不用关心它。

3. 没有, 我也劝你千万不要这么干。 你觉的那些Chisel上有SpinalHDL没有的,请留言,不管是feature 或者库。 rocket-chip就不要提了,有点代码洁癖的都不能接受这样的屎山。Spinal也有漂亮的SOC框架,虽然可能比较小,但是很简洁,非常容易上手扩展。

作者: abeey    时间: 2020-8-14 13:57


   
goco 发表于 2020-8-13 18:39
1. 首先对于前段开发用到的工具SpinalHDL +verilator +gtkwave 是全平台开源免费软件,所以在Windows上完 ...


我是 SpinalHDL + IDEA + msys2(gcc, make, verilator) + gtkwave,做些小工程一点问题没有。


作者: abeey    时间: 2020-8-14 14:00


   
要你命3000 发表于 2020-7-30 22:20
最近想从Verilog入坑SpinalHDL,有几点问题想请教下:
1、环境问题:习惯了Windows+VSCode,这个环境能支持 ...


我的是 IDEA 加 sbt 插件,msys2 中安装 gcc、make 和 verilator,单独下载 gtkwave,已经做成便携版,使用毫无障碍。

作者: adan313    时间: 2020-8-26 15:41
楼主,想请教一下你关于sbt环境的问题。我是在虚拟机ubuntu18.04上运行的。
由于sbt从中心仓库下载依赖过于慢了,所以想做一个没有网络都可以用的环境。我使用SpinalHDL只会用core和lib这两个,按理是把这两个打包成jar包就可以直接使用jar包就可以,但是试了几次没成功。我看log信息猜测是:sbt首次运行会下载一些scala、sbt等相关的依赖,然后再下载spinalhdl的依赖。spinalhdl的依赖这些都可以搞定,但是就是把jar包放在工程目录下的lib里不起作用。。

所以就是想请教一下你,指导或者讨论一下这个单机的环境。其他的语法,debug、lib、便捷性、革命性我是完全同意。文档确实也很丰富。scala语法其实也是有资料,但唯独一些纯java类的开发flow了解的不多,遇到好多问题。
作者: goco    时间: 2020-9-7 11:00


   
adan313 发表于 2020-8-26 15:41
楼主,想请教一下你关于sbt环境的问题。我是在虚拟机ubuntu18.04上运行的。
由于sbt从中心仓库下载依赖过于 ...


由于坑爹的GFW,国内访问速度确实很慢。有两个途径:1. 设置阿里云的镜像试试https://www.jianshu.com/p/3427c702d443, 有些较新的库阿里云没有,就到https://search.maven.org/搜索链接手动迅雷下载,覆盖本地.ivy(确保覆盖的位置没有错,一般哪个文件下载很慢挂死的时候都会有个同名的临时文件,windows上我用everything 搜索,Linux上可以用find命令在.ivy搜索)
2. 使用V皮N,方法自己网上找
一般也就是第一次下载慢一些,后面基本上不太会遇到环境的问题。



作者: tangchongyue    时间: 2020-12-10 20:29
发表个不成熟的观点,SpinalHDL最终还是产生Verilog,从设计可靠性的角度,我们芯片设计当然越可控越好,那么直接用Verilog设计是最可控的。就像汇编语言,虽然比C语言晦涩并且繁琐,很大一部分人觉得汇编已经是被淘汰了,但是实际上我们嵌入式系统的启动项start up主要还是用汇编写的,主要是汇编更底层,效率更高。或许以后SpinalHDL会成主流,然后又被另外一种语言所取代,但是硬件的设计思想才是根本。语言本身是一种实现载体,目前打算先观望观望。
作者: 轩辕志瑜    时间: 2020-12-12 17:53
谢谢楼主分享
作者: abeey    时间: 2020-12-13 08:44


   
tangchongyue 发表于 2020-12-10 20:29
发表个不成熟的观点,SpinalHDL最终还是产生Verilog,从设计可靠性的角度,我们芯片设计当然越可控越好,那 ...


我自己是做嵌入式系统的,汇编基本都不写,能看懂,改一点。日常工作中,C 还是主流,甚至其他语言都有起来的优势。

作者: yuanqui_cn    时间: 2022-5-25 16:47
现在在用spinalhdl,是更接近verilog,习惯后,是个大号的systemverilog.  不过对于没有写过class的人,很难说服他们去用,   chisel更灵活,但是更复杂,可能会分散硬件思维,我没用chisel做过项目,
作者: yuanqui_cn    时间: 2022-5-25 16:48
我现在在用
作者: rass    时间: 2024-1-2 11:29
感谢分享,成功激起了我对spinalHDL的兴趣





欢迎光临 EETOP 创芯网论坛 (原名:电子顶级开发网) (https://bbs.eetop.cn/) Powered by Discuz! X3.5