Xilinx ZYNQ 7000学习笔记一(复位和启动)

这篇具有很好参考价值的文章主要介绍了Xilinx ZYNQ 7000学习笔记一(复位和启动)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、复位系统

参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System

zynq7000复位信号源包括硬件复位、看门狗定时器、JTAG控制器复位信号和软件复位信号。其中,硬件复位引脚由上电复位信号PS_POR_B和系统复位信号PS_SRST_B驱动。在PS中,有3个看门狗定时器可用来产生复位信号;JTAG控制器产生的复位信号可产生系统级复位信号,或者只用于复位PS的调试部分;软件复位信号可用于单独子模块的复位,或者产生系统级的复位信号。

复位系统执行的是三段式的复位序列:上电——清除内存——系统使能,相关完成的上电流程见下图(RAM清除会被填充0)
Xilinx ZYNQ 7000学习笔记一(复位和启动)

复位源和影响域

PS_POR_B:该复位信号复位整个系统,为整个系统的主复位信号,复位当该信号释放后会采样启动模式引脚然后执行内部初始化过程(与PS_SRST_B相比,PS_POR_B复位范围更大,参见上流程图)。
PS_SRST_B:复位包括PL在内的整个系统,需要注意的是系统复位不会重新采样启动模式引脚(参见上流程图)。
系统软件复位:效果同PS_SRST_B引脚(All except debug and persistent registers.The PL must be re-programmed),注意下表中的All except debug and persistent registers.The PL must be re-programmed这句话,这里的persistent registers “持续寄存器”需要留意下,因为这类的持续寄存器包括一个MULTIBOOT_ADDR用于多重启动的。
看门狗定时器复位:看门狗定时器复位是看门狗定时器在启动和超时时在内部产生的。PS中有三个不同的看门狗计时器:一个系统级计时器(SWDT)和两个Arm核心(AWDT0和AWDT1)中各有一个私有定时器。系统级定时器复位信号总是重置整个系统,而私有看门狗定时器可以重置它所在的Arm核心,也可以重置整个系统
安全违规锁定(Secure Violation Lock Down):当检测到安全违规时,整个PS复位并锁定。
调试复位:有两种类型的调试复位起源于调试访问端口(DAP)控制器;调试系统复位和调试复位。
Debug system reset is a command from the Arm DAP which is controlled by JTAG. This causes the system to reset, just like the external system reset.
Debug reset resets certain portions of the SoC debug block including the JTAG logic.
各个复位类型影响域见下图:
Xilinx ZYNQ 7000学习笔记一(复位和启动)持续寄存器(Persistent Registers):
当我们使用PS_POR_B复位信号时,所有的寄存器都会被复位重置。在非POR复位信号(指的是非PS_POR_B复位,比如PS_SRST_B、系统软件复位或看门狗等,参见上表)下有几个寄存器或寄存器的位下会保持,这些寄存器称为持续寄存器,(但是重新上电通过PS_POR_B复位会清零)。
下表是相关的持续寄存器和寄存器位:
Xilinx ZYNQ 7000学习笔记一(复位和启动)扩展:我们看下面BootRom更为详细的流程图(启动流程Figure 3-1画的相对简化了),BootRom代码其实和FSBL加载各个分区的代码逻辑是相同的。上电POR复位后是由于MULTIBOOT_ADDR寄存器为0(上电POR复位后BootRom读取的是存储介质如flash基地址的FSBL加载至OCM中运行),实际上软件逻辑是读取MULTIBOOT_ADDR作为加载的存储介质的基地址偏移。我们实现多重启动的原理是更改MULTIBOOT_ADDR寄存器然后软件复位(红色部分1),由于软件复位不改变MULTIBOOT_ADDR中的值,实现软件复位时加载的是MULTIBOOT_ADDR偏移+储介质如flash基地址的FSBL加载至OCM中运行。(注意到没,我们设计多重启动也就是多个镜像文件,上电POR重启加载的是默认flash基地址的FSBL,当然如果你设置的不是flash基地址,那么存放在flash的位置是32K的整数倍也行,看流程图会自增MULTIBOOT_ADDR(红色部分2),我们看FSBL代码实际上也是一样的逻辑,去读取你存放的镜像文件位置,而当配置完MULTIBOOT_ADDR再软件复位后加载的是你的另外一个镜像的FSBL)

