UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Observer mxc528169645
Observer
864 次查看
注册日期: ‎06-19-2018

Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

之前阅读ug1236与ug1146 外加ug1144 三个文档,搭建平台,已经成功!

但我的板子上PL端还有1GB DDR3,不综合利用起来实在很浪费!阅读了ug586第一章关于DDR3与DDR2的部分,确实很详细的说明文档,但由于FPGA开发的经验的欠缺,我们还不知道怎么使用!

关于sdsoc搭建平台使用MIG 是否存在类似ug1236这样的快速使用文档,帮助我们快速搭建起平台?

如何还要去过于投入时间研究vivado 环境使用MIG ip核,分析信号、仿真、综合等等,感觉有违sdsoc的设计初衷!

sdsoc初衷就是减少硬件开发的时间投入,让更多软件开发者可以使用Xilinx ZYNQ 7系列,快速推出产品!

不知大神可否 指点迷津呢?帮助我们快速使用MIG呢?

0 项奖励
1 个已接受解答

已接受的解答
Moderator
Moderator
675 次查看
注册日期: ‎05-27-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

Hi @mxc528169645

     第一个example design 在你给定的网址里面的作者已经有所说明。PS的GP口通过AXI_lite配置了AXI_DMA_1,它的数据链是一个回环,只能控制DMA到PL端DDR的读写, 并不能把PS端的数据传送到PL的DDR。总体来说这个方案的PL和PS端的DDR是独立使用的,并不能从PS端对它们进行协调处理。

     后面给出的三种框图的前两种都和example design的问题相同。第三个框图中PL到PS的数据链路通了,但是使用了两个DMA,有冗余没有必要。

     你自己的硬件框图有一个问题AXI_MM2S和AXI_S2MM分别给到了PS和PL的DDR,也就给定了数据方向为单向,是从PS端load到PL的,并不能满足你的设计需求。

     这里有一个大致的方案,如下图:

     

DDR3.png

       从address editor 里面可以看到:DMA可以同时访问两端的DDR

     address.png

         框图里面AXI_FIFO的位置应该就是硬件加速IP核的位置,但是现在的问题在于,创建了这样的硬件平台后,SDSOC并不足够智能到可以将加速算法封装成IP放到这个数据链路的位置。所以说最终的解决方案其一是自己使用Vivado HLS封装加速核构建硬件平台使用传统Vivado嵌入式开发流程,其二是只使用PS端的DDR, 利用SDSOC开发。

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
10 条回复10
Moderator
Moderator
837 次查看
注册日期: ‎05-27-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

Hi @mxc528169645,

      我们有一些相关的应用可以参考来做图像处理,但是没有符合你运用Sdsoc同时调用PL端和PS端的DDR3的情况的Tutorial,可以看你的图像处理数据是从哪一端什么接口进,再确定你的方案。

      如果采用这个方案,需要重新用Vivado 构建硬件平台导出DSA。你可以参考UG1146.Page24里面MIG核使用的基本使用框架,你把里面的软核换成ZYNQ7000硬核,同时参照之前创建的DSA工程添加需要的其他IP。

      另,你用的是哪块开发板?

      Sdsoc虽然减少了对于硬件开发的投入但是仍需要对硬件平台的了解, 因为据流框架还要搭建在底层。可以参考一下UG925,page9的视频处理框架。

     

      mig.png

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Observer mxc528169645
Observer
813 次查看
注册日期: ‎06-19-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

不好意思,大神,这几天到广西出差去了,没及时回复您!

     我现在手上有一块国防科技大学自己做的一块学习板,采用ZYNQ7035芯片。目前我的项目应用打算从PS端的千兆网卡读取相机的图像数据,因为C/C++这块比较熟悉些。PL端我们就是当做外设,做图像处理的加速。

    主要是这个板子PL端有1GB DDR3,不使用感觉浪费,听您的口气,好像没必要同时使用PS端和PL端的DDR,或者您认为数据从PS端进入就只需使用PS端的DDR3,从PL端获取数据,就只需使用PL端的DDR3,您是这个意思嘛?

    如果搭建基于AXI总线的MIG 控制DDR3,sdsoc可否自行生成linux的驱动?驱动需要自行开发嘛?

    我这里的数据处理流:

    step1:PS端千兆网口获取图像数据,图像数据20幁/秒;

    setp2:PL进行一部分图像处理,PS也需进行一部分图像处理;

    step3:驱动PS端相应MIO动作,会把PL端多余的EMIO也加入到PS端控制;

