zynq启动流程分析

合集下载

ZYNQ_嵌入式软件开发

ZYNQ_嵌入式软件开发

Example: Xapp1078 : Linux / Bare-metal AMP Xapp1079 : Bare-metal / Bare-metal AMP More info Refer to:
/Multi-OS+Support+(AMP+%26+Hypervisor)
FSBL工程根据XPS的XML文档选择需要的BSP驱动,并生 成ps7_init.c文件
相关文档: /support/documentation/user_g uides/ug821-zynq-7000-swdev.pdf
Page 8
Zynq-7000 Bootgen and BIF file format
Bootgen
A standalone tool for creating a bootable image suitable for the Zynq7000 AP SoC processor. The program assembles the boot image by prefixing a header block to a list of partitions. Each partition can be optionally encrypted and authenticated.
Page 3
Zynq-7000 开发工具 ---- XPS
XPS 可实现完整 的配置和定制操 作
管理 Zynq-7000 AP SoC 外设 IO 引脚启动配置和 初始化
器件安全、回读引 导和比特流管理 措施 项目专用配置感 知 无需用户掌握具 体硬件知识 利用可展开的软 件图自动构建一 级引导载入程序
Page 13
Zynq-7000 Power Management

zynq的启动方式

zynq的启动方式

Zynq-7000AP SOC器件有效利用了片上CPU来帮忙配置。

在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。

ZYNQ的两种启动模式:从BootROM主动启动,从JTAG被动启动。

ZYNQ的启动配置分多级进行的。

配置至少需要两步,但通常按如下三个阶段进行:阶段0:该阶段简称为BootROM,控制着整个芯片的初始化过程。

放在BootROM中的代码是固化的,不可修改的,处理器核在上电或者热启动时自动执行这部分代码。

阶段1:该阶段的启动加载器(FSBL)也可以由用户代码控制。

阶段2:这阶段通常可以是用户的PS端的设计代码,当然也可以是第二阶段的启动加载器(SSBL),这个阶段可以完全由用户控制,是可选的。

ZYNQ外部启动条件:1、电源要求:在阶段0 BootROM状态时,PS与PL的电源要求如表所示:在阶段1 FSBL时,PS与PL都是必须上电的,因为PL将在这个阶段进行配置,而PS将负责配置的过程。

2、时钟要求:必须满足时钟3、复位要求:主要有两个外部复位源将影响BootROM的执行。

(电源复位信号,系统复位信号)4、启动引脚设置:需要配置好引脚才能正确启动平台。

BootROM1、BootROM的作用:上电复位以后,PS端即开始进行配置。

在不使用JTAG的情况下,ARM将在片上的BootROM中开始执行代码。

BootROM中的代码对NAND、NOR、Quad-SPI、SD与PCAP的基本外设控制器进行初始化,使得ARM核可以访问、使用这些外设。

而DDR等其他外设将在阶段1或者之后进行初始化。

BootROM中的代码还负责加载阶段1的启动镜像。

PS的启动源是由外部模式引脚的高低电平来选择的,也就是指BootROM将根据外部配置引脚的设置来从不同的外部存储中加载阶段1的启动镜像,当然也支持在线性Flash 上直接运行。

需要注意的是PL的配置并不在BootROM中完成,BootROM只为配置PL做好准备。

可扩展处理平台Zynq的启动过程

可扩展处理平台Zynq的启动过程

可扩展处理平台Zynq的启动过程
本文主要介绍zynq启动过程,主要包括BootROM和FSBL等的执行过程。

硬件启动过程
重新上电或POR复位后进行硬件启动过程
扫描启动引脚设置,并存入只读寄存器slcr.BOOT_MODE中
若使能pll,则等到pll输出时钟;若旁路pll,则直接使用ps_clk时钟
更详细硬件启动过程可以参考下图
BootROMBootROM在POR复位后经过硬件启动后自动运行,也可在非POR复位后直接运行(不经过硬件启动),其内容固化在内部ROM中,不能修改,主要初始化MMU和一些系统资源(以使其满足BootROM执行的要求)以及加载FSBL程序段等。

BootROM 在CPU 0执行,而CPU 1执行WFE指令
主要过程如下:
硬件启动后BootROM将初始化MMU、NAND、NOR、QSPI、SD和PCAP等基本外设判断启动设备(决定于硬件启动过程时扫描的启动模式引脚,即寄存器slcr.BOOT_MODE)并搜索boot镜像头信息,各启动模式搜索范围:
Quad-SPI,头16 MB空间搜索
NAND,头128MB空间搜索
NOR,头32MB
SD卡中只加载一次,不会搜索
BootROM会根据启动模式配置MIO,还会根据读取的boot镜像头信息的寄存器初始化参数部分配置时间优化寄存器
从指定启动设备中加载SFBL到OCM(加载时也会读取头部信息确定加密状态,文件长度等,若加密则还需解密后加载到OCM,BootROM头信息都不会加密),另外还支持直接在QSPI或NOR中执行(从头部信息中文件长度为0时,这时就不用加载到OCM了)。

