精华内容
下载资源
问答
  • SDsoc

    2019-05-29 16:21:38
    本来这是我研一进行的一个项目,后来虽然没有继续做下去,但是xilinx仍然在不断发展在他这方面的优势,已经从原来的ISE进化到vivado,SDK,SG(system generator),再到SDsoc,现在可以说不需要完全懂verilog,嵌入式...

    本来这是我研一进行的一个项目,后来虽然没有继续做下去,但是xilinx仍然在不断发展在他这方面的优势,已经从原来的ISE进化到vivado,SDK,SG(system generator),再到SDsoc,现在可以说不需要完全懂verilog,嵌入式开发人员也足以充分运用起Xilinx的ZYNQ以及PYNQ等系列办卡满足各种业务需求了。

    首先介绍一下什么是SDsoc。
    参考:http://xilinx.eetop.cn/viewnews-2308

    软件定义的概念:
    https://blog.csdn.net/pink878864/article/details/80951070

    基本例程:
    https://www.cnblogs.com/tsfh/p/9184621.html

    SDsoc基本设计流程:
    https://blog.csdn.net/lulugay/article/details/83242883
    https://blog.csdn.net/long_fly/article/details/78815047

    ELF格式文件详细分析:
    https://blog.csdn.net/xuehuafeiwu123/article/details/72963229

    展开全文
  • SDSoC License

    2018-08-05 23:44:23
    2017.4,2018.2亲测SDSoC,Vivado,Vivado HLS可用,不支持SDAccel,不支持视频相关IP
  • SDSoC开发用户手册-SDSoC Environment User Guide,需要的下载
  • SDsoc安装程序

    2017-12-15 17:20:30
    SDsoc安装程序,使用详情见博客: http://blog.csdn.net/long_fly/article/details/78815047
  • SDSoc Environment Tutorial Introduction
  • SDSoC Environment User Guide

    2018-01-11 21:08:57
    SDSoC Environment User Guide
  • Sdsoc优化指南

    2018-12-17 18:51:05
    我觉得一个比较实用的文档,关于Sdsoc优化指令。使用方法和意思。
  • SDSoC实现Sobel滤波器

    2019-07-08 20:42:18
    SDSoC中实现Sobel滤波器,首先用OpenCV将图片加载进来,然后用自己实现的Sobel滤波器对图像进行处理,最后将结果保存起来,建议与https://blog.csdn.net/lulugay/article/details/83305194搭配使用
  • SDSOC简介

    千次阅读 2017-12-11 15:21:35
    1.SDSOC环境将c,c++转化成软件/硬件函数,进而决定这些函数是在PS端还是PL端口执行。我们可以通过SDSOC系统来决定数据量是在软件函数或者硬件函数中处理。 为了达到高性能,每一个硬件函数都在一个独立的线程中...

    1.SDSOC环境将c,c++转化成软件/硬件函数,进而决定这些函数是在PS端还是PL端口执行。我们可以通过SDSOC系统来决定数据量是在软件函数或者硬件函数中处理。

    为了达到高性能,每一个硬件函数都在一个独立的线程中处理。

    2.在SDSOC编译中,如果将某函数替换成硬件函数,那末编译器将调用vivado 中对应设计好的IP核。这就不需要编译器去生成HLS文件。

    3.sdsoc在做逻辑分析会消耗大量的时间,如果工程中你已经有预编译好的文件,可以将其导入,减少分析时间。

    4.在PS端处理的软件函数调用硬件函数,实质是将书据通过协议传输到硬件函数上(PL端),当PL端处理完成后,再将数据传回。



    展开全文
  • SDSoC软硬件协同设计流程系列——2.SDSoC使用

    千次阅读 热门讨论 2018-10-21 16:00:52
    SDSoC使用 初次使用SDSoC 尽管SDSoC支持在Windows主机上开发Linux应用,但是创建SDSoC Platform需要一台Linux主机,本书会在其他部分介绍如何在Ubuntu系统上安装SDSoC。在Windows上安装SDSoC比较简单,因此不做...

    SDSoC使用

    初次使用SDSoC

    尽管SDSoC支持在Windows主机上开发Linux应用,但是创建SDSoC Platform需要一台Linux主机,本书会在其他部分介绍如何在Ubuntu系统上安装SDSoC。在Windows上安装SDSoC比较简单,因此不做介绍。指定SDSoC工作区
    第一次打开SDSoC后会弹出一个界面要求指定工作区,SDx工作区是一个文件夹,用于存储项目,源文件和编译时产生的中间结果。您可以为每个项目定义单独的工作区,或者为不同类型的项目分配工作区。勾选Use this as the default and do not ask again指定当前的文件夹为SDSoC的默认工作区,日后可以在File ->Switch Workspace中更改

    新建SDSoC工程

    新建SDSoC工程
    在Project Explorer的空白处右键New->SDx Project即可新建工程,SDx有三种工程类型:

    • Application Project:一个Software Application,可以将部分函数放进PL部分加速。
    • System Project:包含了多个Application Project以支持不同的应用和硬件加速器。
    • Platform Project:定义SDSoC的软硬件平台。

    在这里我们选择Application Project点击Next,然后指定一个工程名称,在这里我们暂定为lab1,点击Next。下面我们就进入选择Platform的对话框。
    选择SDSoC Platform
    将我们提供的PYNQ的board_file文件夹复制到XILINX_VIVADO/data/boards/board_files路径下,PYNQ的SDSoC Platform复制到XILINX_SDX/platforms/路径下。一个SDSoC Platform包含DSA(Device Support Archive)文件,定义了硬件平台的设计、接口,以及软件平台,包括OS的boot文件以及runtime文件。在编译过程中SDSoC会调用Vivado从dsa文件读取平台信息复现硬件平台,因此需要提供板卡的board_file,后面会介绍如何自己搭建Platform。在这里我们选择PYNQ platform然后点击Next。
    然后进入System Configuration对话框,下面有三个选项。

    • Software Platform:用来选择应用运行在什么操作系统上,是Linux,FreeRTOS还是standalone(裸机),工程使用的是什么类型的代码(C/C++还是OpenCL)。
    • Domain用来选择系统运行在哪个核心上,我们提供的PYNQ Platform搭载了Linux系统,运行在两颗Cortex-A9核心上。有些板卡可能有其他核心,比如ZCU102上搭载的ZU9CG上除了四颗Cortex-A53核心,还有两颗Cortex-R5核心,ZCU102的FreeRTOS系统就运行在两颗R5核心上。
    • Additional Settings:有两个选项,一个是Linux Root File System,后面会讲到这个选项的作用。另一个是Output Type,选择Executable,项目最终会生成一个可执行文件,需要代码中有一个main函数,而选择shared library,项目最终会生成一个.so文件,具体如何使用后面会详细介绍。这里我们选择Executable,点击Next。
      现在进入了Templates对话框,目前PYNQ的Platform并没有提供Example,点击Next,进入默认界面。项目被安排在一系列不同的窗口和编辑器视图中,也称为IDE中的界面。打开SDx工具,如图所示,默认界面上半部分从左至右,分别是项目资源管理器、项目编辑器、大纲,下半部分从左至右,分别是报告,控制台以及目标连接,相信熟悉Eclipse的读者看到这个界面并不陌生。
      SDSoC默认界面

    导入源代码

    在SDSoC中打开工程后,可以将源代码导入到工程中,右键src文件夹,点击Import。Import对话框允许您指定获取文件的来源,包括从压缩包,已经存在的工程,文件系统以及Git文件夹。我们在这里选择从文件系统中导入,点击File System,在From directory一栏输入$XILINX_SDX /samples/mmultadd,注意不要导入description.json和Makefile文件,这两个文件工具可以自动生成。
    从文件系统中导入源代码

    Profiling

    在选择硬件加速函数之前,我们需要大致了解整个算法各部分消耗多少时间,SDSoC工具提供了Profiling工具,可以自动分析算法各部分消耗了多少时间。首先新建一个Application工程命名为profiling,将我们提供的代码导入到src文件夹下,在Debug模式下编译代码。
    将PYNQ与电脑连接在同一个路由器下,并将PYNQ的MicroUSB接口连接到电脑。点击SDx界面右下角的Target Connection->Linux TCF Agent-> Linux Agent [default],弹出Target Connection对话框,Host一栏输入PYNQ的IP地址,点击Test Connection,如果看到Connection Successful对话框则说明连接成功。
    配置Linux TCF
    右键小蜘蛛,选择System Debugger using Debug_Profiling.elf on Linux Agent,点击OK进入Debug模式。
    启动Debug
    使能TCF Profiler,Windows->Show View->Other->Debug->TCF Profiler
    使能TCF Profiler
    点击TCF下绿色三角箭头,弹出TCF Profiler启动界面,勾选Enable stack tracing,点击OK,按F8启动程序
    启动TCF Profiler
    等待程序运行一段时间,可以看到Profiler显示各函数运行的时间:
    TCF Profiler显示各程序运行时间

    选择硬件加速函数

    创建硬件加速SoC的第一项主要任务是确定应用程序的哪些部分适合在硬件中实现,即将这部分代码放在PL中运行将显著提升整体性能,在上一小节我们介绍了如何找到算法中计算量最大的部分。当您已经决定哪个函数放到硬件进行加速之后,有两种方法指定用于硬件加速函数。

    • 方法1
      双击project.sdx文件进入Application Project Settings如下图所示。点击Hardware Func-tion一栏最右侧的橙色闪电按钮,可以显示当前工程中的候选函数(可能被用来硬件加速的函数),按住ctrl键选择madd和mmult两个函数作为硬件加速函数。
      添加硬件加速函数对话框
    • 方法2
      切换硬件/软件
      点击硬件加速函数所在的.cpp文件左侧的小箭头,找到用于硬件加速的函数,右键点击Toggle HW/SW,这一步是切换某函数是放在软件中运行还是硬件中运行。指定硬件加速函数后的用户界面如上图所示。注意,用于硬件加速的函数需要特定的写法,并不是所有函数都可以被指定为硬件加速函数。硬件加速函数应该编写如何并不是本书的主要内容,会在后面简要介绍。这部分内容请参考UG871,UG902以及Xilinx大学计划翻译的HLS手册https://github.com/xupsh/pp4fpgas-cn-hls

    选择硬件加速函数的频率

    选择硬件功能后,还需要选择硬件加速函数和数据传输网络的时钟频率。硬件加速函数需要通过CPU从DDR中读取数据,这项工作由专门的硬件——DMA来完成,因此也要指定这部分的频率。每个平台都有一个或多个由SDSoC Platform开发人员定义的时钟源,在开发SDSoC Plaform的时候会指定一个默认时钟源,但是无论是硬件加速函数还是数据传输网络,都可以自由选择时钟而不是限定为默认时钟,此外硬件加速函数和数据传输网络可以使用不同的时钟频率,这部分内容会在之后介绍。
    选择硬件加速函数和数据传输网络的时钟频率选择硬件加速函数和数据传输网络的时钟频率

    编译并测试

    指定硬件加速函数和它们的运行频率之后我们就可以编译工程了。默认界面左上角可以选择当前的编译模式,Release还是Debug,二者的优化级别不同,我们这里选择Release,注意更改编译模式后要重新添加硬件加速函数。右键lab1文件夹选择build project,或点击图片中的小锤子按钮。编译过程根据电脑配置会持续二十分钟到六十分钟不定。编译的过程中SDSoC首先调用Vivado HLS工具将硬件加速函数中的代码转化成RTL代码并打包成IP核,在Release/_sds/iprepo/repo文件夹中可以看到硬件加速函数生成的HLS IP核。
    硬件加速函数生成的IP核
    然后调用Vivado IP Integrator自动添加DMA模块生成Data motion Network并生成系统的Block Diagram,可以点击Release/_sds/p0/_vpl/ipi/syn/syn.xpr打开Vivado工程,然后Open block diagram查看,不同的SDx生成的Vivado工程路径可能会不同。
    SDSoC 调用Vivado IP Integrator自动生成Block Diagram
    SDSoC会调用Vivado生成比特流,同时自动生成Data motion network的驱动程序,并将生成的bitstream与fsbl.elf,u-boot.elf打包在一起生成BOOT.bin文件。每一次编译工程SDSoC都会完整地进行一遍Vivado HLS->Vivado IPI->Vivado的流程,Vivado HLS正常情况下只要几分钟就可以完成,HLS运行时间过长说明代码编写有问题,整个流程中最费时间的是Vivado综合布局布线生成比特流的过程。
    将sd_card目录下的lab1.elf,BOOT.BIN,image.ub文件拷贝到FAT32的SD卡中。有两种方法连接到PYNQ板卡。将PYNQ的MicroUSB连接到PC,PC会自动安装驱动。然后找到SDx Terminal右侧的“+”,选择合适的端口。需要注意以上操作的顺序:先上电,然后打开串口,波特率保持默认,端口选择COM4。
    连接PYNQ板卡
    启动之后会打印内核启动信息,直到输出PYNQ login,输入用户名root,密码root。
    SDSoC自带的Terminal

    $ mount /dev/mmcblk0p1 /mnt  //进入系统后挂载SD卡
    $ cd /mnt
    $ ./lab1.elf
    

    性能预测模式

    SDSoC完整地编译一次工程少则二十分钟,多则几个小时,因此Xilinx提供了性能预测模式可以让开发者快速地评估系统性能。勾选Estimate performance选项然后点击编译按钮,这个模式下SDSoC只会进行HLS的流程,并不会产生Block Diagram并调用Vivado产生比特流,整个编译过程不会持续超过10分钟。
    勾选Estimate Performance
    编译完成后会弹出一个性能评估报告,包含了资源利用情况以及预测的执行一次硬件加速函数消耗的CPU时钟周期数。
    性能预测报告
    还有一种办法可以得到在CPU上运行程序的实测周期数。设置好TCF Agent后(在10.2.4节有提到)点击上图中的Click Here就会运行lab1.elf文件,得到实测的CPU周期数,并给出性能对比。
    通过Linux TCF Agent得到的性能对比

    分析和优化

    在执行算法优化时需要考虑两个不同的方向:应用程序代码优化和硬件功能优化。大多数应用程序开发人员都熟悉针对CPU优化软件。这通常要求程序员分析算法的复杂性,总体系统性能和数据局部性。有许多方法指南和软件工具来指导开发者定位性能瓶颈,这些技能在优化针对SDSoC环境中的硬件加速函数时同样适用。
    首先,开发者应该分别优化整个工程中每一个函数的性能,在SDSoC环境下进行优化与传统软件开发的最大不同是有一些算法会被放进PL中进行加速,这要求开发者必须考虑到算法的并行性,数据传输,内存使用以及PL的存在。然后,开发者需要指定硬件加速函数,并尽可能地让硬件加速器在数据传输时保持工作,也就是说要尽可能让硬件加速器计算跟通信同时进行。
    SDSoC可以在编译过程中自动生成报告,帮助开发者详细地分析软件应用和硬件加速函数,这些报告在Report视图下可以看到,如下图所示
    报告视图
    双击Data Motion Network Report,我们可以看到Data Motion Network的报告,包含了每个硬件加速函数与PS之间的连接信息,如使用了哪种端口(S_AXI_ACP or S_AXI_HP),哪种Datamover(DMA_SIMPLE or DMA_SG),每次运算的数据搬运量,以及用来存储数据的内存是否连续,这些名词的含义会在后面介绍。
    Data Motion Network报告
    双击HLS Report,可以看到HLS的详细信息,包括资源利用率,时钟频率以及周期数等信息,开发者要根据这些信息来优化设计。需要注意的是这里估算出来的时钟周期数与HLS估算出来的时钟周期数是有差别的。CPU端的时钟周期数=PL端时钟周期数×(CPU频率/PL频率),而且HLS估算数据加载的时间与实际数据传输时间是有区别的,因此Estimate performance里预测的CPU时钟周期数与实际情况会有一些区别,但是整体来看预测结果还是比较准确的,可以作为参考。
    HLS报告

    欢迎大家关注Xilinx学术合作以及Pynq的官方公众号,里面有许多优质的学习资源等着你哦
    在这里插入图片描述
    在这里插入图片描述
    希望了解HLS的同学可以关注公众号Xilinx学术合作以及PYNQ中文社区获取最新版《FPGA并行编程-- 以HLS实现信号处理为例》pdf ,关注任一公众号,回复 pp4fpgas 即可获得

    展开全文
  • SDSoC Platfrom定义了基本的硬件和软件架构以及应用程序的运行环境,本节从硬件和软件两方面,介绍SDSoC Platform如何在SDSoC中被调用然后说明如何搭建自己的SDSoC Platform。一个SDSoC Platform应该包含如下文件: ...

    SDSoC Platfrom定义了基本的硬件和软件架构以及应用程序的运行环境,本节从硬件和软件两方面,介绍SDSoC Platform如何在SDSoC中被调用然后说明如何搭建自己的SDSoC Platform。一个SDSoC Platform应该包含如下文件:

    • 硬件文件夹,里面包含Device Support Archive file,DSA文件定义了Zynq的PL部分, 在编译时SDSoC利用DSA文件包含的信息重新构建硬件工程,并以此为基础舔加算法加速器。
    • 软件文件夹,包含
    1. 系统配置和处理器域,定义了系统启动顺序以及每颗CPU上运行的操作系统
    2. 启动相关文件,如fsbl.elf,u-boot.elf,如果是linux系统还需要提供设备树,内核,ramdisk或image.ub(设备树,内核,ramdisk的集合)启动相关文件,如fsbl.elf,u-boot.elf,如果是linux系统还需要提供设备树,内核,ramdisk或image.ub(设备树,内核,ramdisk的集合)
    3. Prebuild Hardware(可选),包括了比特流,.hdf等文件,如果程序里没有硬件加速函数,SDSoC将跳过调用Vivado生成比特流的步骤直接使用预先生成的文件以加快编译速度。Prebuild Hardware(可选),包括了比特流,.hdf等文件,如果程序里没有硬件加速函数,SDSoC将跳过调用Vivado生成比特流的步骤直接使用预先生成的文件以加快编译速度。
    4. 库的头文件以及静态库(可选)库的头文件以及静态库(可选)
    5. Metadata文件,用来组织上面提到的文件Metadata文件,用来组织上面提到的文件
    6. Sample Application(可选)Sample Application(可选)

    SDSoC Hardware Platform

    在这里插入图片描述
    上图是PYNQ SDSoC Platform硬件部分的基础平台,里面只有系统复位(Processor System Reset)模块和时钟向导(Clocking Wizard)模块。在SDSoC中可以指定硬件加速器的时钟频率,如100M、142M、166M和200M,这些频率并不是凭空产生的,而是在Platform的时钟向导模块中指定的,如果想要其他频率可以在时钟向导中添加。
    在这里插入图片描述
    上图是reVISION 的案例平台zcu102_rv_ss Platform硬件部分的基础平台,除了包含系统复位模块和时钟向导模块之外,还包含了MIPI接口和HDMI接口。zcu102_rv_ss提供了一个光流算法的案例,输入是MIPI摄像头,输出是DisplayPort接口(DP接口是连接到PS上的),在SDSoC中无法编写MIPI接口的控制逻辑,所以这部分逻辑是在创建SDSoC平台时准备好的。所有用到MIPI接口的工程都可以使用该基础平台,使用SDSoC工具我们可以很容易地在该基础平台上实现不同的算法。
    在这里插入图片描述
    最终加载进PL的比特流由图3所示工程生成的(路径:Debug/sds/p0/_vpl/ipi/syn),该工程在图1的基础上添加了若干IP,包括:

    • io:调用HLS产生的算法加速IP。
    • Constant:某些IP的某些接口需要一直为1/0。
    • Adaptor:AXI接口在在direct模式下控制信号以及数据需要通过Adaptor转换再连接到算法加速IP上。
    • AXI Interconnet:Adaptor的AXI接口不能直接与PS的AXI接口相连,需要通过AXI Interconnect转接。

    创建自己的SDSoC Hardware Platform

    1. 打开Vivado IDE并创建一个工程
    • Vivado没有提供PYNQ的Board file,将我们提供的PYNQ board file拷贝到{Xilinx_Vivado}\data\boards\board_files路径下
    • 打开Vivado IDE,在 Quick Start下点击Create Project,点击Next,输入工程名PYNQ和工程路径,点击Next

    在这里插入图片描述

    • Project Type保持默认RTL Project,点击Next,跳过Add Sources和Add Constraints
    • Defualt Part界面下选择PYNQ-Z2
      在这里插入图片描述
    • 点击Next,检查后点击Finish
    1. 创建一个IP Integrator设计
    • 在Flow Navigator –> IP Integrator, 选择Create Block Design.

    • 在Create Block Design对话框中为Block Design指定一个名称,在这里设置为PYNQ
      在这里插入图片描述

    • 在Block Design画布右键选择Add IP

    • 搜索框内输入zynq找到ZYNQ7 Processing System IP

    • 在IP catalog中选择ZYNQ7 Processing System IP,按下回车将其添加到Block Design中。

    在这里插入图片描述

    • 在IP integrator界面下单机Run Block Automation,如下图所示
      在这里插入图片描述

    Run Block Automation对话框打开后如下图所示,这个对话框表示FIXED_IO和DDR接口会被创建,Apply Board Preset选项通用会被勾选。在board file文件夹PYNQ目录下有一个preset.xml文件,里面提供了PS部分的基本配置,如DDR的设置。
    在这里插入图片描述

    • 点击OK,在IP integrator diagram会出现如下的图形
      在这里插入图片描述
    • Running Block Automation 之后Zynq-7000 AP SoC Processing System,注意加载preset之后要检查TTC模块,QSPI模块,UART模块,Eth模块有没有被使能,这些模块是Petalinux正常运行所必需的。
    • 右键Add IP,输入proc sys res找到Processor System Reset,按回车将这些模块添加到Block Diagram中,重复三次该操作,最终在Block Diagram中应该有四个Processor System Reset
    • 相似地,添加Clocking Wizard和Concat IP,以上步骤执行之后Block Diagram应跟下面这张图比较相似

    在这里插入图片描述

    双击Zynq IP打开配置引导界面,在Re-customize IP对话框中执行如下操作

    • PS-PL Configuration-> AXI Non Secure Enablement-> GP Master AXI Interface取消勾选M AXI GP0 interface
      在这里插入图片描述

    • Interrupts->勾选Fabric Interrupts->PL-PS Interrupt Ports,勾选IRQ_F2P[15:0],点击OK退出
      在这里插入图片描述

    • 双击Clocking Wizard进入配置界面,选择Output Clocks选项卡,勾选clk_out2,3,4并按照下图配置频率,这些频率就是最终在SDSoC平台中可以选择的频率。
      在这里插入图片描述

    • 在该页面下向下滑动,将Reset Type设置成Active Low,点击OK关闭该界面。

    • 双击Concat IP,将Number of Ports设置为1,Re-customizing IP之后的Block Diagram应如下图所示。
      在这里插入图片描述

    下面开始手动连线

    • clk_wiz_0/ clk_in1与ZYNQ7 PS/ FCLK_CLK0,clk_wiz_0/clk_out1与proc_sys_reset_0/ slowest_sync_clk相连,以此类推连接所有PSR的slowest。
    • 将ZYNQ7 PS/FCLK_RESET0_N,Clocking Wizard/resetn,所有PSR/ext_reset_in相连
    • 将Clocking Wizard的locked与所有PSR的dcm_locked相连。
    • 将Concat的dout[0:0]与ZYNQ7 PS的IRQ_F2P[0:0]相连。
    • 点击Regenerate Layout按钮重新生成Block Diagram的布局。
      在这里插入图片描述
    • 右键bd文件,点击Generate Output Products-> Synthesis Options->Global,点击Generate
      在这里插入图片描述
      然后右键bd文件,点击Create HDL Wrapper,生成HDL Wrapper。
    1. 设置Platform属性

    完成Vivado设计套件中的硬件平台设计项目后,必须完成添加平台属性(PFM)定义平台名称并配置平台接口如时钟,中断和总线接口。这些属性被设置一次并存储在工程中。平台通常由多个时钟组成。在当前项目中,我们的设计包含四个用Clocking Wizard生成不同的时钟,用户可以在SDSoC中选择要被硬件加速的函数的时钟频率。同理,在SDSoC中被用到的AXI端口也要标注,硬件加速函数会用这些被标注的AXI端口来建立Data motion network。

    在这里插入图片描述
    上图所示的Block Diagram中S_AXI_HP0被两个VDMA占用,那么这个AXI端口就不再可以被SDSoC调用。这些AXI端口在Block Diagram中可能不可见(在该Block Diagram中只能看到S_AXI_HP0),但是只要平台属性里标注好就可以被SDSoC中的硬件加速函数使用。

    • 平台属性(PFM_NAME)必须定义Vendor, Library, Name, and Version (VLNV),在Tcl Console中输入如下指令并按回车,设置SDSoC Hardware Platform的名称。
    set_property PFM_NAME "xilinx.com:PYNQ:PYNQ:1.0" [get_files PYNQ.bd]
    

    PFM_NAME属性按照下面的格式

    <vendor>:<library>:<platform>:<version>
    
    • 用户可以导出平台内的任何时钟源,但是被导出的时钟源要搭配一个Processor System Reset IP。PFM.CLOCK属性可以设为BD cell,外部端口或者外部接口。比如在本设计中时钟源来自Clocking Wizard的四个输出,也可以选择PS的FCLK_CLK0~3作为时钟源。输入如下指令并按回车,设置SDSoC Hardware Platform的时钟。
    set_property PFM.CLOCK {\
    clk_out1 {id "0" is_default "false" proc_sys_reset "proc_sys_reset_0"} \
    clk_out2 {id "1" is_default "true" proc_sys_reset "proc_sys_reset_1" } \
    clk_out3 {id "2" is_default "false" proc_sys_reset "proc_sys_reset_2"} \
    clk_out4 {id "3" is_default "false" proc_sys_reset "proc_sys_reset_3"} \
    } [get_bd_cells /clk_wiz_0]
    
    • 定义AXI端口
    set_property PFM.AXI_PORT { \
    M_AXI_GP0 {memport "M_AXI_GP"} \
    M_AXI_GP1 {memport "M_AXI_GP"} \
    S_AXI_ACP {memport "S_AXI_ACP" sptag "ACP" memory "ps7 ACP_DDR_LOWOCM"} \
    S_AXI_HP0 {memport "S_AXI_HP" sptag "HP0" memory "ps7 HP0_DDR_LOWOCM"} \
    S_AXI_HP1 {memport "S_AXI_HP" sptag "HP1" memory "ps7 HP1_DDR_LOWOCM"} \
    S_AXI_HP2 {memport "S_AXI_HP" sptag "HP2" memory "ps7 HP2_DDR_LOWOCM"} \
    S_AXI_HP3 {memport "S_AXI_HP" sptag "HP3" memory "ps7 HP3_DDR_LOWOCM"} \
    } [get_bd_cells /ps7]
    
    • SDSoC产生的中断需要通过Concat模块转接到Zynq7000系列的F2P_irq端口
    set intVar []
    for {set i 0} {$i < 16} {incr i} {
    lappend intVar In$i {}
    }
    set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_0]
    
    1. 生成HDL设计文件
    • File->Export->Export Hardware勾选include bitstream,点击OK,这一步的目的是生成.hdf文件,后面Petalinux会用到这个文件。
    1. 打包DSA文件
    • 将所有文件打包成DSA文件,在Tcl Console中输入下面指令
    write_dsa –force <path_to_project>/PYNQ.dsa -include_bit
    

    注意,SDSoC Hardware Platform的名称,即PFM_NAME下的要与Vivado工程名,block diagram名以及dsa文件名保持一致以免出现不必要的麻烦,在本教程中所有的名称都是PYNQ。

    • 验证DSA文件的正确.
    validate_dsa <path_to_project>/PYNQ.dsa
    

    SDSoC Software Platform

    Zynq启动时需要的文件包括kernel,device-tree,u-boot和fsbl,如果与PL部分相关,还需要.bit文件,这些文件除了.bit文件都可以由Petalinux生成,其中image.ub文件包含了kernel以及device-tree。

    Petalinux 简介

    PetaLinux 是Xilinx 提供的工具链, 用于生成Linux 内核映像, 根文件系统和ZYNQ 的内核模块, 例如带有可编程硬件的嵌入式系统(用于FPGA 部分中的不同硬件设计)。使用PetaLinux工具链, 我们可以轻松地为ZYNQ PS 构建内核和模块, 而无需使用单独的交叉编译工具。使用PetaLinux 的一个缺点是, 每个PetaLinux 版本都带有特定的Linux 内核版本。例如PetaLinux2017.4 带有4.9 的默认内核版本。赛灵思提供了一种方法来改变Petalinux 使用的默认内核版本, 读者可以通过百度搜索轻松找到它, 在此不赘述。注意:对于特定的硬件设计,PetaLinux 工具可以生成U-Boot 文件, 第一阶段启动加载程序(FSBL)和BOOT.BIN。使用Xilinx SDK 可以完成同样的事情。

    环境要求

    2017.4/2018.2 版本的工具链(包括Vivado,SDSoC,Petalinux)跟之前的版本有很大区别, 因此强烈建议版本与本文保持一致。此外,SDSoC,Vivado,Petalinux必须版本一致,本文在2017.4、2018.2均测试通过。

    • Ubuntu16.04 的PC
    • SD 卡(8GB 或更大)
    • SD 卡读卡器
    • 搭载ZYNQ 系列处理器的板卡, 本文在PYNQ 上测试通过
    • 装有Vivado2018.2的PC,Windows/Linux 均可

    安装Petalinux

    $ sudo apt-get install gawk xvfb chrpath socat autoconf libtool git texinfo zlib1g-dev zlib1g-dev gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g-dev libncurses5-dev libssl-dev zlib1g:i386 –y
    

    安装Petalinux 依赖的库

    $ sudo mkdir -p /opt/pkg/petalinux
    $ cd /opt/pkg/
    $ sudo dpkg-reconfigure bash
    

    UG1144 中提到所用到的/bin/sh 命令都需要是bash, 而Ubuntu 默认的/bin/sh 是dash, 在弹出界面选“否”来禁用dash, 选择bash

    $ sudo chown USERNAME:users petalinux/ -R
    

    USERNAME 替换成Ubuntu 的用户名,Petalinux 不能在root 权限下安装,,所以需要chown

    $ cd <PATH to petalinux-v2017.4-final-installer.run>
    $ ./petalinux-v2017.4-final-installer.run /opt/pkg/petalinux
    

    等待一段时间来到了Agreement 部分, 按Enter 进入协议文本, 按q 退出协议文本, 输入y 同意协议, 进入下一条协议, 若干次之后, 就进入安装部分, 再等待一段时间Petalinux 就安装完成了

    $ source /opt/pkg/petalinux/settings64.sh
    

    每次使用petalinux之前要先设置环境

    使用PetaLinux 为SDSoC Hardware Platform 生成image

    • 按照上一章介绍的方法生成PYNQ 的SDSoC Hardware Platform 的Vivado 工程, 生成bitstream。然后File->Export->Export Hardware, 勾选include bitstream, 在工程目录.sdk 文件夹下可以找到一个.hdf 文件(硬件描述文件)。
    • 创建Petalinux工程
    $ petalinux-create –type project –template zynq –name PYNQ
    

    新建Petalinux 工程, 命名为PYNQ,会自动生成一个名为PYNQ的文件夹

    $ cd PYNQ/
    

    将第一步中.hdf 文件复制到PYNQ 文件夹下

    $ petalinux-config –get-hw-description ./
    

    获取硬件描述文件, 然后会弹出一个图形界面
    在这里插入图片描述

    • 配置system config
      DTG Settings->Kernel Bootargs->generate boot args automatically 取消勾选该选项
      手动将bootargs 设置成
    console=ttyPS0,115200 earlyprintk quiet
    

    • 配置内核
    $ petalinux-config -c kernel
    

    Device Drivers->Generic Driver Options->Size in Mega Bytes(256)
    Device Drivers->Staging drivers (ON)->Xilinx APF Accelerator driver (ON)->Xilinx APF
    DMA engines support (ON)
    保存并退出

    • 手动添加设备树
      打开/project-spec/metauser/recipes-bsp/device-tree/files/system-user.dtsi, 添加如下几行
    /{
    xlnk {
    compatible =“xlnx,xlnk-1.0;
    };
    };
    

    • 编译工程
    $ petalinux-build
    

    编译结束后在images/linux下找到zynq_fsbl.elf, u-boot.elf, image.ub, 这些文件之后会用到。

    SDSoC Platform

    前两节我们已经准备好了搭建自己的SDSoC Platform所需要的文件,下面我们将介绍如何将这些文件组织成一个SDSoC Platform。一个典型的SDSoC Platform文件结构如下
    在这里插入图片描述

    创建自己的SDSoC Platform

    • 新建一个文件夹命名为boot,将上一节生成的zynq_fsbl.elf改名为fsbl.elf,和u-boot.elf文件放到该文件夹下,然后新建一个linux.bif文件,输入以下内容
    /* linux */
    the_ROM_image:
    {
      [bootloader]<linux/boot/fsbl.elf>
      <bitstream>
      <linux/boot/u-boot.elf>
    }
    
    • 打开SDSoC新建一个工程,Project type选择Platform Project,然后找到dsa文件,工程会自动命名为dsa文件的名称
    • 打开该工程
      在这里插入图片描述
      SDSoC Platform Project
    • 点击左下角Define System Configuration,添加以下内容
      在这里插入图片描述
      Define System Configuration

    boot directory里包含了u-boot.elf,fsbl.elf,这两个文件将与SDSoC生成的.bit文件打包在一起生成BOOT.BIN文件。

    • Add Processor Group/Domain
      在这里插入图片描述
      Add Processor Group/Domain

    这一步完成点击Generate Platform和Add to Custom Repositories将使该Platform可以被SDSoC工具找到。至此我们就完成了搭建最基础的SDSoC Platform的流程,下一章将介绍如何将SDSoC应用到实际项目中。

    欢迎大家关注Xilinx学术合作以及Pynq的官方公众号,里面有许多优质的学习资源等着你哦
    在这里插入图片描述
    在这里插入图片描述
    希望了解HLS的同学可以关注公众号Xilinx学术合作以及PYNQ中文社区获取最新版《FPGA并行编程-- 以HLS实现信号处理为例》pdf ,关注任一公众号,回复 pp4fpgas 即可获得

    展开全文
  • sdsoc-platform-development

    2018-12-02 15:06:57
    sdsoc-platform-development
  • SDSoc2018.2.txt

    2020-02-24 11:24:11
    xilinx的开发工具SDSoc2018.2版本网盘地址,大约25G,需要的自己转载,自用OK,比官网下载快很多
  • 教你从0开始对SDSOC硬件环境进行搭建,方便研发工作。
  • SDSoC使用体验

    万次阅读 热门讨论 2015-08-03 01:12:54
    Xilinx 7月20号发布了SDSoC 2015.2软件,这是具有里程碑意义的FPGA(或者更准确说是ARM + FPGA SoC系统)集成开发工具,加快了应用发布的速度。 直接通过网页从官网下载速度超慢而且容易中断,尝试了几次不成功,...
  • 实现过程参见https://blog.csdn.net/lulugay/article/details/83661407 该SDSoC Platform支持Ubuntu系统,USB转网口,DP显示,串口输出
  • SDSoC自带的platform只能完成最基本的工作,DP显示,USB接口统统没有,该SDSoC Platform跟Ubuntu的rootfs一起启动,能够显示输出。
  • SDSoC第一个工程

    2015-08-08 20:43:48
    利用Xilinx SDSoC创建的第一个测试工程,在ZED Board上运行矩阵乘法。编译后会生成SD卡镜像,直接拷贝到SD卡,插入ZED Board,上电,经过boot可以启动Linux。详见我的博客...
  • ug1027-sdsoc-user-guide.pdf

    2019-10-10 15:32:54
    sdsoc生成c callable ip 详解,硬件仿真说明。。。。。
  • PYNQ-sdsoc-v2018.2.zip

    2019-10-30 09:45:05
    适用于PYNQ-Z1 Z2的SDSoC Platform,基于SDSoC2018.2版本,提供了两种类型的操作系统,一种是petalinux构建出来的initramfs的系统,该系统只提供了最基本的功能,无法自行安装库并且掉电后信息全部丢失,另一个系统...
  • SDSoC链接OpenCV+xfOpenCV 图像处理和机器视觉是Zynq系列FPGA常见的应用场景,这部分工作经常用到OpenCV。此外,Xilinx还提供了硬件加速版的OpenCV,二者结合可以极大地提升开发效率。 本文将以zcu104为例介绍如何...
  • SDSOC基础教程(一)

    2021-01-23 12:50:26
    SDSOC基础教程(一) 定制SDSOC platformSDSOC简介软件安装SDSOC平台开发简介新建SDSOC platform新建平台硬件组件新建Vivado工程声明平台接口和属性构建DSA文件 SDSOC简介 SDSoC™ 开发环境可为异构 Zynq® SoC 提供...
  • Xilinx_SDSoC_2017.1_sdx

    2019-04-03 16:19:42
    2017.1版本的SDSoC可以很好地支持Zybo开发板,而高版本的SDSoC则不怎么再支持略显老旧的Zybo开发板了
  • about sdsoc.pdf

    2018-12-18 11:07:32
    发现几个月不看不用居然基本都忘记完了。现将需要使用的部分简略记下来,以后就直接来这里看就会很快。...ug1235主要是介绍SDSOC编码优化方式和方法策略。 一、ug1253 Sdsoc就是一个利用HLS将可综合C/C++...
  • 本bsp文件修改自github.com/Avnet/Ultra96-PYNQ,包含了PYNQ框架所需全部驱动,并且额外添加了XLNK,可以用于构建SDSoC platform。
  • 9.SDSoC 调试技巧

    2020-10-04 18:47:11
    SDSoC 调试技巧 SDSoC整合了HLS、Vivado和SDK三个软件,使得整个硬件加速变得简单,那么整个系统绝对不会显得很简单,这其中必然包括一些有效的调试技巧,下面一一进行介绍。 下面的所有技巧都可以在ug1028文件中...
  • about Sdsoc_examples

    2019-02-01 13:55:33
    网址:https://github.com/Xilinx/SDSoC_Examples/tree/master/cpp/getting_started 一、Array_partion 1:zero_copy--&gt;Which has Direct Memory Interface with DDR and PL(AXI-master),以前以为只有读+写...
  • 基于SDSoC的软硬件协同设计流程简介 Software Define 的概念 近年来“Software Define”软件定义这个词持续火热,全球知名技术研究和咨询公司Gartner早在对2014年最有战略意义的十大技术与趋势做出预测时,便提出...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 370
精华内容 148
关键字:

sdsoc