当前位置: 首页 > news >正文

ZYNQ学习记录FPGA(六)程序固化Vivado+Vitis

一、前言

        在ZYNQ的开发过程中,我们可以把程序存储在非易失性存储器中,在上电或者复位时让程序自动运行,防止掉电后程序丢失。下面通过对ZYNQ系统的启动流程及其每一步所要做的工作的介绍,来反推固化程序到非易失性存储器中所需要的文件。

1.1 非易失性存储器

        非易失性存储器(Non-Volatile Memory, NVM) 是一种在断电后仍能保持其存储内容的存储器类型。与易失性存储器(如RAM)不同,非易失性存储器即使在电源关闭后,也不会丢失数据。

         非易失性存储器有闪存(Flash Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)、FRAM(Ferroelectric RAM)、MRAM(Magnetoresistive RAM)、ROM(Read-Only Memory)、SRAM(Static RAM)、硬盘(HDD)、固态硬盘(SSD)等,这些存储器在嵌入式系统、计算机、消费电子等领域中得到了广泛应用。下面对这些存储器进行简单的介绍:

        ① 闪存(Flash Memory):

              闪存基于半导体技术,分为NAND Flash和NOR Flash。NAND Flash写入速度快读取速度慢,适用于大容量的存储,比如USB驱动器、SSD和手机存储都属于NAND Flash;NOR Flash写入速度慢,读取速度快, 适用于存储代码如嵌入式系统的启动程序。

        ② EEPROM(Electrially Erasable Programmable Read-Only Memory):

                EEPROM是一种可以电气擦除和编程的只读存储器,支持字节级的读写,适合存储配置参数和少量的关键数据。

        ③ FRAM(Ferroelectric RAM)

               FRAM基于铁电材料,可以像普通RAM一样高速读写,且具备非易失性。FRAM具有高速度、低功耗、耐用、无需电荷存储、快速写入的独特的优势,这些优势特别表现在速度、耐用性和低功耗方面。

                优点:FRAM在读取和写入数据时消耗的功率比传统的DRAM和Flash存储器低,这使得它特别适合用于低功耗应用;FRAM的读写速度非常快,比Flash快得多,接近或超过DRAM的速度;FRAM具有较高的耐用性,能够承受比Flash存储更多的写入/擦除周期(Flash存储大约能够承受10,000到100,000次写入,而FRAM可达到数十亿次写入);FRAM不依赖于电荷的存储和读取,因此它不容易受到静电放电(ESD)或电磁干扰(EMI)的影响;

                缺点:目前FRAM的存储密度较低,虽然随着技术的进步有所改善,但相比于DRAM和Flash,FRAM的存储容量仍然比较有限;由于其使用特殊材料和制造过程,FRAM的成本相对较高,尤其是在大规模生产时。这也限制了它在某些应用中的普及;生产FRAM的技术要求较高,需要精确控制铁电材料的特性,这使得它在某些领域的应用还不够广泛。

        ④ MRAM(Magnetoresistive RAM)

             MRAM基于磁性材料,通过改变磁场方向来存储数据,通过测量电流的阻抗来判断数据位的状态。MRAM的读写速度非常快,接近于SRAM(静态随机存取存储器)的速度。在耐用性上MRAM不受擦写次数限制(耐用性最好)。

        ⑤ ROM(Read-Only Memory)

        ROM是只读存储器,数据在制造时就已经写入,一般不允许修改,常用于存储系统启动代码。 有些ROM是不可编程的,而有些则可以通过特定的方式编程(如EPROM和EEPROM)。

1.2 ZYNQ SoC 的启动和配置过程

        在 ZYNQ SoC 的启动和配置过程中,既需要 PS 的配置信息,又需要 PL 的配置信息。PS和PL的配置信息分别依赖BIT文件和ELF文件:BIT文件用于配置PL,定义PL的行为;ELF文件是运行在PS中的程序。

        ZYNQ SoC的启动顺序如下:上电复位->BootROM引导ZYNQ系统的启动过程->FSBL(First Stage Boot Loader)引导加载程序->完成启动,使用ZYNQ系统。

        ① BootROM:

                BootROM是芯片启动时执行的内置固件,位于处理器的片上存储器中。BootROM的主要作用是引导Zynq系统的启动过程,它在设备上电或复位后,首先执行并帮助系统完成初始化工作,直到操作系统或用户自定义应用程序启动。

                BootROM承担以下几项重要职责:执行芯片内部的硬件初始化、检测外部存储介质、确定设备启动顺序、加载引导程序、加载操作系统和文件系统、配置FPGA逻辑(必须完成前面步骤才能执行这一步)、处理异常。

        ② FSBL(First Stage Boot Loader):

                FSBL是BootROM加载后的第一个可执行程序(由设计者所创建),负责系统的进一步初始化和配置,最终加载更复杂的引导程序(如U-Boot)或操作系统(如Linux)。FSBL位于启动链的第一阶段,是硬件和软件之间的桥梁。

                FSBL的主要功能如下:

                1)硬件初始化:包含初始化系统时钟、初始化处理器外设、配置DDR等步骤;

                2)加载FPGA配置:通常包含从存储介质中读取FPGA配置(bit文件),并加载到FPGA逻辑门中等步骤;

                3)从存储介质加载引导程序:包含确定启动源(SD卡、QSPI闪存、NAND闪存等)、加载引导程序并传递控制权到引导程序、启动操作系统等步骤;

                4)环境参数与引导参数传递:包含内存布局、通过设备树传递硬件信息到操作系统等步骤。