ZYNQ的启动原理和配置

ZYNQ的启动原理和配置

ZYNQ的启动原理和配置启动过程设备配置包含用于初始化和配置ps和pl的所有方法及过程。

在软件控制下,ps内的DevC 提供用于初始化和配置ps和pl的手段和方法,在zynq中提供两个模块用于控制配置过程:BootROM,一个静态存储块器块,当上电复位和暖复位后,有Cortex-A9的CPU执行这个内置程序;设备配置单元:用于控制JTAG调试访问和提供连接到AES、HMAC和PCAP模块的接口,用于实现对芯片内的pl的配置及数据的解密。

在ps的控制下,可以实现安全或非安全的配置所有ps和pl。

通过zynq提供的JTAG接口,用户可以在外部主机的控制下对zynq进行配置,zynq不支持最开始就配置pl的过程。

对zynq的配置过程至少包含两个阶段,但是通常要求3个阶段。

阶段0:该阶段也称为BootROM,该阶段控制初始设备的启动。

BootROM是上电复位或暖复位后,处理器所执行的用户不可修改的代码,该代码已经固化到zynq的BootROM中;阶段1:在该阶段,通常执行第一级启动引导程序。

但是,它也可以是任何用户控制的代码;在该阶段,通常执行用户自己编写的软件程序,但是,也可以是第二级的启动引导程序,该阶段完全是在用户的控制下实现的。

zynq的BootROMBootROM特性:提供3种不同的方法,用于配置PS:两个主模式和一个从模式,即安全、加密的镜像、主模式;非安全的主模式;通过JTAG的非安全从模式;支持4种不同的外部启动源:Quad-SPI Flash、NAND Flash、NOR Flash、SD;支持使用AES-256和HMAC(SHA-256)的PS安全配置;支持Soc调试安全性;从NOR和QSPI芯片内执行配置过程。

ZYNQFLASH+EMMC手动移植LINUX启动

ZYNQFLASH+EMMC手动移植LINUX启动

ZYNQFLASH+EMMC⼿动移植LINUX启动前⾔虽可使⽤Petalinux进⾏移植,简单⽅便,但为了更清楚明⽩的了解整个流程,还是尝试了⼀波⼿动移植。

参考资料流程对于⼿动移植,所需的⽂件为:BOOT.bin(FSBL+fpga_bit⽂件+u_boot.elf)、uImage、devicetree.dtb、uEnv.txt、⽂件系统⽂件放置位置说明:FLASH:BOOT.bin(FSBL+fpga_bit⽂件+u_boot.elf)EMMC:第⼀个分区放置:uImage、devicetree.dtb、uEnv.txt第⼆个分区放置:⽂件系统启动流程为:板⼦设置为QSPI启动模式,FSBL执⾏调u-boot执⾏,u-boot根据uEnv.txt调EMMC分区1中的内核执⾏,内核最后跳到分区⼆中的⽂件系统。

FSBL、bit⽂件、uImage、⽂件系统都可复⽤SD卡移植模式下的内容:参考参考资料第⼀个链接。

本⽂章主要讲述的重点在于:u-boot、设备树、uEnv.txt的更改部分板⼦主要信息说明:板⼦芯⽚:ZYNQ7035,板⼦的调试打印串⼝为PS0,板⼦上有SD卡(SD0)、EMMC(SD1),板⼦上有FLASH。

其他外设不赘述。

u-boot移植说明:NOTE:u-boot xilinx-v2018.3版本的zynq-common.h跟xilinx-v2018.1版本的不⼀样,这⾥检出v2018.1版本使⽤。

主要是CONFIG_EXTRA_ENV_SETTINGS环境变量不⼀致。