0 项奖励
Observer mxc528169645
Observer
782 次查看
注册日期: ‎06-19-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

QQ图片20180828152623.png

 

参考ug586、ug1146搭建的硬件平台,含MIG,内存扩展1GB;

PFM命令如下:

1)set_property PFM_NAME "xilinx.com:zynq7_board:zynq7_board:1.0" [get_files ./zynq7_board/zynq7_board.srcs/sources_1/bd/zynq7_board/zynq7_board.bd]

 

2)声明时钟:

set_property PFM.CLOCK { \
clk_out1 {id "0" is_default "true" proc_sys_reset "proc_sys_reset_0" } \
clk_out2 {id "1" is_default "false" 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" } \

clk_out5 {id "4" is_default "false" proc_sys_reset "proc_sys_reset_4" } \
} [get_bd_cells /clk_wiz_0]

 

我多添加一个250Mhz的时钟;

 

3)声明接口:

set_property PFM.AXI_PORT { \
M_AXI_GP1 {memport "M_AXI_GP"} \
S_AXI_ACP {memport "S_AXI_ACP" sptag "ACP" memory "processing_system7_0 ACP_DDR_LOWOCM"} \
S_AXI_HP0 {memport "S_AXI_HP" sptag "HP0" memory "processing_system7_0 HP0_DDR_LOWOCM"} \
S_AXI_HP1 {memport "S_AXI_HP" sptag "HP1" memory "processing_system7_0 HP1_DDR_LOWOCM"} \
S_AXI_HP2 {memport "S_AXI_HP" sptag "HP2" memory "processing_system7_0 HP2_DDR_LOWOCM"} \
S_AXI_HP3 {memport "S_AXI_HP" sptag "HP3" memory "processing_system7_0 HP3_DDR_LOWOCM"} \
} [get_bd_cells /processing_system7_0]

 

由于MIG 通过AXI SmartConnet 连接到M_AXI_GP0,按照ug1146的描述,内部逻辑连接不声明,所以我没有声明M_AXI_GP0;

 

4)声明中断:

set intVar []
for {set i 0} {$i < 16} {incr i} {
lappend intVar In$i {}
}
set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_0]

 

得到*.dsa文件后,利用petalinux,创见工程、读取*.hdf文件,配置kernel、roosft、修改设备设备树、编译,这些步骤均是ug1146 page48里描述步骤;

 

完成软件及硬件搭建后,编译了一个官方的矩阵加法与乘法工程示例子,可惜报错了!!!!!

 

