收藏 分享(赏)

FPGA应用程序加载.doc

上传人:HR专家 文档编号:7359100 上传时间:2019-05-16 格式:DOC 页数:40 大小:548.47KB
下载 相关 举报
FPGA应用程序加载.doc_第1页
第1页 / 共40页
FPGA应用程序加载.doc_第2页
第2页 / 共40页
FPGA应用程序加载.doc_第3页
第3页 / 共40页
FPGA应用程序加载.doc_第4页
第4页 / 共40页
FPGA应用程序加载.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、 基于 Xilinx FPGA 的嵌入式 Linux 设计流程 FPGA 是通过逻辑组合电路来实现各种功能的器件。由于 FPGA 内部集成了大量的逻辑资源和可配置的 I/O 引脚,加上独特的并行处理架构,可以轻松实现同时对多个外部设备的配置和管理,以及内外各种接口数据的传输。现在开发厂商又在 FPGA 内部加入了大量的DSP 和 Block RAM 资源,非常适合图像处理、数字信号处理等运算密集的应用,因此在这些领域取得了广泛的应用。但是由于 FPGA 程序编写的灵活性和功能的多样性,使得它在一个复杂工程中对各个程序的使用调度、统筹管理上有很大的局限性,这样就必须引入操作系统进行统一的管理。L

2、inux 系统则因为其良好的可裁减、可配置等特点在嵌入式领域应用广泛。 Linux 操作系统提供了许多系统级的应用,例如网络协议的实现、进程调度、内存管理等,同时 Linux 是一个成熟的开源操作系统,有丰富的应用资源,利用这些资源和强大的系统功能,用户可以快速地开发基于嵌入式环境复杂系统。因此,结合 FPGA 和Linux 双方优势,可以很好地满足嵌入式系统设计需求,量体裁衣,去除冗余。本文给出了一种基于 Xilinx FPGA 的嵌入式 Linux 操作系统解决方案。基于 FPGA 的嵌入式系统的硬件设计本设计是基于 Xilinx XC4VFX40 系列 FPGA,它内部集成了两个 Pow

3、erPC405 处理器, 4 个10/100/1000M 以太网 MAC 模块,运行频率 300MHz 时,具有 420D-MIPS 性能,能解决高速网络数据传输问题,并且能解决通过网络加载操作系统和交叉编译等问题。它内部有448 个可配置 I/O 口,2592kb BlockRAM,能实现对各种外部设备的并行控制以及较多数据的存储与处理。加载一个操作系统,一般需要几十兆的内存空间,FPGA 内部自带的 RAM空间是远远不够的,本设计在板上扩展了两片 MICRON 公司的 256Mb DDR 内存,作为上电时操作系统的加载和运行空间。现在主流的嵌入式操作系统,都需要搭建交叉编译环境,把在主机上

4、编写好的可执行文件下载到目标板上,这就需要实现网络数据的传输。由于XC4VFX40 自带了以太网 MAC 模块,只需要在外面添加个 PHY 芯片和带隔离器的 RJ45 接口就能实现这个功能。本设计由于对网络数据实时性要求很高,因此采用 Marvell 公司的千兆以太网 PHY 芯片 88E1111-RCJ。它能根据自身配置和主机设计,实现 10/100/1000M 自适应传输,并且 Linux 本身对这个芯片提供了驱动支持,实现无缝链接。操作系统加载到DDR 中能快速有效的运行,但是掉电就会丢失,因此必须加入 FLASH 芯片,把系统文件存储到外部 FLASH 中。加电时,FPGA 把操作系统

5、文件从 FLASH 读入到 DDR 中运行。FPGA 设计当然会扩展很多接口出来,利用自身并行处理的优势,控制很多外围设备,本设计也不例外,扩展了 8 个通用的 GPIO,2 个 PS/2 接口,1 个 USB 接口,1 个 AC97 声卡接口,1 个 HotLink 接口,以及 4 个 RS422 接口,同时扩展了两个 CPCI 接口,引出了 16 位数据地址线和 Ethernet 控制线,整个系统的硬件框图如图 1 所示。在进行电路设计时,是以 FPGA 为核心,向外扩展各种设备,因此特别注意了 FPGA 各个引脚的连接。由于 DDR 和 PHY 芯片都需要提供+2.5V 电压,因此和 D