默认的如下所⽰:/* Default environment */#ifndef CONFIG_EXTRA_ENV_SETTINGS#define CONFIG_EXTRA_ENV_SETTINGS \"ethaddr=00:0a:35:00:01:22\0" \"kernel_image=uImage\0" \"kernel_load_address=0x2080000\0" \"ramdisk_image=uramdisk.image.gz\0" \"ramdisk_load_address=0x4000000\0" \"devicetree_image=devicetree.dtb\0" \"devicetree_load_address=0x2000000\0" \"bitstream_image=system.bit.bin\0" \"boot_image=BOOT.bin\0" \"loadbit_addr=0x100000\0" \"loadbootenv_addr=0x2000000\0" \"kernel_size=0x500000\0" \"devicetree_size=0x20000\0" \"ramdisk_size=0x5E0000\0" \"boot_size=0xF00000\0" \"fdt_high=0x20000000\0" \"initrd_high=0x20000000\0" \"bootenv=uEnv.txt\0" \"loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0" \"importbootenv=echo Importing environment from SD ...; " \"env import -t ${loadbootenv_addr} $filesize\0" \"sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0" \"preboot=if test $modeboot = sdboot && env run sd_uEnvtxt_existence_test; " \"then if env run loadbootenv; " \"then env run importbootenv; " \"fi; " \"fi; \0" \"mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. && " \"mmcinfo && " \"load mmc 0 ${loadbit_addr} ${bitstream_image} && " \"fpga load 0 ${loadbit_addr} ${filesize}\0" \"norboot=echo Copying Linux from NOR flash to RAM... && " \"cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} && " \"cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} && " \"echo Copying ramdisk... && " \"cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \"sf probe 0 0 0 && " \"sf read ${kernel_load_address} 0x100000 ${kernel_size} && " \"sf read ${devicetree_load_address} 0x600000 ${devicetree_size} && " \"echo Copying ramdisk... && " \"sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"uenvboot=" \"if run loadbootenv; then " \"echo Loaded environment from ${bootenv}; " \"run importbootenv; " \"fi; " \"if test -n $uenvcmd; then " \"echo Running uenvcmd ...; " \"run uenvcmd; " \"fi\0" \"sdboot=if mmcinfo; then " \"run uenvboot; " \"echo Copying Linux from SD to RAM... && " \"load mmc 0 ${kernel_load_address} ${kernel_image} && " \"load mmc 0 ${devicetree_load_address} ${devicetree_image} && " \"load mmc 0 ${ramdisk_load_address} ${ramdisk_image} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; " \"fi\0" \"usbboot=if usb start; then " \"run uenvboot; " \"echo Copying Linux from USB to RAM... && " \"load usb 0 ${kernel_load_address} ${kernel_image} && " \"load usb 0 ${devicetree_load_address} ${devicetree_image} && " \"load usb 0 ${ramdisk_load_address} ${ramdisk_image} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; " \"fi\0" \"nandboot=echo Copying Linux from NAND flash to RAM... && " \"nand read ${kernel_load_address} 0x100000 ${kernel_size} && " \"nand read ${devicetree_load_address} 0x600000 ${devicetree_size} && " \"echo Copying ramdisk... && " \"nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"jtagboot=echo TFTPing Linux to RAM... && " \"tftpboot ${kernel_load_address} ${kernel_image} && " \"tftpboot ${devicetree_load_address} ${devicetree_image} && " \"tftpboot ${ramdisk_load_address} ${ramdisk_image} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_norboot=echo Copying Image from NOR flash to RAM... && " \"cp.b 0xE2100000 0x100000 ${boot_size} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_nandboot=echo Copying Image from NAND flash to RAM... && " \"nand read 0x100000 0x0 ${boot_size} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_qspiboot=echo Copying Image from QSPI flash to RAM... && " \"sf probe 0 0 0 && " \"sf read 0x100000 0x0 ${boot_size} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_sdboot=echo Copying Image from SD to RAM... && " \"load mmc 0 0x100000 ${boot_image} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_jtagboot=echo TFTPing Image to RAM... && " \"tftpboot 0x100000 ${boot_image} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \DFU_ALT_INFO \BOOTENV#endif可以看到其上定义了⼀堆的东西及不同的启动指令。

ZYNQ7000开发平台用户手册说明书

ZYNQ7000开发平台用户手册说明书

文档版本控制目录文档版本控制 (2)一、开发板简介 (6)二、AC7Z020核心板 (8)(一)简介 (8)(二)ZYNQ芯片 (9)(三)DDR3 DRAM (11)(四)QSPI Flash (14)(五)时钟配置 (16)(六)电源 (17)(七)结构图 (18)(八)连接器管脚定义 (19)三、扩展板 (23)(一)简介 (23)(二)CAN通信接口 (24)(三)485通信接口 (24)(四)千兆以太网接口 (25)(五)USB2.0 Host接口 (27)(六)USB转串口 (28)(七)AD输入接口 (29)(八)HDMI输出接口 (30)(九)MIPI摄像头接口(仅AX7Z020使用) (32)(十)SD卡槽 (33)(十一)EEPROM (34)(十二)实时时钟 (34)(十三)温度传感器 (35)(十四)JTAG接口 (36)(十五)用户LED灯 (36)(十六)用户按键 (37)(十七)扩展口 (38)(十八)供电电源 (40)(十九)底板结构图 (41)芯驿电子科技(上海)有限公司 基于XILINX ZYNQ7000开发平台的开发板(型号: AX7Z020B )2022款正式发布了,为了让您对此开发平台可以快速了解,我们编写了此用户手册。

这款ZYNQ7000 FPGA 开发平台采用核心板加扩展板的模式,方便用户对核心板的二次开发利用。

核心板使用XILINX 的Zynq7000 SOC 芯片的解决方案,它采用ARM+FPGA SOC 技术将双核ARM Cortex-A9 和FPGA 可编程逻辑集成在一颗芯片上。

另外核心板上含有2片共512MB 高速DDR3 SDRAM 芯片和1片256Mb 的QSPI FLASH 芯片。