Xilinx ZYNQ 7000学习笔记一(复位和启动)我会在后面专门写一篇关于多重启动的博客

二、启动流程

参考文献:
Zynq-7000 SoC Technical Reference Manual (UG585)-ch6 Boot and Configuration
Zynq-7000 All Programmable SoC Software Developers Guide (UG821)-ch3 Boot and Configuration

1.启动模式

zynq-7000系列支持NAND flash、并行NOR flash、Serial NOR (Quad-SPI)、SD flash以及JTAG作为启动设备。
ZYNQ的启动模式是由外部引脚决定的,5个模式引脚MIO[6:2],参见下图:引脚MIO[6:2]用于配置5种启动模式,引脚MIO[8:7]用于配置所有MIO引脚的输入输出电压。
当PS_POR_B复位信号由低到高变化时,zynq-7000 SOC对下述引脚进行连续3个时钟周期采样。复位采样MIO[6:2]并将采样的模式值保存到系统级控制寄存器SLCR内的BOOT_MODE寄存器内。同时将MIO[8:7]值保存在GPIOB_DRVR_BIAS_CTRL寄存器中(我们查看fsbl代码中确认当前的启动模式就是通过读取BOOT_MODE寄存器来确定不同的启动分支的)Xilinx ZYNQ 7000学习笔记一(复位和启动)从大的启动模式上来讲,ZYNQ有两大类启动模式,分别为从BootRom主动启动和从JTAG被动启动(这里说的主动还是被动就是说是否是CPU自身主动启动的含义),NAND flash、并行NOR flash、Serial NOR (Quad-SPI)、SD flash为主动启动模式。
在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。即借助CPU来完成配置,这也是ZYNQ不同系列的不同之处。

1.1 关于JTAG

仿真模式下:我们用仿真器Run as或者Debug as来运行程序,本质上是通过tcl脚本来初始化PS,通过JTAG方式下载比特流文件,然后下载elf文件,然后用JTAG收发信息进行在线调试。

2.启动过程

对zynq-7000的启动过程至少包含两个阶段,通常要求3个阶段(分为两个必选阶段和一个可选阶段)。
阶段0:BootROM,简单来说就是固化到SOC的BootRom中的处理器执行的用户不可更改的代码,该阶段的作用是配置ARM处理器和必要的外设如NAND、 NOR、 SD卡等基本外设,然后从启动设备BOOTROM把FSBL代码复制到OCM中,其中从FSBL加载到OCM的代码在192KB以内。BootROM此过程并不会配置和初始化PL,也**不会使能DDR(DDR是在阶段1或者之后进行初始化)**和SCU。最后一步,跳转到OCM启动地址至此,BootROM任务完成。
BootRom在非加密模式下简化逻辑流程见下图:
Xilinx ZYNQ 7000学习笔记一(复位和启动)
注意1:上电后,BOOTROM负责启动CPU1的代码,当上电复位后,BootROM使得CPU1处于复位状态,并且禁止所有东西,并通过修改寄存器使得CPU1处于WFE状态。(这里我是有疑问的,由于BootRom代码我们不可见,关于手册上这段话按照流程如上是没有这个执行操作的,不过我们查看FSBL启动代码确实知道FSBL如果是core0工程配置启动会确实会将CPU1置为WFE状态,是不是手册中将BootRom和FSBL代码在OCM中的执行混为一谈了,我的理解是BoorRom加载FSBL到OCM并执行跳转后BootRom就已经完成任务了)
注意2:OCM地址范围0000_0000 to 0003_FFFF,即OCM中的阶段运行才是有效0地址(FSBL开始运行),而BootROM运行并不在有效地址范围内。