6、DR、PHY 芯片连接引脚所在的 BANK 需要提供 +2.5V 电压参考,并且不能接以 LVTTL 或 LVCMOS 为电压参考的引脚。重要快速的时钟信号必须接到全局时钟引脚上。由于 FPGA 需要通过外部 FLASH 启动操作系统,需要并行配置,以减少加载时间,配置电路如图 2 所示。在 DDR 布线时,数据和地址线需要走等长线,数据线之间不能相差 10Mil,地址线要控制在 20Mil 以内,时钟也需要走差分等长线,长度应大于地址线,DDR 各个信号还需要 47 的并行端接,改善信号质量。千兆 PHY 输出 MDI 信号也需要在顶层做差分等长 ,不然在进行 1000M 数据传输时很可能不

7、稳定。DDR 和 PHY 需要完整的电源回路做参考,电源层划分时也要特别注意,其他电路做常规处理就可以了。EDK 和 ISE 软件设计首先需要调用 Xilinx 提供的 EDK 软件,对各个模块加入必要的 IPCORE,以便操作系统能正常调用这些器件的驱动操作他们。本设计采用的是 EDK10.1.2 版本,PPC 方面选用 ppc405内核,频率设定在 300MHz,同时需要添加中断输入引脚,以便响应以太网、串口等外部中断,其他使用默认设置。DDR 控制器采用 EDK 提供的 Multi-Port-Memory Controller 模块,需要设置 DDR 芯片厂商、大小和数据位数等,特别指出

8、的是,要设置独立的两条 PLB 总线和 PPC 连接,作为 PPC 的指令和数据总线。MAC 单元需要加入 XPS_LL_TEMAC 模块来控制,本设计需要设置 PHY 类型为 GMII(千兆以太网) ,同时要指定物理地址和收发 FIFO 大小。FLASH 单元需要加入 xps_mch_emc 模块,同时设置 FLASH 类型和读写时间。为了方便调试,还需要加入串口控制台模块,本设计使用的是 UartLite 模块,设置需要的波特率和校验类型。特别注意的是,系统还需要时钟管理模块(DCM) ,提供各个模块需要的不同时钟,还要设置一段 FPGA 内部 RAM 区域,放置 PPC 的.boot 文

9、件 。外部这些模块都通过 PLB 总线和 PPC 通信,需要统一编址,一般把 DDR 内存空间地址分配到 0x0 开始,整个系统的构建如图 3 所示。本设计,除了在 EDK 中搭建了操作系统必须的各种模块后,还需要在 ISE 中编写各个时序电路程序,因此把 EDK 中编写好的工程作为一个模块,加入到 ISE 中,然后统一编译,这样生成了我们需要的完整功能的程序。特别指出的是,PPC405 数据地址采用的是大端模式,接入到 ISE 中时,需要把数据颠倒位置,如 DATA0:31变为 DATA31:0,才能正常读写。Linux 操作系统的加载与烧写加载 Linux 操作系统需要利用 EDK 软件提

10、供的板级升级包 (BSP)配置内核。BSP 包含了所选定处理器架构的属性文件以及相关硬件的驱动源文件。首先要在 EDK Project Option 中Project Peripheral Respository 选项下设置 Xilinx 提供的 gen-mhs-devtree/edk_lib 库路径,然后在软件平台设置中选择 Dts 模式,编译更新升级包,生成 .dts 配置文件。Dts 文件包含了所有模块地址分配,中断以及驱动信息,把他加入到 Linux 内核中,然后配置内核选项选择对应的处理器架构、所选硬件的驱动模块以及需要的其他内核模块,之后再对完成配置的内核进行编译,生成 Linux

11、 的内核 image 文件。生成内核 image 文件之后,还需要生成系统运行所需要的根文件系统。根文件系统中包含了嵌入式 Linux 系统的所有应用程序、库以及系统配置等相关文件。根文件系统中常用的程序和命令可利用开源软件 Busybox 构造。构造完成之后,在 Busybox 生成的目录和文件的基础上再构造根文件系统的目录树,并添加相关设备文件和配置文件以及系统运行时需要的脚本文件, 从而形成最终的根文件系统,ramdisk.image。把他拷贝到内核中的/arch/powerpc/boot 目录下,在 linux2.6.x 根目录下运行 make zlmage. initrt,生成最终的