在底板设计上我们为用户扩展了丰富的外围接口,比如2路CAN 通信接口,2路485通信接口,2路XADC 输入接口, 1路千兆以太网接口,1路USB2.0 HOST 接口,1路HDMI输出接口,Uart 通信接口,SD 卡座,40针扩展接口等等。

(完整版)zynq启动流程分析

(完整版)zynq启动流程分析

(完整版)zynq启动流程分析1.纯PL开发,这个和一般的xilinx的FPGA没有很大的区别。

2.纯PS开发,典型的就是helloworld工程,这个看到了网友的有两种方式。

注:这两个方式后面都有相应的实验。

一种是传统的arm的方式,这个可以参考懒兔子博客.还一种就是xilinx方法,这个是生成一个elf文件,这个elf文件包括了硬件配置信息(xmp),和裸跑程序(c文件)。

3。

PS+PL(不跑操作系统)开发,这个可以参考懒兔子博客二,三笔记,生成的elf文件包括了硬件配置信息(xmp),还有裸跑程序(c文件),另外还有一个。

bit文件可以看出和纯PS开发的区别了。

4.PS+PL(跑操作系统)开发,这个就需要BOOT.BIN,设备树,linux内核镜像,文件系统了。

其中BOOT。

BIN是由3部分组成的(boot。

elf,。

bit,.fsbl。

elf),boot.elf这个是由交叉编译环境产生的,相当于ssbl吧,。

bit文件是PL使用产生,fsbl.elf这个就是fsbl吧。

Zynq启动过程简介1。

在器件上电运行后,处理器自动开始Stage-0 Boot,也就是执行片内BootROM中的代码2.BootROM会初始化CPU和一些外设,以便读取下一个启动阶段所需的程序代码,FSBL(First Stage Bootloader).不过这又有一个问题了-—-—之前说到,Zynq支持多种启动设备,BootROM怎么知道从哪个启动设备里去加载FSBL?这就得靠几个特殊的MIO引脚来选择了:BootROM会去读取MIO[2。

8],从而确定启动设备,将选定设备的头192Kbyte内容,也就是FSBL,复制到OCM(On Chip Memory)中,并将控制器交给FSBL。

3,FSBL启动时可以使用整块256Kb的OCM,当FSBL开始运行后,器件就正式由咱自己控制了.Xilinx提供了一份FSBL代码,如果没什么特殊要求,可以直接使用。

ZYNQMPSoc的启动过程

ZYNQMPSoc的启动过程

ZYNQMPSoc的启动过程ZYNQ启动是由ARM引导FPGA,以及用户程序的加载。

预配置阶段Pre-configuration stage1. 通过上电复位(POR),将PMU(平台管理单元/Platform Management Unit)从复位状态唤醒,提供如下操作:o复位低压域LPD寄存器o复位全电源域FPD寄存器o复位PMU的RAMo复位PMU处理器的TLB内存o检查LPD、AUX、专用IO等区域电压o复位CSU、LPD、FPD的内存区2.执行PMU ROM中的预启动代码,以执行复位操作(包括配置安全单元CSU)复位),该阶段结束的标志是CSU复位的释放。

预启动代码进行的初始化操作:•初始化PS Sysmon单元和启动所需要的PLL•清除PMU RAM 和 CSU RAM区域•验证PLL锁•利用PS Sysmon验证LPD、AUX、I/O的范围•清除低压域(LPD)和全电源域(FPD)配置阶段Configuration stageCSU复位后,初始化OC-RAM,将FBSL加载到OC-RAM(on-chip RAM),CSU加载PMU用户固件(PMU FW:firmware)到PMU RAM,若没有则不加载。

在ZYNQ上运行程序的时候,Boot Rom直接固化在硬件中,开发者无法修改。

FSBL(first stage boot loader)是第一阶段的加载程序,经过这个阶段,后面系统才能够运行裸奔程序或者是引导操作系统的u-boot。

用户可以选择用cortex-a53制作启动的FSBL文件,也可以选择用cortex-r5来制作启动的FSBL文件。

处理器开始执行FSBL代码。

FSBL(first-stage boot loader)的作用如下: 1.初始化PS端配置,如:MIO、PLL、DDR、QSPI、SD等。

2.加载PL端程序,即:加载bitstream 3.搬运用户程序到DDR,并跳转执行。

zynq开发版实验软件应用程序编写

zynq开发版实验软件应用程序编写

zynq开发版实验软件应用程序编写平台架构选择Zynq-7000内部有双核ARM Cortex-A9处理器,设计者在开始嵌入式开发前,要先考虑使用非对称多处理(AMP)还是对称多处理(SMP)。

还要考虑是否使用操作系统、或使用哪个操作系统。

1.多处理模式的选择非对称多处理AMP模式下,多处理器系统中的每个处理器可以执行不同的操作系统镜像,但是共享相同的物理内存。