root@zynq7035:/mnt# ./nlab1.elf
xlnk_eng_probe ...
uio name xilinx-xlnk-eng.0
xilinx-xlnk-eng xilinx-xlnk-eng.0: physical base : 0x80400000
xilinx-xlnk-eng xilinx-xlnk-eng.0: register range : 0x10000
xilinx-xlnk-eng xilinx-xlnk-eng.0: base remapped to: 0xf09f0000
xilinx-xlnk-eng xilinx-xlnk-eng.0: xilinx-xlnk-eng uio registered
xlnk_eng_probe ...
uio name xilinx-xlnk-eng.1
xilinx-xlnk-eng xilinx-xlnk-eng.1: physical base : 0x80410000
xilinx-xlnk-eng xilinx-xlnk-eng.1: register range : 0x10000
xilinx-xlnk-eng xilinx-xlnk-eng.1: base remapped to: 0xf0a10000
xilinx-xlnk-eng xilinx-xlnk-eng.1: xilinx-xlnk-eng uio registered
xlnk_eng_probe ...
uio name xilinx-xlnk-eng.2
xilinx-xlnk-eng xilinx-xlnk-eng.2: physical base : 0x80420000
xilinx-xlnk-eng xilinx-xlnk-eng.2: register range : 0x10000
xilinx-xlnk-eng xilinx-xlnk-eng.2: base remapped to: 0xf0a30000
xilinx-xlnk-eng xilinx-xlnk-eng.2: xilinx-xlnk-eng uio registered
xlnk_eng_probe ...
uio name xilinx-xlnk-eng.3
xilinx-xlnk-eng xilinx-xlnk-eng.3: physical base : 0x80430000
xilinx-xlnk-eng xilinx-xlnk-eng.3: register range : 0x10000
xilinx-xlnk-eng xilinx-xlnk-eng.3: base remapped to: 0xf0a50000
xilinx-xlnk-eng xilinx-xlnk-eng.3: xilinx-xlnk-eng uio registered
xlnk_eng_probe ...
uio name xilinx-xlnk-eng.4
xilinx-xlnk-eng xilinx-xlnk-eng.4: physical base : 0x83c00000
xilinx-xlnk-eng xilinx-xlnk-eng.4: register range : 0x10000
xilinx-xlnk-eng xilinx-xlnk-eng.4: base remapped to: 0xf0a70000
xilinx-xlnk-eng xilinx-xlnk-eng.4: xilinx-xlnk-eng uio registered
xlnk_eng_probe ...
uio name xilinx-xlnk-eng.5
xilinx-xlnk-eng xilinx-xlnk-eng.5: physical base : 0x83c10000
xilinx-xlnk-eng xilinx-xlnk-eng.5: register range : 0x10000
xilinx-xlnk-eng xilinx-xlnk-eng.5: base remapped to: 0xf0a90000
xilinx-xlnk-eng xilinx-xlnk-eng.5: xilinx-xlnk-eng uio registered
Testing 1 iterations of 32x32 floating point mmultadd...
1
2
ERROR: Sixilinx-xlnk-eng xilinx-xlnk-eng.4: xilinx-xlnk-eng uio unregistered
mple DMA transfer failure accessing address 0xb6f2e000 : {Decodexilinx-xlnk-eng xilinx-xlnk-eng.5: xilinx-xlnk-eng uio unregistered
}
xilinx-xlnk-eng xilinx-xlnk-eng.0: xilinx-xlnk-eng uio unregistered
xilinx-xlnk-eng xilinx-xlnk-eng.1: xilinx-xlnk-eng uio unregistered
xilinx-xlnk-eng xilinx-xlnk-eng.2: xilinx-xlnk-eng uio unregistered
xilinx-xlnk-eng xilinx-xlnk-eng.3: xilinx-xlnk-eng uio unregistered
root@zynq7035:/mnt# free -m
total used free shared buffers cached
Mem: 2022 27 1994 14 0 14
-/+ buffers/cache: 12 2009
Swap: 0 0 0
root@zynq7035:/mnt#

//-----------------------------------------------------------------------------//

报错原因:DMA无法访问地址0xb6f2e000 ;

利用free命令查看,系统内存确实有2GB了,这个情况我搭建的MIG按道理说是成功了,但DMA的这个错误如何解决呢?请各位大神指导,是要添加设备树?还是要配置什么呢?还是我硬件平台搭建有问题?

0 项奖励
Moderator
Moderator
770 次查看
注册日期: ‎05-27-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

Hi @mxc528169645,

    你建立这个工程只是想测试一下如何连接和扩展DDR吗?

    这个硬件平台里面虽然添加了MIG,但是没有添加DMA。这样的硬件平台满足不了你图像处理要求。

    看一下你的Address Editor里面这个无法访问的地址是PL端还是PS端的。

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Observer mxc528169645
Observer
758 次查看
注册日期: ‎06-19-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

是的,大神,我只是想通过MIG扩展1GB内存而已,DMA不是sdsoc自动生成的吗?当我没有使用MIG时,搭建的平台,运行官方的矩阵加法与乘法Demo 都是OK的;

temp.png

Address Editor来看,我看不出来,MIG的DDR3基地址0x4000_0000到0x7FFF_FFFF结束;报错是0xb6f2e000,都超出这个地址,linux系统里好像是虚拟地址再映射到物理地址,我有点搞不清0xb6f2e000是PS端,还是PL端地址;

如果2GB内存有效,0x0000_0000到0x3FFF_FFFF是PS端的1GB DDR3,0x4000_0000到0x7FFF_FFFF是PL端的1GB DDR3;

 

您的建议是,工程里再添加一个DMA IP核 跟MIG建立AXI链接吗?

0 项奖励
Observer mxc528169645
Observer
739 次查看
注册日期: ‎06-19-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

搜索了很多资料,没有完全对应的例子:ZYNQ7+DMA+MIG;暂时只能先放放,用ug1236文档的硬件架构,先实现图像硬件加速了!

此问题先遗留,也许后续能解决;

解决方案估计是:建立MIG与DMA直接的数据通道!!至于如何建立,目前不得而知,希望查看此主题的朋友提些意见!

0 项奖励
Moderator
Moderator
727 次查看
注册日期: ‎05-27-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