12、系统文件。需要指出的是,在编译 linux 内核时,需要设置好交叉编译环境:首先安装 ELDK 编译软件,然后在编辑自己的帐户目录下的 .bashrc (例如: /home/ppc/) 中加入下面内容:CROSS_COMPILE=ppc_4xx$PATH=$PATH:/home/ ppc /PowerPc/ELDK/usr/bin:/home/ ppc /PowerPc/ELDK/binexport CROSS_COMPILE PATH保存,然后执行$source .bashrc把生成的 zlmage.initrd 文件通过 EDK 软件下的 XMD 调试窗口,使用 dow zlmage.in

13、itrd 命令下载到 DDR 中,然后运行 run 命令,就正常启动 Linux 了。程序下载到 DDR 中,掉电后,数据就丢失了,不能保存和连续使用,因此要把操作系统烧写到 FLASH,上电后让它能自动运行,掉电后也不会丢失。EDK 提供了专门的 FLASH 烧写工具 Program Flash Memory,首先要把 zlmage.initrd 文件转换为 FLASH 能识别的.SREC 文件,需要在 EDK Shell 下运行下面命令:$powerpc-eabi-objcopy I elf32-powerpc O srec zImage.initrd.srec第一次烧写 FLASH 时需

14、要把 Program Flash Memory 中 Create Flash Bootlooder Application 勾上,让系统自动生成 Bootlooder 程序。操作系统烧写到 Flash 中后,需要 FPGA 在上电后自动从 FLASH 读取操作系统数据,然后自动运行,这几需要把刚刚生成的 bootloadr_0 工程中的.elf 加入到.bit 生成新的配置文件 ,使用 EDK 下的 Updata Bitstream 命令就能实现。最后把生成的.mcs 文件烧写到 FPGA PROM 中,上电后,系统就能自动运行了。设计结果与分析在 Linux 系统正常加载后,我们设计一个程序

15、,它通过以太网,从上位机获得数据,存入FPGA 内部 BlockRam 中,再在 ISE 中编写程序,把获得的数据取出,产生频率可变的波形发生器,并回传发送的参数给上位机。通过实验证明,在 FPGA 加入操作系统后,能轻松实现网络数据的收发,并通过 FPGA 自身的逻辑,产生我们需要的各种控制信号,做到了系统的统一调度和各个功能的并行处理,发挥了操作系统和 FPGA 各自的优势。但是也发现,FPGA 下操作系统运行的频率不高,最多 600MHz,中断响应间隔较长,大约 3ms 左右,系统上电启动时间较长,大约 40s 左右,这些都需要在今后设计中进一步完善和提升。结语本文介绍了基于 FPGA

16、的嵌入式 Linux 设计流程,从硬件设计到 Linux 系统加载,再到应用程序运行整个过程,从中可以看出,该设计既发挥了 FPGA 并行处理和多时序控制上的优势,也发挥了嵌入式 Linux 系统调度和可裁剪性方面的优势,还提高了这个系统的稳定行,也减少了 FPGA 与外部高速总线连接的资源开销,二者的结合, 既满足了嵌入式应用按需定制、量体裁衣的需求, 又能开发出稳定而功能强大的嵌入式系统,在现在嵌入式系统开发中有很好的运用。MicroBlaze 处理器的 PetaLinux 操作系统移植引言随着 FPGA(Field Prograromable Gate Array,现场可编程门阵列)技术

17、的迅速发展,SOPC(Systam On a Prograromable Chip,可编程片上系统)作为一种特殊的嵌入式微处理器系统,已逐渐成为一个新兴的技术方向。SOPC 融合了 SoC 和 FPGA 各自的优点,并具备软硬件在系统可编程、可裁减、可扩充、可升级的功能。其核心是在 FPGA 上实现的嵌入式微处理器核,而如何针对特定的微处理器选择合适的嵌入式操作系统是 SOPC 开发的难点之一。本文针对 Xilinx 公司的 MicroBlaze 软核,介绍了 PetaLinux 嵌入式操作系统及其移植方法,研究了 PetaLinux 的相关配置和启动方案。1 基于 MicroBlaze 处理

