问题标签 [vivado-hls]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
379 浏览

c++ - 优化 Vivado HLS 代码以减少图像处理算法的延迟

我正在尝试使用 Vivado HLS 为硬件的色域映射过滤器实现图像处理算法。我从卤化物代码创建了一个可合成的版本。但是对于(256x512)的图像来说,它花费了大约 135 秒,这不应该是这种情况。我使用了一些优化技术,例如对最内层循环进行流水线化处理,通过流水线化,我为最内层循环设置了 II=1 的目标(启动间隔),但实现的 II 为 6。从编译器抛出的警告中,我明白了这是因为访问ctrl_pts 和 weights之类的权重,从教程中,我已经看到,使用数组分区和数组重塑将有助于更快地访问权重。我在下面分享了我用来合成的代码:

即使达到了 II=6,所花费的时间也只有 6 秒左右;给定的目标是以毫秒为单位的时间。我试图为第二个最内层循环进行流水线处理,但是当我这样做时,我的板上的资源已经用完了,因为第三个最内层循环正在展开。我正在使用具有相当数量资源的 zynq 超大规模板。任何有关优化代码的建议都将受到高度赞赏。

此外,任何人都可以建议哪种类型的接口最适合ctrl_pts、weights 和 coefs,为了阅读图像,我理解流接口有帮助,以及为了读取像行数和列数这样的小值,首选 Axi lite?是否有一种接口可以用于上述变量,以便它可以与数组分区和数组重塑齐头并进?

任何建议将不胜感激,

提前致谢

编辑:我知道定点表示可以进一步降低延迟,但我的第一个目标是获得具有最佳结果的浮点表示,然后使用定点表示分析性能

0 投票
1 回答
457 浏览

c++ - 如何将 Xilinx HLS 流的一部分传输到另一个函数?

我有两个变量:

其中ap_axiu定义为:

我想调用func2inside func1,使用参数 a 的数据func1(见定义ap_axiu)。所以func看起来像这样:

where???应该是ap_uint<D> datavariable 的一部分hls::stream<ap_axiu<8,1,1,1>> a,由 . 包围hls::stream< >

我怎样才能在 C++ 中做到这一点?我对模板没有太多经验,也无法在 Google 上找到它。

0 投票
0 回答
42 浏览

tcl - 带有 TCL 控制台的 Vivado 触发功能

有谁熟悉vivado中的tcl-console。使用 Vitis 创建 RTL 块时,会创建一个接口。我的函数有两个偏移的输入参数。启动触发器的偏移为零,并且必须激活一个时钟周期。我找不到正确的命令来将此寄存器值设置为高一个周期。

写入命令有效,但是当我尝试使用 VIO 启动我的功能时,启动命令在太多周期内都很高。

0 投票
0 回答
91 浏览

xilinx - vitis 2020.2:打开的 HLS 项目被禁用

我几乎安装了 Vitis 2020.2,当我尝试在构建项目后打开 HLS 时,它在硬件和软件仿真中都被禁用。我已经搜索过,但我什么也没找到。我在此链接中添加图像。有人知道这个问题吗?

我可以 vitis_hls在命令中运行,但找不到任何项目设置来打开它。

0 投票
2 回答
455 浏览

c++ - 对函数调用的未定义引用

我正在使用 cpp 在 Vivado HLS 中编写图像处理应用程序。我收到一个错误,说对ISP(函数调用)的未定义引用我已经多次看到这个错误,并查看了堆栈溢出中的类似情况,并且之前能够进行调试。以前主要是数据类型不匹配,但是我现在似乎无法找到当前版本的问题所在,我花了几个小时试图寻找它,认为全新的眼睛可以提供帮助以及我在这里发布它的原因。我在下面发布了代码的相关部分:

.

.

我得到的错误是:undefined reference to ISP(hls::stream<ap_uint<24> >&, hls::stream<ap_uint<24> >&, float (*) [3], float (*) [3], float (*) [3], float (*) [3], int, float (*) [3], configuration)' collect2.exe: error: ld returned 1 exit status

任何帮助/建议将不胜感激,

提前致谢

0 投票
0 回答
86 浏览

indentation - 如何在 Vivado 中启用缩进指南?

我正在使用 Vivado 2019.2 进行一些 Verilog 编程。但是,我希望显示缩进指南,因为代码块可能会变得非常大。

那么我该如何启用呢?我无法在工具的设置菜单中找到该选项。

0 投票
1 回答
113 浏览

vivado - 如何在 Vivado HLS 上找到白色像素坐标?

我有一个充满白色像素(255)的黑白图像。如何在 Vivado HLS 上获取图像中存在的所有白色像素坐标?

我正在使用 hls::Mat 来存储图像。

这是我在 Vivado HLS 上的顶级函数:

我需要关于 hls::Mul 之后用于查找图像 img_7a 中的白色像素坐标的代码部分的帮助。

0 投票
0 回答
17 浏览

vivado - vivado hls 中的 FOPID 控制器实现

如何在 Vivado Hls 中实现 FOPID 控制器?我们如何才能继续这个实现?

0 投票
1 回答
118 浏览

c++ - C++静态对象不保存数组属性值

我在 Xilinx 的 Vitis HLS 中使用 C++ 工作。我正在编写一个简单的缓冲区来执行众所周知的重叠和添加算法(https://www.eetimes.com/fft-convolution-and-the-overlap-add-method/

我的代码创建了一个静态对象(我的缓冲区),然后使用“sample-wise”方法。

我正在使用的代码如下(标题+要合成的函数+测试台):

Overlapper_HLS.hpp:

Overlapper_HLS.cpp:

测试台.cpp:

我的代码按预期工作,我唯一的问题是在top_function()我的Overlapper类内部,buffer_realbuffer_imaginary数组不存储函数的不同调用之间的值。

特别是问题出在以下代码行中:

我无法弄清楚为什么我的buffer_realbuffer_imaginary似乎在不同的调用之间被重置,即使我创建的对象是静态的(实际上变量计数器在我的不同调用之间保留top_function()

编辑:我正在添加我的输出日志

您可能会注意到我的缓冲区始终为 0 值(printing second content of buffer: 0.000000),但是在我保存值的上一个周期中,它们似乎存储正确(Printing value of buffer after saving values: 0.099976)。

基本上在打印缓冲区内容的第二“轮”中,它应该0.099976代替0

0 投票
0 回答
37 浏览

c++ - 使用可用的编译指示优化 Vivado HLS 中的降噪算法

我已经在 vivado hls 中编写了一个非局部均值去噪算法并尝试对其进行优化,目前,我保留了浮点表示,因为它是问题描述的一部分,我需要检查浮点表示中的细节和然后继续进行定点表示。我正在尝试各种 pragma,如流水线、数组分区等,但实现的延迟约为 880 毫秒,这对于图像处理应用程序来说并不是空闲的。通过使用基本的编译指示,我能够获得 5 毫秒,但它显示 fpga 板用完了 DSP 和触发器和 LUT 等其他资源也相当高(我选择了可​​用的最大开发板)。

我对 Vivado hls 比较陌生,想听听一些关于如何拥有完美管道 (II =1) 以减少延迟(以浮点表示形式)并同时花费更少的想法片上资源的数量。

我附上了下面的代码,

一旦我达到所需的延迟,我将从定位点表示继续到定点表示,如果它不能用浮动表示来实现,我可以从定点表示开始。

任何建议或想法或高度赞赏,因为我在这一点上有点卡住,无法决定如何进一步进行。

谢谢你