阶段1:FSBL(First Stage Bootloader ),OCM中的FSBL程序开始运行,在FSBL开始执行后,OCM整个256K才全部可用。(FSBL引导代码可以在用户控制之下,被称为用户引导代码)。FSBL可以在SDK中配置生成。需要注意的是,由于PS可以完全独立于PL独立运行,FSBL是否配置PL是非强制的。如果提供了FPGA的比特流文件,则FPGA可完成PL的配置.当然您可以自定义FSBL引导代码,以使用其他PS外设(如以太网、USB或STDIO)来引导或配置PL(比特流文件)。FSBL代码通常存储在flash中,也可以通过JTAG下载到芯片中。
后续博客分析裸核FSBL代码会知道FSBL会将镜像文件中各个分区文件加载到DDR(FPGA的bit文件是临时使用DDR然后通过PACP桥接接口启动FPGA配置),最后一步执行所有PS分区的第一个作为跳转地址(一般我们只有一个PS分区可执行文件)执行跳转
如果不存在操作系统,则FSBL执行完毕之后会把相应裸机环境中的代码加载到DDR内存中并跳转启动。

阶段2:(可选)在这个阶段,通常执行用户自己编写的软件程序。当然也可以是第二级的启动引导程序(second stage boot loader,SSBL)。该阶段是完全在用户的控制下实现。
FSBL的作用:
1)使用Xilinx提供的硬件配置工具(Vivado中的配置)对PS配置数据进行初始化。具体而言
使用Zynq-7000 AP SoC配置界面,Xilinx硬件配置工具生成用于初始化DDR、MIO和SLCR寄存器的代码。在工程文件夹下,需要关注的文件的有:
a:ps7_init.c和ps7_init.h,用于初始化CLK、DDR和MIO。(依据Vivado中的配置,完成PS端的初始化
b:ps7_init.tcl脚本文件,功能和ps7_init.c实现相同。是用来我们通过SDK进行debug是代替FSBL 进行初始化操作的。这样debug时使用该文件将应用程序加载到DDR并进行调试,不需要运行FSBL。(这就是使用SDK debug配置中initization file是ps7_init.tcl原因)
c:Ps7_init.html,它描述初始化数据。
Xilinx ZYNQ 7000学习笔记一(复位和启动)2)配置PL使用bitstream文件(假如提供)
3)加载裸核应用程序或者第二级引导程序到DDR中。
4)跳转到第二阶段引导加载程序或裸机应用程序。

注意:在启动(跳转)第二阶段引导加载程序或裸机应用程序之前,FSBL会失能L1 指令cache和数据cache。失能MMU,FSBL的初始化顺序请参见SDK自带的FSBL代码
FSBL流程示例见下图
Xilinx ZYNQ 7000学习笔记一(复位和启动)

三、创建镜像文件

您使用Bootgen程序将FSBL、bitsteam、应用程序文件拼接在一起。SDK有一个创建引导映像向导选项,如下图所示,用于添加分区镜像并创建一个可引导镜像(BOOT.BIN文件),然后进行烧写flash运行。
Xilinx ZYNQ 7000学习笔记一(复位和启动)总结:**在flash中运行的镜像文件是将FSBL、bitsteam、应用程序一起打包生成的。关于镜像文件的顺序必须是首先FSBL、然后bitsteam(可选,只有在使用PL才需要)、然后应用elf文件。由于FSBL不重映射DDR;

查看内存地址空间分配,低于1Mb的DDR不能被使用(应用程序ELF的执行地址必须大于1Mb)**
Xilinx ZYNQ 7000学习笔记一(复位和启动)

注意:bit文件只用来配置PL端,FSPL只是用来配置PS端,划分是很独立的。硬件配置FPGA时对PS端(如DDR和flash)和PL端会分别在FSBL和bit文件中,不会混合在一起

下一节会对fsbl的代码进行下分析。文章来源地址https://www.toymoban.com/news/detail-461302.html