18、器的系统设计1 1 MicroBlaze 处理器简介MicroBlaze 软核处理器是一种针对 Xilinx FPGA 器件而优化的功能强大的微处理器。它内部采用 RISC 架构的 32 位指令和数据总线,支持 CoreConnect 片上总线的标准外设计集合,具有兼容性和重复利用性,且可根据性能需求和逻辑区域成本任意裁减,极大地扩展了应用范围,其最精简的核只需要将近 400 个 Slice。MicroBlaze 的 CoreConnect 总线、它能够将 FPGA 内各种不同的 IP 核连接到一起构成一个完整的系统。CoreConnect 总线是一个总线标准的集合,它包括 PLB 总线(Pr

19、ocessor Local Bus,处理器本地总线),LMB 总线(Local Memory Bus,高速本地存储器总线),FSL(Fast Simplex Link,快速单连接)总线,以及 XCL(Xilinx CacheLink)总线等。1 2 系统结构和外部设备概述本系统主要是在 Virtex-4 开发板上构建一个以 MicroBlaze 处理器为中心的嵌入式信号处理系统,在 FPGA 内部实现系统的总线架构、数据存储、地址译码、外设接口等系统部件和功能。各功能部件在 FPGA 内部都以 IP 核的形式构建并连接,整个系统的结构框图如图 1所示。其中,SysACE 用于存放文件系统和应用

20、程序配置文件,INTC 用来实现中断控制;GPIO 和UART 16550 用于系统调试,自定义 IP 核 DDC 用来实现数字接收机下变频功能,这些外设通过 PLB 总线与 MicroBlaze 处理器和 DDR 相连;用于快速傅里叶变换的自定义 IP 核 FFT 通过 FSL 总线与 Micr-oBlaze 内部通用寄存器直接相连,实现了数据的快速传输;DDR 通过XCL 总线与 MicroBlaze 处理器相连,实现了 MicroBlaze 处理器对片外存储器的高速访问。1 3 嵌入式操作系统的选择选用 PetaLinux 嵌入式操作系统。它是 PetaLogix 公司专门针对 FPGA

21、 的片上系统设计的嵌入式 Linux 开发套件,在满足应用工程的逻辑编程能力和对嵌入式 Linux 要求的同时,可极大地缩短产品开发周期。PetaLinux 作为专门针对于 Xilinx FPGA 的嵌入式 Linux 解决方案,不但提供了专门的 BSP 生成器,而且提供了众多的参考设计,可以帮助设计者快速掌握PetaLinux 的配置方法。PelaLinux 内核正在不断的完善之中,且不断地加入基于 Xilinx FPGA嵌入式系统 IP 核的设备驱动,比如 XilinxUSB、SysACE、FSL 总线设备驱动、10 1001000M 三态以太网 MAC 等。这些设备驱动极大地减轻了嵌入式

22、系统开发者的工作量,缩短了产品开发的周期。2 PetaLinux 系统移植在 SOPC 硬件系统构建完成后,就要针对此结构配置操作系统内核,下面介绍具体步骤。2 1 建立交叉编译环境嵌入式系统开发一般采用交叉编译的方法,即在宿主机上对内核和应用程序进行编译,生成目标机处理器可执行的二进制位流文件,将此文件下载到目标机运行。PetaLinux 针对MicroBlaze 处理器建立了交叉编译器,运行 sourcesettingssh 脚本,系统会自动建立交叉环境。2 2 建立硬件平台PetaLinux 为每个应用工程建立一个文件夹,里面保存该工程的硬件配置。在移植 PetaLinux时,只需选择相

23、应的硬件平台,内核就会读取该工程文件夹下的配置文件。使用 PetaLinux-new-platform 命令建立硬件平台,如果使用 MMU(虚拟内存管理单元),则在此命令后添加-m 选项。硬件平台建立起来后,运行 make menuconfig 命令,在 VendorProduct Seletion选项中,选择该硬件平台。另外,还需将在 EDK 下生成的配置文件转换成 Linux 操作系统可以识别的格式。在工程文件夹下运行 PetaLinux-copy-autoconfig 命令,自动完成格式转换,并拷贝配置文件到已选择的工程文件夹下。2 3 添加自定义设备驱动本系统自定义了 IP 核,因此必