采用不同的操作系统主要是为了优势互补,比如一个处理器想要使用网络服务而使用Linux,另一个处理器可以使用一个轻量级的小型操作系统如FreeROTS,提高效率和实时性。

AMP模式有两个重要问题:系统设备的划分,比如串口、定时器、以太网等。

总的来说,大多数设备必须专用于它们指定的处理器。

中断控制器的设计可以使其被多个处理器共享,但是需要指定一个处理器作为主机,来初始化中断控制器。

处理器间的通信,让不同操作系统更有效率地工作,可以用内部处理器中断、共享内存、消息传递等方法实现。

对称多处理SMP模式下,多处理器系统中的每个处理器共同执行一个单独的操作系统镜像,操作系统的调度程序负责调度每个处理器上的进程。

如果一个操作系统即可满足系统需求,则采用SMP更有效率。

操作系统可以自动地使用多个处理器的处理能力,设计者也可以编程实现:设定一个特定的处理器来执行某个进程。

使用任何可用的处理器来处理中断。

指派一个处理器作为主机,完成系统初始化,启动其它处理器。

2.操作系统的选择如果一个软件系统不需要依赖太多操作系统提供的特性(如网络),那么完全可以在没有操作系统的环境中工作,这就是裸机(Bare-metal)。

操作系统会消耗少量处理器的吞吐量,比裸机也增加了更多的不确定性。

当然随着嵌入式处理速度的不断提高,操作系统的开销已经微乎其微。

某些设计中可能还是无法容忍操作系统的不确定性,或者某些设计者由于系统复杂性不会使用操作系统。

通常可选的操作系统有:Linux:嵌入式设计中最常用的一个开源操作系统,有许多发布版本。

Zynq-7000最小系统设计及无DDR3固化运行方法

Zynq-7000最小系统设计及无DDR3固化运行方法

图1 Zynq-7000最小系统硬件设计功能框图樊稳茹(1985-),女,陕西富平人,本科,工程师。

研究方向:雷达信号处理。

2017年第7期信息与电脑China Computer&Communication软件开发与应用该最小系统PS部分结合用户应用程序用于实现控制功能,PL部分包括UART接口、时序产生、地址译码、片上存储和外设控制等逻辑功能模块。

主要的功能芯片为X7Z045、MT41K256M16HA、MAX3160E、MAX3096、MAX3045、W25Q128、ADG3308等,为了降低硬件成本,在满足使用需求的条件下,该最小系统设计时取消了图1中虚线框中的DDR3存储器。

2 基本启动配置流程分析Zynq是一个可扩展处理平台,简单地说就是有个FPGA 做外设的A9双核处理器,所以它的启动流程与FPGA完全不同,而与ARM处理器类似。

Zynq支持JTAG、NAND、Parallel NOR、QSPI以及SD卡等启动方式。

Zynq有效利用了片上的CPU来帮助配置,在没有外部JTAG的情况下,处理器系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置,内部的启动存储区(BootROM)和芯片配置单元可实现Zynq从BootROM主动启动或者从JTAG被动启动[2]。

与其他XILINX 7系列的器件不同的是,Zynq并不支持从PL端直接进行启动配置,Zynq的启动配置是分多级进行的,配置过程最少需要两步,但通常是按如下三个阶段进行。

阶段0(Stage0):简称BootROM,控制着整个芯片的初始化过程。

该部分代码是不可修改的,处理器核在上电或者热启动时自动执行这部分代码,并对外部的NAND、NOR、SD等外设控制器进行初始化,同时还负责将阶段1的启动镜像(FSBL镜像)加载到OCM(Zynq片上一个256K的RAM,但在FSBL运行前只能使用其中的192K,所以FSBL要小于192K),然后运行FSBL,FSBL镜像来源由板上MIO[5:3]引脚选择的启动方式决定。

Zynq启动流程

Zynq启动流程

Zynq启动流程前⾔Zynq启动流程和ARM处理器类似,PS部分是启动和配置过程的主设备,芯⽚引导必须由处理器驱动,系统上电复位后会读取设备模式引脚来决定从什么设备启动芯⽚。

如下表Boot Devices条⽬所⽰,其中黄⾊代表该条⽬下的默认设置,⽐如Boot Devices默认设置是SD Card,默认从SD卡启动芯⽚下图中的JP7-JP11的5个条线帽就是⽤于设置设备模式引脚电平的启动步骤PS确定好从什么设备启动后,接着的启动过程分为以下三个阶段0. Stage-0 执⾏BootROM代码,不可修改1. Stage-1 执⾏FSBL(first boot loader)代码,⽤户可修改。

如果是裸机程序也可以不需要这个阶段直接跳到下⼀阶段。

2. Stage-2 执⾏⽤户裸机程序或者操作系统的启动引导程序SSBL(second boot loader)关于BootROM:位于Zynq⽚内,功能是初始化L1 cache和基本的总线系统,以及从指定的外部存储器加载Stage-1的FSBL代码到⽚内存储器(OCM)。

