【发工程源码】【手动添加源码】【双稳态源码】zynq教程源码_zynq 教程

时间:2024-12-23 23:18:47 编辑:新版骡马源码 来源:小程序拖拽布局源码

1.【正点原子FPGA连载】第九章基于OV5640的教程教程字符叠加实验--领航者ZYNQ之HLS 开发指南
2.ZYNQ+linux网口调试笔记(3)PL-ETH
3.FPGA高端项目:Xilinx Zynq7020系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持
4.Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持
5.sdr开发篇 6. zynq+ad9361的源码linux工程搭建
6.如何在Zynq-7000上烧写PL Image

zynq教程源码_zynq 教程

【正点原子FPGA连载】第九章基于OV5640的字符叠加实验--领航者ZYNQ之HLS 开发指南

       基于OV的字符叠加实验:领航者ZYNQ之HLS开发详解

       在领航者ZYNQ开发中,我们通过正点原子的教程教程教程,实现了基于OV摄像头的源码字符叠加实验。这个实验旨在将字符数据与视频图像实时叠加在LCD屏幕上,教程教程适合多媒体监控和人机界面应用。源码发工程源码以下是教程教程实验关键步骤的概述:

       实验目标

       任务是使用Vivado HLS工具设计并验证一个字符叠加IP核,该核能在摄像头采集的源码图像上叠加字符数据。

       步骤一:字符模提取

       利用PCtoLCD软件获取汉字“正点原子”的教程教程字模,将其合并为一个大字模,源码以适应LCD显示需求。教程教程

       步骤二:HLS设计

       在F:\ZYNQ\High_Level_Synthesis目录下创建名为“text_overlay”的源码工程,使用C++编写源代码,教程教程利用hls_video.h库。源码编译后,教程教程导出为IP核。

       步骤三:IP验证

       将生成的IP核集成到Vivado的Block Design中,将其与OV摄像头的灰度显示实验工程相结合,验证字符叠加功能。

       步骤四:下载验证

       将设计下载到领航者开发板,通过LCD屏幕查看摄像头采集图像与字符叠加后的结果,确保功能正常。

       最终,你将看到摄像头捕获的图像上叠加了预设字符,这展示了字符叠加技术在实际应用中的效果。完整教程和代码资源可在正点原子的官方渠道获取,包括实验源码、手册和视频教程。