24、须开发驱动程序并将其添加到 PetaLinux 配置中。添加自定义设备驱动主要步骤如下:在平台配置目录下 Makefile 文件中添加语句 platobj-$(CONFIG_PETALOGIX_DDC)+=ddco和$(obj) ddco:config 使设备初始化函数 ddcC 与内核配置相关联;在驱动程序所在目录下的 Makefile 文件中添加 obj-$(CONFIG_PETALOGIX_DDC)+=ddc_adaptero 使设备驱动程序 ddc_adapterc 与内核配置相关联;修改设备驱动程序所在目录下的 Kconfig 文件,使配置内核时可以选择该设备驱动,并添加以下语句:通

25、过以上文件的修改,就可以在配置 PetaLinux 内核时选择自定义的设备驱动。2 4 配置 PetaLinux 内核由于 Linux 内核的可裁减性,能够方便地对内核进行修改、裁减、编译,最终移植到一个嵌入式系统中。运行图形编辑工具 make menuc-onfig 命令,对内核和系统环境进行配置。在内核配置的设备驱动选项中,一定要选择与系统硬件配置一致的硬件设备驱动,否则内核编译时就会出错。针对本系统的硬件配置,主要配置以下几项驱动:Block devices块设备。选择 Xilinx SystemACEsupport。Misc device混杂设备。选择 FSL FIFO driver,

26、然后进入 FSL Channel Selection,选择 FIFO on FSLO,并选择自添加设备驱动 Pet-aLogix DDC101 Driver。Network device support网络设备。选择 Ethernet(1000Mbit)子菜单中的 Xilinx 10 1001000 LLTEMAC support。Character devices字符设备。选择 Serial drivers 子菜单中的 825016550 and compatible serial support 和 Console on 825016550 and compatible serial po

27、rt。文件系统选项中,默认选择了 ext2、romfs 和 cramfs 文件系统,其他文件系统可以根据需要自行选择。本系统需要挂载 DOS 文件系统的 CF 卡,因此进行以下配置:DOSFATNT Filesystems。选择 MSDOS fssupport。Native Language Support。选择 Codepage 437(United States,Canada)。内核配置中的其他配置可以根据目标系统的不同灵活配置,配置完成后保存退出,自动进入系统环境配置菜单。系统环境配置是对 Peta-Linux 的属性、命令进行配置,主要有以下几个选项:System Settings系统

28、设置。配置系统的网络地址、默认用户名、默认登陆密码和所用根文件系统等内容。Core Applications内核应用。主要配置内核的常用特性。Network Applications网络应用。配置网络应用时的相关命令。Miscellaneous Applications混杂应用。配置系统内核中的命令。BusyBox。配置系统内核中的命令。PetaLinux 已经设置好了编译规则,因此配置完成后,依次执行命令 make dep、make clean、 make all,建立文件依赖关系,清除旧的文件,编译内核,生成内核 image。3 PetaLinux 启动方案经过编译的 PetaLinux

29、内核 image 文件主要有 imagebin、imageelf、imageub 。根据选择 image 文件的不同,PetaLinux 有 4 种启动方案:XMD 下载启动、TFTP 网络下载启动、Flash 启动和 SysACE CF 卡启动。其中,XMD 和 TFTP 网络下载启动方案,在每次系统上电后都必须重新下载,适用于系统调试;Flash 启动方案在系统上电后自动从 Flash 中读取配置文件,但 Flash 烧写速度较慢,更改系统配置较为不便。因此,本系统选用 SysACECF 卡启动方案。使用 SysACE CF 卡启动 PetaLinux,先将硬件比特流文件和 imageel

30、f 制作成 ACE 文件,再复制到 CF 卡中,配置 CF 卡启动 PetaLinux。制作 ACE 文件,可在 EDKShell 窗口运行命令:xmd-tcl genacetcl(命令工具 )-jprog-board m1402(所需的开发板 )-hw implementationdownloadbit(生成的比特流文件)-elf imageelf(编译 Linux 内核生成的可执行网表文件 )-ace systemace(需生成的 ACE 文件)成功后,适合于 ML-402 开发板的 ACE 文件就生成了。Linux 运行需要根文件系统的支持,启动时必须加载文件系统以支持系统的运行,而im