但是要使Stage-0之后的代码被Stage-0的BootROM识别,还需要为Stage-0之后的代码(可能是Stage-1的FSBL,也可能是Stage-2的裸机程序,因为没有调⽤BSP函数的裸机程序是可以不需要FSBL的)添加⼀个头部,制作成引导镜像。

可以使⽤SDK的BootGen⼯具为裸机程序elf⽂件创建引导镜像Boot.bin,将其复制到SD卡中,并且设置板⼦从SD卡启动就可以执⾏程序。

使⽤SDK⼯具创建SD卡启动镜像BOOT.BIN= f(FSBL.elf+PL.bit+PS.elf)PL.b it和PS.e lf采⽤中⽣成的PL.bit和PS.elf。

制作F SB L.e lf 新建Zynq FSBL⼯程等待⼯程建⽴完毕,FSBL.elf就在⼯程⽂件夹的Debug⽂件夹下制作B OOT.B I N使⽤SDK的Create Boot Image选择好output路径放置⽣成的BOOT.BIN和output.bif。

详细解读Zynq的三种启动方式(JTAG,SD,QSPI)

详细解读Zynq的三种启动方式(JTAG,SD,QSPI)

详细解读Zynq的三种启动方式(JTAG,SD,QSPI)本文介绍zynq上三种方式启动文件的生成和注意事项,包括只用片上RAM (OCM)和使用DDR3两种情况。

JTAG方式JTAG方式是调试中最常用的方式,在SDK中在Project Explorer窗口工程上右键-Debug As-Debug ConfiguraTIons可以看到以下窗口首次打开左边窗口中Xilinx C/C++ applicaTIon(GDB)下没有子项,这时双击Xilinx C/C++ applicaTIon(GDB)即可新建一个调试;这时右边窗口会自动填充如上图,若没有则手动填入;在右边ApplicaTIon窗口指定要下载调试的.elf文件;在右边STDIO Connection可以指定标准输入输出串口,即printf打印串口,若这里选择开发板上uart的com口,则调试时printf的信息打印到调试时Console窗口,同时也可从Console窗口输入数据,以此将数据通过串口发送到开发板上以上设置完成后点击Debug即可开始调试;若以上在Project Explorer窗口工程上右键-Run As-Run Configurations;配置与此类似,最后点击run即可开始运行,只是不是调试而是直接上板运行。

只用OCM只用OCM指不使用DDR3的方式,与使用DDR3的方式略有不同。

这里不用FSBL来加载PL部分的.bit文件和第二阶段启动程序(裸机程序),而直接用BootROM加载裸机程序到OCM,即将裸机程序当做FSBL来运行,当然还要以下处理才可以:包含进头文件:#include ps7_init.h在裸机程序main函数开始处调用:ps7_init()从design_1_wrapper_hw_platform_1目录复制ps7_init.c和ps7_init.h文件到裸机程序所在的src目录中注意:这里样调用ps7_init()只适用于只用OCM的情况,经测试打开DDR3后再这样调用会在ps7_init()中初始化失败,调试发现在初始化PLL时失败(原因未知)。

Zynq7000从零开始之一

Zynq7000从零开始之一

Zynq7000从零开始之一使用myir的z-turn开发板,做一个从uart打印hello world的实验,只用PS,不用PL部分,程序从SD卡启动,跑在PS的内部RAM.zynq 7000的PS虽然也是CPU,但是开发方法不像普通的CPU 只需要一个SDK就可以了,它还需要vivado硬件设计软件.所以ZYNQ 7000的PS开发需要两个工具,一个是vivado-- 另一个是SDK-- .1. 打开vivado软件-->Create New Project,工程名和目录:2. next->选RTL Project->Add Sources,Add existing IP和Add constraints界面直接点next3. New Parts界面4. 添加IP,在Flow Navigator的IP Integrator下点Create Block DesignCreate Block Design如下,点OK在Diagram界面点击Add IP双击ZYNQ7 Processing System,添加CPU5. 设置CPU在Diagram界面点击Run Block Automation,不做修改,点Finish就可以。

在Diagram界面双击进入设置界面,我们把所有的接口去掉,只留下FIXED_IO.1> PS-PL Configuration->General->Enable Clock Resets->去掉FCLK_RESET0_N2> PS-PL Configuration->GP Master AXI Interface->去掉 MAXI GP0 interface3> Clock Configuration->PL Fabric Clocks->去掉FCLK_CLK04> DDR Congiguration->去掉Enable DDR5> 设置SD和UART引脚MIO Configuration->Bank1 IO Voltage选LVCMOS 1.8V.MIO Configuration->IO Peripherals->选上SD 0, SD 0的引脚配置:MIO Configuration->IO Peripherals->选上UART 1, UARRT 1的引脚配置:6. 点击OK返回Diagram界面, 把DDR接口删掉,配置之后的界面7. 生成设计文件右击system项->Generate Output Products->直接点Generate, 之后会提示文件生成成功.右击system项->Create HDL Wrapper选下面一项,点OK注意:如果重新修改了CPU配置,上面两个步骤一定要重新实行。