ZYNQ+linux网口调试笔记(3)PL-ETH

       åœ¨ZYNQ上使用gigE Vision协议的网络接口相机。

        第一步:调通PS侧网口GEM0(Xilinx BSP默认配好)。

        第二步:调通PS侧网口GEM1(见前一篇文档:开发笔记(1))。

        第三步:调通PL侧网口(本文阐述)。

        第四步:在PL侧网口上验证Jumbo Frame特性,并在应用层适配gigE Vision协议。

        根据《xapp》可知,PL侧的PHY支持Base-X和SGMII两种配置,这两种配置对应两种不同的PHY引脚接口(连接到MAC)。而我们的hdf文件使用的是Base-X的配置。

        关于网口的Linux驱动,我们在官网找到一份资料: Xilinx Wiki - Zynq PL Ethernet 。资料很长,我们只看与我们相关的2.4.1 PL Ethernet BSP installation for Base-X”这一章节就可以了。

        首先导入FPGA设计同事提供的hdf文件:

        在弹出的图形界面里,进入Subsystem AUTO Hardware Settings——Ethernet Settings——Primary Ethernet,确认可以看到PL侧网络设备axi_ethernet_0,说明hdf文件里已包含了必要的网口硬件信息:

        上图中被选中的网口将成为Linux上的设备eth0。这里我们默认选择ps7_ethernet_0,即使用GEM0作为首选网口。

        启用Xilinx AXI Ethernet驱动

        进入Device Drivers -- Network device support – 选中Xilinx AXI Ethernet(以及Xilinx Ethernet GEM,这是PS侧网口的驱动)

        进入Networking support – 选中 Random ethaddr if unset

        进入Device Drivers -- Network device support -- PHY Device support and infrastructure – 启用Drivers for xilinx PHYs

        进入~~~~Device Drivers -- DMA Engine Support -– 禁用~~~~Xilinx AXI DMAS Engine~~~ (对应的配置项名为 ~~ CONFIG_XILINX_DMA ~~~)

        注意: Xilinx Wiki里对设备树节点的引用有误(&axi_ethernet),导致编译报错,应改为&axi_ethernet_0。

        注:PL-ETH驱动所在路径:<project>/build/tmp/work-shared/plnx_arm/kernel-source/drivers/net/ethernet/xilinx/xilinx_axienet_main.c和xilinx_axienet_mdio.c。对应的内核配置项为CONFIG_NET_VENDOR_XILINX和CONFIG_XILINX_AXI_EMAC。

        启用ethtool和tcpdump(调试用,非必须):

        然后将生成的BOOT.BIN和image.ub拷贝到SD卡根目录下,将SD卡插入板子上,上电运行。

        上电后,使用ifconfig eth1查看网口信息,观察MAC地址与设置的一致,且ifconfig eth1 ..1. up没有报错。

        测试网络通路:ping PC是通的。说明网口工作正常。

        Linux下eth1(即PL-ETH)的MAC地址有误

        问题描述:

        开机打印:

        注意:

        MAC地址是错的,驱动里解析出的是GEM0的MAC地址。

        试验发现,即使在system-user.dtsi里不写local-mac-address,也照样解析出的是GEM0的MAC。

        而将system-user.dtsi里的local-mac-address改名为pl-mac-address,并将驱动里解析的字符串也对应更改为pl-mac-address,则可以正确解析出来:

        Passing MAC address to kernel via Device Tree Blob and U-Boot:

       /support/answers/.html

        U-Boot里的环境变量ethaddr会覆盖掉设备树里pl-eth的local-mac-addr字段,从而影响Linux启动后的网卡MAC地址;

        但U-Boot里的环境变量ipaddr不会对Linux启动后的配置产生任何影响。因为设备树里根本就没有关于IP地址的配置。

        phy-mode怎么会是sgmii?查了下官方的提供的BSP里,也是“sgmii”。说明这个没问题。具体原因不清楚。

        @TODO: 设备树里的中断号的顺序如何影响功能?

        为何读出来的IRQ号不对呢?这是因为这里读到的不是硬件的中断号,而是经过系统映射之后的软件IRQ number。两者不具有线性关系。

        关于中断号的疑问:

        Linux上的网口eth0、eth1的顺序,似乎是按照phy地址从小到大来排布的。

        Xilinx xapp-zynq-eth.pdf (v5.0) July ,

       /support/documentation/application_notes/xapp-zynq-eth.pdf

        Xilinx Wiki - Zynq PL Ethernet:

       /wiki/spaces/A/pages//Zynq+PL+Ethernet

        Xilinx Wiki - Linux Drivers:

       /wiki/spaces/A/pages//Linux+Drivers

        Xilinx Wiki - Linux Drivers - Macb Driver:

       /wiki/spaces/A/pages//Macb+Driver

        Xilinx Wiki - Zynq Ethernet Performance:

       /wiki/spaces/A/pages//Zynq+Ethernet+Performance

        查到关于Jumbo frame MTU的定义,当前值为,可否改大一些?

        驱动源码里关于jumbo frame的说明:

        设置MTU为,发现ping包最大长度只能设为ping ..1. -s

       https://lore.kernel.org/patchwork/patch//

        【完】

FPGA高端项目:Xilinx Zynq系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持

       探索FPGA高端技术:Xilinx Zynq系列视频拼接与缩放的工程解决方案

一、创新技术应用

       基于Zynq的手动添加源码Xilinx FPGA,我们的解决方案实现了多路视频的高精度缩放(双线性插值),并以智能FDMA技术进行无缝拼接,完美兼容OV摄像头,支持动态彩条作为输入源。处理后的视频经精心优化,通过VGA和HDMI输出不同分辨率的实时显示。

二、全面工程源码

       路视频:2路x缩放拼接,x输入,双屏显示

       路视频:4路x缩放,x输入,四屏显示

       路视频:8路x缩放,x输入,八屏显示

       路视频:路x缩放,x输入,十六屏显示

三、适用领域广泛

       无论是在校学生、研究型工程师还是行业专业人士,这套方案适用于医疗、军事等领域的高速接口或图像处理任务,让你在实践中提升技能。

四、技术与支持

       提供完整源码,包含最新动态彩条选项

       优化FDMA性能,提升低端FPGA性能

       改进HDMI输出,清晰易读

       升级输出时序,确保无缝显示

五、学习旅程

       通过结构优化,降低学习难度,双稳态源码代码量减少%

       强调逻辑思维,自主学习verilog和Vivado工具

       源码理解和工程实践相结合

       从基础复现开始,逐步深入