31、ageelf 中不包含文件系统。因此,使用 SysACE CF 卡启动时必须手动加载文件系统。在编译 PetaLinux 内核时,已经生成了以 romfs 文件夹为名称的文件系统,所以只需将 CF 卡分区和格式化,然后挂载此文件系统。具体步骤如下:将 CF 卡挂载到 Linux 系统中,运行命令 fdiskdevsda 把 CF 卡分成 3 个区。第 1 分区存放 systemace 文件,第 2 分区为 Linux Swap 交换分区,第 3 分区存放根文件系统。Linux 下格式化第 3 分区为 ext2 文件系统,运行命令 mke2fsdevsda3。在etefstab 下输入命令dev

32、sda3mnt rootfs auto defaults,user,noauto 0 0。把设备 sda3 挂在mnt rootfs 文件下,文件系统为默认的 ext2,普通用户,能挂载,不转储,启动时不扫描文件系统。通过命令 mountmnt rootfs 挂载该目录,这样就可以把根文件系统 rootfs 拷贝到 CF 卡的该分区上。Windows 下格式化第 1 分区为 FAT32 文件系统,把 systemace 复制到这个分区。Linux 下格式化第 2 分区为交换分区,运行命令 mkswapdevsda2。一切准备就绪后,插入 CF 卡,开启电源,就可以从 CF 卡启动 PetaLi

33、nux。结语本文介绍了一种可用于 MicroBlaze 处理器的嵌入式 Linux 操作系统PetaLinux,并详细讨论了其内核配置和启动方案。通过移植 Peta-Linux,本文开发的 SOPC 可以直接用于实际工程。该嵌入式操作系统移植快速、简单,由于其基于 Linux26 内核,可以保证较高的稳定性。因此,在 SOPC 应用日益复杂的背景下具有较高的实用价值。本文创新点:实现了 PetaLinux 在 MicroBlaze 处理器的移植,并成功实现 PetaLinux 中自定义硬件设备驱动的添加和 SysACE CF 卡的启动方案。MPMC 的使用双击 Bus_Interface 标签

34、栏下的 DDR_SDRAM,进入编辑 MPMC 的界面。如图 3.2.1所示:点击看大图图 3.2.1 点击 DDR_SDRAM3.2.1 Base Configuration 主标签栏:Base Configuration 包含两个标签栏。其中,用户可以在 Port Type Configuration 中配置端口类型,MPMC 最多可以有 8 个端口,每个端口有前述的 4 种接口类型XCL,PLBv46,SDMA,NPI 以及不使用 INACTIVE。点击看大图图 3.2.2 MPMC 端口的 4 种接口类型以及不使用 INACTIVE分配完毕后可以通过 LeftJustify 将不工作的

35、端口消除掉。在这个过程中所有与端口有关的参数和外部总线连接都被移到左边。图 3.2.3 点击 LeftJustify 之前图 3.2.4 点击之后在 Common Address 中可以观察和设置初始地址。想配置任一个独立的端口地址,需到Advanced 标签栏下 Address 选项选择。图 3.2.5 Common Address 标签栏3.2.2 Memory Interface 主标签栏MPMC 可以与不同厂商的许多不同种内存一起工作。这个标签栏让你在 Memory Part Selector 标签下选择与 MPMC 连接的内存。Memory Part Selector它包含 Type

36、 选项,Memory manufacturer 选项,Memory style 选项,Memory density 选项, Memory width 选项和 Part No. 选项。图 3.2.6 Memory Part Selector过滤的结果在 Part No.下拉列表中出现。如果内置的内存数据库正确部分不能使用时,Memory Part Selector/Part No.下拉列表也会包含一个用户选项。在你选择了CUSTOM 选项之后,所有内存参数都可修改,你能够输入你想要的参数。在你选择了内存部分之后,参数将被自动载入到 Selected Memory Info 区和 Memory/D