Zynq开发流程的捷径SDSoC

Zynq开发流程的捷径SDSoC

Zynq开发流程的捷径SDSoC之前我们已经向大家介绍了全可编程的Zynq SoC平台应用开发所需的一系列神器,如Vivado、Xilinx SDK、PetaLinux等。

那么这是否意味着在Zynq开发的过程中就会是一马平川呢?让我们先来看看一个典型的Zynq SoC开发流程(如图1):开发者首先需要对软硬件进行分区,即确定系统哪些部分放入PL(可编程逻辑)中进行硬件加速,哪些部分在PS(处理器系统)中用软件实现;接下来,要完成软/硬件之间的连接,包括使用怎样的DataMover、PS与PL之间的接口如何配置等;之后要完成配套的软件驱动和应用程序的开发。

整个流程通常需要一个完整团队的通力合作,并不简单。

而且,开发工作本身就是一个探索性的过程,很多情况下上述所有设计工作完成之后人们才发现,系统在吞吐量、延迟或面积等方面还需要进一步的优化,这就意味着软硬件区分硬件架构搭建驱动和应用软件开发整个流程要重新来过。

如此经过多次迭代,才能获得一个令人满意的设计方案。

而因此却可能造成开发周期的不可控,严重拖延TIme-To-Market。

这无疑是一个很大的挑战。

图1,传统的Zynq SoC开发流程那么Zynq开发流程,有没有捷径可走呢?Xilinx给出的答案是:有!这个捷径就是SDSoC。

SDSoC是Xilinx推出的一个基于简便易用的Eclipse集成设计环境(IDE)的工具套件,它支持Zynq-7000全可编程SoC和Zynq UltraScale+ MPSoC,以及MicroBlaze处理器,可以为开发者提供类似嵌入式C/C++/OpenCL 应用的开发体验。

如果感觉上面的描述比较抽象,那就让我们来看看使用SDSoC对Zynq开发流程的影响和改变(如图2)。

应用SDSoC之后,工具可以自动搭建软硬件之间的通讯部分,包括DataMover、软件驱动程序和硬件连接接口,还可以将整个开发过程抽象到C/C++的应用层面,让开发者以C/C++为起点来进行算法开发。

从SD卡启动ZYNQ(裸机)

从SD卡启动ZYNQ(裸机)

从SD卡启动ZYNQ(裸机)从SD卡中启动ZYNQ7020中的linux系统(裸机)看了⼀整的⽂档,就为了从SD卡中启动ZYNQ中的系统,⽹上的资料⼤同⼩异,主要还是⽣成BOOT.bin⽂件(现在先是进⾏裸机的运⾏)。

这个⽂档打算从以下⼏个⽅⾯进⾏说明:⼀、现在将⽹上的⽣成的BOOT.bin⽂件的流程做⼀个总结(或者说是copy过来)⾸先讲⼀下BOOT.bin⽂件的构成:BOOT.bin⽂件=PL部分.bit+FSBL.elf+PS部分.elf⽂件。

(design.bit⽂件就是⽣成的⽐特流⽂件;FSBL.elf⽂件是在Vivado的SDK中⽣成的,下⾯有这部分的介绍;⼯程的.elf⽂件就是在SDK中运⾏程序时建⽴的⽂件)由于上⾯⽤到了FSBL.elf⽂件,所以这⾥要讲解⼀下如何⽣成FSBL.elf⽂件。

打开SDK软件,在菜单栏中依次选择“File——New——Application Project”,出现下⾯的界⾯:,并写⼊FSBL,在Hardware Platform中选择如何圈中的选项(很重要)!再在点击Next,出现如下界⾯,选择zynq FSBL,点击finish,等待编译(⾃动编译)完成即可。

⾄此,FSBL.elf⽂件就已经⽣成完毕了。

将三个⽂件拷贝到⼀个独⽴的⽂件下⾯,为制作BOOT.bin做准备⼯作。

现在制作BOOT.bin所需的⽂件都已经准备完毕了,接下来就来讲解如何利⽤SDK软件来⽣成BOOT.bin⽂件。

步骤如下:依次执⾏xilinx tools---creat biit image,之后出现如下界⾯:在output BIF file path中选择⽣成⽂件的⽬录(这个⽬录可以任意)。

第⼆步,点击add将三个⽂件添加进来。

点击add之后出现如下界⾯,需要注意两点:第⼀点是:三个⽂件的添加顺序必须是FSBL.elf、PL部分.bit、PS部分.elf。

第⼆点是:在添加三个⽂件时FSBL.elf⽂件在下图中的Partitiontype选择bootloader,其余两个⽂件选择datafile。

xilinx-zynq教程1-helloworld

