zoukankan      html  css  js  c++  java
  • Vivado HLS与System Generator:联系与区别

                    在很多年以前的ISE套件里面,有个功能强大的AccelDSP,它可以可自动地进行浮点到定点转换,并把算法生成可综合的HDL,还可以创建用于验证的测试平台,但是在4年前左右的时候销声匿迹了,当时的说法是市场策略的问题。几年之后Vivado HLS横空出世,具备了更加强大的分析、综合、验证等功能,使得我们可以快速把现有的C/C++代码在满足HLS设计规范的情况下直接生成可综合的结果。在这前后的时间里面,我们还有一个工具可以直接把现有的算法生成可综合的结果,而不需要或者只需要很少的手工HDL编写,那就是System Generator。那HLS和System Generator既然都可以生成现成的可综合HDL代码,那么它们直接有什么区别和联系呢?我们可以在此做一些简单的探讨,不足之处请大家指出。(1)相比于手工编码,Vivado HLS与System Generator都是在一种更高层次的级别上进行设计。       Vivado HLS是把现有的基于C/C++/SystemC的算法直接在基于Eclipse的编译环境中进行开发、验证并生成可综合的代码,只要对FPGA的基本结构有了一定的了解,我们很容易以开发软件类似的方式完成算法的综合,开发效率是不言而喻的。       System Generator同样可以把现有的算法在Simulink环境中进行开发、仿真验证、FPGA在回路验证等等,而且它不仅可以生成可综合的HDL、EDK中使用的IP,甚至可以直接生成bit流文件。当然,因为在使用System Generator设计时要直接使用FPGA中的基本模块,开发人员要对FPGA的架构和开发方式更加熟悉,比如什么地方要插入寄存器保证时序,什么地方使用某些模块不会产生额外的硬件资源消耗等等。       做为全新的设计工具,目前看起来Vivado HLS的设计完成的速度要更快一些,当然Vivado套件中的System Generator和ISE套件中的System Generator相比,生成速度已经提高了很多了。(2)二者都是基于模型的设计方法中的重要手段       基于模式的设计(MBD)在复杂的嵌入式系统中的应用越来越广泛了,因为结合了Matlab/Simulink设计方法,验证与测试工作可以多次、反复地高效运行,并且使用了自动代码生成技术,开发、验证与确认等工作的效率大大提高。       假设我们已经有了一个基于C/C++的,或者在Simulink环境中已经充分验证了的代码,那我们至少有四种途径直接生成可综合的HDL代码,包括:       把Simulink模型用System Generator中的模块重新搭建(可以自己编写个m文件,标明替换规则,然后自动替换,但是不是万能的,什么时候Xilinx出一个就好了),然后进行直接仿真验证、基于JTAG/以太网的FPGA在回路测试、ModelSim仿真等等,最后可以生成HDL文件、IP、综合网表、比特流等。       用Matlab的HDL Coder/HDL Verifier进行HDL文件的生成、测试等。它的测试、验证思想等与System Generator是一致的,但是因为它并不是专门针对Xilinx FPGA的,所以生成的都是标准的HDL,对IP、硬件资源的使用以及不如System Generator灵活。       使用Matlab/Simulink/Embeded Coder直接把现有的模型生成C代码,这个代码生成速度和测试、验证是很快的,是MBD开发的一种典型方式。使用生成的C代码,或者使用现有的C代码,然后就可以使用Vivado HLS进行高层次的综合工作了。(3)二者可以互相转换、调用       说了这么多,那Vivado HLS和System Generator如何进行一些互动呢?在Vivado开发环境下,得益于Vivado IPI以IP为中心的这样的设计方法,它们直接的互动变得非常容易。例如:       把Vivado HLS综合的结果打包为一个IP,或者生成HDL代码,从而供System Generator直接调用;如果懒得验证,可以直接使用Vivado HLS模块;        在一个Vivado工程中,一部分功能可以由Vivado HLS综合而来,一部分现有的基于System Generator的算法直接被调用,它们便可以共同工作了。 



    转载地址:http://xilinx.eetrend.com/blog/6388

    人生天地之间,若白驹之过郤(隙),忽然而已
  • 相关阅读:
    python中的对象
    在python中是没有NULL的,取而代之的是None,它的含义是为空
    Python将列表作为栈和队列
    Python的数据类型3元组,集合和字典
    1
    Python的数据类型2列表
    _Python定义方法
    IDEA
    Docker-compose.yml 基础使用
    Nginx 前后端分离, 多个二级域名配置
  • 原文地址:https://www.cnblogs.com/xiabodan/p/4038627.html
Copyright © 2011-2022 走看看