问题标签 [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.
image-processing - Xilinx 系统生成器 IP 中的 AXI 流接口
我在用于图像处理的系统生成器中有一个示例设计,它具有一个输入图像和一个输出图像。我想通过 AXI 流接口发送数据并将其作为 IP 核导出到 Vivado IP 集成器,并使用 DMA 和 SDK 中的软件进一步开发设计。
首先,我的设计中是否可以使用 AXI 流接口?如果是,我该如何实施?有谁能够帮我?
提前致谢。(我在这里附上了示例的图像) Image_filter
c++ - VIVADO HLS 中的综合错误
我编写了 C++ 程序来对两个数字求和。在模拟期间,我得到了正确的结果,但在synthesis.Solution1/.autopilot/db/Adder.pragma.1.cpp:1中,错误。请告诉我,为什么我在合成期间收到该错误消息。
vivado-hls - 综合时 Vivado HLS 中的编译指示错误
仿真过程完成没有 0 错误,但在综合过程中显示错误。我找不到错误。
在综合过程中,我在 HLS 工具中收到这样的错误:
“在 E:/thaus/fact_L/facoriall/solution1/.autopilot/db/fact.pragma.1.cpp:1 中包含的文件中”
头文件
源文件
试验台
模拟结果
c - 如何在 HLS IP 和 SDK 之间进行流式数据通信?
目前我正在使用 Kintex 7 和 microblaze,用于伪随机位序列功能。我在 HLS 中执行 PRBS 并创建 HLS IP,然后将 HLS IP 与 vivado 集成,生成比特流并将其导出到 SDK。
实际上,我需要通过 HLS IP 将 Pseudo_random 位序列(如 0 和 1)返回到 XSDK。
但在 SDK 中,我只得到“单个位”值(0 或 1)而不是随机位序列。如何获取 HLS IP 和 SDK 之间的随机位序列?
c - VIVADO HLS的C语言-如何将Pseudo_random二进制序列存储并生成到memcpy中
通过 Stack Overflow 中的整体搜索。我得到了提示:对于使用 memcpy 的二进制数据
但是即使代码不起作用,请告诉我以下代码中的错误。
代码
c - 仅从 HLS IP 返回 XSDK 中的第一个值而不是数字系列
刚开始学习 HLS 和 XSDk。目前我正在使用数字系列。
N
我的目标是按顺序打印Tera 终端中的时间序列。在编译程序代码时,它只返回最后一个值。
我的代码:
例如:N=10
,它只返回值1024
。而不是预期结果:16,32,64,128,256,512,1024,
我需要做什么才能让“数字系列”16,32,64,128,256,512,1024
在 Tera 终端中按顺序打印。
c++ - 综合(顶级函数警告)
我是 vivado HLS 的新手,我正在尝试将 c++ 代码转换为 vhdl,但我遇到了一些综合问题。我希望有人能帮助我。
以下是错误列表:
@E [SYNCHK-42] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin..\lib\clang\3.1/../../../include/c++/4.5.2\bits /stl_construct.h:80:不支持指针比较。projethls:solution1 2017 年 6 月 7 日 11:53:27
@E [SYNCHK-11] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin..\lib\clang\3.1/../../../include/c++/4.5.2\bits /stl_vector.h:113:变量“this.assign.3”具有不可综合的类型“向量>”(可能的原因:指向指针或全局指针的指针)。projethls:solution1 2017 年 6 月 7 日 11:53:27
@E [SYNCHK-41] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin..\lib\clang\3.1/../../../include/c++/4.5.2\ext /new_allocator.h:89:不支持从类型“i8*”到类型“指针”的指针重新解释。projethls:solution1 2017 年 6 月 7 日 11:53:27
@E [SYNCHK-71] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin..\lib\clang\3.1/../../../include/c++/4.5.2\ext /new_allocator.h:89: 函数 'operator new(unsigned long long)' 没有函数体。projethls:solution1 2017 年 6 月 7 日 11:53:27
@E [SYNCHK-11] filtre/filtre/filtre_passhautbutter.cpp:16:函数 'filtre_passhautbutter' (filtre/filtre/filtre_passhautbutter.cpp:12) 的参数 'y' 具有不可合成的类型(可能的原因:结构变量由于不支持的类型转换或内存复制操作而无法分解)。projethls:solution1 2017 年 6 月 7 日 11:53:27
这是代码:
// 功能
//主要的:
c++ - 在opencv上将vec类型转换为标量类型
我正在研究一种图像处理算法来检测标记。该代码使用 opencv 库并且工作得非常好。但是,我被要求使用 HLS 将其放入 HDL 中以优化设计。问题是 HLS 不允许使用标准代码中使用的许多结构和形式。我的主要问题是我使用了一个定义为 a 的变量Vec3b
,它不能由 HLS 合成。
我从 opencv 文档中读到了这个:
在不详细介绍 HLS 的情况下,我想知道是否可以将Vec3b
类型替换为可以合成的类型,Scalar_
或者将其作为简单的Matx
. 关于标量,我在文档中找到了这个:
我还将整个代码放在这里以备不时之需。我不是作者,所以它是用西班牙语写的。
rsa - 降低 Vivado HLS 设计中的 LUT 利用率(使用蒙哥马利乘法的 RSA 密码系统)
任何有 Xilinx Vivado HLS 和 FPGA 设计经验的人的疑问/问题:
我需要帮助减少在 HLS 范围内的设计利用率(即不能只重做 HDL 中的设计)。我的目标是 Zedboard (Zynq 7020)。
我正在尝试在 HLS 中实现 2048 位 RSA,使用 Tenca-koc 多字基数 2 蒙哥马利乘法算法,如下所示(更多算法细节here):
我在 HLS 中编写了这个算法,它在模拟和 C/RTL cosim 中工作。我的算法在这里:
这是有问题的,因为我需要能够在硬件中安装多个这些块作为 axi4-lite 从站。
有人可以就如何在 HLS 范围内降低 LUT 利用率提供一些建议吗?
我已经尝试过以下方法:
- 尝试不同的字长
- 将顶级输入切换到数组,使其成为 BRAM(即不使用 ap_uint<2048>,而是使用 ap_uint foo[MWR2MM_e])
- 尝试各种指令:划分为多个内联函数、数据流架构、lshr 的资源限制等。
但是,没有什么能真正以有意义的方式降低 LUT 利用率。是否有一种显而易见的方法可以降低对任何人来说显而易见的利用率?
特别是,我看过有关 mwr2mm 算法实现的论文(仅使用一个 DSP 块和一个 BRAM)。这甚至值得尝试使用 HLS 来实现吗?还是没有办法在不使用 HDL 描述的情况下实际控制算法映射到的资源?
谢谢您的帮助。
linux - 尽管经过验证的裸机设计,但在 Linux 下使用自定义 HLS 块的问题
我在 HLS 中编写了一个 RSA 加密块(使用 Vivado 2017.2),并试图在 zedboard(Zynq 7020)上的 Linux 下运行它。我已经验证了硬件可以正常工作,并且有一个功能齐全的硬件裸机软件接口。请注意,HLS 模块是 AXI4-lite 从机。
为它编写一个 linux 内核模块(设备驱动程序)时,事情开始变得很奇怪(请注意,我故意不通过 Xilinx UIO 框架,因为原因......改为创建我自己的内核模块)。问题是每次我启动块并保持输入不变时,结果都会改变。这不是硬件块的行为方式,我在 SDK 的裸机测试中验证了这一点。因此,鉴于此,我的内核模块中一定有些奇怪……对吗?
嗯,其实没有。不想在内核上浪费时间调试,我决定通过绕过内核模块来获取一些真实数据,而不是使用 devmem2 直接读/写硬件。只是为了确保我不会发疯,并再次向自己确认硬件可以正常工作。然而,令我沮丧的是,使用 devmem2 手动写入输入寄存器会返回垃圾(不正确)数据。每次我启动块时它都会返回不同的垃圾数据,即使我没有更改输入。
我再次检查了裸机硬件是否正常工作。确实如此。我什至打印出我正在写入 AXI 寄存器的确切值,以防我搞砸了 bye-Endianness(因为每个 1024 位输入有 32 个输入寄存器,我想也许我是在倒写单词?) . 一旦我获得了写入裸机驱动程序中输入端口的 EXACT 值,我就开始编写一个脚本,该脚本使用 devmem2 手动写入每个寄存器。这是绝对确定我正在写正确的值。
加载输入值(基数、指数、模数和操作模式)后,我将 0x1 写入 ap_ctrl 寄存器以启动块。
答案每次都不同。
我不知道这里发生了什么。同样,当我使用 Xilinx 裸机驱动程序向其写入数据时,硬件工作正常。但是在 Linux 下,即使使用 devmem2 直接写入物理内存,一切都会中断。而且我知道它很可能不是硬件,因为它每次都会返回不同的错误答案。
所以我完全不知道如何进行调试。作为参考,让我们将我的裸机驱动程序与 linux devmem2 方法进行比较:
裸机加密功能:
并使用 devmem2 手动写入输入寄存器:
每次调用 devmem2 脚本,结果都不一样。但是我可以循环我的裸机测试程序,不断设置 ap_start,结果永远不会改变(因为它不应该)。
我完全不知道如何进一步调试这个,所以任何和所有的帮助表示赞赏,
布雷特