在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3493|回复: 3

[原创] 2020年的一次转变:从Verilog到SpinalHDL

[复制链接]
发表于 2021-1-4 22:57:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

  学习SpinalHDL已有近半年,其诚然小众,但“小家碧玉”未尝不是绝代佳人。
出坑Verilog
    遥想当年本科之时画过电路PCB、玩儿过单片机、PLC,亦学过C#(给我那数块板子的毕设做个上位机),Python。直到研究生之时方才选择FPGA这条道路,除了对数字电路本身的兴趣之外(对于做软件感觉一直找不到自己的优势所在,虽然最终还是进了互联网行业,也算是冥冥之中自有天意吧),重要的便是Verilog语法简单,可以令我很快专注于电路硬件的设计而非语法本身。       “成也萧何,败也萧何”,Verilog语法确实简单,但在实际的项目设计中诸君是否有对Verilog的描述冗杂感到无可奈何?一个电路结构的方案设计完毕到用Verilog算法来实现还有一段路要走(我承认RTL代码编写阶段只是整个项目周期的一部分,所占比重并没有那么大,但Verilog或许是开发效率也就只比软件的汇编语言要好一些了),也导致了很多时候虽然有对算法电路实现的方式有一个明晰的设计方案但仍不想去实现(眼高手低)。而且在Verilog代码调试中有一半的时间估计都是定位一些比较低级的错误,更有些像端口方向声明错误、信号多个地方驱动等这些错误往往是在FPGA布局布线阶段甚至上板阶段才发现,极大的浪费时间,而虽然出了SystemVerilog,但这些问题依旧存在。借用知乎上“马車”的观点(完整文章参见原文链接):
  • 例化不方便:有人会说,有辅助插件帮你完成 (确实有很多好的插件,emacs verilog-mode , vim 的autoinst) 即便这样,但是对带参数的模块例化, 一对多例化同样需要手动处理,非常不方便
  • 大量的重复声明:无休止的变量声明,无休止的位宽声明,容易出错, 作为一门上古时期的语言,对编译器不能要求太高
  • 函数不能带参数:verilog中函数的使用只能是零零星星,哪怕是一个位宽的变化都要重写函数, 作为一门语言函数不能广泛使用,实为鸡肋
  • 参数化实在是笨:虽然支持参数化,parameter 也只能做一些简单的加减左移操作, 没有基本math包。利用宏做参数化,对于变量比较多的设计,非常复杂,并且也不好维护。
  • 错误检测很弱:编译工具对错误的处理比较保守, 这种保守可能也源于语言本身,以及编译器的能力不及。
    以下问题需要工程师自己处理

    • 位宽不匹配,
    • input/output端口写反
    • 饱和截位弄错,
    • 跨时钟域问题
    • 锁存器检查
    • 组合逻辑环自己查
    • ....

    基于前仿的编译,会遗漏大量的错误,必须要Lint, 综合检查, 费时费力又费钱。   
    重构、增减信号,Bist/DFT逻辑插入麻烦
    需要手动处理, 编写脚本, 即便是脚本也不通用
入坑SpinalHDL   
    SpinalHDL和Chisel师承一脉,都是基于Scala来进行电路描述。其本质上仍旧是HDL而非HLS,在设计之前依旧需要有清晰的电路结构,只不过是在电路描述上更加方便和快捷而已。个人学习SpinalHDL已有半年时间,SpinalHDL在解决上面的那些痛点上觉得做的是相当优秀,有感兴趣的小伙伴不妨尝试了解下。诚然,SpinalHDL的入门曲线可能较陡一些,但越过此门当真是打开一个新的世界。
    结合SpinalHDL—Doc文档及个人学习经历,推出下面个人的SpinalHDL的笔记总结,建议结合SpinalHDL-Doc进行阅览。


开篇了解


事半功倍


开发环境


组织结构


数据类型


电路描述


双兔傍地走,如何辨雌雄


奇技淫巧


仿真篇


练习随笔
写在最后   
     SpinalHDL最终仍需要生成Verilog交给工具综合,其代码可读性也相当不错,在SpinalHDL中定义的变量名也都会保留下来。是SpinalHDL还是Verilog其都是一个工具,其本质上仍需要电路设计的思维,但或许可以给我们打开一扇新的电路描述的大门。


[attachimg][/attachimg]
发表于 2021-1-8 15:26:39 | 显示全部楼层
大佬,你好,在知乎上,把spinalHDL 相关的9篇文章全部看了一遍,感觉如果想做到高度的 可重构,复用,扩展,除了要有大量开源的“lib"外,单spinalHDL中也有大量的语法,函数之类,这个是不是也太花精力了啊?
 楼主| 发表于 2021-1-9 22:35:54 | 显示全部楼层


ll_ago 发表于 2021-1-8 15:26
大佬,你好,在知乎上,把spinalHDL 相关的9篇文章全部看了一遍,感觉如果想做到高度的 可重构,复用,扩展 ...


SpinalHDL本身是基于Scala的,语法其实并不多,只不过需要熟悉下Scala及面向对象和函数式编程。简单点儿甚至你可以按照写Verilog时那么写,对照SpinalHDL-Doc,花两个月对着练可以的
发表于 2021-12-14 20:40:23 | 显示全部楼层
支持一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 06:13 , Processed in 0.017301 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表