SDSoC包含了zcu102的SDSoC Platform,该Platform提供了三种运行环境————Standalone,FreeRTOS,Linux。Platform提供的Linux只能用来运行SDSoC编译出来的elf文件,断电之后丢失全部数据,没有图形界面,也不能从板上接口(如USB)获取数据,功能十分有限。为了解决这个问题,我们要重新编译zcu102的内核,使能USB接口等外设以及mali的GPU,并使用Ubuntu的rootfs而非Petalinux产生的rootfs。本Tutorial在2018.2下测试通过。
clk_wiz_0的输出时钟频率设置为75,100,150,200,300,400,600M
在Tcl中输入
set_property PFM_NAME "xilinx.com:zcu102:zcu102:1.0" [get_files zcu102.bd]
set_property PFM.CLOCK { \
clk_out1 {id "0" is_default "false" 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 "true" proc_sys_reset "proc_sys_reset_3" } \
clk_out5 {id "4" is_default "false" proc_sys_reset "proc_sys_reset_4" } \
clk_out6 {id "5" is_default "false" proc_sys_reset "proc_sys_reset_5" } \
clk_out7 {id "6" is_default "false" proc_sys_reset "proc_sys_reset_6" } \
} [get_bd_cells /clk_wiz_0]
set_property PFM.AXI_PORT { \
M_AXI_HPM0_FPD {memport "M_AXI_GP"} \
M_AXI_HPM1_FPD {memport "M_AXI_GP"} \
M_AXI_HPM0_LPD {memport "M_AXI_GP"} \
S_AXI_HPC0_FPD {memport "S_AXI_HPC" sptag "HPC0" memory "ps_e HPC0_DDR_LOW"} \
S_AXI_HPC1_FPD {memport "S_AXI_HPC" sptag "HPC1" memory "ps_e HPC1_DDR_LOW"} \
S_AXI_HP0_FPD {memport "S_AXI_HP" sptag "HP0" memory "ps_e HP0_DDR_LOW"} \
S_AXI_HP1_FPD {memport "S_AXI_HP" sptag "HP1" memory "ps_e HP1_DDR_LOW"} \
S_AXI_HP2_FPD {memport "S_AXI_HP" sptag "HP2" memory "ps_e HP2_DDR_LOW"} \
S_AXI_HP3_FPD {memport "S_AXI_HP" sptag "HP3" memory "ps_e HP3_DDR_LOW"} \
} [get_bd_cells /ps_e]
set intVar []
for {set i 0} {$i < 8} {incr i} {
lappend intVar In$i {}
}
set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_0]
set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_1]
注意get_bd_cells/后面的名称要与BD中的名称对应
生成的hdf文件用于创建Petalinux工程,2017.4之前的Petalinux只能用hdf文件创建工程,2018.1只支持dsa文件,2018.2版本同时支持dsa和hdf文件
###将硬件工程打包成dsa文件
在Tcl中输入
write_dsa –force /zcu102.dsa -include_bit
validate_dsa /zcu102.dsa
$ petalinux-create -t project -s xilinx-zcu102-v2018.2-final.bsp --name zcu102
一定要使用bsp文件创建工程
$ cd zcu102/
将刚才生成的dsa或hdf文件复制到该目录下
$ petalinux-config --get-hw-description ./
导入硬件工程,此时会弹出设置界面,这里需要改一些配置,使得rootfs改为SD卡模式
DTG Settings->Kernel Bootargs->取消Generate boot args automatically,在user set kernel bootargs 输入
earlycon clk_ignore_unused earlyprintk root=/dev/mmcblk0p2 rw rootwait cma=1024M
Image Packaging Configurations->Root filesystem type->SD card
在
# CONFIG_BLK_DEV_INITRD is not set
CONFIG_XILINX_APF=y
CONFIG_XILINX_DMA_APF=y
CONFIG_CMA_SIZE_MBYTES=1024
CONFIG_STAGING=y
# CONFIG_CPU_IDLE is not set
# CONFIG_CPU_FREQ is not set
CONFIG_EDAC_CORTEX_ARM64=y
在
/{
xlnk {
compatible = "xlnx,xlnk-1.0";
};
};
将0001-Fix-for-gtr_sel0-polarity-correct-for-dual-lane-DP.patch复制到与system-user.dtsi同路径,device-tree-generation_%.bbappend改为
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://system-user.dtsi\
file://0001-Fix-for-gtr_sel0-polarity-correct-for-dual-lane-DP.patch"
编译工程
$ petalinux-build
在< path to plnx>/images/linux/路径下可以看到生成的文件,将u-boot.elf, bl31.elf, pmufw.elf, zynqmp_fsbl.elf, 替换掉SDSoC自带的zcu102/sw/a53_linux/boot下的对应文件,注意,zynqmp_fsbl.elf需要改名为fsbl.elf;将image.ub替换掉SDSoC自带的zcu102/sw/a53_linux/a53_linux/image下的对应文件;将Step1产生的.hdf和.bit文件替换掉SDSoC自带的zcu102/sw/a53_linux/a53_linux/prebuilt下的对应文件,注意改名。
欢迎大家关注Xilinx学术合作以及Pynq的官方公众号,里面有许多优质的学习资源等着你哦
希望了解HLS的同学可以关注公众号Xilinx学术合作以及PYNQ中文社区获取最新版《FPGA并行编程-- 以HLS实现信号处理为例》pdf ,关注任一公众号,回复 pp4fpgas 即可获得