1、1学习 Vivado 第 5 章 lab1任意精度类型概述C / C+ +提供的数据类型被固定为 8 位边界char(8-bit)short(16-bit)in(32-bit)longlong(64-bit)float(32-bit)double(64-bit)精确宽度的整数类型,如 int16_t(16 位)和 int32_t(32 位)当创建硬件时,经常在一些例子中要求更高精度的位宽。例如,一个输入为 12 位的滤波器,累积的结果最大范围只要求 27 位,用标准 C 数据类型的硬件设计会导致不必要的硬件成本。比精确类型要求更多 LUT 和寄存器的操作延迟甚至超过时钟周期,因此需要更多的周期
2、来计算结果Vivado 高层次综合(HLS)提供了许多位准确或任意精度的数据类型,可以让你模拟使用任何(任意)宽度的变量。本教程由两个实验练习组成: Lab1 综合使用浮点类型的设计和查看结果。本设计采用标准 C+ +浮点类型。 Lab2 综合在 lab1 中使用同样的功能但使用任意精度合适类型,突出在精度和结果的优点。这次演习显示了同样的设计如何可以转换到 VivadoHLSap_fixed 类型,保留所要求的精度,但创造一个更优化的硬件实现。教程设计描述从 xilinx 网站下载教程设计文件,在教程设计中查看信息。教程所用的设计文件在教程目录vivado_HLS_TutorialArbit
3、aryPrecision任意精度:Lab1任意精度 Lab1:查看采用的标准 C/C+类型设计在这个 lab 中,您用标准的 C 类型综合设计,您用此设计作为一个参考,为 lab2 使用任意精度类型的设计的参考。重要:在教程中的图片和命令假设教程数据路径 vivado_HLS_Tutorial 被解压放置在 c:vivado_HLS_Tutorial 中。如果教程数据目录解压缩到不同的位置,或者在 Linux 系统上,调整一些路径名引用到的位置您选择放置Vivado_HLS_Tutorial 目录。步骤 1:创建并打开工程1.打开 Vivado HLS 命令提示符2a.在 windows 系统
4、中,采用 StartAll ProgramsXilinx Design ToolsVivado2014.2Vivado HLSVivado HLS 2014.2 Command Prompt,如下图b.在 linux 系统下,打开新的 shell,2. 用命令提示符窗口,如 92,改变 lab1 C 验证的路径3. 执行 TCL 并建立 vivado HLS Project,采用的是 vivado_hlsf run_hls.tcl 如图 92 所示4. 当 vivado HLS 完成,在用户界面里打开工程。用 vivado_hlsp hamming_window_prj 命令打开,如图 93步
5、骤 2:查看测试平台并运行 C 仿真31 在资源管理器中打开 Source foleder,并双击 window_fn_top.cpp 打开代码如图 94、2按住 ctrl 键,并点击 window_fn_top.h 在 45 行,来打开头文件3向下滚动,展示类型定义如图 95这个设计采用标准的 C/C+浮点类型对所有数据进行操作。Vivado 高层次综合能综合浮点类型直接转化成硬件,提供的操作是标准的数学操作(+、- 、* 、% 、etc).当用从 math.h 或 cmath.h 中调用数学函数时,参考 vivado HLS user guide(ug902)更多的细节关于数学函数在综合中
6、被支持。44. 在工具栏中点击 run C Simulation 按钮,打开 C 仿真对话框。5. 接受默认的设置(没有选项被选择)并点击 OK控制台窗口出现了设计仿真希望的结果步骤 3:综合设计查看结果1.在工具栏中点击 Run C Synthesis 按钮,为了把设计综合成 RTL 级当综合完成,综合报告自动打开,图 96 出现了综合报告5实例中的顶层设计占用大多数资源。2.把滚轮到报告的底部,展看实例,查看资源估计的细节部分如图 976细节展示了浮点乘法,(fmul),浮点操作花费了大量的资源和时钟。分析视图(图 98)展示了这个操作还用了大部分的时钟周期,(8 个状态中的 5 个需要来
7、执行有循环 winfn 创建的逻辑)。在本教程中,关于使用分析视图的更多细节可用。为了理解这种设计的目的,操作的两个状态,在第一个状态中,花费两个时钟从存储器中读操作,最后一个状态的操作是往存储器中写状态。3.退出 vivado HLS 用户界面,返回命令提示符学习 Vivado 第 5 章 lab2查看用任意精度类型的设计简介这个 lab 练习采用了和 lab1 同样的设计,但是数据类型现在是任意精度类型。您首先查看设计,并检查设计结果。7步骤 1:创建并仿真工程1. 在 lab1 中用命令提示符窗口,变为 lab2 路径如图 992. 执行 TCL 并建立 vivado HLS Proje
8、ct,采用的是 vivado_hlsf run_hls.tcl 如图 99 所示3. 在用户界面里打开工程。用 vivado_hlspwindow_fn_prj 命令打开,4.在资源管理器中打开源文件夹,并双击 window_fn_top.cpp 打开代码,如图 1005. 按住 ctrl 键,并在 45 行单击 window_fn_top.h,打开头文件6. 滚动文件的下方,查看类型定义如图 1018头文件,window_fn_top.h 仅有这个文件不同于 lab1,数据类型已更改为 ap_fixed 点类型,类似于 float 和 double类型的,他们支持整数和小数位表示。数据类型在
9、头文件 ap_fixed 中被定义。在头文件中的定义定义数据类型的大小: 首先规定了总字的长度 第二定了整形位数 因此小数位的数目是第一项减去第二项当你修改 C 代码使用任意精度的类型,而不是标准的 C 类型,你必须做出最常见的变化之一是降低数据类型的大小。在这种情况下,你改变使用 8 位,24 位和 18 位的字,而不是 32 位浮点类型的设计。这将导致较小的操作,减小的面积,以及更少的时钟周期来完成。 类似的优化帮助,当你改变较为常见的 C 类型,如 int,short 和 char。例如,改变只需要从整形(32 位)变为INT18 位数据类型,确保只用一个单一的 DSP48 需要执行任何
10、乘法。 在这两种情况下,必须确认该设计仍执行正确的操作,并且它也具有所要求的精度。设置有 Vivado 高级综合的任意精度类型的好处是可以模拟的更新的 C 代码,以确认其功能和精确度。7. 在资源管理器中打开测试平台文件夹,并双击8. 滚到文件下方,查看如图 1029为了这个设计的测试平台包括代码用了检查结果的精度。预期的结果是使用浮点类型仍然产生。结果检查验证的结果是准确的指定范围之内(在这种情况下,内 0.001 的预期结果)。这使得更新后的设计可以快速,高效地使用 C 进行验证,以快速编译和运行时间。9. 在工具栏中点击 Run C Simulation 按钮,打开 C 仿真对话框10.
11、 接受默认设置(没有选项的选择)并点击 OK控制台窗口展示了 C 仿真的结果,用更新数据类型,其结果与期望的结果不再相同,但是它们是在误差范围内。步骤 2:综合设计并查看结果1. 在工具栏里点击 Run C Synthesis 按钮,把设计综合成 RTL。10当综合完成,综合报告自动打开,如图 104 所示综合报告注意通过使用任意精度类型,你可以减少延迟和资源使用(25%和 60%),和在 RTL 硬件中的操作是不大于必要了。2. 向下滚动到接口总结报告图 105图 105 展示了数据端口现在是 8 位和 24 位113. 退出 VIVADO HLS 用户界面,返回命令提示符总结在这个教程中,您学习到:如何更新现有的标准 C 类型为 Vivado 高层次综合任意精度的类型。在硬件性能和使用位精确的数据类型的面积计算的优势。