37、IMM Settings 标签中去Memory/DIMM Settings在这个设置区内,选择下拉菜单,你可以调整 DIMMs 的数目,内存数据宽度,内存时钟周期,ODT 设置和部分 其他信息。图 3.2.7 Memory Interface 标签Memory Part Settings TabMemory Part Settings 标签栏有两个区间:Part Settings 和 Memory Timing Settings。Part Settings 包含 Data Depth,Data Width,Bank,Row,和 Column Bits。Memory Timing Setting

38、s 包含内存部分选项。图 3.2.8 Memory Part Settings 标签3.2.3 Port Configuration 主标签栏在 Port Configuration 标签栏可以设置每个独立端口的参数。端口 0-3 和端口 4-7 可以在标签栏中显示。端口标签栏分成如图 3.2.9 所示的表明端口号的四个象限。只有与现有端口类型相关的参数(在 Base Configuration 主标签栏中选择)可以查看并修改。图 3.2.9 Port Configuration3.2.4 Advanced 主标签栏Advanced 的标签栏提供了更多高级 MPMC 的用户资源。Data Pa

39、th在 Data Path 这个标签栏中,你既能够配置常规传递途径的设置,也能单独设置每个端口。General Pipeline Settings 允许你设置常规传递途径的参数,而 Port-specific Settings 允许你按照如下方式为独立的端口改变传递途径的设置: NPI Width: NPI 的宽度。 Read FIFO Config: 用 BRAM, SRL, 或者 Wr-Only (只能写, 不能读缓存) 执行FIFO。 Write FIFO Config: 用 BRAM, SRL, 或者 Rd-Only (只能读, 不能写缓存)执行FIFO。 Read Memory Pi

40、peline: 允许传递途径读内存。 Read Port Pipeline: 允许传递途径读潜在端口。 Write Memory Pipeline: 允许传递途径写内存。 Write Port Pipeline: 允许传递途径写端口。 Address Ack Pipeline: 允许传递途径确认抵制要求。图 3.2.10 Data PathPort-specific Settings 中 Read FIFO Config 有三个选项:BRAM,SRL,Wr-Only。图 3.2.11 Read FIFO Config同样,Write FIFO Config 有三个选项:BRAM,SRL , R

41、d-Only。图 3.2.12 Write FIFO ConfigArbitrationMPMC 最多有 8 个端口,它们能同时访问内存。因此,在任何必要时候都能有一个仲裁机制来断定哪个端口有优先权,就显得十分重要了。在 Arbitration 标签栏中,你可以选择用哪种仲裁机制。从下拉菜单中选取一种仲裁机制: Round Robin: 采取循环仲裁模式。图 3.2.13 Round Robit Fixed: 采取确定的优先级模式。 Custom: 在这种模式中,可以定制时间档的数值和每个时间档的仲裁优先级。在每个时间档中仲裁优先级被编译成描述端口间优先级下降的字符串。图 3.2.14 Cus

42、tom例如,字符串“01234567”给端口 0 最高的优先级,然后从端口 1 到 7 优先级下降。MiscMisc 这个从标签栏包含了需要你注意,但不在先前类别内的参数。图 3.2.15 Misc上面大概地介绍了 MPMC 的结构和功能,具体如何在设计中加入使用 NPI 接口将在第七章中给出一个实际的例子。BootloaderBootLoader 的基本概念板级支持包(BSP)BSP 是板级支持包(Board Support Package)的缩写,是通常用在嵌入行业中的一个术语,用来代表在一个特殊硬件平台上快速构建一个嵌入操作系统所需的原始资料或者二进制软件包。 BSP 的作用是支持操作系

43、统,使之能够更好的运行于硬件平台。BSP 是相对于操作系统而言的,不同的操作系统对应于不同定义形式的 BSP,包括 Windows CE、Linux、Vxworks 等。SoC/CPU 厂商应向其芯片的用户提供一个基本的 BSP 包,以支持主板厂商或整机制造厂商在此基础上定制和开发各 种商用终端产品。在嵌入式系统学习过程中设计到了 Bootloader,下面讲述了 Bootloader 的基本作用,在后续的文章中我将对如何编写自己的 Bootloader 进行介绍。1. Bootloader 的基本概念:简 单地说,bootloader 就是在操作系统内核运行前运行地一段小程序。通过这段小程序

