0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

spinalhdl转Verilog可读性 SpinalHDL开发流程

FPGA开源工坊 来源:FPGA开源工坊 2023-07-27 09:29 次阅读

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,的确有性能上的提升。

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

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

责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发
    +关注

    关注

    0

    文章

    343

    浏览量

    40607
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109309

原文标题:SpinalHDL--快速评估代码性能

文章出处:【微信号:FPGA开源工坊,微信公众号:FPGA开源工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SpinalHDL里实现优雅的添加待跟踪波形信号

    在FPGA的开发过程中,在线抓取波形往往是终极调试大法。而如何抓取信号,相信做逻辑开发的小伙伴都是轻车熟路,张口就来,无非两种方式嘛:待跟踪信号添加原语或者手动例化Ila。而在SpinalHDL
    发表于 06-22 14:37

    聊一聊SpinalHDL 1.6.1引入的blackbox inline功能

    编程都有极大的便利。在上面的blackbox的使用方式里,封装成blackbox的Verilog代码和SpinalHDL代码是分开维护的,作为开发使用没有什么问题,但如果你是作为一个第三方IP提供者,像
    发表于 06-29 16:02

    SpinalHDL中关于casez的使用

    SpinalHDL中的switch在之前的文章中曾提到过SpinalHDL中switch的使用:通常情况下,switch对应着我们日常Verilog代码中的case。像下面的代码:其生成的RTL代码
    发表于 07-06 10:59

    SpinalHDL中的代码组织结构如何实现Component参数化设计呢

    ;io_"前缀,若想在代码中避免可在SpinalHDL里添加"noIoPrefix()"。在SpinalHDL里,Component对于端口的访问与Verilog类似:可读
    发表于 07-21 14:20

    SpinalHDL是如何让仿真跑起来的

    倘若用SpinalHDL写完代码后需要用Verilog/SystemVerilog来进行验证,那将是一件痛苦的事情。仿真设计不分家对于数字电路逻辑设计而言,设计与仿真往往是紧密结合的。在
    发表于 07-25 15:09

    如何在SpinalHDL里启动一个仿真

    仿真的原理,尽管我们仿真对象是我们的SpinalHDL代码生成Verilog文件交给仿真器去执行但我们的仿真环境搭建和case构建可以借助scala语言本身丰富的软件库来进行构建,这是我们用
    发表于 07-26 16:59

    SpinalHDL开发环境搭建步骤相关资料分享

    1、SpinalHDL开发环境搭建步骤开发所需软件SpinalHDL 是 Scala 语言的一个库,SpinaHDL 环境搭建所需的软件开发
    发表于 10-17 15:33

    SpinalHDL设计错误总结相关资料分享

    1、SpinalHDL设计错误  SpinalHDL编译器会做很多设计检查,来确保生成的VHDL/Verilog是可仿真的可综合的。基本上,SpinalHDL不会生成破损的VHDL/
    发表于 10-24 15:37

    基于Windows系统的SpinalHDL开发环境搭建步骤

    开发所需软件SpinaHDL环境搭建所需的软件安装包,SpinalHDL是Scala语言的一个库,开发Scala需要使用IDEA软件;JDK17、SDK:Scala2.12.15,SBT1.5.5
    发表于 10-24 15:40

    VerilogSpinalHDL

    不点蓝字,何来故事?  学习SpinalHDL已有近半年,其诚然小众,但“小家碧玉”未尝不是绝代佳人。出坑Verilog遥想当年本科之时画过电路PCB、玩儿过单片机、PLC,亦学...
    发表于 12-20 18:56 3次下载
    从<b class='flag-5'>Verilog</b>到<b class='flag-5'>SpinalHDL</b>

    SpinalHDL中的对应关系及声明形式

    针对SpinalHDL中的两大类型Reg、Wire,来梳理下在SpinalHDL中的对应关系及声明形式。
    的头像 发表于 07-03 11:02 1153次阅读

    SpinalHDL里如何实现Sobel边缘检测

    书接上文,趁着今天休假,采用SpinalHDL做一个小的demo,看看在SpinalHDL里如何优雅的实现Sobel边缘检测。
    的头像 发表于 08-26 08:59 1019次阅读

    SpinalHDL语法篇之Bool类型

    作为SpinalHDL语法篇的第一节,我们也从最简单的开始。
    的头像 发表于 10-31 10:56 944次阅读

    SpinalHDL中不可不知的位拼接符

    在之前写Verilog时,位拼接符是一个很常见的东西,今天来看下在SpinalHDL中常见的位拼接符的使用。
    的头像 发表于 11-12 11:34 903次阅读

    SpinalHDL BlackBox时钟与复位

    SpinalHDL中使用之前已有的Verilog等代码的时候需要将这些代码包在一个BlackBox里面,但是如果这些代码里面有时钟和复位,我们需要怎么将时钟和复位端口和SpinalHDL中已有的时钟域连接起来呢?
    的头像 发表于 05-04 11:13 512次阅读
    <b class='flag-5'>SpinalHDL</b> BlackBox时钟与复位