- 博客(120)
- 收藏
- 关注
原创 Vitis AI 进阶认知(Torch量化基础+映射+量化参数+对称性+每通道+PTQ+QAT+敏感性)
本文介绍了量化基本概念,如映射函数、量化参数、校准方法以及对称与非对称量化的区别,探讨了Per-Tensor和Per-Channel量化策略,以及训练后静态量化(PTQ)和量化感知训练(QAT)的应用。
2024-08-21 22:13:19
776
原创 Vitis AI 基本认知(构建线性回归Torch/TensorFlow+欠定系统+过拟合)
在本学习笔记中,笔者探讨了不同深度学习框架下构建线性回归模型的方式,主要集中于 TensorFlow 和 PyTorch。通过使用 Keras 的 Sequential 和 Functional API,我们展示了两种模型构建方式的特点与适用场景。Sequential API 适合简单的线性堆叠模型,而 Functional API 则提供了更大的灵活性,适用于复杂的网络结构。
2024-08-14 23:32:02
873
原创 Vitis AI 基本认知(TensorBoard+Epoch+zero_grad)
1).介绍和使用 TensorBoard;2).解释 Epoch、Batch、Iteration;3).解释训练循环中的梯度累加
2024-08-14 23:31:36
995
原创 我的创作纪念日
我希望通过文章进行技术交流,与更多志同道合的朋友分享我的心得和体会。未来,我希望继续在技术创作的道路上前行,不断提升自己的技术水平和创作能力。创作已经成为我生活的一部分。通过合理安排时间,我能够在工作之余抽出时间进行创作,记录下自己的技术成长和心得体会。通过创作,我结识了许多志同道合的领域同行,大家在技术交流中互相学习,共同进步。在这段时间里,尽管还有很多需要学习和提升的地方,我还是取得了一些小小的进步。
2024-08-09 10:08:05
533
原创 Vitis AI 基本认知(DPU并行度+反向传播+损失+指标+模型参数量+模型分析+极简残差)
这篇文档介绍了一个名为CNN Explainer的交互式可视化系统,旨在帮助非专业人士学习卷积神经网络(CNN)。该系统通过直观的方式展示了CNN的工作原理,使用户能够更好地理解复杂的神经网络结构和运算过程。
2024-08-07 23:50:48
690
原创 电磁仿真--基本操作-CST-(6)-导线周围磁场
本文分享了使用低频求解器(LF Frequency Domain Solver)分析导线周围电磁场分布的过程。低频求解器适用于模拟周期性低频信号激发的电磁场,主要任务包括计算电磁场、产生的电流密度、损耗、能量、激励源参数和集总元件参数。求解器的结果会自动显示在导航树中。
2024-08-06 23:18:19
995
原创 Vitis AI 基本操作(inspector用法详解+输出文件分析+保存模型/权重)
本文分享了如何使用 Vitis AI 工具中的 Inspector 对神经网络模型进行检查和诊断。Inspector 可以基于硬件约束预测目标器件分配,生成的检查报告能够指导用户优化和修改模型,从而降低部署难度并缩短部署时间。建议在量化浮点模型前进行检查,以确保模型的兼容性和性能。
2024-08-05 23:56:18
684
原创 Vitis AI 环境搭建 VMware+ubuntu 20.04+必要软件
本文记录了在 Ubuntu 20.04 环境下配置 Vitis AI 所需的步骤和软件推荐。
2024-07-27 22:46:54
732
原创 Vitis AI 基本操作+VAI_Q_PYTORCH用法详解
本文分享了 vai_q_pytorch 的功能与应用,该工具是 Vitis AI Quantizer for PyTorch 的缩写,旨在优化深度学习模型,尤其是通过深度压缩技术提高模型的性能与效率。处理后的 IR 可以部署到多种平台,如深度学习处理单元(DPU)和 Xilinx AI 引擎,用户也可以将修改后的计算图重新整合回 PyTorch,以利用其强大的预处理、后处理和分布式系统功能。这一系列流程为深度学习模型的优化提供了高效、便捷的解决方案,助力提升模型在不同硬件平台上的运行效率与性能。
2024-07-26 22:49:59
980
原创 Vitis AI 基本认知(入门资源汇总)
本文提供了多个有用的资源链接,包括环境搭建、使用 inspector 检查模型、解释量化过程等,以及指向官方文档和教程的链接,帮助用户更深入地了解和使用 Vitis AI。通过这些资源,用户可以更容易地开始他们的 Vitis AI 项目,无论是在边缘设备还是云平台上。
2024-07-25 23:47:28
799
原创 口袋实验室--使用 AD2 高效调试 SPI 接口
在本文中,我们复习了 SPI 接口的基本概念、特点及其在 AD2 设备上的配置和操作方法。SPI 接口因其全双工通信能力、高速率和灵活的主从配置而广泛应用于数字通信领域。通过使用 AD2 的Protocol-SPI 模块,用户可以轻松地实现对 SPI 通信的监控和控制,包括设置信号线、调整通信参数以及执行数据传输等操作。本文还演示了如何在 WaveForm 软件环境中使用 Protocol 和 Script 模块来配置和操作 SPI 接口。通过具体的脚本示例,展示了如何发送和接收数据。
2024-07-18 18:02:14
1032
原创 嵌入式硬件-Xilinx FPGA DDR4 接口配置基础(PG150)
内存控制器(MC)旨在从用户界面(UI)块接收读取、写入和读取-修改-写入事务,并以低延迟高效地将它们发送到内存,满足所有DRAM协议和时序要求,同时使用最少的FPGA资源。该控制器还允许通过UI控制信号对低级功能进行一定程度的控制,例如按事务基础上的自动预充电(AutoPrecharge),以及可以用于确定何时发出DRAM刷新命令的信号。指的是数据总线在传输数据时的效率。最高支持 32 GB的组件密度,64 GB的LRDIMM,128 GB的RDIMM,16 GB的SODIMM和16 GB的UDIMM。
2024-07-17 23:50:37
1355
原创 Xilinx FPGA UltraScale SelectIO 接口逻辑资源
本文深入介绍了AMD UltraScale系列器件中的 I/O Tile 功能和配置,涵盖了高性能(HP)、高密度(HD)和高量程(HR)I/O bank的特性和应用。每种I/O bank针对不同的性能需求和电压范围设计,其中HP I/O bank主要用于高速接口,HR I/O bank适用于广泛的I/O标准,而HD I/O bank则面向低速接口。文章还阐述了SelectIO接口的灵活配置能力,包括支持多种标准接口、输出强度和斜率的可编程控制、数控阻抗(DCI)以及内部生成参考电压。
2024-07-09 15:53:06
1301
原创 嵌入式硬件-Xilinx FPGA DDR4 接口的 PCB 准则
本文档提供了关于FPGA-MIG和DDR4内存的详细介绍,包括其工作原理、关键信号、以及与之相关的PCB设计准则。DDR4作为目前广泛使用的内存技术,其特点包括高速数据传输和同步工作机制,而FPGA-MIG则为这些内存提供了高效的控制和接口,确保数据传输的稳定性和高效性。文档还详细讨论了DDR4的信号类型,包括时钟信号、地址和命令信号以及数据信号等,这对于理解DDR4的工作机制至关重要。在PCB设计方面,本文档提供了关于如何布线和引脚分配的准则,旨在帮助设计师优化内存与FPGA之间的连接.
2024-07-08 18:39:55
1576
2
原创 Vitis AI 进阶认知(量化过程详解)
在当今技术快速发展的时代,我们追求的不仅是智能设备的高性能,同时也强调其能效和便携性。Vitis AI量化器便是在这样的背景下应运而生的一个工具,它通过将神经网络模型的数据精度从32位浮点数降低到8位整数,极大地缩减了模型的体积和计算需求,而通过精心设计的校准和微调过程,又能确保模型的预测准确性基本不受影响。这一过程不仅包括了校准激活、量化感知训练等关键步骤,还提供了详细的量化校准配置和实用的量化函数,以适应不同的部署需求。
2024-07-02 23:12:33
990
原创 KV260视觉AI套件--PYNQ-DPU-Resnet50
在这个总结中,我们探讨了Resnet50,这是一个由50层构成的深度卷积神经网络,它在图像识别任务中表现出色。通过“残差学习”的创新设计,Resnet50解决了深度网络训练中的退化问题,使得网络能够通过增加更多的层来提高性能,而不会增加训练难度。我们还分析了如何在Xilinx Zynq平台上使用VART运行Resnet50模型的代码,包括模型加载、数据预处理、异步推理和结果分类。这个过程展示了如何利用Zynq芯片的强大功能,将深度学习应用于边缘计算,为各种行业,特别是高级驾驶辅助系统(ADAS)等应用。
2024-07-01 23:52:03
635
原创 KV260视觉AI套件--PYNQ-DPU
本文详细介绍了使用KV260视觉AI套件中的DPUCZDX8G深度学习处理单元(DPU)的环境搭建和开发流程。DPUCZDX8G是专为Zynq UltraScale+ MPSoC设计的,优化了卷积神经网络的计算引擎,支持广泛的运算符,使其成为执行AI推理任务的强大工具。文章从DPU的基本原理出发,解释了其工作机制,包括如何从片外存储器中提取指令以及如何在片上存储器中高效处理数据。
2024-06-30 23:29:06
1436
原创 KV260视觉AI套件--开箱报告
在这个快速发展的技术世界中,Zynq SoC芯片的出现无疑是一次革命性的进步。它将ARM处理器的强大计算能力与FPGA的灵活性完美结合,为工业控制和视觉AI应用带来了前所未有的便利。通过Zynq,开发者可以在同一芯片上同时进行软件和硬件的开发,这不仅简化了开发流程,还显著提高了效率。
2024-06-28 23:39:55
838
原创 Vitis IDE 艰难切换--从传统 Vitis GUI 到 2024.1 统一软件界面
在Vitis 2024.1版本中,传统的Vitis GUI已经被全新的统一软件界面所取代。这个变化虽然初看令人生疏,但它实际上为开发者们带来了更加高效和现代化的工作环境。新界面的Flow Navigator、多任务并行执行、AI引擎优化、以及界面的现代化设计,都极大地提升了工作流程的管理和执行效率。此外,新的统一软件界面还提供了GUI和CLI模式的无缝转换,使得项目构建和调试更加灵活。虽然适应新界面需要时间,但随着熟悉度的提升,开发者们将能够充分利用这些新特性,以更快的速度迭代和优化他们的工程。
2024-06-26 23:30:45
2431
5
原创 Vitis Accelerated Libraries 学习笔记--Vision 库的组织结构
本文档提供了Vision库的组织结构和详细分类介绍,包括各级目录(L1、L2、L3)下的示例代码、测试、库文件等的详细说明。此外,还包括了TCL和Makefile脚本的解析,这些脚本是在项目开发过程中用于自动化构建和测试的重要工具。TCL脚式主要用于设置环境变量、项目参数、添加文件、设置FPGA部件和时钟,以及条件执行仿真、综合等任务。而Makefile脚本则涉及到设置项目变量、检查环境配置、生成配置文件、编译和运行指令等。
2024-06-25 20:39:12
980
原创 Vitis Accelerated Libraries 学习笔记--OpenCV 运行测试
在本系列学习笔记中,我们探讨了 Vitis Accelerated Libraries 和 OpenCV 的结合使用,强调了 OpenCV 在运行 Vitis Vision 库示例设计和验证用户测试平台算法中的重要性。通过详细的安装指南和实例测试,我们展示了如何将 OpenCV 集成到 Vitis Vision 库的工作流中,并利用其强大的函数库来创建和验证测试用例。
2024-06-21 23:51:33
1261
原创 Vitis Accelerated Libraries 学习笔记--Vision 库介绍
Vitis Vision 库为基于 FPGA 和 AI 引擎的计算机视觉应用提供了强大的支持。它通过一系列优化的内核,覆盖从基本的图像处理操作到高级的图像分析和特征检测。开发者可以利用这些内核来执行色彩转换、像素运算、几何变换等任务,同时享受硬件加速带来的性能优势。Vitis Vision 的设计允许开发者在保持与传统 C/C++ 程序兼容的同时,使用高性能的图像处理函数。这个库的多样性和灵活性使其成为在现代图像处理和机器视觉领域中不可或缺的工具,特别是在需要处理大量数据和实时性要求高的应用场景中。
2024-06-21 21:00:00
1200
原创 Vitis Accelerated Libraries 学习笔记--OpenCV 安装指南
本文详细介绍了使用Vitis Vision Library时为什么需要安装OpenCV库,并提供了详尽的安装指南。OpenCV库的安装对于运行Vitis Vision Library的示例设计至关重要,因为它不仅可以帮助开发者演示加速内核的功能,还能在用户测试平台上验证算法性能。
2024-06-19 23:56:30
1169
原创 Vitis HLS 学习笔记--Stream Chain Matrix Multiplication
这个内核的核心功能是通过使用数据流和级联矩阵乘法来提高性能。它利用了 ap_ctrl_chain 协议,这允许内核在当前操作完成后立即开始下一个操作,从而实现了更高的并行性和效率。内核包含两个版本:简单的 krnl_simple_mmult 和链式的 krnl_chain_mmult。简单版本使用 ap_ctrl_hs 协议,而链式版本使用 ap_ctrl_chain 协议,后者提供了额外的控制信号来管理内核操作的流程。
2024-06-18 18:28:58
1112
原创 Vitis HLS 学习笔记--函数例化(Function Instantiation)
函数例化是Vitis HLS中的一种高级优化技术,它允许开发者在保持函数层次结构的同时,对特定函数实例进行局部优化。这种技术通过利用编译时已知的常量输入参数,简化函数的控制逻辑,从而可能改善延迟和吞吐量。默认情况下,函数在RTL中作为独立层级块保留,或者分解到更高层次的函数中,所有实例共享单一RTL实现。通过使用FUNCTION_INSTANTIATE编译指示,可以为每个函数调用创建唯一的RTL实现,允许针对每个实例进行局部最优化。
2024-06-17 23:39:07
1164
原创 Zynq学习笔记--了解中断配置方式
在本文中,我们探讨了Zynq平台上中断的概念和分类,包括软件中断、私有外设中断和共享外设中断。我们还介绍了中断控制器(GIC)的作用,它是中断管理的核心。通过一个实际的示例,我们展示了如何在处理系统(PS)和可编程逻辑(PL)之间使用通用输入输出(GPIO)来处理中断。示例代码包括初始化GPIO设备、设置中断系统和定义中断处理函数。
2024-06-16 23:56:02
883
原创 Vitis HLS 学习笔记--添加 RTL 黑盒函数
Vitis HLS 工具通过集成 Verilog RTL IP 到 C/C++ HLS 项目中,简化了硬件设计过程。RTL 黑盒技术允许设计者在特定区域内使用已有的 Verilog 或 VHDL 编写的 RTL 模块,从而重用优化好的硬件模块,避免重新实现,提高设计效率和可靠性。使用 Vitis HLS 时,设计者需要编写 RTL 函数签名、创建黑盒 JSON 描述文件并包含 RTL IP 文件。在 Vitis HLS 中添加这些文件后,运行仿真和综合步骤即可完成集成。
2024-06-14 23:54:59
630
原创 Vitis HLS 学习笔记--Vitis Accelerated Libraries介绍
Vitis Accelerated Libraries为开发者提供了一套丰富的、经过优化的开源库,旨在通过FPGA和其他硬件加速技术显著提高各种应用程序的性能。这些库覆盖了广泛的领域,包括但不限于线性代数、数字信号处理、图像处理、数据分析、数据压缩、数据库管理以及金融计算等。通过将这些高级库分为三个层级:L1原始函数、L2内核函数和L3软件API,Vitis库确保了不同技能水平的开发者都能找到合适的工具来优化他们的应用程序。
2024-06-13 23:45:52
1555
原创 Vitis HLS 学习笔记--移除内存分配malloc
Vitis HLS不支持动态创建或删除C/C++对象,因此开发者必须寻找替代方案。本文通过一个例子展示了如何在不定义USE_MALLOC的情况下,使用栈内存代替堆内存进行内存分配。示例中的函数example通过两个循环处理输入数组,使用栈上的局部变量而非malloc分配的内存,从而在编译时确定内存大小,这对硬件合成至关重要。
2024-06-12 23:35:35
1212
原创 Vitis HLS 学习笔记--矢量数据类型
在 Vitis HLS 中,矢量数据类型提供了一种高效的数据处理方式,允许开发者利用 SIMD 操作一次性处理多个数据元素。通过使用 hls::vector,开发者可以创建一个由 N 个类型为 T 的元素组成的矢量。这种数据结构在内存中连续存储,且当元素类型和数量都是 2 的幂时,对齐到其总大小,可以实现最优的内存访问效率。
2024-06-11 23:37:05
854
原创 Zynq学习笔记--AXI4-Stream到视频输出IP是如何工作的?
本文介绍了 AXI4-Stream 到视频输出的工作原理和示例工程。通过该工程,详细展示了如何使用 AXI4-Lite 接口配置视频输出参数,包括图像高度、宽度和背景图案等。AXI4-Stream 到视频输出 IP 包含数据部分、时序信号部分和同步部分,确保数据与时序信号的同步。同步器通过初始对齐和时序模式来实现这一目标,支持独立时钟模式下的跨时钟域功能。最后,解释了 Master 和 Slave 时序模式,分别由 VTC 控制同步信号和作为时序主控。
2024-06-10 23:40:58
1345
原创 Vitis HLS 学习笔记--循环边界包含变量
在硬件设计中,固定的循环迭代次数对于资源分配和时序分析至关重要。Vitis HLS 在处理包含变量边界的循环时面临挑战,因为这限制了某些优化操作的执行。通过使用 LOOP_TRIPCOUNT 指令指定迭代次数的范围,可以帮助工具更好地进行时延分析。此外,将循环重写为固定次数的迭代,同时在循环体内部使用条件语句来控制执行,可以满足硬件设计的需求,允许循环展开和流水线化,从而提高性能。这些方法为变量边界循环提供了有效的解决方案,使得即使在变量驱动的情况下,也能实现硬件设计的优化。
2024-06-09 23:54:18
857
原创 Vitis HLS 学习笔记--接口存储器布局模型
在现代计算机系统中,数据对齐和结构填充是确保数据存储和访问效率的关键因素。数据对齐涉及将数据按照处理器优化的边界排列,以加快访问速度。结构填充则是在数据结构中插入额外空间,以保持成员变量的正确对齐。这些概念在硬件设计中尤为重要,因为 FPGA 和其他硬件加速器对数据布局的要求更为严格。Vitis HLS 等工具允许开发者自定义对齐和填充规则,以优化软件与硬件之间的数据交互,从而提升整体性能。理解并应用这些原则,可以帮助开发者在存储器要求和性能之间找到最佳平衡点。
2024-06-08 23:37:27
1184
原创 Vitis HLS 学习笔记--MAXI位宽拓展
在Vitis工具流程中,Vitis HLS可以通过自动调整m_axi接口端口宽度至512位来提高突发访问能力。这种自动端口扩展仅适用于标准C语言数据类型,不支持聚合类型。为了在Vivado IP流程中启用这一功能,必须显式设置config_interface命令。设置m_axi_max_widen_bitwidth和m_axi_alignment_byte_size可以指定接口的最大位宽和对齐字节数。代码实例展示了如何通过HLS指令配置接口和内存映射,以优化性能。
2024-06-07 23:32:21
1008
原创 Vitis HLS 学习笔记--聚合与解聚-AXI主接口
在 Vitis HLS 设计中,使用 #pragma HLS aggregate 指令可以将结构体中的元素聚合成一个整体,这样可以作为一个单元一起处理。这种聚合默认是按照4字节对齐,但也可以通过指定 compact 参数来改变对齐方式。例如,compact=bit 会按位级对齐,而 compact=byte 则按字节级对齐。在 Vivado IP Flow 中,默认对齐是1字节,而在 Vitis Kernel Flow 中是4字节。聚合可以优化数据传输和存储,但可能需要位填充以保持对齐。
2024-06-06 20:15:00
903
原创 Vitis HLS 学习笔记--static RAM/ROM
在本文中,我们探讨了静态阵列在Vitis HLS中的初始化和复位问题,特别是与全局阵列RAM相比,静态RAM的不同之处。我们了解到静态阵列可以映射到BRAM、URAM或LUTRAM,并且可以通过特定的HLS指令进行初始化和重置。在无reset情形下,静态变量存储器的值不受reset信号影响,而在含reset情形下,存储器的值会在reset信号有效时恢复到初始状态。此外,我们还讨论了静态ROM的实现,它是只读的,通常使用BRAM或LUTRAM实现,但不能使用URAM。
2024-06-05 23:49:51
1621
原创 Vitis HLS 学习笔记--初始化与复位
本文讨论了初始化和复位在硬件设计中的不同方面。阵列的初始化是在编译时或上电时为变量赋予初始值,而复位是在运行时将变量恢复到其初始状态。控制的初始化和复位也是关键,通过复位信号可以在 kernel 端口添加复位行为。对于阵列,使用 static 限定符的存储器可以实现默认初始化行为,避免运算开销。此外,BRAM 和 URAM 的启动和重置方式也需要根据硬件平台进行考虑。
2024-06-04 23:51:58
878
原创 Vitis HLS 学习笔记--global_array_RAM初始化及复位
在本文中,我们探讨了如何在Vitis HLS中处理FPGA的全局数组映射和初始化问题。通过示例代码,我们了解了如何将C++数组映射到不同类型的RAM,并使用#pragma HLS BIND_STORAGE指令来指定存储实现。我们还讨论了URAM的使用限制和手动数据打包的解决方案。最后,我们比较了两种解决方案:一种是不使用复位指令的solution_A,另一种是使用复位指令的solution_B。solution_B通过ROM和RAM的结合,提供了一种在复位信号激活时能够将数组恢复到初始状态的方法。
2024-06-03 23:38:02
1453
原创 Vitis HLS 学习笔记--HLS流水线类型
在Vitis HLS中,流水线设计对于硬件性能至关重要。停滞的流水线(STP)在数据可用时持续执行,但可能导致死锁和时序问题。可刷新的流水线(FLP)则在没有新输入时停止读取,但会继续处理,避免了死锁,但可能需要更大的迭代间隔(II)。自由运行的流水线(FRP)提供了一种高效的解决方案,它通过减少扇出和简化控制逻辑来改善时序,同时允许流水线在无效数据传输时自我清理。尽管FRP增加了资源使用并可能引入延迟,但它的结构有利于布局和布线,减少了连线长度和复杂性。
2024-06-02 23:25:27
1147
原创 Vitis HLS 学习笔记--FRP自由运行流水线
FRP自由运行流水线是一种高效的硬件架构风格,它通过持续运行来优化性能,即使在没有新的输入数据时也不会停滞。这种设计简化了控制逻辑,减少了资源使用,并提高了时序性能。然而,FRP流水线也有其局限性,如不支持MAXI接口,且在某些情况下可能导致死锁。
2024-06-01 23:48:38
630
Zynq开发-使用PYNQ快速入门摄像头MIPI驱动(OV5640)-overlay设计
2024-05-12
电子工程+Xilinx-FPGA-SoC-功耗估算+电源分析+助力设计师在产品设计初期,确定功耗和散热规格
2024-05-08
Digilent AD2+电感测量+线性螺旋电感4uH+WaveForm程序配置+测量结果的曲线
2024-04-28
Digilent AD2+电感测量+线性螺旋电感+WaveForm程序配置
2024-04-25
CST电磁场仿真+线性螺旋电感+建模步骤细节和RLC端口配置+CST高级建模操作
2024-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人