基于Zynq芯片的SOC设计PPT课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
二、BOOT & configuration 阶段2(Stage 2):这个阶段其实就是用户自己的设计代码了,对应于FSBL ,这一阶段一般称之为SSBL(Second Stage Boot Loader)。 SSBL就是我们平常嵌入式系统开发中的Bootloader,主要负责将操作系统加 载到内存中,如果ARM上仅仅只是运行一个裸跑程序,该部分就可以省略;
[bootloader] zynq_fsbl.elf u-boot.elf [offset = 0x100000, load = 0x3000000] uImage [offset = 0x600000, load = 0x2A00000] devicetree.dtb [offset = 0x620000, load = 0x2000000] uramdisk.image.gz } 导入文件完成后生成mcs下载文件,并执行SDK Menu: Xilinx Tools>Program flash下载 注意:其中offset及load地址需要与zynq-common.h文件中一致
16
二、BOOT & configuration
系统启动的文件及版本信息 u-boot-xlnx-xilinx-v2013.4.zip arm_ramdisk.image.gz linux-xlnx-xilinx-v2013.4.tar.gz device-tree-xilinx-v2014.1
目的文件 u-boot.elf uImage.image.gz uImage devicetree.db
编译u-boot.elf
u-boot主要作进行硬件资源检测,将内核镜像、文件系统以及设备树加载到 相应的内存区域,在编译u-boot 前确保使用的zynq 外设与zynq_zed.h (文件路径:include/configs/zynq_zed.h)文件中的定义 一致, 本设计中选择UART0作为串口,因此需要修改zynq_zed.h文件中: CONFIG_ZYNQ_SERIAL_UART1为CONFIG_ZYNQ_SERIAL_UART0。
个位宽为32,可访问PS的DDR3 控制器、 PS的片上RAM资源和其 它从设备
5
Zynq-7000 系统的互联资源
AXI_ACP: PL到PS的32位宽从AXI接口, PL通过该接口直接连接到SCU中
(SCU的任务就是确保L1、L2和 DDR存储之间的一致性),采用ACP
可访问PS中的每一个Cortex-A9处理器 的高速缓存存储器,而不必担心与 主存储器与主存储器中的数据同步问题 , 该 功能不仅可大幅降低设计负担, 而且还能显著加速处理器与PL之间的 数据传输。
Device controller DDR3、GigE DMA、USB SD、SPI、I2C、UART
4
Zynq-7000 系统的互联资源
AXI_HP: 用于PL的四个高性能、
高带宽主接口,位宽可 配为64或32,可访问 PS的DDR3控制器和 PS的片上RAM资源
AXI_GP: 四个通用接口(两主两从),每
make ARCH=arm
-- 编译
整个编译过程需要几分钟,完成编译后arch/arm/boot/zimage下即为生成的内核。
2、生成uImage
执行如下脚本生成uImage:
./mkimage -A arm -O linux -T kernel -C none -a 3000000 -e 3000040 -n linux-2.6.13 -d zImage
17
二、BOOT & configuration
在编译内核前需要做的工作: 1、设置交叉编译环镜 bash$ export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
bash$ source /usr/Xilinx/SDK/2014.1/settings64.sh
21
二、BOOT & configuration
SD Card启动: 所需文件:zImage、BOOT.BIN、 devicetree.dtb、 uramdisk.image.gz SDK Menu: Xilinx Tools> Create Zynq Boot Image。 在弹出对界面中create new BIF file创建一个bif文件,并导入前面准备的各种文件,如下: the_ROM_image: {
基于zynq的SOC设计Fra bibliotek内容简介
一、基于Zynq的SOC总体结构 二、BOOT & configuration 三、SOC的开发流程
2
一、基于Zynq的SOC总体结构
3
ONF SDN
PS: APU 两个Cortex A9 cpu NEON协处理器 L1=32KB,L2=512KB
Platform dev 256K RAM,128K ROM 定时器、 中断控制器
//image在头结构中的命名
-d ==> use image data from 'datafile' //无头信息的image文件名
-x ==> set XIP (execute in place) //设置执行位置
20
二、BOOT & configuration
FLASH启动: SDK Menu: Xilinx Tools> Create Zynq Boot Image 在弹出对界面中create new BIF file创建一个bif文件,并导入前面准备的各种文件,如下: the_ROM_image: {
bitstream加载:
在系统启动每一阶段均可对于PL文件进行加载 在FSBL阶段加载:
修改bif文件,在zynq_fsbl之后加入bitstream.bit,重新生成mcs或BIN文件, 在SOC上电后执行FSBL时也会在该步骤中加载逻辑文件。 例: the_ROM_image: {
[bootloader] zynq_fsbl.elf bitstream.bit u-boot.elf }
14
二、BOOT & configuration
阶段1(Stage 1):这个阶段由FSBL(First Stage Boot Loader)负责启动过 程。在Zynq中,可以直接利用SDK生成这部分的文件,但是用户可以对该部 分的代码进行修改,满足自己的需要。所以这个阶段的启动代码已经是用户可 以控制的了。 FSBL主要完成几项工作: 根据对子系统的配置 ,完成PS端的初始化 使用bitstream对PL进行配置 加载SSBL或裸跑程序到内存空间 跳转执行SSBL或者裸跑程 序
10
Zynq-7000 interrupt SPIs(shared peripheral interrupts)
11
二、BOOT & configuration
12
二、BOOT & configuration Zynq的启动源: Quad-SPI SD卡, NAND Flash, NOR Flash JTAG
SPIs (shared peripheral interrupts) 共计60个,包括IO外围设备或 PL侧的中断,其中IO外设有44个中断 PL有16个中断
8
Zynq-7000 interrupt PPIs (Private perihperal interrupts)
9
Zynq-7000 interrupt SGIs (softwaregenerated interrupts)
因此需要修改xilinx_zynq_defconfig文件中:
CONFIG_DEBUG_ZYNQ_UART1=y为CONFIG_DEBUG_ZYNQ_UART0=y。
同时需要增加:CONFIG_SPI_SPIDEV=y
1、在bash下执行脚本:
make ARCH=arm xilinx_zynq_defconfig -- 配置内核
-a ==> set load address to 'addr' (hex) //指定image的载入地址
-e ==> set entry point to 'ep' (hex) //内核的入口地址,一般是:image的载入
地址+0x40(信息头的大小)
-n ==> set image name to 'name'
6
Zynq-7000 System address
7
Zynq-7000 interrupt
PPIs (Private perihperal interrupts) 包含5个中断,对每个CPU都属于 专用中断,如CPU定时器、CPU看 门狗监视器及专属PL至CPU中断
SGIs (softwaregenerated interrupts) 每个处理器有16个此类中断,能够 中断一个或两个Zynq Soc的处理器 内核
13
二、BOOT & configuration Zynq的启动过程的三个阶段: 阶段0(Stage 0): 这个阶段也就是Boot ROM阶段,控制整个芯片的初始化过程。Boot ROM 中的代码是固化的,不可修改的,处理器在上电或者热启动时自动执行这部分 代码。 在系统上电复位时,PS采样专用bootstrapping singals引脚电平来决定从什么 方式引导器件。这个引导过程是由一个Cortex A9执行片内 ROM code对 NAND、NOR、QSPI、SD卡与PACP的基本外设控制器进行初始化,使得 ARM可以该问这些外设,并从指这接口加载FSBL到片内执行。
在bash下执行脚本 make zynq_zed_config make
编译完成后即可看到根目录下生成u-boot文件即为所需要的u-boot.elf。
18
二、BOOT & configuration
编译内核uImage:
确保使用的zynq 外设与xilinx_zynq_defconfig(该文件存放路径: arch/arm/configs/xilinx_zynq_defconfig)文件中的定义 一致,本设计中选择UART0作为串口,
uImage
注意:执行该脚本的前提需要编译完成u-boot生成mkimage(/u-boot-xlnx-master/tools/mkimage)
工具。
19
二、BOOT & configuration
首先查看mkimage的命令参数 [root@localhost tools]# ./mkimage Usage: ./mkimage -l image
-O ==> set operating system to 'os' //用于指定操作系统,比如Linux
-T ==> set image type to 'type' //用于指定image类型,比如Kernel
-C ==> set compression type 'comp' //指定压缩类型
23
二、BOOT & configuration
BOOT引导加载stream: 该方式下主要是在SOC进入到boot中引导逻辑文件加载到PL 1、通过boot.bif文件生成ps_system_top.bit.bin the_ROM_image: {
[bootloader]E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\SD_boot\zynq_fsbl.elf E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\SD_boot\ps_system_top.bit E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\SD_boot\u-boot.elf } SDK的XMD中执行如下命令生成ps_system_top.bit.bin文件并copy到SD卡: cmd /C bootgen –image E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\ SD_boot\boot.bif -split bin 2、在系统启动中进入boot,并执行如下命令加载逻辑文件 fatload mmc 0 0x100000 ps_system_top.bit.bin ; fpga load 0 0x100000 0x3DBAFC 注意:在boot中加载时boot必须支持该器件,如果不支持则需要修改boot原代码。 在zynq soc的boot中支持不同逻辑文件格式加载,例如:fpga loadb可直接加载.bit fatload mmc 0 0x100000 ps_system_top.bit ; fpga loadb 0 0x100000 0x3DBAFC
[bootloader] zynq_fsbl.elf u-boot.elf } 导入文件完成后生成BOOT.BIN文件。 SOC上电初始化,进入u-boot,由u-boot加载devicetree.dtb、zImagz、 uramdisk.image.gz
22
二、BOOT & configuration
-l ==> list image header information ./mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file
[:data_file...] image
-A ==> set architecture to 'arch' //用于指定CPU类型,比如ARM
二、BOOT & configuration 阶段2(Stage 2):这个阶段其实就是用户自己的设计代码了,对应于FSBL ,这一阶段一般称之为SSBL(Second Stage Boot Loader)。 SSBL就是我们平常嵌入式系统开发中的Bootloader,主要负责将操作系统加 载到内存中,如果ARM上仅仅只是运行一个裸跑程序,该部分就可以省略;
[bootloader] zynq_fsbl.elf u-boot.elf [offset = 0x100000, load = 0x3000000] uImage [offset = 0x600000, load = 0x2A00000] devicetree.dtb [offset = 0x620000, load = 0x2000000] uramdisk.image.gz } 导入文件完成后生成mcs下载文件,并执行SDK Menu: Xilinx Tools>Program flash下载 注意:其中offset及load地址需要与zynq-common.h文件中一致
16
二、BOOT & configuration
系统启动的文件及版本信息 u-boot-xlnx-xilinx-v2013.4.zip arm_ramdisk.image.gz linux-xlnx-xilinx-v2013.4.tar.gz device-tree-xilinx-v2014.1
目的文件 u-boot.elf uImage.image.gz uImage devicetree.db
编译u-boot.elf
u-boot主要作进行硬件资源检测,将内核镜像、文件系统以及设备树加载到 相应的内存区域,在编译u-boot 前确保使用的zynq 外设与zynq_zed.h (文件路径:include/configs/zynq_zed.h)文件中的定义 一致, 本设计中选择UART0作为串口,因此需要修改zynq_zed.h文件中: CONFIG_ZYNQ_SERIAL_UART1为CONFIG_ZYNQ_SERIAL_UART0。
个位宽为32,可访问PS的DDR3 控制器、 PS的片上RAM资源和其 它从设备
5
Zynq-7000 系统的互联资源
AXI_ACP: PL到PS的32位宽从AXI接口, PL通过该接口直接连接到SCU中
(SCU的任务就是确保L1、L2和 DDR存储之间的一致性),采用ACP
可访问PS中的每一个Cortex-A9处理器 的高速缓存存储器,而不必担心与 主存储器与主存储器中的数据同步问题 , 该 功能不仅可大幅降低设计负担, 而且还能显著加速处理器与PL之间的 数据传输。
Device controller DDR3、GigE DMA、USB SD、SPI、I2C、UART
4
Zynq-7000 系统的互联资源
AXI_HP: 用于PL的四个高性能、
高带宽主接口,位宽可 配为64或32,可访问 PS的DDR3控制器和 PS的片上RAM资源
AXI_GP: 四个通用接口(两主两从),每
make ARCH=arm
-- 编译
整个编译过程需要几分钟,完成编译后arch/arm/boot/zimage下即为生成的内核。
2、生成uImage
执行如下脚本生成uImage:
./mkimage -A arm -O linux -T kernel -C none -a 3000000 -e 3000040 -n linux-2.6.13 -d zImage
17
二、BOOT & configuration
在编译内核前需要做的工作: 1、设置交叉编译环镜 bash$ export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
bash$ source /usr/Xilinx/SDK/2014.1/settings64.sh
21
二、BOOT & configuration
SD Card启动: 所需文件:zImage、BOOT.BIN、 devicetree.dtb、 uramdisk.image.gz SDK Menu: Xilinx Tools> Create Zynq Boot Image。 在弹出对界面中create new BIF file创建一个bif文件,并导入前面准备的各种文件,如下: the_ROM_image: {
基于zynq的SOC设计Fra bibliotek内容简介
一、基于Zynq的SOC总体结构 二、BOOT & configuration 三、SOC的开发流程
2
一、基于Zynq的SOC总体结构
3
ONF SDN
PS: APU 两个Cortex A9 cpu NEON协处理器 L1=32KB,L2=512KB
Platform dev 256K RAM,128K ROM 定时器、 中断控制器
//image在头结构中的命名
-d ==> use image data from 'datafile' //无头信息的image文件名
-x ==> set XIP (execute in place) //设置执行位置
20
二、BOOT & configuration
FLASH启动: SDK Menu: Xilinx Tools> Create Zynq Boot Image 在弹出对界面中create new BIF file创建一个bif文件,并导入前面准备的各种文件,如下: the_ROM_image: {
bitstream加载:
在系统启动每一阶段均可对于PL文件进行加载 在FSBL阶段加载:
修改bif文件,在zynq_fsbl之后加入bitstream.bit,重新生成mcs或BIN文件, 在SOC上电后执行FSBL时也会在该步骤中加载逻辑文件。 例: the_ROM_image: {
[bootloader] zynq_fsbl.elf bitstream.bit u-boot.elf }
14
二、BOOT & configuration
阶段1(Stage 1):这个阶段由FSBL(First Stage Boot Loader)负责启动过 程。在Zynq中,可以直接利用SDK生成这部分的文件,但是用户可以对该部 分的代码进行修改,满足自己的需要。所以这个阶段的启动代码已经是用户可 以控制的了。 FSBL主要完成几项工作: 根据对子系统的配置 ,完成PS端的初始化 使用bitstream对PL进行配置 加载SSBL或裸跑程序到内存空间 跳转执行SSBL或者裸跑程 序
10
Zynq-7000 interrupt SPIs(shared peripheral interrupts)
11
二、BOOT & configuration
12
二、BOOT & configuration Zynq的启动源: Quad-SPI SD卡, NAND Flash, NOR Flash JTAG
SPIs (shared peripheral interrupts) 共计60个,包括IO外围设备或 PL侧的中断,其中IO外设有44个中断 PL有16个中断
8
Zynq-7000 interrupt PPIs (Private perihperal interrupts)
9
Zynq-7000 interrupt SGIs (softwaregenerated interrupts)
因此需要修改xilinx_zynq_defconfig文件中:
CONFIG_DEBUG_ZYNQ_UART1=y为CONFIG_DEBUG_ZYNQ_UART0=y。
同时需要增加:CONFIG_SPI_SPIDEV=y
1、在bash下执行脚本:
make ARCH=arm xilinx_zynq_defconfig -- 配置内核
-a ==> set load address to 'addr' (hex) //指定image的载入地址
-e ==> set entry point to 'ep' (hex) //内核的入口地址,一般是:image的载入
地址+0x40(信息头的大小)
-n ==> set image name to 'name'
6
Zynq-7000 System address
7
Zynq-7000 interrupt
PPIs (Private perihperal interrupts) 包含5个中断,对每个CPU都属于 专用中断,如CPU定时器、CPU看 门狗监视器及专属PL至CPU中断
SGIs (softwaregenerated interrupts) 每个处理器有16个此类中断,能够 中断一个或两个Zynq Soc的处理器 内核
13
二、BOOT & configuration Zynq的启动过程的三个阶段: 阶段0(Stage 0): 这个阶段也就是Boot ROM阶段,控制整个芯片的初始化过程。Boot ROM 中的代码是固化的,不可修改的,处理器在上电或者热启动时自动执行这部分 代码。 在系统上电复位时,PS采样专用bootstrapping singals引脚电平来决定从什么 方式引导器件。这个引导过程是由一个Cortex A9执行片内 ROM code对 NAND、NOR、QSPI、SD卡与PACP的基本外设控制器进行初始化,使得 ARM可以该问这些外设,并从指这接口加载FSBL到片内执行。
在bash下执行脚本 make zynq_zed_config make
编译完成后即可看到根目录下生成u-boot文件即为所需要的u-boot.elf。
18
二、BOOT & configuration
编译内核uImage:
确保使用的zynq 外设与xilinx_zynq_defconfig(该文件存放路径: arch/arm/configs/xilinx_zynq_defconfig)文件中的定义 一致,本设计中选择UART0作为串口,
uImage
注意:执行该脚本的前提需要编译完成u-boot生成mkimage(/u-boot-xlnx-master/tools/mkimage)
工具。
19
二、BOOT & configuration
首先查看mkimage的命令参数 [root@localhost tools]# ./mkimage Usage: ./mkimage -l image
-O ==> set operating system to 'os' //用于指定操作系统,比如Linux
-T ==> set image type to 'type' //用于指定image类型,比如Kernel
-C ==> set compression type 'comp' //指定压缩类型
23
二、BOOT & configuration
BOOT引导加载stream: 该方式下主要是在SOC进入到boot中引导逻辑文件加载到PL 1、通过boot.bif文件生成ps_system_top.bit.bin the_ROM_image: {
[bootloader]E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\SD_boot\zynq_fsbl.elf E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\SD_boot\ps_system_top.bit E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\SD_boot\u-boot.elf } SDK的XMD中执行如下命令生成ps_system_top.bit.bin文件并copy到SD卡: cmd /C bootgen –image E:\SoC_StudyGroup\branch\RA2401_PTP\boot\backup\ SD_boot\boot.bif -split bin 2、在系统启动中进入boot,并执行如下命令加载逻辑文件 fatload mmc 0 0x100000 ps_system_top.bit.bin ; fpga load 0 0x100000 0x3DBAFC 注意:在boot中加载时boot必须支持该器件,如果不支持则需要修改boot原代码。 在zynq soc的boot中支持不同逻辑文件格式加载,例如:fpga loadb可直接加载.bit fatload mmc 0 0x100000 ps_system_top.bit ; fpga loadb 0 0x100000 0x3DBAFC
[bootloader] zynq_fsbl.elf u-boot.elf } 导入文件完成后生成BOOT.BIN文件。 SOC上电初始化,进入u-boot,由u-boot加载devicetree.dtb、zImagz、 uramdisk.image.gz
22
二、BOOT & configuration
-l ==> list image header information ./mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file
[:data_file...] image
-A ==> set architecture to 'arch' //用于指定CPU类型,比如ARM