到了这里,关于Xilinx ZYNQ 7000学习笔记一(复位和启动)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持

    Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持 没玩过图像缩放和视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用Xilinx Zynq7000系列FPGA Zynq7020实现HLS图像缩放+视频拼接,输入视频源采用

    2024年02月04日
    浏览(42)
  • FPGA解码MIPI视频:Xilinx Zynq7000中端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

    FPGA解码MIPI视频:Xilinx Zynq7000高端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端

    2024年02月22日
    浏览(30)
  • Xilinx Zynq-7000系列XC7Z035/XC7Z045高性能SoC处理器评估板PS端ETH RJ45接口

    (数据手册见Datasheet目录) ZYNQ7035 PS端ETH RJ45接口 评估板XQ6657Z35-EVM ,ZYNQ XC7Z035/45的PS端 引出了1路千兆网口,其引脚定义如下图:

    2024年02月12日
    浏览(32)
  • zynq7000学习(1)——vivado环境下PL配置

    一、新建工程:       现开发板型号为xc7z100ffg900-2  选择芯片 (选择芯片7100的话,就输入xc7z100  后面的-1和-2是速度等级), 更改项目名为system 。 Create Block Design (创建模块化的设计)——设置设计名称为system。     这时会出现design窗口和source窗口、画布窗口,source中出

    2024年02月13日
    浏览(44)
  • zynq7000系列芯片介绍

    ZYNQ从架构上可以划分为两大模块,一个是PS(处理器系统),另一个是PL(可编程逻辑) PS由APU、内存接口、IO外设、互连线4大模块组成。 1、APU(Application Processor Unit)应用处理单元 即PS【可编程逻辑里面最最核心的东西】,它由两个双核心的Cortex-ARM A9、一些缓存和存储组成

    2024年02月06日
    浏览(39)
  • XILINX Zynq UltraScale+ MPSoC 在 4K 视频图像处理和会议系统的应用

        赛灵思 Zynq UltraScale+™ MPSoC EV 器件的 4K 视频处理功能。EV 器件具有继承的多标准视频编解码器,能够以 60帧/秒 的速度同步编码和解码。       Arm 四核 Cortex-A53 核以及集成的定制化的视频处理引擎,ZU7EV 器件可以作为多媒体应用方案的主控。        ZCU106 评估套件可作

    2024年02月01日
    浏览(35)
  • ZYNQ7000 SPI LCD与Petalinux

    ZYNQ内部集成两个ARM Cortex A9核心,Xilinx也推出了Petalinux工具,与Vidado搭配可以方便地完成Linux的uboot、kernel、rootfs部署。 开发板上集成了HDMI,但是需要在FPGA中实现逻辑,但是实现之后占用了7010快一半的资源,多少有点离谱,而且HDMI还是不方便,所以就用linux内核中的fbtft驱动

    2024年02月10日
    浏览(27)
  • zynq板上PS端给PL端复位

    最近接触zynq板-zcu104,记录一些实验笔记。 LED闪烁 在vivado中新建一个工程,命名为led-test。添加top.v文件。 其中,top模块接入zcu104开发板的clk_300_p/n信号,通过clock wizard转换为单端始终clock,接入到led闪烁模块led.v 其中,led模块通过一个24bit的计数器,经过相等间隔厚,让led灯

    2024年02月11日
    浏览(33)
  • zynq的PL向PS提供时钟和复位

    最近买了一块矿卡蚂蚁T9+,它的资源比EBAZ4205丰富。 需要矿卡资料包的朋友可以从这下载。里面包含蚂蚁T9+和EBAZ4205原理图和几个EBAZ4205例程,还有一些相关的pdf文档。 link 首先从fpga学起,可惜PL没有焊晶振,只好从PS端引,下面以点灯为例。 打开vivado,工具栏file -- project -

    2024年02月15日
    浏览(35)
  • Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位

    目录  概要  Xilinx复位准则 全局复位主要由以下三种方式实现 高时钟频率下的复位时序全局复位对时序的要求真的很关键吗? 独热码状态机的复位        FPGA配置 Xilinx白皮书WP272《Get Smart About Reset: Think Local, Not Global》详细讲述了FPGA的全局复位。在数字系统设计中,我们

    2024年03月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包