精华内容
下载资源
问答
  • 该方案为hls教程以及例子,按照教程都来一遍,相信你对hls有深入的理解
  • QPSK-Vivado-HLS
  • 一文了解Vivado HLS

    千次阅读 2021-03-05 19:58:12
    Xilinx 推出的 Vivado HLS 工具可以直接使用C、C++或 System C 来对 Xilinx 系列的 FPGA 进行编程,从而提高抽象的层级,大大减少了使用传统 RTL描述进行 FPGA 开发所需的时间。 一、高层综合简介 如图 1.1.1 所示...

    以下内容摘自正点原子的:《领航者 ZYNQ 之 HLS 开发指南》

    为了尽快把新产品推向市场,数字系统的设计者需要考虑如何加速设计开发的周期。设计加速主要可以从“设计的重用”和“抽象层级的提升”这两个方面来考虑。Xilinx 推出的 Vivado HLS 工具可以直接使用C、C++或 System C 来对 Xilinx 系列的 FPGA 进行编程,从而提高抽象的层级,大大减少了使用传统 RTL描述进行 FPGA 开发所需的时间。

    一、高层综合简介

    在这里插入图片描述
    如图 1.1.1 所示,FPGA 设计中从底层向上一共存在着四种抽象层级,依次为:结构性的、RTL、行为性的和高层。其中最底层的抽象(结构性的)涉及到对底层硬件单元直接的例化,比如逻辑门,甚至是更底层的 LUT 或者触发器。设计者更常用的是在“寄存器传输级(Register Transfer Level,RTL)” 进行设计,这个层级的抽象隐藏了底层的细节,是在描述寄存器和寄存器之间可执行的操作。更上层的“行为性的”描述是对电路的算法描述,也就是描述电路表现出什么样的功能(行为),而不是描述每个寄存器该如何进行操作。

    前面介绍的几种抽象层级都是在使用硬件描述语言 HDL 进行设计,可以看出,随着抽象层级的提升,设计最终在硬件上实现的细节逐渐被弱化。而本章重点介绍的“高层”设计方法则直接使用高级语言,如C/C++进行设计,然后由 Vivado HLS 编译器将 C 代码综合成 HDL 描述,最后再进行逻辑综合得到网表,这个网表最终会被映射到具体的 FPGA 器件上。

    就像 C 语言或者其他高级语言针对不同的处理器架构有着不同的编译器,Xilinx Vivado High-Level Synthesis(高层综合,HLS)工具同样是一种编译器,只不过它是用来将 C 或者 C++程序部署到 FPGA 上,而不是部署到传统的处理器上。

    在 Vivado HLS 中可以使用三种语言进行设计开发,分别是 C、C++ 和 SystemC。

    二、HLS 设计流程

    Vivado HLS 的功能简单地来说就是把 C、C++ 或 SystemC 的设计转换成 RTL 实现,然后就可以在Xilinx FPGA 或 Zynq 芯片的可编程逻辑中综合并实现了。需要注意的是,这里我们说的使用 C/C++完成的设计与运行在处理器(ZYNQ 中的 ARM 处理器或 MicroBlaze 软核处理器)中的软件代码是截然不同的。在 HLS 中,所有的 C 设计都是要在可编程逻辑中实现的,也就是说,我们仍然是在进行硬件设计,只不过使用的不再是硬件描述语言。

    使用 Vivado HLS 进行设计的流程如下图所示:
    在这里插入图片描述
    HLS 设计的主要输入是一个 C/C++/SystemC 设计,以及一个基于 C 的测试集(TestBench)。我们首先要知道 C 语言的本质就是函数,那么这个测试集就是用于验证 C 设计中的函数,验证过程需要一个“黄金参考”。这个“黄金参考”类似于一个标准答案,用来和 C 设计中函数所产生的输出做比对。

    在对 HLS 设计进行综合之前,我们要先对其进行“功能性验证”,也就是 C 仿真,其目的是验证 HLS 输入的 C 代码的功能是否正确。验证的方式就是在 TestBench 中调用 C 设计的函数,然后将其输出与“黄金参考”进行比对,如果与黄金参考有差异就需要先对 C 设计进行修改调试。

    接下来就是对设计进行高层综合,即 HLS 过程本身。该过程涉及到分析和处理基于 C 的代码,加上用户所给出的指令和约束,来创建 RTL 描述。高层综合结束后会产生一组输出文件,包括以 Veilog 或者VHDL 语言编写的 RTL 设计文件。

    综合过程结束后得到的 RTL 模型,可以在 Vivado HLS 中进行 C/RTL 协同仿真,来进一步验证综合得到的 RTL 设计的正确性。在这个过程中 Vivao HLS 会自动产生一个测试集为 RTL 设计提供输入,然后拿它的输出与预期的值做比对。C 功能性验证和 C/RTL 协同仿真的区别如下图所示:

    在这里插入图片描述
    在图 1.2.2 左侧的功能性验证(C 仿真)中,原始测试集是用户输入的测试文件 TestBench。而右侧的C/RTL 协同仿真所需的 RTL 测试集是由 Vivado HLS 自动产生的,这样就不再需要人工创建了,所产生的测试集包括了原始测试集和被测 RTL 模块之间的数据传递。

    除了对功能进行验证,我们还要评估 RTL 设计的实现和性能。比如,在 FPGA 中所需的资源的数量,设计的延迟、所支持的最高时钟频率等是否满足要求。如果不满足要求,那么就需要设计者通过修改指令和约束,然后再次进行高层综合,如图 1.2.1 中右侧的回路所示。一个设计可能要做多次 HLS 设计迭代,来找到“最佳 ”的解决方案。如果有必要,设计者也可以返回修改 C 设计代码,然后从头开始重新对设计进行验证。

    在设计被验证了之后,而且实现也满足了期望的设计目标,那么就可以集成进更大的系统里了。我们可以直接使用 HLS 过程所产生的 RTL 文件(即 VHDL 或 Verilog 代码),更方便的做法是使用 Vivado HLS 的 IP 打包功能。对 Vivado HLS 所产生的输出打包意味着 HLS 设计能够以 IP 核的形式引入其他 Xilinx 工具中,比如 Vivado 中的 IP 集成器。这两种类型的输出如下图所示:
    在这里插入图片描述

    三、 接口综合

    在做 HLS 的时候,设计者需要分析设计的两个主要方面:

    • 设计的接口,也就是它的顶层连接;
    • 设计的功能,也就是它所实现的算法;

    我们给出一个 HLS 设计中接口和功能的概念图,如图 1.3.1 所示。
    在这里插入图片描述
    在上图中,两端的绿色区域表示设计的输入和输出接口,其中展示了部分接口类型,如 RAM 接口、FIFO 接口,以及总线类型的接口等。这些接口可以是工具从代码中通过接口综合(Interface Synthesis)得到的,也可以由设计者手动指定具体的接口类型。

    图中间黄色的区域表示 HLS 设计具体能够实现的功能,对于不同的应用,其功能也各不相同。在 Vivado HLS 设计中,功能是从输入的代码中,经过算法综合(Algorithm Synthesis)的过程得到的。

    在这里我们先简单介绍一下接口综合。顾名思义,Interface Synthesis 指的是 HLS 设计中对接口的综合,综合出来的接口能够与系统中的其他模块通信,还有可能需要与系统中的处理器进行通信。

    这里接口的概念既包括端口(port),也包含所使用的协议。所有端口的细节(如类型、位宽和方向)是从 C/C++ 文件中顶层函数的参数和返回值里推断出来的;而协议是从端口的表现(行为)推断出来的。比如,最简单的接口可以是一条 1 比特的线(wire),而更复杂的接口,可能要用总线或 RAM 接口。接口综合能够推断出来的接口类型包括:线、寄存器、单向和双向握手信号、FIFO、存储器和总线等。

    下面我们给出一个简单的 C 设计的顶层函数,函数名为 find_average_of_best_X(),其参数如下图所示:

    在这里插入图片描述
    图 1.3.2 中函数内部工作的详细情况无关紧要,不过每个参数的读/写操作将决定综合出来的端口的方向。这个函数定义包含三个参数,数组“sample”和整数“X”是函数的输入,而 average 作为函数的输出。因此,简单来说,这三个函数参数要被 HLS 转换成两个输入接口和一个输出接口,如下图所示:
    在这里插入图片描述

    需要注意的是,图 1.3.3 只是一个简化了的接口示意图。根据所用的协议,这些接口可能包括数据端口自身以外的控制输入或输出,如下图所示:
    在这里插入图片描述
    图 1.3.4 是函数 find_average_of_best_X()经 HLS 综合出来的完整的 RTL 模块的接口图。从图中可以看到由函数的三个参数所综合出来的接口分别拥有了各自的协议,如 ap_memory 协议、ap_none 协议和 ap_vld协议。同时模块还多出来了一些端口,如 ap_clk 和 ap_rst 等,它们使用的是 ap_ctrl_hs 协议。这些协议决定了相应的接口是如何与系统中其他模块进行交互的,至于各协议具体的含义以及如何为接口选择其协议,我们将在后续的章节中介绍。

    四、算法综合

    算法综合关注的是设计的功能,即设计所期望的行为,它是由输入的 C 设计所描述的。算法综合从代码中推出各种运算操作,然后转换成一组 RTL 语句。

    算法综合包括三个主要阶段,依次是:

    1. 解析出数据通路和控制电路;
    2. 调度和绑定;
    3. 优化;

    解析出数据通路和控制电路

    HLS 的第一个阶段是分析 C/C++/SystemC 代码,并且解释所需的功能。Vivado HLS 从以下几个方面分析程序:逻辑和算法的运算、条件语句和分支、数组运算和循环等。

    所产生的实现会具有一个数据通路元件,一般还会有一个控制元件。需要澄清的是,这里的“数据通路”处理指的是在数据样本上作的运算,而“控制”是需要协同数据流处理所需的电路。算法的本质定义出数据通路和控制元件,设计者可以在 HLS 中采取专门的步骤来最小化控制元件的复杂度。

    调度和绑定

    HLS 是由两个主要过程组成的:调度(Scheduling)和绑定(Binding)。它们是交替进行的,彼此互相影响,如下图所示:
    在这里插入图片描述

    • 调度是把由 C 代码解释得到的 RTL 语句翻译成一组运算,每个运算都关联着一定的执行时间,以时钟周期为单位。这个阶段所作的决策,受时钟频率和不确定度、目标芯片的技术和用户所施加的指令所影响。

    • 绑定是调度好了的运算和目标芯片上的实际资源联系起来的过程。这些资源的功能和时序特征可能会影响调度,因此绑定信息会反馈给调度过程。比如使用 DSP48x 资源就表明关键路径比采用逻辑资源的方案要短。

    优化

    • 约束 :设计者可以对设计的某些指标加以限制。比如,可以指定最低的时钟周期。这样就能确保实现结果能够满足要集成进去的系统的要求。类似的,设计者可以选择约束资源的利用情况或其他的指标,从而优化应用的设计。

    • 指令:设计者可以通过指令对 RTL 的实现参数施加更具体的影响。有各种类型的指令,分别映射在代码的某些特征上,比如让设计者可以指定 HLS 引擎如何处理 C 代码中识别出来的循环或数组,或是某个特定运算的延迟。这能导致 RTL 输出的巨大改变。因此,具有了指令的知识,设计者就可以根据应用的需求来做优化了。

    五、 HLS 库

    Vivado HLS 中包含了一系列的 C 库(包括 C 和 C++),方便对一些常用的硬件结构或功能使用 C/C++进行建模,并且能够综合成 RTL。在 Vivado HLS 中提供的 C 库有下面几种类型:

    • 1、任意精度数据类型库
    • 2、HLS Stream 库
    • 3、HLS 数学库
    • 4、HLS 视频库
    • 5、HLS IP 库
    • 6、HLS 线性代数库

    在 HLS 设计中调用库中的函数可以大大提高开发效率。

    展开全文
  • 使用 Vivado HLS 和 AXI4-Stream 实现拉普拉斯滤波器示例。 您可以使用 GIMP2 以 RAW 格式查看结果。 原始图像大小为 240x120 像素(输出为 solution1/csim/build/image.data)。 结果图像大小为 238x118 像素...
  • vivado hls教程

    热门讨论 2013-05-20 14:12:06
    vivado hls的官方教程,通过多个实验快速掌握高层次综合
  • Vivado-hls使用实例-详细教程

    千次阅读 2020-04-21 10:05:56
    分为三个部分,分别为HLS端IP设计,vivado硬件环境搭建,SDK端软件控制。 在HLS端,要将进行硬件加速的软件算法转换为RTL级电路,生成便于嵌入式使用的axi控制端口,进行数据的传输和模块的控制。 工程源码 【HLS...

    【引言】

    本系列教程演示如何使用xilinx的HLS工具进行算法的硬件加速。

    分为三个部分,分别为HLS端IP设计,vivado硬件环境搭建,SDK端软件控制
    在HLS端,要将进行硬件加速的软件算法转换为RTL级电路,生成便于嵌入式使用的axi控制端口,进行数据的传输和模块的控制。

    点击查看工程源码

    【HLS介绍】

    HLS可以将算法直接映射为RTL电路,实现了高层次综合。vivado-HLS可以实现直接使用 C,C++ 以及 System C 语言对Xilinx的FPGA器件进行编程。用户无需手动创建 RTL,通过高层次综合生成HDL级的IP核,从而加速IP创建。

    HLS的官方参考文档主要为:ug871( ug871-vivado-high-level-synthesis-tutorial.pdf )和ug902(ug902-vivado-high-level-synthesis.pdf)。

    对于Vivado Hls来说,输入包括Tesbench,C/C++源代码和Directives,相应的输出为IP Catalog,DSP和SysGen,特别的,一个工程只能有一个顶层函数用于综和,这个顶层函数下面的子函数也是可以被综合的,会生成相应的VHDL和Verilog代码,所以,C综合后的RTL代码结构通常是跟原始C描述的结构是一致的,除非是子函数功能很简单,所需要的逻辑量很小。并不是所有的C/C++都可以被综合,动态内存分配和涉及到操作系统层面的操作不可以被综合。

    Vivado HLS 的设计流程如下:

    在这里插入图片描述
    在整个流程中,用户先创建一个设计 C、C++ 或 SystemC 源代码,以及一个C的测试平台。通过 Vivado HLS Synthesis 运行设计,生成 RTL 设计,代码可以是 Verilog,也可以是 VHDL。有了 RTL 后,随即可以执行设计的 Verilog 或 VHDL 仿真,或使用工具的C封装器技术创建 SystemC 版本。然后可以进行System C架构级仿真,进一步根据之前创建的 C 测试平台,验证设计的架构行为和功能。设计固化后,就可以通过 Vivado 设计套件的物理实现流程来运行设计,将设计编程到器件上,在硬件中运行和/或使用 IP 封装器将设计转为可重用的 IP。

    Step 1: 新建一个工程

    1,Creat New Project新建文档,输入工程名称和工程路径。完成后点击Next。
    在这里插入图片描述
    2,添加设计文件,并制定顶层函数。完成后点击Next。

    在这里插入图片描述

    3,添加C语言仿真文件。完成后点击Next。

    在这里插入图片描述

    4,:配置Solution Name,一般默认即可。配置Clock Period,单位是ns。配置Uncertainty,默认为空。选择产品型号。完成后点击Finish。

    在这里插入图片描述

    5,工程新建成功后进入的开发界面,HLS是典型的Eclipse界面,和SDK的界面十分相似。

    在这里插入图片描述

    导入的文件的代码如下:

    1,源文件。axi_interfaces.c

    #include "axi_interfaces.h"
    void axi_interfaces (dout_t d_o[N], din_t d_i[N])
    {
    
    	int i, rem;
    // Store accumulated data static
    	dacc_t acc[CHANNELS];
    axi_interfaces_label0:
    	for (i=0;i<CHANNELS;i++)
    			{
    				acc[i] = 0;
    			}
    // Accumulate each channel
    For_Loop:
    	for (i=0;i<N;i++)
     	 	 {
    	 	 	 rem=i%CHANNELS;acc[rem] = acc[rem] + d_i[i];d_o[i] = acc[rem];
     	 	 }
    
    }
    

    2,头文件。axi_interfaces.h

    #ifndef AXI_INTERFACES_H_
    
    #define AXI_INTERFACES_H_
    
    #include <stdio.h>
    
    typedef int din_t;
    
    typedef int dout_t;
    
    typedef int dacc_t;
    
    #define CHANNELS 8
    
    #define SAMPLES  4
    
    #define N CHANNELS * SAMPLES
    
    void axi_interfaces (dout_t d_o[N], din_t d_i[N]);
    
    #endif
    

    3,测试文件。axi_interfaces_test.c

    #include "axi_interfaces.h"
    
    int main () {
    
    // Create input data
    
      din_t d_i[N] = {10, 20, 30, 40, 50, 60, 70, 80,
    
    11, 21, 31, 41, 51, 61, 71, 81,
    
    12, 22, 32, 42, 52, 62, 72, 82,
    
    13, 23, 33, 43, 53, 63, 73, 83};
    
    
    dout_t 		d_o[N];
    
    int i, retval=0;
    
    FILE        *fp;
    
    // Call the function to operate on the data
    
      axi_interfaces(d_o,d_i);
    
    // Save the results to a file
    
    fp=fopen("result.dat","w");
    
    fprintf(fp, "Din Dout\n");
    
    for (i=0;i<N;i++) {
    
        fprintf(fp, "%d   %d\n", d_i[i], d_o[i]);
    
    }
    
    fclose(fp);
    
    // Compare the results file with the golden results
    
    retval = system("diff --brief -w result.dat result.golden.dat");
    
    if (retval != 0) {
    
    printf("Test failed  !!!\n");
    
    retval=1;
    
    } else {
    
    printf("Test passed !\n");
    
      }
    
    // Return 0 if the test passes
    
      return retval;
    
    }
    

    4,测试数据。result.golden.dat

    Din Dout
    10   10
    20   20
    30   30
    40   40
    50   50
    60   60
    70   70
    80   80
    11   21
    21   41
    31   61
    41   81
    51   101
    61   121
    71   141
    81   161
    12   33
    22   63
    32   93
    42   123
    52   153
    62   183
    72   213
    82   243
    13   46
    23   86
    33   126
    43   166
    53   206
    63   246
    73   286
    83   326
    

    Step 2: C源代码验证

    本步骤是对功能代码的逻辑验证,相当于功能前仿。
    1,测试程序的代码入下图。该程序先调用综合的函数,得到计算结果,再和预先的数据集进行比较,最后返回计较的结果。计算结果和预先的数据集一致时,测试通过,不一致时,测试失败。需要查看代码,寻找错误。
    在这里插入图片描述

    按钮,开始C源代码验证。

    在这里插入图片描述

    3,验证的结果显示在控制栏中。如图显示,测试通过。

    在这里插入图片描述

    4,在头文件中,重定义了数据类型,参数,并进行了函数声明。

    在这里插入图片描述

    Step 3: 高层次综合

    本步骤是把功能代码的综合成RTL逻辑。
    1,点击红框中的按钮,将C代码综合成RTL。综合完成后,查看结果。

    在这里插入图片描述
    2,综合完成后,查看综合报告。包括时序,延时,资源占用,端口信息等。
    在这里插入图片描述

    在这里插入图片描述

    3,端口分析。
    (1)控制端口用于控制和显示该模块的工作状态。各个端口的功功能如下,默认情况下会生成下面四个控制端口。
    ap_start(in):为高时,该模块开始处理数据。
    ap_done(out):为高时,表示模块处理数据完成。
    ap_idle(out):表明模块是否处于空闲态。高电平有效。为高时,该处于空闲态。
    ap_ready(out):为高时,表示模块可以接受新的数据。

    (2)数据端口用于传递模块的输入输出参数。
    参数d_o,d_i 为数组类型,故默认状态下回生成内存接口。内存接口 (数组类型参数)数据来自外部的memory,通过地址信号读取相应的数据,输入到该模块中。输入数组从外部内存中读源数据,输出数组从向外部内存写入结果数据。各个端口的定义如下。
    address:地址信号
    ce0:片选信号
    we0:写使能信号
    d0 :数据信号

    4,综合结果分析。
    在分析界面,可以看到模块的运行情况。包括数据依赖关系和各个周期执行的操作,IO口的读写,内存端口的访问等等。

    在这里插入图片描述

    在这里插入图片描述

    Step 4: 综合优化

    在使用高层次综合,创造高质量的RTL设计时,一个重要部分就是对C代码进行优化。
    Vivado HLS拥有自动优化的功能,试图最小化loop(循环)和function(函数)的latency。除了自动优化,我们可以手动进行程序优化,即用在不同的solution中添加不同的directive(优化指令)的方法,进行优化和性能对比。其中,对同一个工程,可以建立多个不同的solution(解决方案),为不同的solution添加directive可以达到如下目的。
    优化的类型可分为如下类别:

    端口优化。指定不同类型的模块端口。
    函数优化。加快函数的执行速度,减小执行周期。
    循坏优化。利用展开和流水线形式,减小循环的执行周期。

    1,点击下面红框的图标,新建solution。

    在这里插入图片描述

    2,不同solution位于不同的文件夹中。
    在这里插入图片描述
    3,选中综合文件。可以在direct框中看可进行优化的标签。

    在这里插入图片描述
    4,双击选择d_o,选择interface,s_axilite。点击ok。将d_o的端口类型设置为s_axilite类型。
    在这里插入图片描述
    5,参考d_o,将d_i的接口类型也设置为s_axilite。将d_i的端口类型设置为s_axilite类型。

    在这里插入图片描述

    6,双击选择函数名称axi_interface,选择interface,s_axilite。点击ok。将控制端口的端口类型设置为s_axilite类型。

    在这里插入图片描述

    7,双击循环标签,选择流水线优化(pipeline),点击ok。
    在这里插入图片描述

    8,双击循环标签,选择循环展开优化(unroll),点击ok。
    在这里插入图片描述
    9,同上,也将标签为for_loop的循环进行流水线和展开优化。
    10,最终的优化情况总结如下。
    在这里插入图片描述

    11,重新进行函数综合,查看综合报告如下。
    在这里插入图片描述

    在这里插入图片描述

    12,分析。
    同未优化相比,优化过后的函数综合后生成的模块的运行时钟大大减小。端口的接口类型也变为了axi_lite端口。但资源占用率有所增加,也体现了用资源换速度的设计理念。在这里插入图片描述

    Step 5: 综合结果文件

    综合完成后,在各个solution的syn文件夹中可以看到综合器生成的RTL代码。包括systemc,VHDL,Verilog。

    在这里插入图片描述

    Step 6: 导出IP

    在菜单里Solution>Export TL,设置如下,点击ok。

    在这里插入图片描述

    IP封装完成后,会在impl文件夹中输出ip文件夹,其中包含了RTL代码(hdl),模块驱动(drivers),文档(doc)等信息,其中包含一个压缩包文件,是用于建立vivado工程所用的IP压缩包。

    在这里插入图片描述

    Step 7: 总结

    本文重点讲解了hls软件的使用方法和优化方法,在C语言模块设计上没有重点讲解。在掌握了hls软件的基本用法和优化方法后,接下来就可以设计更加复杂的C语言模块,进行rtl综合,加快设计开发的速度。

    展开全文
  • FPGA开始学习verilog、vivado HLS

    千次阅读 热门讨论 2018-05-24 16:44:20
    以上可以了解Vivado HLS 的使用和开发流程、用HLS做仿真综合验证,还可以学习到怎么设计怎么约束更加优化!以及生成IP核给vivado使用! /************************************************************************...

    哎,可能要将算法搞到FPGA上去了,而作为一个FPGA小白,感觉好像很难的样子。于是开始了解这些:

    一、step1 安装和HLS

    1、在ubuntu下下载安装vivado:https://blog.csdn.net/wmyan/article/details/78926324 安装时会叫你选择哪个Edition,记住选择第三个(第三个才有HLS),然而第二个即Design Edition的介绍说包含了HLS,狗屁,装完根本没有HLS!试了几个安装包都没有!要用HLS一顶要选择第三个!安装完后会需要license文件,直接去CSDN上下载合适点license文件不要在官网买,然后放在/HOME/下,再license窗口的左侧load license 点copy license就行啦。(我装的是包含vivado HLS的,因为想做硬件加速)

    事实证明,选第几个都没有找到HLS!崩溃!为什么就没有一个详细的教程说vivado HLS怎么装呢?倒是有一大把vivado怎么装。

    问题已经解决:原来并不是选择第几个Edition的问题,其实之前我都装成功了,只是不要在/opt/xilinx/下去找HLS,而要去应用那里找,找到后启动即可!!!

    由图可知我装了多少次!原来在这里!!!!真想打死自己啦!


    邮件点击这个图标,将它锁定在任务栏,就可以像eclipse一样方便打开了!

    后来我是按照 https://blog.csdn.net/w371500241/article/details/53282859 这位大神的体验了一下,感觉真的很方便!他用的是自己写的c程序,我用的是安装目录下example里的文件:

    真是太方便了!eclipse的界面,有种他乡遇故知的感觉!泪流满眶。

    实现https://blog.csdn.net/long_fly/article/details/78839543仿真时报错:csim.exe:/error while loading libjpeg.so.62,解决办法:sudo apt-get install libjpeg62 ;如果出现少libtiff.so.3找不到,那么直接将电脑里原有的libtiff.so.不管版本是几,软链接为我们缺少的3即可。运行成功后:

    按照他的步骤感受下仿真、综合、查看这些数据、生成IP核与查看生成好的verilog代码!


    好神奇。

    另外发现vivado HLS2017.4这个版本里面的opencv是2.4.5这样老的版本,等有时间我准备将它换到opencv3.4.1。

    暂时跟着 https://download.csdn.net/download/wd1603926823/10462911  这个资料学习实践。

    以上可以了解Vivado HLS 的使用和开发流程、用HLS做仿真综合验证,还可以学习到怎么设计怎么约束更加优化!以及生成IP核给vivado使用!


    /************************************************************************************************************/

    二、step2 数据获取与使用

    然而今天知道原来还要了解怎么从X86的PC端获取图像数据给开发板的PCIE端口,然后在vivado中得到这些图像数据给IP核使用,并返回算法给X86!

    因为我没有FPGA基础,所以买的FPGA开发板的卖家告诉我要把下面这些框中的地方学完:


    然后因为这块开发板的例子中有三个配套的摄像头,所以了解一种摄像头即可:


    这些框中的部分都要学完。

    学完这些再说!!

    **************************************在学中.....

    卖家给的这个第一季的视频里 S01_CH03_USB_JTAG使用.mp4 这个讲了怎么通过下载器下载程序到FPGA开发板跑起来。

    第一季视频中的 S01_CH07_FPGA_RunLED.mp4 这个讲了跑LED流水灯的例子,如果生成.bit文件,从vivado下载到开发板跑起来。

    带着痛苦看了两季........最后还是决定先看 《ug1270-vivado-hls-opt-methodology-guide.pdf》


    ************************************************************************************

    以下是verilog的学习!

    2、跟着 https://blog.csdn.net/jzj1993/article/category/3185349 在vivado上进行仿真。


    3、下载了Verilog HDL入门资料 https://download.csdn.net/download/pingdangjun/9434439  。有时间时根据第一本书一边看一边在vivado上仿真。

    展开全文
  • VivadoHLS 学习使用Vivado HLS 2018.3开发数字系统所需的高级综合设计方法。 所有项目基于pynq-z2
  • vivadoHLS设计流程

    2020-01-09 19:26:42
    vivadoHLS设计流程 简单介绍一下vivadoHLS的设计流程,从建工程开始到生成IP核的整个过程 一般需要先准备建立工程的文件,c/c++(cpp)函数文件,c/c++(cpp)testbench测试文件,h头文件以及一些需要用到的...

    vivado的HLS设计流程

    简单介绍一下vivado的HLS的设计流程,从建工程开始到生成IP核的整个过程

    在这里插入图片描述
    一般需要先准备建立工程的文件,c/c++(cpp)函数文件,c/c++(cpp)testbench测试文件,h头文件以及一些需要用到的其他如.dat等文件。
    在这里插入图片描述
    从左到右依次是:VectorAdd.h头文件、VectorAdd_tb.cpp测试文件、VectorAdd.cpp函数文件
    1、 新建工程—和上面三个文件放一个文件夹中,命名(不一定和函数名字一定)
    在这里插入图片描述
    2、 指定用于综合的顶层函数

    3、 再加testbench
    在这里插入图片描述
    4、 创建solution和选择板的型号,Uncertainty暂时不用管
    在这里插入图片描述
    这就创建了一个vivado_HLS的工程,可以看看这些文件在工程里面的哪里,基本布局
    在这里插入图片描述
    在这里插入图片描述
    5、 先不添加directives,让他直接运行,先执行C的仿真,会给出仿真结果,会生成一个csim的文件夹
    在这里插入图片描述
    6、 再执行综合,综合结束之后,会自动打开综合报告,可以切换到右边的outline中可以看相应的报告内容,也可以在相应的syn文件夹中找到报告,还有一些HDL代码,但是这个可读性不是很好,所以一般优化还是在C里面做的
    在这里插入图片描述
    在这里插入图片描述
    7、 然后再做C/RTL的co-simulation即联合仿真,需要观察一下RTL的仿真结果
    在这里插入图片描述
    在这里插入图片描述

    结果像上面这样显示
    8、 然后我们就可以点击波形查看窗口,看一下仿真结果是什么样子
    在这里插入图片描述
    会自动打开vivado,并显示出波形
    在这里插入图片描述

    这样我们就可以看到这样的结果,很直观
    9、新加一个solution,查看directive的效果
    在这里插入图片描述
    10、其实这个位置有个tcl文件,就是
    在这里插入图片描述
    其实这个文件就是用于存放directive的
    11、我们对这个循环做了一个myloop的标签,有利于很快找到这个循环,并进行directive的优化
    在这里插入图片描述
    上面的%HLS PIPELINE中的%号,说明这个directive是存在于单独的tcl文件中,如果是#号就是存在在C源文件中的,具体区别看下图,当然有不足也有优点,就是代码移植性的问题
    在这里插入图片描述
    12、执行综合,得到第二个solution的综合报告,还可以进行对比,可以看到directive的影响
    改善吞吐率等directives,通过改善并行度来改变吞吐量
    在这里插入图片描述
    和综合相关的图标,其中红色框出的是选择多个solution进行对比
    13、优化,仿真,联合仿真,这些完毕后就可以进行Export RTL,即可以输出为IP核了,但是如果需要使输出的IP核实符合AXI协议传输的,则要进行设置
    (1):直接用指令进行设置:
    #pragma HLS INTERFACE s_axilite port=return bundle=BUS_A
    #pragma HLS INTERFACE s_axilite port=x bundle=BUS_A
    #pragma HLS INTERFACE s_axilite port=operator bundle=BUS_A
    加入上面的这些指令就可以把数据设置为AXI协议的IP,在directive窗口中可以看到下图所示的出现
    在这里插入图片描述
    (2):也可以通过图形化界面配置,在directive窗口中配置:
    在这里插入图片描述
    效果是一样的,优缺点和前面第11点提到的一样,代码可移植性的问题
    在这里插入图片描述
    14、然后就可以输出为IP核了
    在这里插入图片描述
    15、点击Export RTL后,会在HLS工程文件夹里出现.zip的压缩文件,vivado如果要调用这个IP核可以直接将IP核的库添加到solution>impl>ip这个路径上,也可以直接解压这个压缩包到任何路径,直接添加即可用。在这里插入图片描述
    16、在vivado中引用用HLS生成的IP核在这里插入图片描述
    17、其实就和平常的IP核使用也没有什么区别了
    在这里插入图片描述

    展开全文
  • Vivado-hls使用实例

    千次阅读 2020-04-19 12:14:31
    Vivado-hls使用实例【引言】本系列教程演示如何使用xilinx的HLS工具进行算法的硬件加速。分为三个部分,分别为HLS端IP设计,vivado硬件环境搭建,SDK端软件控制。在...
  • Vivado® 高层次综合(HLS)在所有 Vivado HLx 版本中以免费升级形式提供,可以实现直接使用 C,C++ 以及 System C 语言规范对赛灵思可编程器FPGA件进行编程,无需手动创建 RTL,从而可加速 IP 创建。本文档为其官方...
  • 使用Vivado HLS工具进行浮点设计的基础知识 Although these cores can be generated for custom precision floating-point types by the CORE Generator tool, only the single- and double-precision versions of ...
  • Vivado Hls 设计优化

    千次阅读 2016-11-29 07:40:22
    Vivado Hls总是试图最小化loop和function的latency,为了实现这一点,它试图在loop和function上并行执行尽可能多的操作。在function级别上,高级综合总是试图并行执行function。 除了这些自动优化,directive是用来...
  • #pragma HLS dataflow //任务级流水化而不是顺序执行 默认用double-buffer来实现 一个比较经典的方式来展示templete参数,unroll、dataflow使用的例子,如下所示,它实现了N个testCore模块并行执行。 templete<...
  • 需要根据HLS端代码中卷积图片的大小调整SDK端代码中SIZE的值。2D卷积是对图像的一种处理,这篇文章主要是将计算部分使用HLS完成,在SDK中将测试数据传到HLS生成的计算IP中,查看返回的结果值(我的结果值貌似不太对...
  • Vivado HLS教程

    2020-04-07 19:11:22
    想学Vivado HLS,这里做个记录。 本着先感性再理性的学习规律,首先学习Xilinx提供的教程ug871,上手操作。 教程描述 本教程是一些较小的教程的集合,这些教程说明和演示了使用高级综合将C,C ++和SystemC代码转换为...
  • 本文是本系列专题的第七篇,参考高亚军老师的视频教程以及课程的ppt,主要介绍了vivado HLS的C++ 基本运算处理。
  • Vivado HLS 开发流程简介(高级综合)(FPGA)

    万次阅读 多人点赞 2018-04-18 09:18:38
    而在Xilinx新推出的高生产力设计流程中是以IP为核心的,把所有的模块都看做是IP,封装为IP,最主要的是IP的设计是基于C语言的,最后通过HLS将C语言代码转化为RTL,这能极大的加快设计进程。从这段时间的学习来看,...
  • Vivado HLS 入门实验

    万次阅读 多人点赞 2017-11-21 12:10:45
    当我们安装好Vivado 的时候,也同时装好了Vivado HLS.。 这是个什么东西?我就有一种想一探究的感觉。网上一查,Vivado High-Level Synthesis。学习了一段时间的Zynq 7000, 找了一个HLS的教程,就开始了如下入门...
  • vivado HLS图像处理了解

    2018-06-06 17:14:17
    使用vivado HLS 进行图像处理,需要了解的一些基本知识!
  • Vivado HLS之滤波器实现

    千次阅读 2014-09-04 16:49:01
    环境:win7 64 vivado 2014.1 开发板:zedboard version d xc7z020clg484-1 目标: 说明:文本在参考何宾老师的书籍的基础上整理而成。 注意:本文中所有的源码、工程文件在“我的资源”中可以找到,...
  • 对比之前用Vivado HLS开发流程,SkyNet_kernels/src下方的就是Vivado HLS工程里的文件,但是没有testbench,而SkyNet/src放的就是综合出来比特流之后SDK里开发应用程序的文件。(SDSoC好用就好用在将SDK的代码跟...
  • des算法的hls实现 vivado

    2019-02-27 19:18:49
    这是使用HLS对des算法进行优化的文档,包括了实现代码,testbench和hls文件,可以用于vivado相关硬件实现的课程设计等等
  • HLS语言的基础教程,分享出来给大家学习学习
  • VIVADO HLS 学习之路之图像的resize

    千次阅读 2018-09-13 11:33:10
    VIVADO HLS 学习之路之图像的resize ** 算下来接触vivado已经有半年了,学习fpga也满打满一年半了,零零碎碎的的笔记做过一些,但是记下了却没有复习,基本上等于没有。以后的学习尽量多做笔记,就先从HLS开始吧...
  • Ubuntu16.04 下启动 Vivado HLS

    千次阅读 2018-12-25 12:00:20
    首先需要说明一下:今天遇到的这个问题给了我很大的感触,由于最近正在学习Zynq,从我在网上...在Ubuntu系统下,安装了Vivado系列软件,但是想去学习 Vivado HLS 软件的时候,却怎么也找不到 Vivado HLS软件的入口,...
  • Vivado HLS——一个是采用高级语言去描述系统行为即用 C/C++来实现系统建模,软件工程师可以借此提高系统性能:也就是说之前可能需要 CPU/DSP/GPU 实现的一些算法,我们都可以借助 Vivado HLS 直接通过 C/C++编程来...
  • hls,在2020.2之前的HLS下,2020.2之后没带opencv,需配置完成,才可直接运行
  • HLS的学习资源可以参考http://xilinx.eetrend.com/article/5096。本节给出较为通用的矩阵与向量相乘例子,从全串行到全并行进行了一步步优化实现。 矩阵实验室Matlab是比较常用的数学仿真软件。本博主用的是R2013a...
  • 桌面vivado HLS 打不开的解决办法

    千次阅读 2018-03-30 11:43:31
    打开出现黑框一闪而过,网上类似的解决办法较少,找到一个借鉴http://www.eefocus.com/random1020/blog/14-02/301909_f7df3.html根据这个出现了这样一句话:wscript.exe不是内部或外部命令,但也不是可运行的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,698
精华内容 679
关键字:

hlsvivado