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