xilinx-zynq教程1-helloworld
本教程不是商业教程只是自己学习时希望记录下来可以反复查看学习以免忘记
xilinx-zynq教程 1-helloworld
zynq-helloworld 本教程不是商业教程,只是自己学习时,希望记录下来,可以反复查看学习,以免忘记。 此次是希望在串口输出helloworld,同时测试DDR,网口,串口 1.打开vivado,新建工程
5.同理,测试网口和DDR 新建网口工程
新建DDR工程,操作步骤和之前一样,不过最后选择的是DRAM模板 基本到这里就完事了
2.创建系统
3.添加外设,并设定参数 添加网口
添加串口 打开IO口 电压设定,bank0是3.3V,bank1是1.8V
层文件 输出bit文件 导出硬件 启动SDK 新建工程
到此,helloworld工程创建完毕,可以采用debug模式,下载到开发板中调试

zynq linux操作基本流程

zynq linux操作基本流程

zynq linux操作基本流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!Zynq SoC启动Linux操作系统的基本流程详解Zynq System-on-Chip (SoC) 是Xilinx公司的一款高度集成的器件,它结合了ARM处理器和可编程逻辑(FPGA)部分,广泛应用于嵌入式系统设计。

在Zynq平台运行SmallRTOS实时操作系统详细步骤

在Zynq平台运行SmallRTOS实时操作系统详细步骤

在Zynq平台运行SmallRTOS实时操作系统详细步

 SmallRTOS是一个源代码开放的、易于移植的、面向深度嵌入式应用的微内核实时操作系统,主要应用领域为工业控制,智能传感器开发,智能终端等。

下面我们逐步演示如何在Zynq平台运行SmallRTOS实时操作系统。


 我们从Vivado导出硬件顶层设计包开始,如下图所示点击菜单File-
>Export->Export Hardware
 Vivado会弹出如下对话框,我们不做任何修改,直接点击OK按钮
 然后通过Vivado启动软件开发套件工具SDK,点击菜单File->Launch SDK
 Vivado会弹出如下提示对话框,采用默认设置,直接点击OK按钮
 此时软件开发套件SDK会启动,并提示正在导入硬件顶层设计包,如下图所示:
 导入完毕,我们在SDK左侧栏可以看到导入的硬件顶层设计包。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.纯PL开发,这个和一般的xilinx的FPGA没有很大的区别。

2.纯PS开发,
典型的就是helloworld工程,这个看到了网友的有两种方式。

注:这两个方式后面都有相应的实验。

一种是传统的arm的方式,这个可以参考懒兔子博客。

还一种就是xilinx方法,这个是生成一个elf文件,这个elf文件包括了硬件配置信息(xmp),和裸跑程序(c文件)。

3.PS+PL(不跑操作系统)开发,这个可以参考懒兔子博客二,三笔记,生成的elf文件包括了硬件配置信息(xmp),还有裸跑程序(c文件),另外还有一个.bit文件可以看出和纯PS 开发的区别了。

4.PS+PL(跑操作系统)开发,这个就需要BOOT.BIN,设备树,linux内核镜像,文件系统了。

其中BOOT.BIN是由3部分组成的(boot.elf,.bit,.fsbl.elf),boot.elf这个是由交叉编译环境产生的,相当于ssbl吧,.bit文件是PL使用产生,fsbl.elf这个就是fsbl吧。

Zynq启动过程简介
1.在器件上电运行后,处理器自动开始Stage-0 Boot,也就是执行片内BootROM中的代码
2.BootROM会初始化CPU和一些外设,以便读取下一个启动阶段所需的程序代码,FSBL(First Stage Bootloader)。

不过这又有一个问题了----之前说到,Zynq支持多种启动设备,BootROM怎么知道从哪个启动设备里去加载FSBL?这就得靠几个特殊的MIO引脚来选择了:
BootROM会去读取MIO[2..8],从而确定启动设备,将选定设备的头192Kbyte内容,也就是FSBL,复制到OCM(On Chip Memory)中,并将控制器交给FSBL。

3,FSBL启动时可以使用整块256Kb的OCM,当FSBL开始运行后,器件就正式由咱自己控制了。

Xilinx提供了一份FSBL代码,如果没什么特殊要求,可以直接使用。

按照手册说明,FSBL应该完成以下几件事。

1). 使用XPS提供的代码,继续初始化PS
2). 将bitstream写入PL(配置FPGA),不过这一步也可以以后再做
3). 将接下来启动用的Second Stage Bootloader(SSBL,一般就是U-Boot一类的东西),或者裸奔程序,复制到内存中
4). 跳到SSBL运行去
4,接下来的步骤就没啥特别了,Uboot开始运行,初始化好Linux启动环境,然后开始运行Linux系统。

注明:由于自己zedboard还没有开始玩,现在的理解和以后的理解可能又不一样。

很多理解粗浅而鄙陋,恳请大家指正,希望大家一起学习进步。

相关文档
最新文档