44、,可以对硬件设备,如 CPU、SDRAM、Flash 、串口等进 行初始化,也可以下载文件到系统板、对 Flash 进行擦除和编程,真正起到引导和加载内核镜像的作用,但是随着嵌入式系统的发展,bootloader 已 经逐渐在基本功能的基础上,进行了扩展,bootloader 可以更多地增加对具体系统的板级支持,即增加一些硬件模块功能上的使用支持,以方便开发人员 进行开发和调试。从这个层面上看,功能扩展后 bootloader 可以虚拟地看成是一个微小的系统级的代码包。bootloader 是依赖 于硬件而实现的,特别是在嵌入式系统中。不同的体系结构需求的bootloader 是不同的;除了体

45、系结构,bootloader 还依赖于具体的嵌入式板 级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的 CPU 构建,运行在其中一块电路板上的 bootloader,未必能够运行在另 一块电路开发板上。BootLoader 最为系统复位或上电后首先运行的代码,一般应写在起始物理地址 0x0 开始。Bootloader 的 启动过程可以是单阶段的,也可以是多阶段的。通常多阶段的bootloader 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的 bootloader 大多数是二阶段的启动过程,也即启动过程可以分为 stage 1 和 stage 2 两部分

46、。2. ARM Bootloader 的一般作用对于一个 ARM 系统来说,本质上,bootloader 作为引导与加载内核镜像的“工具”,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点:(1) 初始化 RAM(必需): bootloader 必须能够初始化 RAM,因为将来系统要通过它保存一些 Volatile 数据,但具体地实现要依赖与具体的 CPU 以及硬件系统。(2) 初始化串口(可选,推荐):bootloader 应该要初始化以及使能至少一个串口,通过它与控制台联系进行一些 debug 的工作;甚至与 PC 通信。(3 n 启动内核镜像(必需):根据内核镜像保存的存储介

47、质不同,可以有两种启动方式:FALSH 启动以及 RAM 启动;但是无论是哪种启动方式,下面的系统状态必须得到满足:l CPU 寄存器的设置: R00;R1机器类型;R2启动参数标记列表在 RAM 中的起始地址;这三个寄存器的设置是在最后启动内核时通过启动参数来传递完成的。l CPU 模式: 关闭中断;属于 SVC 模式;Bootloader 中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理范畴;SVC 模式是系统的一种保护模式,这样就可以进行一些只能在 SVC 模式下的操作,例如一些特定寄存器访问操作。l Cache 和 MMU 的设置: MMU 必须关闭;数据 cache 必

48、须关闭;指令 cache 可以关闭也可以开启;Bootloader 中所有对地址的操作都是使用物理地址,是实在的实地址,不存在虚拟地址,因此 MMU 必须关闭。Bootloader 主要是装载内核镜像,镜像数据必须真实 写回SDRAM 中,所以数据 cache 必须关闭;而对于指令 cache,不存在强制性的规定,但是一般情况下,推荐关闭指令 cache。Bootloader 启动内核镜像的方法是通过跳转语句直接跳转至内核镜像的第一句指令语句。Bootloader 存在的必要性Bootloader 的功能决定了在引导 Linux 系统时,必须使用 bootloader,除非你对 linux内核

49、进行了修改。Bootloader 有两个主要功能:1在发布模式,自动引导 linux 系统,为系统初始化各种参数。2在调试模式,要能够方便的下载内核,引导内核。Linux 系统一定要 bootloader 支持吗?答:是的。通用的 Linux 内核,启动时需要很多参数,这些参数必须通过bootloader 传递。而且内核一般是压缩存放到外存上的,从外存到内存的拷贝也是由bootloader 完成。Bootloader 为什么不和 kernel 放到一起呢?答:不可以这样做。从 bootloader 的第二个功能就知道,bootloader 是不能和内核放到一起。当然,在发布模式时,是可以集成到一起的,通常没必要。从哪里可以得到 bootloader?答:目前通用的 bootloader 很多,不论是嵌入式还是桌面系统,比如lilo,grub,blob 等。桌面用的 bootloader 我们就不讨论 了,重点说一下嵌入式领域用的bootloader。采用通用的 bootloader 功能强大,开发容易,而且由专人维护升级

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报