六、实战培训

       套视频缩放纯verilog源码,提升就业竞争力

       提供Vivado环境配置教程

       每周进度检查,个性化指导

       代码移植与验证服务

七、重要提示

       仅供个人学习研究,商业使用需遵守条款

       多种视频处理方案,支持不同摄像头和接口

       Kintex7和Artix7系列FPGA移植教程

       4套Vivado源码,灵活调整视频源

八、深入解析

       视频缓存采用异步FIFO和RAM阵列,可通过宏定义调整参数,如输入分辨率、通道数等。

结语:实战提升

       设置缩放参数,探索拼接原理

       硬件配置要点,包括摄像头地址计算

       从视频拼接到输出模块,全程示例

       通过这个精心设计的项目,你将掌握视频缩放与拼接的核心技术,为你的项目设计和移植打下坚实基础。立即获取源码,开始你的FPGA技术探索之旅吧!

Xilinx Zynq-系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持

       本文介绍如何利用Xilinx Zynq-系列FPGA Zynq进行多路视频处理,包括图像缩放和视频拼接显示。首先,通过CSDN大佬的经验,我们利用OV摄像头模组作为输入,配置其为x@Hz分辨率。arthas修改源码接着,通过Zynq的软核i2c控制器配置摄像头,采集视频并将其转换为RGB格式。自定义IP负责图像缩放,通过SDK软件配置任意尺寸缩放,实质上是AXI_Lite寄存器配置。VDMA IP实现视频到DDR3的帧缓存,Video Mixer IP则进行视频拼接,支持不同位置显示,同样通过SDK配置。最后,通过HDMI发送IP将RGB视频转换为TMDS信号,显示在显示器上。

       提供了vivado.1版本的完整工程源码和技术支持,可以实现三种不同的缩放拼接方案,只需修改SDK软件即可调整。设计思路详细描述了各个IP的使用和配置,包括HLS图像缩放IP的最大分辨率、输入输出格式,以及Video Mixer IP的视频处理能力。工程适用于在校学生和在职工程师的项目开发,特别适合于医疗、军工等领域。

       代码获取方式位于文章末尾,但请注意,该工程源码包含部分网络公开资源,仅限个人学习研究,禁止商业使用,且需注意FPGA和嵌入式C语言的成品源码11688基础知识要求。此外,文章还提供了相关FPGA图像处理方案的链接,包括图像缩放、视频拼接等不同功能的方案。

sdr开发篇 6. zynq+ad的linux工程搭建

       SDR开发过程中,我们首先从hdl源码开始,从github下载_r1分支的zip包,解压后放置在工作区~/work/zynq_dev/ados。然后,创建Vivado工程,配置环境并编译,需要注意的是,这个工程需要针对xmzed进行修改。接着,对DDR和EMIO接口进行适配,并导出HDF文件。

       接着,我们进入Petalinux 2.1工程阶段,拷贝适配后的HDF文件,并从github获取ADI的Linux内核和meta-adi。内核和meta-adi需下载、解压并配置,硬件信息目录中需要设置唯一的HDF文件。初次配置后,后续只需在修改后重新编译,配置启动方式、接口、SD卡,并解决source bitbake失败的问题。

       内核配置中,USB和IIO功能默认开启。设备树部分,需在dash环境下修改,并在device-tree.bbappend中添加自定义设置。root文件系统配置时,由于meta-adi的影响,需要调整petalinux-user-image.bbappend以恢复默认设置。

       编译工程时,注意分配足够的CPU资源,可能需要解决网络问题并设置全局代理。遇到错误时,如jesd-status-dev-r0的fetch问题,需替换相关文件。最后,打包boot.bin并制作SD卡文件系统,包括EXT和FAT分区,并进行启动测试。

       测试阶段,通过拨码开关启动设备,使用默认root/root登录,进行IIO连接测试和Gnuradio发送信号测试。整个过程参考了相关教程和文档,如AD的开发指南和Linux驱动等。

