全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

spinalhdl转Verilog可读性 SpinalHDL开发流程

时间:2023-07-27 09:29

人气:

作者:admin

标签: SpinalHDL  Verilog  开发 

导读:SpinalHDL是基于Scala全新的硬件描述语言,解决了不少Verilog等传统HDL语言的痛点,可以快速的完成某些IP的开发,和完美的融入现有的开发流程。 诚然SpinalHDL的学习路线是比较陡峭的。另...

SpinalHDL是基于Scala全新的硬件描述语言,解决了不少Verilog等传统HDL语言的痛点,可以快速的完成某些IP的开发,和完美的融入现有的开发流程。

诚然SpinalHDL的学习路线是比较陡峭的。另外在团队协作中,你可以要求你的同伴对Verilog,VHDL语言进行掌握,但是不能要求他们也掌握SpinalHDL,Chisel这些语言,所以你的代码怎么安排别人接手也是一个问题。但是这并不妨碍我们采用SpinalHDL来快速验证我们某个想法是否是合理的,快速验证某个架构是否合理。

在SpinalHDL的lib里面有一个eda目录,里面有Xilinx,Altera等公司的一套工具库。

860588c0-2bbf-11ee-a368-dac502259ad0.png

我们以Xilinx的为例来说明怎么利用里面的工具库来验证我们的代码能够跑的频率和占用的资源。

861c7ecc-2bbf-11ee-a368-dac502259ad0.png

可以看到里面只有一个VivadoFlow的文件,在VivadoFlow里面需要我们指定Vivado的路径,工作目录,以及RTL,目标器件,频率等一系列参数

8633b0a6-2bbf-11ee-a368-dac502259ad0.png

之后便可以获取到当前RTL能够跑到的最大频率和所需的资源了。可以看到A7和K7返回的是利用的LUT和FF,而KU,VU等器件把BRAM和URAM的资源利用也得到了。

8665ed5a-2bbf-11ee-a368-dac502259ad0.png

8692bc90-2bbf-11ee-a368-dac502259ad0.png

通过一个直方图均衡化的例子来说明这个VivadoFlow如何评估资源的消耗。

86c63610-2bbf-11ee-a368-dac502259ad0.png

86f87666-2bbf-11ee-a368-dac502259ad0.png

通过上面的代码指明vivado的路径,工作路径,以及目标器件和频率就可以愉快的开始等着频率和资源的利用报告了。

可以看到IDEA的窗口已经开始打印相关的log了。

87180aa8-2bbf-11ee-a368-dac502259ad0.png

875bff10-2bbf-11ee-a368-dac502259ad0.png

可以看到实际能够跑到的频率只有147M,资源利用了976个LUT,1058个FF,因为选了A7的器件,所以BRAM的利用并没有输出。但是可以在中间日志中看到。

87786222-2bbf-11ee-a368-dac502259ad0.png

我们在之前设置的目标频率是200MHz,但是经过评估之后只能跑到147M,说明我们还需要优化下现在的代码,继续查看日志,可以看到建立时间不满足。具体不满足的地方在日志中也有输出。

87a17586-2bbf-11ee-a368-dac502259ad0.png

87c514c8-2bbf-11ee-a368-dac502259ad0.png

Intra 说明是同一时钟下的,不存在跨时钟的问题,当然这个在我们设计的时候已经确定了。

87e8e5c4-2bbf-11ee-a368-dac502259ad0.png

通过上面的日志可以确定是divSum和divMul之间的时序不满足。这一部分是一个乘法和截尾操作。乘法被映射到DSP上,我们知道xilinx的DSP内部有几级的寄存器,如果把这几级寄存器给利用起来那么就可以提高时钟频率,所以可以通过打拍的方式,让这几个寄存器被DSP所吸收掉,从而达到时序收敛的目的。(PS:如果是异步复位的寄存器是不能被7系列的FPGA的DSP所吸收的)

883e3bb4-2bbf-11ee-a368-dac502259ad0.png

88592c4e-2bbf-11ee-a368-dac502259ad0.png

所以两种不同的代码如上。

887931c4-2bbf-11ee-a368-dac502259ad0.png

经过评估后可以跑到218MHz,的确有性能上的提升。

这个只是一个很小的模块,可以这样很快完成设计上的探索。

当我们要进行不同实现方式的探索的时候,便可以这样快速的完成,不断的完善模块的架构。

责任编辑:彭菁

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信