Hi @mxc528169645,

     这个问题我们有在跟进,在想如何和你解释这个问题。

     使用UG1236搭建的硬件平台,Sdsoc是可以自动封装硬件加速IP来创建DMA的,但是这个DMA只能通过HP口访问PS端的DDR。MIG连接PL端的DDR通过GP口控制读取,从ZYNQ架构的基本框图来看(如下图),Sdsoc创建的DMA并没有从HP口访问到GP口DDR的数据通路。所以需要自己创建AXI DMA ip,并将AXI interconnect的master一端连接到HP口,另一端连接到与MIG相连的AXI Smartconnect。这样DMA可以协调控制两端的DDR内存,从HP口一起通信。

     我的建议是,如果你的数据处理直接使用PS端的DDR就够用了,可以直接使用官方的DSA,如果不够用了再考虑自己搭建,的确也没有相关的设计参考,对硬件设计不熟悉容易出问题。

zynq.png

    

     

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Observer mxc528169645
Observer
707 次查看
注册日期: ‎06-19-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

大神,感谢您的回复!

既然自己抛出这个主题,从学习的角度讲,自然还是想解决它,我们的确缺乏硬件知识!

https://github.com/bperez77/xilinx_axidma/issues/44

您可以看下这个链接,也是关于MIG和DMA的问题,跟我属于同类问题!此文中也提到建立DMA与MIG的数据通路:

这是这位朋友的硬件图

37609361-388ffe22-2b9d-11e8-986b-e5b105539b73.png

不知道他的DMA和MIG用法是否正确呢?

他叫提出三种方式:

1)第一种

37704426-fd842030-2cf8-11e8-91ee-8157de8c3cce.png

2)第二种:

37704470-2bd75682-2cf9-11e8-8e54-8969c3c21555.png

3)第三种:

37704475-2fe1aca0-2cf9-11e8-8bcb-be56bf72bf7e.png

 

按您的指导“创建AXI DMA ip,并将AXI interconnect的master一端连接到HP口,另一端连接到与MIG相连的AXI Smartconnect。这样DMA可以协调控制两端的DDR内存,从HP口一起通信。

是否使用上述第一种,DMA做一个回环处理呢?

下面是我搭建的硬件:

QQ图片20180830175932.png补充:经过今天的验证,我自己搭建这个平台,看似有DMA到MIG ddr3的通路,运行“矩阵乘法与加法”官方Demo ,DMA依然报错!!看样子没搞对,继续研究!!!

0 项奖励
Moderator
Moderator
676 次查看
注册日期: ‎05-27-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

Hi @mxc528169645

     第一个example design 在你给定的网址里面的作者已经有所说明。PS的GP口通过AXI_lite配置了AXI_DMA_1,它的数据链是一个回环,只能控制DMA到PL端DDR的读写, 并不能把PS端的数据传送到PL的DDR。总体来说这个方案的PL和PS端的DDR是独立使用的,并不能从PS端对它们进行协调处理。

     后面给出的三种框图的前两种都和example design的问题相同。第三个框图中PL到PS的数据链路通了,但是使用了两个DMA,有冗余没有必要。

     你自己的硬件框图有一个问题AXI_MM2S和AXI_S2MM分别给到了PS和PL的DDR,也就给定了数据方向为单向,是从PS端load到PL的,并不能满足你的设计需求。

     这里有一个大致的方案,如下图:

     

DDR3.png

       从address editor 里面可以看到:DMA可以同时访问两端的DDR

     address.png

         框图里面AXI_FIFO的位置应该就是硬件加速IP核的位置,但是现在的问题在于,创建了这样的硬件平台后,SDSOC并不足够智能到可以将加速算法封装成IP放到这个数据链路的位置。所以说最终的解决方案其一是自己使用Vivado HLS封装加速核构建硬件平台使用传统Vivado嵌入式开发流程,其二是只使用PS端的DDR, 利用SDSOC开发。

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
Observer mxc528169645
Observer
531 次查看
注册日期: ‎06-19-2018

回复: Sdsoc 搭建硬件平台+MIG DDR3 控制器

转到解答

       感谢大神的持续关注和讲解,根据您的建议,我们团队目前对于vivado开发硬件的能力极为欠缺,选择您的第二个建议,仅使用PS端的DDR,快速开发产品。后期能力增长,再开尝试vivado和vivada HLS的传统开发模式。

       其实传统开发对于人才布局、知识水平有比较高的要求,所以我们更加期望sdsoc的发展更迅速、更智能化,使用更广泛,sdsoc其实适合更多团队开发产品,而不至于为开发产品产生更多的专业划分和人才需求。

祝您工作顺利!!!

0 项奖励