1.3 小结

        ZYNQ Soc的启动配置过程有BootBOM和FSBL两个关键步骤,其中BootBOM由一个非易失性存储器组成,根据上电后自动加载BootBOM中的文件完成对系统启动的引导,FSBL则是由设计者所创建的用于引导加载程序到PS和PL。

二、Vivado+Vitis固化程序

1.创建ZYNQIP核:

        1)点击Create Block Design直接点击OK;

        2)点击+号添加ZYNQIP核:

2.配置ZYNQIP核:

双击打开IP配置界面后执行下面操作:

        1)关闭无用的引脚:

                ①关闭时钟复位脚:PS-PL->General->Enable Clock Resets

                 ②关闭AXI总线引脚:PS-PL->AXl Non Secure Enablement->GP Master AXl Interface

                ③关闭PL时钟(时钟使用开发板提供的外部晶振) :Clock Configuration->PL Fabric Clocks

        2)打开和配置IO口:

                ①打开QSPI引脚和SD卡连接(需要使用SD卡存储程序时)的引脚:Peripheral lO Pins

                ②打开并配置DDR(根据开发板或ZYNQ芯片所支持的DDR型号进行配置,一般配置红线勾画的三个参数即可):DDR Configuration

         3)点击OK完成配置生成IP核:

        4)点击左上角Run Block Automation自动配置IP核的外部连线:

3.添加模块文件(.v)

        将顶层文件以及相关的模块文件导入到工程中。        

4.Generate Output Products:

        右键点击新生成的IP核,选择Generate Output Products

5.Create HDL Wrapper

        右键点击新生成的IP核,选择Create HDL Wrapper

注意:如果新生成的.v不是顶层,需要右键新生成的文件将其设置为顶层。

6.修改新生成的.v文件引用顶层功能模块,并添加变量:

修改部分包括模块定义的变量名,变量属性定义,顶层模块引用。

7.约束管脚,编译并生成bit流:

8.导出硬件文件(Export Hardware ...): 

导出时选择include bitstream选项。

8.启动vitis新建应用

9.在新建应用中选择添加生成的.xsa文件(默认在项目工程目录下)

注意:新建工程时要勾选 Generate boot components 选项,这样会生成启动的引导文件 fsbl ,没有 fsbl 没办法进行程序烧写,其他选项默认即可。

10.直接右键应用工程名,点击Bulid Project 

11. 直接右键应用工程名,点击Create Boot Image 

 12.直接右键应用工程名,点击Program flash 下载固化程序

http://www.lryc.cn/news/579027.html

相关文章:

  • GO Web 框架 Gin 完全解析与实践
  • 【Unity】MiniGame编辑器小游戏(九)打砖块【Breakout】
  • 云上配送革命:亚矩云手机如何重塑Uber Eats的全球外卖生态
  • 服务器异常宕机或重启导致 RabbitMQ 启动失败问题分析与解决方案
  • 2025年Java常见面试题(持续更新)
  • Maven工具学习使用(十三)——Maven Wrapper命令解析与使用
  • 在设计提示词(Prompt)时,关于信息位置的安排z怎么 结合模型特性和任务目标
  • 量子算法:微算法科技用于定位未知哈希图的量子算法,网络安全中的哈希映射突破
  • Linux 后台启动java jar 程序 nohup java -jar
  • pytest之fixture中yield详解
  • 文心快码答用户问|Comate AI IDE专场
  • UniApp完美对接RuoYi框架开发企业级应用
  • Droplets:趣味AI课程,开启语言学习新旅程
  • 【趣谈】Android多用户导致的UserID、UID、shareUserId、UserHandle术语混乱讨论
  • AJAX 安装使用教程
  • 从零用java实现 小红书 springboot vue uniapp (12)实现分类筛选与视频笔记功能
  • 网站面临爬虫攻击waf能防护住吗
  • mars3d (基于 Cesium 的轻量化三维地图库)
  • javaWeb02-Tomcat
  • 面试150 矩阵置0
  • SPI、I2C和UART三种串行通信协议的--------简单总结
  • 飞算 JavaAI 智控引擎:全链路开发自动化新图景
  • 分布式定时任务:xxl-job
  • 滤波电路Multisim电路仿真实验汇总——硬件工程师笔记
  • 【网工|知识升华版|实验】2 ACL原理及应用
  • 力扣 hot100 Day32
  • Spring AI 源码
  • 用自定义注解解决excel动态表头导出的问题
  • 【全网唯一】自动化编辑器 Windows版纯本地离线文字识别插件
  • 少样本学习在计算机视觉中的应用:原理、挑战与最新突破