如何在Zynq-上烧写PL Image

       åœ¨Zynq-上编程PL大致有3种方法:

       1. 用FSBL,将bitstream集成到boot.bin中

       2. 用U-BOOT命令

       3. 在Linux下用xdevcfg驱动。

       æ­¥éª¤ï¼š

       1. 去掉bitstream的文件头

       ç”¨FSBL烧写PL Images没有什么好说的,用Xilinx SDK的Create Boot Image工具即可完成,不再赘述。用后两种方法需要把bitstream文件的文件头用bootgen工具去掉。

       ä¸€ä¸ªå…¸åž‹çš„bif文件如下所示:

       the_ROM_image:

       {

       [bootloader]<fsbl_name>.elf

       <pl_bitstream_name>.bit

       <u-boot_name>.elf

       }

       bif文件可以用文本编辑器写,也可以用Xilinx SDK的Create Boot Image工具生成。然后在命令行下用以下命令即可去掉bitstream文件的文件头。

       bootgen -image <bootimage>.bif -split bin -o i BOOT.BIN

       "-split”参数可以生成以下文件:

       <pl_bitstream_name>.bit.bin

       2. 在U-BOOT下烧写PL Image

       å‘½ä»¤â€fpga load”和”fpga loadb”都可以。区别是前一个命令接受去掉了文件头的bitstream文件,后一个命令接受含有文件头的bitstream文件。

       åœ¨OSL .2上,缺省编译就可以完整支持写入PL Image的功能。但是在Petalinux .下,尽管可以在U-BOOT下看到命令”fpga”,还需要在文件

       <PROJ>/subsystems/linux/configs/u-boot/platform-top.h 中增加以下内容后重新编译才可以支持具体的功能。

       /* Enable the PL to be downloaded */

       #define CONFIG_FPGA

       #define CONFIG_FPGA_XILINX

       #define CONFIG_FPGA_ZYNQPL

       #define CONFIG_CMD_FPGA

       #define CONFIG_FPGA_LOADFS

       åœ¨OSL .2 U-BOOT中,具体的功能是在zynqpl.c的zynq_load()中实现的。

       3. 在Linux下烧写PL Image

       OSL Linux .2.中已经含有xdevcfg驱动了(之前就有,不过本文是在这个版本上验证的),直接用以下命令就可以完成PL Image写入。

       cat <path_to_storage_media>/<pl_bitstream_name>.bit.bin > /dev/xdevcfg

       Linux驱动的源代码在xilinx_devcfg.c中。因为驱动的编号是通过alloc_chrdev_region()动态分配的,所以不需要手工用mknod命令手动建立设备节点。

       åœ¨Linux驱动中,每次往DevCfg中写入字节,直到全部写完。

       4. 在用户程序中烧写PL Image

       ç›®å‰æ²¡æœ‰çŽ°æˆçš„源码来完成这个功能,不过可以用mmap()把DevCfg的寄存器映射到用户程序的虚地址中,然后参考一些现成的软件代码来完成这个功能:

        * FSBL中的pcap.c

        * U-BOOT中的zynqpl.c

        * Linux中的xilinx_devcfg.c

        * Xilinx SDK中的例子。例子位于以下位置,随SDK的版本会有变化。

        C:\Xilinx\SDK\.1\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\index.html

       å°ç»“:

       DevCfg外设内部有自己的DMA,只需要简单的配置PL Image的基地址和长度到DevCfg寄存器,就可以完成Zynq- PL Image的加载。Xilinx已经提供了灵活的解决方案,如果开发者要把这个功能集成在自己的应用程序中,也有很多的代码可以参考,并不是很困难的任务。

正点原子FPGA连载第一章Hello World实验--领航者 ZYNQ 之嵌入式开发指南

       实验平台:正点原子领航者ZYNQ开发板

       第一章Hello World实验

       实验目标:在ZYNQ嵌入式系统上实现串口打印“Hello World”。

       开发流程:硬件设计(Vivado软件)、软件设计(SDK软件)、下载验证。

       硬件设计包括:

       创建Vivado工程

       选择工程路径,确保路径名和工程名符合命名规则(仅英文字母、数字和下划线)。

       选择工程类型为“RTL Project”,不添加源文件和约束文件。

       选择ZYNQ器件型号(根据核心板上ZYNQ芯片型号)。

       添加PS模块

       使用IP Integrator创建。

       配置PS模块,包括UART、DDR、时钟等。

       移除与PL端交互的接口信号。

       软件设计包括:

       创建SDK应用工程

       新建工程,选择工程名“hello_world”。

       选择“Hello World”工程模版。

       编写源代码

       主函数包含初始化、打印“Hello World”和清理平台的函数。

       使用Xilinx定义的print()函数打印字符串。

       下载验证步骤:

       连接下载器和开发板

       安装USB串口驱动。

       设置SDK Terminal

       连接串口,设置波特率、数据位和停止位。

       下载并运行程序

       右键运行程序到硬件。

       验证结果:在开发板的串口上成功打印“Hello World”,证明实验在ZYNQ嵌入式系统上成功执行。

Linux 应用案例开发手册——基于Xilinx Zynq-/工业开发板

       开发案例说明

       开发案例位于产品资料“4-软件资料\Demo\tl-linux-application\”路径下的 base-demos 和 python-demos 目录。base-demos目录提供Linux常用开发案例,案例bin目录存放可执行文件,案例src目录存放源码。python-demos目录提供Python开发案例,脚本文件无需编译,可直接运行。测试板卡是基于Xilinx Zynq-系列XC7Z/XC7Z高性能低功耗处理器设计的异构多核SoC工业级核心板。

       若需重新编译Linux常用开发案例,请将对应案例src目录复制到Ubuntu工作目录下,进入src目录执行命令加载PetaLinux环境变量,并执行make命令进行案例编译。编译完成后,将在当前目录下生成可执行文件。

       Linux常用开发案例包括tl_led_flash、tl_key_test和tl_can_echo等。

       tl_led_flash案例功能是通过向评估底板用户指示灯LED设备节点反复交替写入1、0数值,实现LED闪烁效果。LED点亮与熄灭时间均为0.5s。程序流程示意图显示LED设备节点为“/sys/class/leds/user-ledX/”目录下的brightness。

       操作说明包括将案例bin目录下的可执行程序tl_led_flash复制到评估板文件系统,并在可执行程序所在目录执行命令运行程序,即可看到评估底板LED1以0.5s的时间间隔进行闪烁。同时,串口终端打印系统全部LED设备信息和程序当前控制的LED设备信息。

       关键代码包括预定义LED数组、LED亮灭操作和时间间隔。

       tl_key_test案例功能是通过监听用户按键设备节点状态,检测按键事件。程序流程示意图显示用户按键设备节点为“/dev/input/event0”。操作说明包括将案例bin目录下的可执行程序tl_key_test复制到评估板文件系统,在可执行程序所在目录执行命令运行程序,串口终端将打印提示信息。再按下评估板用户按键KEY1,程序将检测到按键事件,并打印按键状态信息。

       关键代码包括定义按键、监听按键事件和循环监听。

       tl_can_echo案例功能使用canutils工具包的canecho程序实现CAN接口数据接收并重发功能。canutils工具包内含5个独立程序,包括canconfig、candump、canecho、cansend、cansequence等。本案例仅使用canecho功能,如需实现其他功能,可自行下载canutils工具包并从中获取对应功能程序源码。操作说明包括使用USB转CAN模块连接评估板CAN接口和PC机USB接口,参照调试工具安装文档安装USB转CAN驱动和ECAN Tools调试软件,双击打开ECAN Tools软件,选择设备类型,然后点击“打开设备”。打开ECAN Tools界面,将案例bin目录下的PL端.bin格式可执行文件复制到评估板文件系统"/lib/firmware/"目录下,并执行命令加载PL端可执行文件。进入评估板文件系统使用文件系统自带的canconfig工具设置波特率,并启动CAN接口。将案例bin目录下的可执行程序tl_can_echo复制到评估板文件系统,执行命令查看程序参数信息,绑定CAN接口并接收由ECAN Tools发出的数据,然后将接收到的数据重新发送出去。

       关键代码包括使用socket监听CAN接口和将从CAN接口接收到的数据重新发送出去。

       tcp_udp_demos案例主要实现客户端(client)与服务端(server)的文本数据相互收发功能。案例包含4个程序,包括tl_tcp_server、tl_tcp_client、tl_udp_server和tl_udp_client。操作说明包括将案例bin目录下的4个可执行程序复制到评估板文件系统,在Ubuntu中执行命令使用OpenSSH登陆评估板文件系统,并在可执行程序所在目录执行命令运行TCP和UDP服务端和客户端程序。程序执行后,客户端将会连接服务端或服务端和客户端程序均在评估板上运行时,可进行本地回环测试。关键代码以TCP通信程序为例,包括注意源码中的数据结构和系统调用的使用。

       Python开发案例包括tl_led_flash和tl_key_test两个简单案例。操作说明包括将案例目录下的脚本文件拷贝到评估板文件系统,并在脚本文件所在目录执行命令查看程序参数信息,执行命令运行脚本程序,即可看到评估底板上的LED闪烁或检测按键事件。关键代码包括查找所有LED设备和控制LED亮灭,以及打开按键设备和监听按键事件。

       以上内容为Linux应用案例开发手册——基于Xilinx Zynq-/工业开发板中的详细开发案例和操作说明。更多关于嵌入式开发的内容分享,欢迎关注Tronlong创龙科技~