可编程片上系统开发平台ppt课件

上传人:cn****1 文档编号:569582928 上传时间:2024-07-30 格式:PPT 页数:207 大小:693.50KB
返回 下载 相关 举报
可编程片上系统开发平台ppt课件_第1页
第1页 / 共207页
可编程片上系统开发平台ppt课件_第2页
第2页 / 共207页
可编程片上系统开发平台ppt课件_第3页
第3页 / 共207页
可编程片上系统开发平台ppt课件_第4页
第4页 / 共207页
可编程片上系统开发平台ppt课件_第5页
第5页 / 共207页
点击查看更多>>
资源描述

《可编程片上系统开发平台ppt课件》由会员分享,可在线阅读,更多相关《可编程片上系统开发平台ppt课件(207页珍藏版)》请在金锄头文库上搜索。

1、可编程片上系统开发平台ppt课件Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望本章内容 该章描述在Xilinx嵌入式开发套件(Xilinx Development Kit,XDK)嵌入式系统工具的结构和设计流程。XDK用于开发基于MicroBlaze软核和PowerPC硬核处理器的SOPC系统。该章的主要内容包括:EDK简介、设计流程概述、平台开发结构的工具。 Xilinx的EDK工具主要包含:Xilinx Platfrom Studio(XPS)人机界面、嵌入式系统工具套件、嵌入

2、式处理IP核,例如处理器和外设、 Platform Studio SDK(Software Development Kit,SDK)。SDK基于Eclipse开放源码框架,可以选择使用SDK开发自己的嵌入式软件应用程序(从EDK13.1开始,必须在SDK内开发软件应用程序)。设计流程及EDK工具-设计流程 EDK中所提供的工具用来完成嵌入式设计的整个过程。图5.1给出了基于EDK的基本嵌入式设计流程。 图图5.1 EDK嵌入式设计流程嵌入式设计流程处理器硬件开发处理器硬件开发验证文件生成验证文件生成设计实现设计实现芯片配置芯片配置软件开发软件开发软件调试软件调试软件统计分析软件统计分析芯片配置

3、芯片配置SDK软件开发工具软件开发工具ISE 设计套件设计套件嵌入式和系统版本嵌入式和系统版本也也包包括括在在ISE 设设计计套套件件嵌入式和系统版本中嵌入式和系统版本中硬件硬件平台平台设计流程及EDK工具-建立硬件平台 Xilinx的FPGA技术允许设计者在处理器子系统中定制硬件逻辑。这种定制不可能使用标准的现成的微处理器或控制器芯片。“硬件平台”是指设计人员根据应用的需要而使用Xilinx的技术建立的灵活地、嵌入式处理子系统。 硬件平台是由一个或多个处理器或外设连接到处理器总线构成的。 EDK通过微处理器硬件规范(Microprocessor Hardware Specification,

4、MHS)文件记录硬件平台信息。设计流程及EDK工具-软件平台建立 软件平台是软件驱动和用于建立应用程序的操作系统(可选)组成的。所建立的软件映像文件只包含用户所使用到的一部分Xilinx的库。 EDK通过微处理器软件规范(Microprocessor Software Spectifcation,MSS)记录软件平台信息。设计人员可以在软件平台运行多个应用程序。设计流程及EDK工具-使用仿真的硬件平台验证 验证硬件平台的正确功能,设计人员可以建立一个仿真模型,并且在HDL仿真器上运行。当仿真系统时,处理器运行可执行文件。 设计人员可以选择建立行为、结构或者精确的时序仿真模型。设计流程及EDK工

5、具-使用调试的软件验证 调试嵌入式软件的基本技术是加载设计到所支持的开发板和使用调试工具去调试处理器。 作为可选择的方式,设计人员可以使用指令集仿真器或简化系统仿真器模型(“虚拟平台”)运行在主机上来调试设计代码。 设计人员可以通过概要分析代码的执行来估计系统性能。设计流程及EDK工具-芯片配置 一旦软件和硬件平台建立完成,设计人员可以为FPGA建立一个的配置比特文件。 对于原型设计,当连接主机和芯片时,设计者可以在下载比特流时,将希望运行在嵌入式平台上的软件同时下载。 对于产品,设计人员将配置比特流和软件保存在和FPGA连接的非易失性存储器中。设计流程及EDK工具-EDK工具图5.2 EDK

6、工具的结构设计流程及EDK工具-EDK工具设计环境境Xilinx Platform Studio(XPS)集成集成设计环境境GUI,在,在这个集成个集成环境中可以境中可以创建完建完整的嵌入式整的嵌入式设计。Xilinx Software Development Kit(SDK)集成集成设计环境境GUI,是,是对XPS的的补充,用来帮助充,用来帮助设计人人员开开发软件件应用功能(从用功能(从13.1开始,开始,专用于用于软件件应用的开用的开发)。)。EDK命令行或命令行或“非非Windows”模式模式允允许设计人人员运行嵌入式运行嵌入式设计流程或从命令行改流程或从命令行改变工具工具选项。硬件开硬

7、件开发The Base System Builder(BSB)向向导通通过使用支持的开使用支持的开发板或通用的基本功能,允板或通用的基本功能,允许设计人人员快速地建立一个嵌入式快速地建立一个嵌入式设计。Xilinx推荐推荐使用使用BSB建立最初的建立最初的项目目创建。建。The Create and Import IP Wizard辅助助设计人人员添加自己的外添加自己的外设到到设计中。建立相关中。建立相关的目的目录或数据文件,保或数据文件,保证外外设能被能被EDK工具工具识别。Configure Coprocessor Wizard帮助帮助设计人人员添加添加协处理器到理器到CPU。Platfo

8、rm Generator(Platgen)以以HDL或或实现的网表文件在片上构造可的网表文件在片上构造可编程系程系统设计流程及EDK工具-EDK工具软件开件开发Library Generator(Libgen)构建一个构建一个软件平台,件平台,该软件平台由定制的件平台由定制的软件件库、驱动程序和程序和OS构成。构成。GNU Compiler Tools(GCC)基于基于库产生器建立的平台,建立生器建立的平台,建立软件件应用程序。用程序。验证Xilinx Microprocessor Debugger(XMD)打开打开shell用于用于软件下件下载和和调试,也提供通道用于,也提供通道用于GNU调

9、试器器访问设备。GNU Debugger(GDB)调试软件的件的GUI,基于仿真模型或目,基于仿真模型或目标设备。Simulation Model Generator(Simgen)产生硬件仿真模型和生硬件仿真模型和编译脚本文件用于脚本文件用于对完整系完整系统的仿真。的仿真。Simulation Library Compiler(CompEDKLib)在开始在开始对设计进行仿真行仿真时,为目目标仿真器仿真器编译EDK仿真仿真库。Bus Functional Model Compiler(BFM)通通过建立一个建立一个总线环境的模型去代替真境的模型去代替真实的嵌入的嵌入式系式系统来帮助来帮助简化

10、定制外化定制外设的的验证。设计流程及EDK工具-EDK工具设备配置配置Bitstream Initializer(Bitinit)更新更新FPGA的配置比特流,用可的配置比特流,用可执行的行的软件初件初始化片上指令存始化片上指令存储器器System ACE File Generator(GenACE)基于基于FPGA的配置比特流和存的配置比特流和存储在非易失性存在非易失性存储器的可器的可执行行软件,件,产生一个生一个Xilinx系系统ACE配置文件配置文件Flash Memory Programmer允允许设计人人员使用目使用目标处理器去理器去编程板上的通程板上的通用用Flash(CFI)接口

11、)接口-兼容的并行兼容的并行flash杂项类Format Revision(revup)Tool and Version Management WizardRevup工具更新工具更新设计文件(例如文件(例如MHS)到当前)到当前的版本。版本管理向的版本。版本管理向导帮助将先前帮助将先前EDK建立的建立的IP和和驱动更新到当前的版本。更新到当前的版本。LibXil Memory File System Generator (LibXil MFS)在主机上建立一个在主机上建立一个MFS存存储器器镜像,像,该镜像并像并被下被下载到嵌入式系到嵌入式系统存存储器。器。Platform Specifica

12、tion Utility自自动产生微生微处理器外理器外设定定义MPD数据文件,数据文件,该文件要求文件要求创建建EDK兼容的制定外兼容的制定外设。设计流程及EDK工具- Xilinx Platform Studio(XPS) XPS提供了集成环境为基于MicroBlaze和PowerPC处理器的嵌入式处理器系统创建软件和硬件规范流程。 XPS也提供编辑器和项目管理接口用来创建和编辑源代码。 XPS提供工具流程配置选项的定制和提供图形化的系统编辑器用来连接处理器、外设和总线。 XPS可以在Windows、Solaris和Linux平台下使用。 从XPS中,设计人员可以运行所有的用于处理硬件和软件

13、的嵌入式系统工具。在XPS环境下可以进行系统的验证。设计流程及EDK工具- Xilinx Platform Studio(XPS)XPS提供下面的特性: (1) 能够添加核,编辑核参数和进行总线和信号连接,产生MHS 文件; (2) 能够产生和修改MSS文件; (3) 支持表5.1内的所有工具; (4) 能够产生和观察系统块图和设计报告; (5) 多用户软件应用支持; (6) 项目管理; (7) 过程和工具流程依赖管理; (8) 输出MHS文件到SDK工具设计流程及EDK工具-Xilinx Software Development Kit(SDK) SDK工具是XPS的补充,SDK为应用软件提

14、供开发环境。SDK基于Eclipse开放源码标准。SDK主要有以下特点: (1) 功能丰富的C/C+编辑器和编译环境; (2) 导入基于XPS生成的硬件平台定义; (3) 提供项目管理; (4)支持基于单个处理器或者多个处理器系统的软件应用程序的 开发; (5) 支持以团队环境的形式开发软件应用程序; (6)为第三方的操作系统创建和配置板级支持包BSP;设计流程及EDK工具-Xilinx Software Development Kit,SDK (7)提供现成的简单软件工程来测试硬件和软件功能; (8)通过GUI接口为软件应用程序、编程FPGA芯片和编 程并行flash存储器产生链接脚本; (

15、9)应用程序的建立配置和自动的MAKE文件生成; (10)错误浏览; (11)为无缝调试和概要分析目标提供了好的集成环境;设计流程及EDK工具-The Base System Builder(BSB) Wizard BSB向导帮助设计人员快速建立一个嵌入式系统工程。对于更复杂的工程,BSB向导提供基本的系统,通过这个系统设计人员可以定制完成嵌入式设计。为了高效率的建立工程,Xilinx推荐使用BSB向导。设计流程及EDK工具-The Base System Builder(BSB) Wizard 基于设计人员选择的板子,设计人员通过BSB选择并配置基本的元素,比如:处理器类型、调试接口、缓存配

16、置、存储器类型和大小、外设等。 对于BSB不支持的目标系统,设计人员可以选择定制板选项。使用这个选项时,必须指定未来板子的硬件,并且要给出用户约束文件UCF。 如果选择的是支持的目标板,BSB向导自动的加入UCF文件。当退出BSB时,BSB所建立的MHS和MSS文件自动加入到XPS工程中,设计人员能在XPS中进行更进一步的设计。设计流程及EDK工具- Platform Generator,Platgen 平台产生器Platgen将对嵌入式系统的高级描述编译成能在目标FPGA芯片上实现的HDL网表。 嵌入式系统硬件平台典型的由一个或多个处理器和不同的外设和存储器模块组成,这些模块通过处理器总线连

17、接。每个外设的IP核有很多的参数,通过调整这些参数来定制行为。这些参数也用来为这些存储器和外设进行地址映射。由于EDK提供可选择的特性,FPGA只需要实现应用程序所要求的功能子集。 硬件平台保存了MHS文件。MHS文件是表示所设计的嵌入式系统的硬件元件的最主要文件。MHS文件以ASCII码形式存在。设计流程及EDK工具- Platform Generator(Platgen) Platgen读取MHS文件作为基本的设计输入。Platform也从EDK库和用户IP库中读取不同的处理器核硬件描述文件(MPD,PAO)。 Platgen为嵌入式系统产生顶层HDL设计文件,该文件包含所有参数化了的IP

18、核。 在这个过程中,将MHS中所有高层总线连接变成连接处理器、外设和片上存储器的真实信号。它也调用XST编译器综合每个例化的IP核(Platgen产生的系统级网表也用来作为FPGA实现过程的一部分)。 此外,Platgen也产生BMM(BRAM Memory Map)文件,该文件包含所用到的片上BRAM的地址。 设计流程及EDK工具- 建立和导入IP向导 该向导帮助设计人员建立自己的外设并且将它们导入相应的XPS工程中。 在创建模式下,创建和输入外设向导建立很多文件,这些文件的一些是模板文件帮助设计人员实现外设,而不需要详细的知道总线协议,命名规则和特殊接口文件的格式。通过参考模板中的例子和使

19、用不同的辅助设计支持文件,设计人员可以很快的进行逻辑定制。 在导入模式下,该工具帮助设计人员建立接口文件和目录结构。对于这种操作模式,必须遵守EDK的命名规则。一旦导入完成,用户的定制外设在EDK外设库中可以使用。设计流程及EDK工具-建立和导入IP向导 当创建或输入一个外设时,自动生成MPD(Microprocessor Peripheral Defination)文件和PAO(Peripheral Analyze Order)文件。MPD文件定义了外设的接口,PAO文件通知其它工具(Platgen,Simgen),对外设需要编译哪个HDL文件和以什么样的顺序编译。设计流程及EDK工具-配置

20、协处理器向导 如果设计中包含MicroBlaze和PowerPC处理器时,可以使用该向导。该向导添加和连接协处理器到CPU。协处理器是一个硬件模块用来实现用户在FPGA内定义的功能和通过FSL接口与处理器连接。FSL通道是一个专用的32位,点对点的通信接口。设计流程及EDK工具-库产生器(Libgen) Libgen为嵌入式处理器系统配置库,设备驱动,文件系统和中断句柄,以及创建板级支持包BSP。嵌入式软件平台为每个处理器定义了系统内外设的驱动(板级支持包),可选择的库,标准的输入/输出设备,中断句柄例程和其它相关的软件特征。SDK工程进一步定义了运行在每个处理器上的软件,这些软件基于BSP运

21、行。 设计流程及EDK工具-库产生器(Libgen) 来自于EDK安装的库和驱动,以及设计人员提供的定制库和驱动,SDK将用户程序,包括库和驱动程序编译成处理器硬件平台上可执行可链接的文件(Executable Linked Format,ELF)。 Libgen读取选择的EDK库和不同的处理器核软件描述文件(Microprocessor Driver Defination, MDD)和驱动代码。设计流程及EDK工具- GNU编译工具(GCC) XPS调用GNU编译工具用于编译和链接应用程序。 1)对于MicroBlaze处理器的应用,XPS运行mb-gcc编译器; 2)对于PowerPC处理

22、器的应用,XPS运行powerpc-eabi-gcc编译器。 编译器能读取C代码,头文件和汇编代码。链接器将编译的程序和选择的库连接在一起产生ELF可执行文件。连接器也读取连接脚本(默认产生或用户产生)。设计流程及EDK工具-Xilinx Microprocessor Debugger(XMD) 设计人员可以使用指令集仿真器或者虚拟平台调试软件程序。XMD读ELF文件。对于调试物理的FPGA,XMD和FPGA通讯使用和FPGA下载相同的电缆。 设计流程及EDK工具-GNU调试器(GDB) GNU调试器是个强大和灵活的工具,它为在不同的开发周期验证MicroBlaze和PowerPC系统提供了统

23、一的调试和验证手段。GDB使用了XMD作为最基本的引擎和处理器目标通讯。设计流程及EDK工具- Simulation Model Generator(Simgen) 仿真模型产生器Simgen为硬件产生和配置不同的模型。为产生行为模型,Simgen使用MHS文件作为基本的输入。为产生结构或时序模型,Simgen使用综合后或布局布线后的设计数据库作为基本的输入。 Simgen为每个处理器也读取嵌入式应用ELF文件去初始化片上存储器;这样处理器在仿真阶段就可以执行这些软件代码。设计流程及EDK工具- Simulation Library Compiler(CompEDKLib) CompEDKLi

24、b使用不同仿真工具厂商提供的仿真器编译EDK基于HDL的仿真库。这个工具可以运行在GUI和批处理模式下。 在GUI模式下,允许设计人员使用CompXLib编译Xilinx的库和EDK中可以使用的库。设计流程及EDK工具- Virtual Platform Generator(VPgen) 虚拟平台是硬件系统的周期级的仿真模型。可以在主机上用虚拟平台来调试和评估软件应用代码,而不需要得到运行在原型板上的硬件。设计流程及EDK工具-Bus Functional Model Compiler(BFM) 总线功能仿真简化了依附在总线上的硬件元件的验证。 设计流程及EDK工具-Bitstream Ini

25、tializer(Bitinit) 比特流初始化工具使用软件信息来初始化与处理器连接的片上BRAM存储器。 这个工具读取ISE工具产生的硬件比特流文件(system.bit),产生一个新的输出比特流文件(download.bit),这个比特流文件包含ELF文件。 这个工具使用BMM文件,该文件由Platgen产生,通过使用每个BRAM块的物理的布局信息由ISE工具更新。在内部,比特流初始化工具Bitinit使用在ISE中提供的Data2MEM工具来更新比特流文件。设计流程及EDK工具-System ACE File Generator(Gen ACE) 从FPGA比特流中产生 Xilinx S

26、ystem ACE配置文件和ELF/数据文件。 产生的ACE文件用于配置FPGA,初始化BRAM,使用有效的程序或数据初始化外部存储器和启动处理器。 EDK提供了工具命令语言(Tool Command Language,Tcl)脚本,genace.tcl。该脚本使用XMD命令产生ACE文件。 使用MDM系统可以为PowerPC或MicroBlaze产生ACE文件。设计流程及EDK工具-Flash Memory Programmer 编程解决方案被设计成通用的,面向不同的Flash硬件和布局。设计流程及EDK工具-Format Revision(revup)Tool and Version Ma

27、nagement Wizard 格式版本工具revup更新已经存在EDK工程到当前的版本。revup工具只执行格式的变化,对设计不进行更新。在应用revup前,备份MHS,MSS,XMP等文件。 当使用新版本的EDK工具打开老版本的工程时,就会显示版本管理向导。 当执行revup后,调用版本管理向导。向导提供有关设计中使用的Xilinx处理器IP核的变化信息。如果新版本的IP核可以使用,向导将升级到新的版本。设计流程及EDK工具-LibXil Memory File System Generator(LibXil MFS) 以文件句柄的形式提供管理程序存储器的能力。设计人员可以建立目录,并在目

28、录中存放不同文件。文件系统能通过使用高级C语言进行函数调用来访问。设计流程及EDK工具-Platform Specification Utility 平台规范工具能够自动产生建立IP核的MPD文件。通过建立和导入外设向导的帮助,能够使用这个工具提供的功能。平台产生器 硬件的产生是由平台产生器(Platform Generator, Platgen)生成。 Platgen以硬件网表的形式(HDL和实现网表文件)建立片上可编程系统。 Platgen使用MHS文件作为输入并建立硬件平台。除了以NGC、EDIF等网表文件格式外,Platgen为下面的工具和顶层的HDL封装提供支持文件,可以使设计者添加

29、其它元件并且自动的产生硬件平台。平台产生器 当运行Platgen时,FPGA的实现工具运行完成硬件的实现。 典型的,XPS为实现工具调用项目管理器(Project Navigator)前端,用于控制实现过程。 ISE流程结后,产生用于配置FPGA的比特流文件。这个比特流文件包括为FPGA片上BRAM的初始化信息。 如果设计的代码或数据必须在启动时放在这些存储器时,Data2MEM工具使用包含在可执行文件内的代码/数据信息来更新比特流文件,这个可执行文件在软件应用程序建立和验证流程的结束时产生。平台产生器-加载路径 图5.3给出了外设IP路径的结构。Platgen使用查找优先级机制来确定外设的位

30、置:-lpboardsdriverspcoressw_services 图图5.3 外设路径结构外设路径结构平台产生器-加载路径 (1)在工程目录下,寻找pcore目录 (2)通过-lp选项寻找指定的/pcores位置 (3)查找XILINX_EDK/hw/pcores 从pcores目录中,外设的名字就是根目录的名字。从根目录中,基本的目录结构为:data、hdl和netlist。平台产生器-输出文件 Platgen产生下面的文件和目录:hdl、implementation和synthesis。在工程目录下,这是最基本的目录结构。 1、HDL目录 HDL目录包含下面的文件: 1)system

31、.vhd|v:这是嵌入式处理器系统得HDL文件,该文件 在MHS中定义。该文件包含了IOB原语(当指定-toplevel yes 选项)。 2)system_stub.vhd|v:这是例化系统和IOB原语的顶层HDL文 件模版。使用这个文件作为设计者自己的顶层HDL设计文件 的开始点(当指定-toplevel no选项)。否则,system.vhd|v 为顶层。 平台产生器-输出文件 3)_wapper.vhd|v:在MHS中定义的单独的IP元件 的HDL封装文件。 2、Implementation目录 该目录包含peripheral_wrapper.ngc实现网表文件。 3、Synthesi

32、s目录 该目录包含system.prj|scr综合工程文件;平台产生器-存储器的产生-BMM策略 Platgen在/implementation目录下,产生.bmm和_stub. Bmm。(1)当EDK是顶层系统时,实现工具使用.bmm;(2)当EDK是顶层系统的子模块时,实现工具使用 _stub.bmm;平台产生器-存储器的产生-BMM流程 EDK工具的实现工具流程采用了Data2MEM,下面给出了其流程: 1)ngdbuild bm .bmm .ngc 2)map 3)par 4)bitgen bd .elf Bitgen输出_bd.bmm,包含了BRAM的物理位置。_bd.bmm和.bi

33、t文件输入到Data2MEM。Data2MEM将数据片断转换为正确的初始化记录,这些记录用于Virtex系列的BRAM。仿真模型产生器 仿真模型产生器(Simulation Model Generator,Simgen)为一个给定的硬件生成和配置不同的VHDL和Verilog仿真模型。 MHS文件作为Simgen的输入,MHS文件描述了硬件元件的例化和连接。Simgen也为指定厂商的综合工具生成脚本。脚本编译产生的仿真模型。仿真库 仿真网表使用低层次的Xilinx FPGA可使用的硬件原语。Xilinx为这些原语提供了仿真模型。下面介绍了Xilinx的仿真流程中所使用的库。HDL代码必须参考相

34、对应的编译库。 HDL仿真库必须将逻辑库与物理编译的库相对应。Xilinx的库可以使用CompXLib工具进行编译。仿真库-UNISIM库 UNISIM库是功能模型库,用于行为和结构仿真。该库包含所有的Xilinx统一的库元件,这些库元件可以被大部分的综合工具识别。UNISIM库也包含了那些通用的例化元件,比如I/O和存储器单元。 设计人员在设计中例化UNISIM库,并且在行为仿真时进行仿真。Simgen产生的结构仿真模型例化UNISIM库元件。 在UNISIM库中的所有元件都是0延迟的。所有的同步元件有一个单位的延迟避免竞争条件,对于同步元件的clock-to-out延迟是100ps。仿真库

35、-SIMPRIM库 SIMPRIM库用于时序仿真。它包含所有的Xilinx实现工具中使用的Xilinx的原语库元件。Simgen产生的时序仿真模型例化SIMPRIM库元件。仿真库-XilinxCoreLib库 Xilinx的核产生器是一个图形化的IP设计工具用来产生高层次模块,比如FIR滤波器,FIFOs,CAMs和其它高级IP。设计人员可以定制和预优化模块来利用Xilinx FPGA芯片的固有的结构特点,比如,块乘法器,SRL,快速进位逻辑和片上的单端口或双端口RAM。 核产生器HDL库模型用于行为仿真。设计人员选择合适的HDL模型添加到HDL设计中。模型不使用用于全局信号的库元件。仿真库-

36、 EDK库 EDK库用于行为仿真。该库保存了所有的EDK IP元件,这些元件预编译用于ModelSim SE、PE或NcSim。库免除了需要为每一个工程重新编译EDK元件,减少了编译的时间。EDK IP元件库只提供VHDL语言,并且可能加密。 未加密的EDK IP元件能使用Xilinx的CompEDKLib工具编译。对于加密的EDK IP元件提供了预编译库。仿真模型产生器-仿真模型 功能仿真设计输入设计综合设计网表设计实现设计实现的网表时序仿真行为仿真结构仿真图4.4 FPGA设计仿真阶段 该部分介绍行为仿真模型、结构仿真模型和时序仿真模型。图5.4给出了FPGA的设计仿真阶段。在设计过程的每

37、个点,Simgen建立一个合适的仿真模型模型。仿真模型产生器-仿真模型功能仿真设计输入设计输入设计综合设计综合设计网表设计网表设计实现设计实现设计实现的网表设计实现的网表时序仿真时序仿真行为仿真行为仿真结构仿真结构仿真图图5.4 FPGA设计仿真阶段设计仿真阶段仿真模型产生器-行为模型 图5.5给出了行为仿真模型。Simgen要求MHS文件作为输入。Simgen建立一系列的仿真模型。可选的,Simgen为指定厂商的仿真器产生编译脚本。如果指定,Simgen能用数据产生HDL文件去初始化与存在设计中的BRAM相关联。这个数据从存在在可执行和连接格式(ELF)文件中得到。仿真模型产生器-行为模型M

38、HSELFSimgenHDLScript图图5.5行为仿真模型产生行为仿真模型产生仿真模型产生器-结构模型 图5.6所示,Simgen要求MHS文件和相关的综合网表文件作为输入。从这些网表文件中建立一系列的HDL文件结构建模设计功能。Simgen可以为指定厂商的仿真器产生一个编译脚本。如果指定,Simgen能用数据产生HDL文件去初始化与存在设计中的BRAM相关联。这个数据从存在在可执行和连接格式(ELF)文件中得到。仿真模型产生器-结构模型MHSELFSimgenHDLScript图图5.6 结构仿真模型产生结构仿真模型产生MHSNGC仿真模型产生器-时序模型 图5.7所示,Simgen要求

39、MHS文件和相关的实现网表文件作为输入。从这些网表文件中建立一个的HDL文件对设计建模和包含合适的时序信息的SDF文件。Simgen可以为指定厂商的仿真器产生一个编译脚本。如果指定,Simgen能用数据产生HDL文件去初始化与存在设计中的BRAM相关联。这个数据从存在在可执行和连接格式(ELF)文件中得到。仿真模型产生器-时序模型MHSELFSimgenHDLScript图图5.7 结构仿真模型产生结构仿真模型产生MHSNGD仿真模型产生器-输出文件 Simgen在输出目录的仿真目录下产生所有的仿真文件和每个仿真模型的子目录。 Output_directory/simulation/sim_m

40、odel 当Simgen成功执行后,仿真目录下包含下面的文件: (1)peripheral_wapper.vhd|v:每个元件的模块化仿真文件。对 时序仿真不适用; (2)system_name.vhd|v:设计的顶层HDL (3)system_name.sdf:标准延迟格式sdf,包含合适的快和网络 延迟,这些信息来自布局布线过程,只用于时序仿真; (4)system_name.do|sh:用于编译HDL文件和编译仿真模型 的脚本文件。仿真模型产生器-输出文件 (5) test_harness_setup.do|sh:建立仿真器的助手脚本,并且 指定了在波形窗口或者列表窗口显示的信号。 (6

41、)test_harness_wave.do|sv:koam;建立仿真波形显示助手 脚本; (7)test_harness_list.do:建立仿真列表显示助手脚本; (8)instance_wave.do|sv:为指定实例建立仿真波形显示的助 手脚本; (9)instance_list.do:为指定实例建立列表显示的助手脚本;仿真模型产生器-存储器初始化 如果设计中包含存储器时,使用数据初始化相应的仿真模型。使用-pe选项,可以指定与给定处理器实例的ELF文件。通过选择合适的GNU编译器,产生被编译的可执行文件。库产生器 库产生器(Library Generator,Libgen)通常是第一个

42、工具用于配置库和设备驱动。Libgen使用设计人员建立的MSS文件。MSS文件定义了与外设,标准I/O设备,中断句柄例程和其它软件特性相关的驱动。Libgen使用这些信息配置库和驱动。运行 libgen options filename命令来运行库产生器。库产生器加载路径 -lpboardsdriverspcoressw_servicesbsp图图4.8 外设,驱动,库,外设,驱动,库,OS的目录结构的目录结构库产生器加载路径driverssw_servicesbsppcoressrcdata.c files.h filesMDDTclsrcdata.c files.h filesMLDTcl

43、srcdata.c files.h filesMLDTclsrcdata.c files.h filesMDDTcl图图5.9 驱动驱动 OS和库的目录结构和库的目录结构库产生器输出文件 Libgen在设计工程目录下产生目录和输出文件。对于MSS文件的每个处理器实例,Libgen产生和处理器实例名字相对应的目录。在每一个处理器实例目录下,Libgen产生下面的目录和文件:include目录、lib目录、libsrc目录、code目录。库产生器输出文件 1、include目录 Include目录包含驱动程序必须的C头文件。Libgen在这个目录下创建xparameter.h文件。该文件定义了系统

44、中外设的基地址,#define是驱动,OS,库和用户程序以及函数原型所需要的。微处理器驱动定义文件(Microprocessor Driver Definition,MDD)为每一个驱动指定了定义,这些定义用于需要驱动的外设。 2、lib目录 lib目录包含libc.a,libm.a和libxil.a库。Libxil库包含特定处理器能够访问的驱动函数。库产生器输出文件 3、libsrc目录 Libsrc目录包含中间文件和MAKE文件,这些文件是用来编译OS,库和驱动。该目录包含外设指定的驱动文件,用于OS的BSP文件和库文件。这些文件从EDK和设计的驱动,OS和库目录中复制。 4、code目录

45、 该目录包含EDK可执行文件。Libgen在该目录中创建xmdstub.elf文件(该文件用于MicroBlaze的板上调试)。库产生器生成库和驱动-基本观点 MHS和MSS文件定义了系统。对于系统中的每个处理器,Libgen找到可寻址的外设清单。对于每一个处理器,建立一个唯一的驱动和库的清单。Libgen为每个处理器完成下面的过程:库产生器生成库和驱动-基本观点 (1)建立在输出文件部分所定义的目录结构 (2)为驱动,OS和库拷贝必要的源文件到处理器实例指定的区 域:OUTPUT_DIR/ processor_instance_name/libsrc. (3)为处理器可见的每一个驱动、OS和

46、库调用设计规则检查 DRC程序(作为可选项在MDD/MLD文件中定义)。 (4)为处理器可见的每一个驱动、OS和库调用generate Tcl程 序。为每一个在include目录下的驱动,OS和库产生必要的 配置文件。 (5)为处理器可见的每一个驱动、OS和库调用post_generate Tcl程序(如果在和MDD和MLD相关的Tcl文件中定义)库产生器生成库和驱动-基本观点 (6)为处理器指定的OS,驱动和库运行make。在UNIX平 台下,使用gmake工具。在Windows环境下,make用于编 译。 (7)为处理器指定的OS,驱动和库调用execs_generate Tcl 程序(如

47、果在和MDD和MLD相关的Tcl文件中定义)。库产生器生成库和驱动MDD/MLD和Tcl 一个驱动或库需要两个数据文件关联: 1)数据定义文件(MDD或MLD文件):这个文件定义了用 于驱动、OS和库的可配置参数; 2)数据产生文件(Tcl):这个文件使用了在MSS文件中配置 的参数(这些参数用于驱动、OS或库)来产生数据。产 生的数据包括但不局限于产生头文件,C文件,运行 DRC,这些文件用于驱动、OS或库和产生可执行文件。库产生器生成库和驱动MDD/MLD和Tcl Tcl文件包括Libgen在执行不同级别时所调用的程序。在Tcl中不同的程序包括: 1)DRC 在MDD/MLD中给出了DRC

48、的名字 2)generate Libgen定义的程序,当文件被拷贝后被调用 3)post_generate Libgen定义的程序,当generate被调用后调用该 程序 4)execs_generate Libgen定义的程序,当BSP,库和驱动产生后 调用该程序;库产生器生成库和驱动驱动 大多数外设都需要软件驱动。MSS文件包含一个驱动块用于每一个外设实例。块包含对驱动的名字(DRIVER_NAME参数)和版本(DRIVER_VER)参考。这些参数没有默认值。驱动LEVEL与所要求的驱动功能有关。驱动目录中为不同级的驱动包含源文件和头文件,以及用于驱动的MAKE文件。库产生器生成库和驱动驱

49、动 驱动有一个MDD文件和/或Tcl文件关联。 MDD文件为驱动指定了所有可配置的参数。这是数据定义文件。每一个MDD文件有一个相关的Tcl文件。 Tcl文件产生数据,其中包括头文件的产生、C文件的产生,用于运行驱动的DRC,产生可执行文件。库产生器生成库和驱动驱动 设计者可以编写自己的驱动。这些驱动必须在一个指定的目录下 (YOUR_PROJECT /driver或library_name/drivers)。 DRIVER_NAME属性允许设计人员为驱动指定任何名字(该名字也是驱动目录的名字)。源文件和MAKE文件必须在DRIVER_NAMEsrc目录下。MAKE应该有对象(include和

50、libs)。每个驱动应该包含MDD文件和Tcl文件(在data子目录中)。参考已经存在的EDK驱动来了解驱动的结构。库产生器生成库和驱动库 MSS文件为每一个库包含一个库块。库块包含对库名字(LIBRARY_NAME参数)和版本(LIBRARY_VER)参考。这些参数没有默认值。库目录中包含用于库的C源文件、头文件和MAKE文件。 MLD文件为每一个库指定了可配置的选项。每个MLD文件都有Tcl文件与之关联。库产生器生成库和驱动库 设计人员可以编写自己的库。这些必须在一个指定的目录中(YOUR_PROJECT/sw _services或library_name/sw_services)。LIB

51、RARY_NAME属性允许设计人员为驱动指定任何名字(该名字也是库目录的名字)。源文件和MAKE文件必须在LIBRARY_NAMEsrc目录下。MAKE应该有对象(include和libs)。每个库应该包含MLD文件和Tcl文件(在data子目录中)。参考已经存在的EDK库来了解库的结构。库产生器生成库和驱动OS Block MSS文件包含为每个处理器实例包含一个OS块。OS块包含对OS名字(OS_NAME参数)和版本(OS_VER)参考。这些参数没有默认值。bsp目录中包含用于OS的C源文件、头文件和MAKE文件。 MLD文件为每一个OS指定了可配置的选项。每个MLD文件都有Tcl文件与之关

52、联。库产生器生成库和驱动OS Block 设计人员可以编写自己的OS。这些必须在一个指定的目录中(YOUR_PROJECT/bsp或library_name/bsp)。OS_NAME属性允许设计人员为OS指定任何名字(该名字也是OS目录的名字)。源文件和MAKE文件必须在OS_NAMEsrc目录下。MAKE应该有对象(include和libs)。每OS库应该包含MLD文件和Tcl文件(在data子目录中)。参考已经存在的EDK的操作系统OS来了解OS的结构。平台规范工具 平台说明工具(Platform Specification Utility,PsfUtility)工具能自动生成微处理器外设

53、定义(Microprocessor Peripheral Defination,MPD)文件。MPD文件用于建立EDK相容的IP核。这个工具的特性能通过XPS的创建和导入外设向导(Create and Import Peripheral Wizard)提供。平台规范工具 设计者使用psfUtility从IP核的VHDL规范来建立MPD规范。建立核和通过EDK提供的步骤为: 1)用VHDL或Verilog语言编码,对所有的总线信号 (时钟信号、复位信号和中断信号)使用严格的命名规范。 2)建立一个XST工程文件或者PAO文件,列出实现IP 的所有的HDL源文件。 3)通过提供XST工程文件或PA

54、O文件使用PsfUtility工具。FLASH存储器编程-flash编程 典型的,设计者可以对flash进行下面进行编程:可执行/可引导的应用程序的映像文件FPGA的硬件比特流文件文件系统的映像,数据文件,例如简单数据和算法的表格FLASH存储器编程-flash编程 第一种情况最普遍,当处理器离开复位状态时,开始执行保存在处理器复位位置指定的BRAM内的代码。 典型的,BRAM非常小以至于不能提供整个设计的软件应用程序的映像。 因此,设计人员可以将软件应用程序的映像保存在flash中。设计一个可以装在BRAM内的小的引导启动代码,离开复位后,从flash中读取软件应用程序的映像文件,然后将其复

55、制复制到外部的存储器中,然后将控制传送到设计的软件应用程序中。FLASH存储器编程-flash编程 设计人员通过工程所建立的软件应用程序是可执行的ELF格式。通常并不存储和引导ELF映像文件本身,这是因为启动引导一个ELF映像文件会增加启动引导的复杂度。取而代之的是,ELF的映像文件被转化成一个通用的引导启动映像格式,例如:SREC(Motorola-S记录格式)或IHEX,这样启动引导就变得简单,代码长度也减少了。FLASH存储器编程-支持Flash硬件 FLASH存储器编程对话框允许设计人员对板上的外部CFI(Common Flash Interface,CFI)接口兼容的并行存储器进行编

56、程,方法是通过外部存储器(Externel Memory Controller, EMC)IP核连接。编程方案被设计成是通用的,并且面向不同Flash硬件和布局。FLASH存储器编程-支持Flash硬件 通过与处理器连接的调试器来实现编程。XPS或者SDK在目标处理器上下载和执行小的系统内Flash编程存根(stub)。主机Tcl脚本使用命令驱动系统内Flash编程存根(stub)来完成对Flash的编程。对话框不处理或理解被编程的映像文件,只是将其编程到flash存储器上。设计的软件应用和硬件设置必须推断出编程所期望的文件内容。表4.5给出了所支持的Flash的配置。表5.6给出了CFI定义

57、的命令集。FLASH存储器编程-支持Flash硬件8的可用的可用设备产生生8比特数据比特数据总线16/8的可用的可用设备工作在工作在8位模式下,位模式下,产生生8比特数据比特数据总线32/8的可用的可用设备工作在工作在8位模式下,位模式下,产生生8比特数据比特数据总线16/8的可用的可用设备工作在工作在16位模式下,位模式下,产生生16比特数据比特数据总线Paired8的可用的可用设备产生生16比特数据比特数据总线Quad8的可用的可用设备产生生32比特数据比特数据总线Pair16的可用的可用设备产生生32比特数据比特数据总线32/8的可用的可用设备工作在工作在32位模式下,位模式下,产生生3

58、2比特数据比特数据总线32的可用的可用设备产生生32比特数据比特数据总线FLASH存储器编程-支持Flash硬件CIF厂商厂商IDOEM提供商提供商接口名字接口名字1Intel/SharpIntel/Sharp扩展命令集展命令集2AMD/FujitsuAMD/Fujitsu标准命令集准命令集3IntelIntel标准命令集准命令集4AMD/FujitsuAMD/Fujitsu扩展命令集展命令集FLASH存储器编程-支持Flash硬件 默认情况下,flashwriter程序只支持那些CFI设备,即其扇区映射匹配存放在CFI表中的内容。一些flash厂商知道在CFI中存放扇区映射,但是根据flas

59、h启动结构有所不同。 当对flash进行编程时,假定满足下面条件: (1)flash硬件假定在复位状态; (2)所有的flash扇区都假定在非保护状态; (3)flash编程存根不会解锁或者初始化flash。如果flash不 在准备状态或者非锁定状态时,将产生错误报告。 FLASH存储器编程-编程的先决条件 在使用编程Flash存储器对话框时,必须满足下面先决条件: 1)在合适的EDK工程中,打开对话框;对话框从当前打开的 EDK工程中推断和使用数据; 2)设计的硬件必须在flash和至少一个处理器之间通过 PLB/AXI EMC外设正确的连接; 3)设计人员必须确认通过JTAG和主机连接,使

60、用工程 的比特流文件初始化FPGA,这是因为对话框通过下载和 执行flashwritter程序来工作。FLASH存储器编程-编程的先决条件 4)必须使用XMD调试选项对话框来指定当前设计的调试器的 信息。如果使用MicroBlaze处理器来编程flash存储器,处理 器必须将MDM和flash连接。如果XMD STUB软件插入的监 视器用于与处理器的调试连接,则不能执行flash编程操作。 5)在之前必须执行产生库和BSP的步骤,这是因为flashwritter使 用处理器的库。 6)Flashwritter必须有至少8KB的空间。Flashwritter本身会占用一 大部分的储存器。剩余的一

61、大块区域用于缓冲来自主机的比 特流。因此,当分配给flashwritter的空间多余8KB时,将大大 提高flashwritter的速度,这对于大的映像文件的编程是非常重 要的。FLASH存储器编程-编程对话框 单击TOOLS-Program Flash Memory来打开编程Flash存储器对话框。在对话框下给出下面的信息。 1、需要编程的文件 通过浏览文件和选择文件,或者给出文件的路径,来选择需要编程到flash设备上的文件。 FLASH存储器编程-编程对话框 2、自动转换文件 选择自动转换文件检验栏(check box),当文件要编程到flash中时,必须转化和以映像文件的格式保存在fl

62、ash中。选择映像文件的格式,比如,SREC。只有当编程的文件是ELF格式的时候,才可以使用自动转换文件选项。 当创建启动装入(bootloader)代码时或者将ELF格式的启动装入代码转换成普通的启动装入映像格式(SREC)时,这个选项非常有用。FLASH存储器编程-编程对话框 3、处理器实例 选择通过EMC控制器和flash设备连接的处理器。这个处理器将被用来执行flashwriter程序。 4、Flash存储器属性 1)实例名字 选择存储器控制器的实例名,该控制器用来和目标版上的flash 设备接口。 2)编程的偏移地址 选择编程flash的偏移地址,在该偏移地址下开始编程映像文 件。如

63、果设计人员想在flash不同的区域编程不同的文件映像, 每次可以改变这个参数来选择在flash内不同的位置来编程文 件。FLASH存储器编程-编程对话框 5、便笺式(Scratch Pad)存储器属性 选择便笺式存储器控制器的实例名,该控制器用来和目标版上的空闲的便笺式存储器连接,而该存储器用来存储flashwritter。该存储器必须满足前面的大小要求。不要和flash选择相同的存储器控制器。 6、创建Flash启动代码 选择Create Flash Bootloader检查栏来自动的为该配置创建启动装入应用程序。 在SW Application Project域内,指定启动装入应用程序的名

64、字。使用自动产生的值来初始化启动装入应用程序的名字,如果需要的话,设计人员可以改变这个值。FLASH存储器编程-编程对话框 7、编程存储器 单击Program Flash按钮开始flashwriter。对话框在XPS控制台释放XMD。算法的剩余部分从控制台执行。FLASH存储器编程-定制定制Flash编程编程 上面所介绍的编程flash的配置可能不适合设计者的要求,比如,硬件和前面的CFI命令集不兼容或者存储器大小的限制。该部分简单的介绍flash编程的算法,设计人员可以为特殊的配置进行定制。 当单击Program Flash按钮时,产生下面的事件序列: 1、flash_params.tcl文

65、件被写入到etc/文件夹下。这包含用来描 述flash编程会话的参数,并且被Tcl文件使用。FLASH存储器编程-定制定制Flash编程编程 2、XPS使用在XMD上执行的Tcl脚本来发布XMD,比如: xmd tcl flashwriter.tclxmd tcl flashwriter.tcl 这个flashwriter主脚本来自安装程序。当运行Program Flash按钮 时,如果运行自己的驱动脚本,需要在设计工程的根目录下存放自己的fashwriter.tcl脚本。XMD首先在该目录下查找该脚本,然后才会在其它目录下查找该脚本;FLASH存储器编程-定制定制Flash编程编程 3、fl

66、ashwriter Tcl脚本从etc/flashwriter文件夹下拷贝flashwriter 应用程序源代码。在本地编译应用程序,在所选的便笺式存储器的地址范围外执行程序。如果希望编译自己设计的flashwriter源代码,需要修改在本地工程文件夹下的fashwriter.tcl脚本,使其编译自己的flashwriter源代码。FLASH存储器编程-定制定制Flash编程编程 4、脚本下载flashwriter到处理器。通过存储器内的邮箱,脚本和flashwriter程序通信。换句话说,根据在flashwriter地址空间的变量写参数到存储器位置,并且执行flashwriter。 5、脚本

67、在每个操作结束时,等待flashwriter调用一个回调函数,通过在函数上设置断点,在回调函数时停止执行程序。一旦flashwriter停止执行时,主机上的Tcl将处理结果,并且继续执行更多要求的命令;FLASH存储器编程-定制定制Flash编程编程 6、当编程时,flashwriter只擦写那些需要保存映射文件的存储器区域; 7、如果试图进行一次编程,Tcl下载整个映像文件到存储器中,并且让flashwriter完成编程操作。如果在流模式下编程,它反复的操作(stream)映像文件的每一块,并且让flashwriter以大块方式对flash编程。它在flashwriter内的存储器缓冲区保存

68、这些大块。 8、一旦编程完成,flashwriter Tcl发生退出命令到flashwriter,并且终止XMD会话。FLASH存储器编程-定制定制Flash编程编程 下面给出用于定制流程的步骤示例: 1从/data/xmd/flashwriter.tcl目录复制 flashwriter.tcl到EDK的工程文件下; 2在EDK工程下建立sw_services目录(如果不存在) 3复制/data/xmd/flashwriter目录到sw_services目 录; 4编辑flashwriter.tcl文件的行 set flashwriter_srcfile join $xilinx_edk “d

69、ata” “xmd” “flashwriter” “src” 将其改为 set flashwriter_srcfile join “.” “sw_services” “flashwriter” “src” FLASH存储器编程-定制定制Flash编程编程 5每次使用Program Flash Memory对话框时,设计人员 复制到sw_services目录下的脚本和源代码就被使用一 次。 6如果设计人员希望GUI不覆盖etc/flash_params.tcl文 件,设计人员可以在命令行运行命令: xmd tcl flashwriter.tcl 来使用设计者在etc/flash_params.t

70、cl文件中填充的值;表5.7给出了etc/flash_params.tcl文件中各种参数的列表。FLASH存储器编程-定制定制Flash编程编程变量量功能功能FLASH_FILE该字符串包含了字符串包含了编程文件的全路径程文件的全路径FLASH_BASEADDRFlash bank的基地址的基地址FLASH_PROG_OFFSETFlash bank的偏移地址,在的偏移地址,在该地址下地址下进行行编程程SCRATCH_BASEADDR在在编程程时,所使用的,所使用的便便笺存存储器的基地址器的基地址SCRATCH_LEN便便笺存存储器的字器的字节大小大小XMD_CONNECT用于用于XMD和和处

71、理器理器连接的命令接的命令PROC_INSTANCE用于用于编程程时的的处理器理器实例名字例名字TARGET_TYPE用于用于编程的程的处理器理器实例的例的类型:型:MicroBlaze或或PowerPC405FLASH_BOOT_CONFIG参考参考“处理理Flash有冲突扇区有冲突扇区”部分部分EXTRA_COMPILER_FLAGS对于于MicroBlaze处理器,指定任何一个理器,指定任何一个编译器器标志,用于打开所支持的硬件志,用于打开所支持的硬件特性。例如,如果使能硬件乘法器,特性。例如,如果使能硬件乘法器,则添加添加 mno-xl-soft-mul。对于于PowerPC则不需要不

72、需要设置置这个个变量量FLASH存储器编程-可操作的特点和方法可操作的特点和方法 1处理Xilinx平台Flash模式 Xilinx平台Flash初始化在同步模式。在执行设备操作前,必须将其设置为异步模式。当使用Xilinx软件开发工具时,能选中对话框将Xilinx平台Flash作为目标设备。这个设置使得程序的内部解决方法在对其编程以前,就将其设置为异步模式。FLASH存储器编程-可操作的特点和方法可操作的特点和方法 2处理Flash设备,0xF0作为读复位命令 CFI规范定义将0xFF/0xF0,作为读复位。Flash编程软件使用0xFF作为默认的读复位命令。某些Flash要求使用0xF0作

73、为读复位命令,然而,Flash编程软件不能自动确定这种情况。结果,可能导致一些问题。如果出现这个问题,则修改文件cfi.c中的: #define FRR_CMD 0xFF 为: #define FRR_CMD 0xF0FLASH存储器编程-可操作的特点和方法可操作的特点和方法 3、处理有冲突扇区的布局 正如前面所提到的那样,flash的厂商知道在CFI表中保存不同的扇区映射,但是存在不同引导拓扑结构所产生的不同的扇区映射方法。由于CFI的引导拓扑结构没有标准化,因此flashwriter无法确定设计所使用的特定flash的布局。 FLASH存储器编程-可操作的特点和方法可操作的特点和方法 如果

74、使用的flash硬件的扇区布局不同于存放在表内的扇区映射,设计人员必须订制flash编程流程。设计人员必须确定所使用的flash是顶部启动还是底部启动设备。在顶部启动的flash设备,最小的扇区是flash的最后一个扇区;在底部启动的flash设备,最小的扇区是flash的第一个扇区。FLASH存储器编程-可操作的特点和方法可操作的特点和方法 一旦确定了flash的类型,必须象前面介绍的那样拷贝文件来创建定制的编程流程: (1)如果使用底部启动的flash,在你的etc/flash_params.tcl文件中添加下面一行: set FLASH_BOOT_CONFIG BOTTOM_BOOT_F

75、LASH (2)如果使用顶部启动的flash,在你的etc/flash_params.tcl文件中添加下面一行: set FLASH_BOOT_CONFIG TOP_BOOT_FLASH 然后下一步从命令行运行下面的命令: xmd tcl flashwriter.tcl 内部的,这些变量引起flashwriter将根据引导拓扑结构重新安排扇区映射。FLASH存储器编程-可操作的特点和方法可操作的特点和方法 4、AMD/Fujitsu命令集的数据查询算法 在擦除和编程操作的过程中,支持AMD/Fujitsu命令集的flash使用DQ7数据查询算法。一些flash使用配置寄存器来控制DQ7位的数据

76、查询,要求在擦除操作时,DQ7输出0,而操作结束时输出1。相似的,在编程的时候,DQ7输出反转(invert)数据,在编程结束时,DQ7输出真实的数据。当使用Program Flash Memory对话框时,如果使用的flash硬件有不同的配置,编程会失败(使设计人员赶到奇怪)。 参考使用的flash的数据手册,如何去复位配置,使DQ7在前面的描述方式内。一些flash设备提供这种配置属性:AT49BV322A(T),AT49BV162A(T)和AT49BV163A(T)。GNU编译器工具 EDK工具包括GNU编译器(GCC)工具,用于PowerPC和MicroBlaze处理器。 GCC工具支

77、持C语言和C+语言。MicroBlaze的GNU工具包括mb-gcc和mb-g+编译器,mb-as汇编器和mb-ld加载器/连接器,PowerPC的GNU工具包括powerpc-eabi-gcc和powerpc-eabi-g+编译器,powerpc-eabi-as汇编器和powerpc-eabi-ld连接器。 工具链也包括C,Math,GCC和C+标准库。 GCC工具基于开放源码GCC3.4构建。GNU编译器工具-编译器框架 编译器也使用普通的二进制工具binutils,比如一个汇编器,连接器和对象转储。MicroBlaze编译器工具使用基于GNU2.10.1的二进制工具binutils,Po

78、werPC编译器工具使用基于GNU2.15的二进制工具binutils。GNU编译器工具-编译器框架cpp0输入输入c/c+文件文件cc1cc1plusmb-asmb_ld输出输出ELF文件文件库库图图5.10 GNU工具流程工具流程GNU编译器工具-编译器框架 GNU编译器调用下面的可执行文件: 1)预编译器(cpp0)-这是编译器的首次调用。cpp0所有的宏,这些宏在源文件和头文件中定义 2)机器和语言指定编译器-这个编译器是基于前面预处理过输出的代码。语言指定的编译器包括下面:C编译器(cc1)-编译器负责大多数的输入C代码的优化,并且产生汇编代码;C+编译器(cc1plus)-编译器负

79、责大多数的输入C+代码的优化,并且产生汇编代码;GNU编译器工具-编译器框架 3)汇编器(mb-as为MicroBlaze,powerpc-eabi-as为PowerPC)-汇编代码是汇编语言的助记符。汇编器将这些助记符转换为机器语言。汇编器也解析由编译器产生的标识。汇编器建立一个能传送给连接器的目标文件 4)连接器(mb-ld为MicroBlaze,powerpc-eabi-ld为PowerPC)-连接器连接所有由汇编器产生的目标文件。如果在命令行提供库,通过连接,连接器解析来自汇编器的一些函数代码中未定义的参考类型。GNU编译器-编译器使用 compiler_Name options fi

80、les compiler_Name为编译器的名字,powerpc-eabi gcc(PowerPC)或mb-gcc(MicroBlaze)用于编译C语言文件;powerpc-eabi-g+(PowerPC)或mb-g+(MicroBlaze)用于编译C语言文件; 编译器允许下面的文件类型作为输入:C源文件、C+源文件、汇编文件、目标文件和连接脚本文件。GNU编译器-编译器使用 编译器输出下面的文件: 1)ELF文件(默认输出 Solar系统为a.out,Windows系统为a.exe); 2)汇编文件(当选择save-temps或者-S选项); 3)目标文件(当选择save-temps或者-c

81、选项); 4)预处理输出.i或.ii文件(当选择save-temps选项)。 表4.8给出了文件类型和扩展名。 表4.9给出了powerpc-eabi-gcc和mb-gcc编译器所需要的库。GNU编译器-编译器使用扩展展文件文件扩展名展名.cC文件文件.CC+文件文件.cxxC+文件文件.cppC+文件文件.c+C+文件文件.ccC+文件文件.S汇编文件,但是可能有文件,但是可能有预处理器指令理器指令.s汇编文件,但是没有文件,但是没有预处理器指令理器指令GNU编译器-编译器使用库描述描述libxil.a包含包含为EDK工具开工具开发的的驱动、软件服件服务(XilNet&XilMFS)和初始化

82、文件)和初始化文件libc.a标准准C库,包含函数,例如,包含函数,例如strcmp和和strlenlibgcc.aGCC低低层次次库,包含仿真,包含仿真库例程,用于浮点和例程,用于浮点和64位的算位的算术libm.a数学数学库,包含函数,例如:,包含函数,例如:cos、sinlibsupc+.aC+支持支持库,用于异常,用于异常处理的例程,理的例程,RTTI和其它和其它libstdc.aC+标准平台准平台库。包含。包含标准准语言言类,例如那些用于,例如那些用于I/O流,流,I/O文件,串操文件,串操作和其它作和其它GNU编译器-编译器使用(语言术语) GCC编译器识别C和C+语言,并且产生相

83、应的代码。通过GCC规约,可以对一个源文件相同的使用gcc或者g+编译器。设计者使用的编译器和文件的扩展名决定了输入和输出文件所使用的语言。 当使用gcc编译器,编程语言通过文件的扩展名确定。如果扩展名是C+源文件,语言就设为C+。这就是说,如果对包含在CC文件中的C代码进行编译,即使使用了gcc编译器,它也会自动地拆解函数名(mangle function name)。GNU编译器-编译器使用(语言术语) gcc和g+编译器最基本的不同在于,g+自动地将语言设置为C+(而无需关注文件的扩展名),如果连接的话,自动加入C+支持库。这意味着,即使使用g+在.c文件中编译C代码,那么也将拆解名字(

84、mangle name)。 名字拆解对C+是一个独特的概念,其它语言支持符号的过载。一个函数过载(function overload),表示相同的函数(不同的传递参数)能执行不同的功能,并且能有不同的返回值。为了支持函数过载,C+编译器对函数类型进行编码来调用函数名,避免使用相同的名字对函数进行多次定义。GNU编译器-编译器使用(语言术语) 如果采用混合编译模式(一些源文件包含C代码,而另一些源文件包含C+代码,即使用gcc编译一些文件,而使用g+编译另一些文件),要注意名字拆解。为了避免C符号的名字拆解,在符号声明时,使用下面的构造: #ifdef _cplusplus Extern “C”

85、 end if int foo(); int morefoo(); #ifdef _cplusplus end ifGNU编译器-编译器使用(语言术语) 使这些声明在头文件和其它源文件中可以使用。这就使得当编译这些符号的定义或参考时,编译编译器使用C语言。 当用其中一种参数进行编译时,使用-x选项可以强制使用的语言类型。 当使用gcc编译器时,libstdc+.a和libsupc+.a不被自动连接。当编译C+程序时,使用编译器的g+参数使得所支持的库被自动地连接。对gcc命令添加-lstdc+和-lsupc+,也是可以的选择。GNU编译器-编译器使用(编译器选项 )选项功能功能-E只只预处理,

86、不理,不编译,汇编和和连接。在接。在标准准输出出设备上上显示示预处理理过的的输出出-S只只编译,不,不汇编和和连接。接。产生生.s文件文件-c只只编译和和汇编,不,不连接。接。产生生.o文件文件-g添加添加调试信息,信息,该信息由信息由GNU调试器器mb-gdb或或powerpc-eabi-gdb使用使用(当当输入入为C/C+源文件源文件时可用可用)-gstabs对编译的的汇编文件添加文件添加调试信息,将信息,将该选项直接直接传递到到GNU汇编器中,器中,或者是通或者是通过-Wa选项到到编译器器-Wa,option传递逗号分割的逗号分割的选项到到汇编器器-Wp,option传递逗号分割的逗号分

87、割的选项到到预处理器理器-Wl,option传递逗号分割的逗号分割的选择到到链接器接器-B directory添加目添加目录到到C运行运行时间库查找路径找路径-L directory添加目添加目录到到库查找路径找路径-I directory添加添加库到到头文件文件查找路径找路径GNU编译器-编译器使用(编译器选项 )-l library为为定定义的符号的符号查找找库,编译器器对用用户提供的提供的库名字自名字自动添加添加lib前前缀。编译器器对所提供的所提供的选项的的顺序比序比较敏感,敏感,选项应该在源文件后在源文件后给出。如果出。如果设计者者创建建了一个自己的了一个自己的库叫叫libproje

88、xt.a,可以使用下面的命令将,可以使用下面的命令将库中的函数包含近来:中的函数包含近来: Compiler Source_Files L$LIBDIR l projext-v详细显示被示被编译器器调用的程序用的程序-o filename设置置输出的文件名出的文件名-save-temps保存在每一步通保存在每一步通过时产生的中生的中间文件文件1C语言的言的预处理理输出文件:出文件:input_file_name.i或或C+语言的言的预处理理输出文件:出文件:i nput_file_name.ii2以以汇编格式存在的格式存在的cc1的的编译输出:出:input_file_name.s3以以ELF

89、格式存在的格式存在的汇编器的器的输出:出:input_file_name.s-help显示示选项的列表的列表-On指定指定优化化级别,n=0,1,2,3,S;0-无无优化;化;1-中中级优化;化;2-充分充分优化;化;3-充分充分优化,化,试图内内联小的子程序;小的子程序;S-优化代化代码长度;度;当当优化化级0时,引起代,引起代码的重新的重新编排,当排,当调试代代码时,不要使用,不要使用优化化级别GNU编译器-编译器使用(编译器选项 ) 编译器mb-gcc和powerpc-eabi-gcc,为库和头文件查找某个路径。GNU编译器-编译器使用(连接器选项) 1)-defsym_STACK_SI

90、ZE=value 使用连接器选项可以修改堆栈存储空间大小,STACK-SIZE变量是分配给堆栈的总的空间。默认值为100个字,400个字节。如果需要更大的空间可以修改这个参数。 在一些情况下,程序可能需要更大的堆栈。如果程序要求堆栈的大小比可用堆栈多的话,程序试图写道其它的不正确的程序空间内,这样将导致不正确的代码执行。 GNU编译器-编译器使用(连接器选项) 2)-defsym_HEAP_SIZE=value 通过_HEAP_SIZE变量,可以控制为堆分配的存储空间。默认值为0。动态的存储器分配例程使用堆。如果程序通过这种方式使用堆,则必须为_HEAP_SIZE提供合适的值。GNU编译器-编

91、译器使用(存储器设计) 1)保留存储器 保留存储器由硬件和软件程序环境定义的特权使用。典型的,包含中断向量位置和操作系统级的例程。表4.11给出了处理器硬件所定义的为MicroBlaze和PowerPC处理器定义的保留存储器的位置。GNU编译器-编译器使用(存储器设计)处理器理器类型型保留存保留存储器器保留目的保留目的默默认的的TEXT开始开始地址地址MicroBlaze0x0-0x4F复位,中断,异常和复位,中断,异常和其它保留的向量位其它保留的向量位置置0x50PowerPC0xFFFFFFFC-0xFFFFFFFF 复位向量位置复位向量位置0xFFFF0000GNU编译器-编译器使用(存

92、储器设计) 2)I/O存储器 I/O存储器,是指程序通过处理器总线与存储器映射的外设进行通信的地址。这些定义的地址作为硬件平台规范的一部分。GNU编译器-编译器使用(存储器设计) 3)用户和程序存储器 用户和程序存储器是指,那些编译后需要运行可执行文件的存储区域。根据规则,这部分区域用来存储指令,只读数据,读-写数据,程序堆栈和程序堆。这些部分可以存放在系统中的任何可寻址的存储器中。默认情况下,编译器产生代码和数据地址从表4.11所列的地方开始,并且占用连续的存储空间。这是程序最常的设计方式。通过定义下面的符号来改变程序的开始地址: _TEXT_START_ADDR(为MicroBlaze)

93、_START_ADDR(为PowerPC)。GNU编译器-编译器使用(存储器设计) 在一些特殊情况下,需要将ELF文件分别分配在不同的存储器空间,可以使用连接器命令语言(连接器脚本)。 下面给出了可能需要改变可执行文件的存储器映射: 1)将大的代码段分配在多个小的存储器内 2)将经常执行的部分重映射到快速的存储器内 3)将只读部分映射到非易失性flash存储器内GNU编译器-编译器使用(目标文件) 通过从目标文件(.o)使用连接器将输入部分连接到一起,这样就建立了可执行文件。 编译器在默认状态下,在定义的区域部分建立代码。每部分给予相关的意义和目的分配给一个名字。图4.12给出了目标文件或可执

94、行文件各部分的布局。GNU编译器-编译器使用(目标文件).text.rodata.sdata2.data.sdata.sbss.bss代码部分代码部分只读数据部分只读数据部分小的只读数据部分小的只读数据部分读读-写数据部分写数据部分小的读小的读-写数据部分写数据部分小的未初始化数据部分小的未初始化数据部分未初始化数据部分未初始化数据部分图图5.11 目标文件或可执行文件分布目标文件或可执行文件分布GNU编译器-编译器使用(目标文件) 1.text 这部分为目标文件包含可执行程序的指令。这部分有x (可执行),r(只读)和i(初始化)标志。这部分被分配到一个初始化的只读存储器ROM内,该ROM是

95、可以通过处理器的指令总线寻址。 2.rodata 这部分包含只读数据。这部分有r(只读)和i(初始化)标志。这部分被分配到一个初始化的只读存储器ROM内,该ROM是可以通过处理器的指令总线寻址。GNU编译器-编译器使用(目标文件) 3.sdata2 这部分和.rodata部分相似。这部分包含的小的只读数据小于8个字节。这部分由只读小数据锚(就是一个已经被标记过的地方,在这个地方能被找到)访问。这样确保对该区域使用单指令访问。通过使用-G选项来改变该区域的大小。这部分有r(只读)和i(初始化)标志。 4.data 该部分包含读-写数据。这部分有w(读-写)和i(初始化)标志。这部分必须被映射到R

96、AM中,而不能映射到ROM。GNU编译器-编译器使用(目标文件) 5.sdata 该部分包含了小的读-写数据,其大小小于指定的尺寸。默认为8字节。选择 G选项可以修改数据大小而进入这个区域。这部分由读-写小数据引擎访问。这样确保对该区域使用单指令访问。这部分有w(读-写)和i(初始化)标志。该部分必须映射到初始化RAM。 6.sbss 该部分包含小的未初始化的数据,其大小小于指定的尺寸。默认为8字节。选择 G选项可以修改数据大小而进入这个区域。这部分有w(读-写)标志。该部分必须映射到RAM。GNU编译器-编译器使用(目标文件) 7.bss该部分包含未初始化的数据,程序堆栈和堆也被分配到这个区

97、域。这部分有w(读-写)标志。该部分必须映射到RAM。 8、.init 该部分包含语言初始化代码。这部分和.text有相同的标志,该部分必须映射到ROM 9.finit 该部分包含语言清除代码。这部分和.text有相同的标志,该部分必须映射到ROMGNU编译器-编译器使用(目标文件) 10.ctors 该部分包含一列函数,该函数在程序启动时被调用。该部分和.data有相同的标志,该部分必须映射到RAM 11.dtors 该部分包含一列函数,该函数在程序结束时被调用。该部分和.data有相同的标志,该部分必须映射到RAM 12.got2/.got 该部分包含到程序数据的指针。该部分和.data有

98、相同的标志,该部分必须映射到RAM 13.eh_frame 该部分包含帧展开信息,这些信息用来处理异常。该部分和.rodata有相同的标志,该部分必须映射到ROMGNU编译器-编译器使用(连接脚本 ) 连接工具使用连接脚本指定的命令来确定在存储器不同块的程序。它描述了所有输入目标文件到可执行文件的输出部分的映射。输出部分被映射到系统的存储器。 如果不需要改变默认的连续分配程序内容到存储器的设置,那么不需要连接脚本。连接器提供了默认的连接脚本,知道如何连续的分配程序。设计者可以通过定义连接符号:_TEXT_START_ADDR(为MicroBlaze)和_START_ADDR(为PowerPC)

99、来选择只修改程序的开始地址。比如:GNU编译器-编译器使用(连接脚本 ) mb-gcc -Wl, -defsym Wl, _TEXT_START_ADDR=0x100 powerpc-eabi-gcc -Wl, defsym Wl,_TEXT_START_ADDR=0x2000 mb-ld -defsym _TEXT_START_ADDR=0x100GNU编译器-编译器使用(连接脚本 )选择默认脚本将使用来自下面目录: $XILINX_EDK/gnu/ / /lib/ldscri的连接器:elf32 当没有使用下面的情况时,默认使用elf32 当使用-n选项调用连接器elf32 当使用-N选项

100、调用连接器elf32 当使用-N选项调用连接器elf32 当使用-r选项调用连接器elf32 当使用-Ur选项调用连接器elf32 当使用-n选项调用连接器GNU编译器-编译器使用(连接脚本 ) 在gcc命令行使用连接脚本。为编译器使用命令行选项-Wl,-T,-Wl,,正如下面所描述的那样: compiler Wl,-T Wl, linker_script GNU编译器-编译器使用(连接脚本 ) 如果执行连接器,用下面的命令包含脚本: linker T linker_script 通过这个命令告诉GCC使用设计者自己的脚本,而不使用内建的默认的连接脚本。从XPS可以产生程序的连接脚本。在XPS

101、中,选择Tools-Generate Linker Script。这样就打开连接脚本产生器工具。存储器映射也由该工具完成。堆栈和堆的尺寸在存储器映射时,设置完成。一旦产生了连接器脚本,当应用程序在XPS中编译时,自动作为GCC的一个输入。连接脚本定义了布局和输出可执行文件的每一部分的开始地址。GNU编译器-MicroBlaze编译器及选项编译器及选项 MicroBlaze的GNU编译器有自己独特的选项和特点。当使用MicroBlaze编译器时,预处理器自动提供_MICROBLAZE_定义。可以在任何有条件代码的地方使用这个定义。表4.12给出了MicroBlaze指定的选项。 GNU编译器-M

102、icroBlaze编译器及选项编译器及选项选项解解释说明明-xl-mode-executable使用使用该选项为MicroBlaze去去编译常常规嵌入式嵌入式应用程序,用程序,这是是编译的默的默认设置置-xl-mode-xmdstub使用使用该选项编译应用程序,用程序,该程序在程序在软件插入行件插入行为(即(即XMDSTUB)下)下进行行调试。当使用。当使用XMDSTUB下下载到到MicroBlaze时,使用,使用该选项。在。在这样的程序的程序下,地址下,地址0x0-0x800的地方被的地方被XMDSTUB使用。使用使用。使用这个个选项的作用:的作用:1设计的程序由的程序由0x800开始。开始

103、。2ctr1.o用作初始化文件。当程序用作初始化文件。当程序执行完后,行完后,该文件将控制返回文件将控制返回给XMDSTUB注意:当硬件注意:当硬件调试打开或者非打开或者非调试时,不要使用,不要使用这种模式。种模式。-xl-mode-bootstrap 使用使用该选项编译应用程序,用程序,该程序能使用引程序能使用引导启启动程序来引程序来引导启启动。使用。使用该选项编译的的应用程序缺少复位向量。典型的引用程序缺少复位向量。典型的引导启启动驻留在非易失性存留在非易失性存储器器映射到映射到处理器的复位向量。理器的复位向量。 如果普通的可如果普通的可执行程序使用行程序使用这个引个引导启启动代代码加加载

104、,应用程序的复位向量用程序的复位向量将覆盖引将覆盖引导启启动代代码的复位向量。在此情景中,在的复位向量。在此情景中,在处理器复位理器复位时,启,启动引引导代代码不会首先不会首先执行重行重载该应用程序和做其它初始化工作。用程序和做其它初始化工作。为了避免了避免这种情况,种情况,设计人人员使用使用这个个编译器器标志来志来编译启启动引引导应用程序。用程序。在在处理器复位理器复位时,控制就能到达启,控制就能到达启动引引导代代码而不是而不是应用程序。用程序。这种模式种模式使用使用crt2.o作作为启启动文件文件GNU编译器-MicroBlaze编译器及选项编译器及选项-xl-mode-novectors

105、 使用使用该选项编译应用程序,用程序,该程序不需要使用任何的程序不需要使用任何的MicroBlaze的向量。的向量。这种模式使用种模式使用crt3.o作作为启启动文件。文件。-mxl-gp-opt使用小数据区域使用小数据区域锚,为性能和尺寸性能和尺寸进行行优化化 如果程序包含地址的高如果程序包含地址的高16位非位非0,则加加载/存存储操作需要操作需要2个指令,个指令,MicroBlaze ABI提供了两个全局小数据区域(最大提供了两个全局小数据区域(最大64KB),在),在这个区域的个区域的数据可以使用小数据区域数据可以使用小数据区域锚和和16位立即数位立即数访问,只需要一个指令用于加,只需要

106、一个指令用于加载/存取操存取操作。作。-mxl-soft-mul为所有的乘法操作使用所有的乘法操作使用软件例程(件例程(_mulsi3)。)。对没有硬件乘法器的没有硬件乘法器的设备使使用用这个个选项。这对mb-gcc编译器是默器是默认选项-mxl-xl-soft-mul使用硬件乘法器。使用硬件乘法器。编译器器产生生mul指令指令-mxl-soft-div 为所有的除法操作使用所有的除法操作使用软件例程(件例程(_divsi3,_udivsi3)。)。对没有硬件除法没有硬件除法器器的的设备使用使用这个个选项。这对mb-gcc编译器是默器是默认选项-mxl-xl-soft-div使用硬件除法器。使

107、用硬件除法器。编译器器产生生div指令指令-mxl-stack-check 产生在运行生在运行时的代的代码用于用于检查堆堆栈溢出。当溢出溢出。当溢出产生生时,程序跳到子例,程序跳到子例程程_stack_overflow_exit。该子程序将子程序将变量量_stack_overflow_error设置置为1GNU编译器-MicroBlaze编译器及选项编译器及选项-mxl-barrel-shift使用硬件的桶形移位寄存器。使用硬件的桶形移位寄存器。编译器器产生硬件桶形移位指令生硬件桶形移位指令-mxl-pattern-compare 产生代生代码时,使用模式比,使用模式比较(pattern co

108、mpare)指令。当)指令。当MicroBlaze硬件有硬件有模式比模式比较选项使能使能时,使用,使用该选项。使用模式比。使用模式比较,可以加速程序中的布,可以加速程序中的布尔尔操操作。模式比作。模式比较操作,也允操作,也允许对字字长的数据的数据进行操作,例如行操作,例如strcpy,strlen,strcmp等。等。-mhard-float 产生硬件浮点指令。当生硬件浮点指令。当MicroBlaze硬件的硬件的FPU使能使能时,使用,使用该选项。该选项使能在使能在编译器中使用器中使用fadd,frsub,fmul,fdiv指令。也使用指令。也使用fcmp.p指令指令,p为谓词条件,例如条件,

109、例如le,ge,lt,gt,eq,ne。当使能。当使能FPU时,这些指令由些指令由MicroBlaze译码和和执行。行。-mno-clearbss这个个选项用来用来编译程序,程序,该程序用来仿真。根据程序用来仿真。根据C语言言标准,未初始化全局准,未初始化全局变量被分配在量被分配在.bss区域和当程序开始区域和当程序开始执行行时,保,保证其其为0。典型的是通。典型的是通过在程序开在程序开始始执行行时,C启启动代代码运行一个循运行一个循环来填充来填充.bss区域。此外,区域。此外,优化化编译器能器能为C代代码内全局内全局变量分配量分配0到到.bss区域。区域。在仿真在仿真环境中,境中,这两种两种

110、语言特征被多余的开言特征被多余的开销(不需要使用)。一些仿真器自(不需要使用)。一些仿真器自动的将整个存的将整个存储器清器清0。甚至在普通。甚至在普通环境下,写境下,写C代代码而不依靠全局而不依靠全局变量量为0来来开始程序。开始程序。这样,可以使,可以使C启启动文件不需要用文件不需要用0初始化初始化.bss区域。区域。-msmall-divides 当没有硬件除法器当没有硬件除法器时,为小的除法小的除法产生生优化代化代码。对于有符号的整数除法,于有符号的整数除法,当分子和分母在当分子和分母在0-15之之间时,该选项提供快速的提供快速的查找表除法。当硬件除法器找表除法。当硬件除法器使能使能时,该

111、选项不起作用。在内部使不起作用。在内部使编译器不分配被初始化器不分配被初始化为0的全局的全局变量到量到.bss而将其分配在而将其分配在.data区域。区域。GNU编译器- MicroBlaze汇编器 用于Xilinx的MicroBlaze软核处理器的mb-as汇编器支持标准的GNU编译器的可选项。也支持同样的标准GNU汇编器支持的汇编指令集。mb-as支持所有的MicroBlaze机器指令集提供的操作码(除了imm指令)。当使用大的立即数时,mb-as汇编器产生imm指令。汇编语言编程器并不要求用imm指令书写代码。GNU编译器- MicroBlaze汇编器 mb-as汇编器要求MicroBl

112、aze内使用立即数的指令必须指定为一个常数或标识。如果指令要求PC相关的操作数,mb-as汇编器计算它,如果需要的话,包含一个imm指令。比如,如果相等,分支立即指令要求PC相关的操作数。汇编编程器应该这样使用该指令: beqi r3,mytargetlabel 其中mytargetlabel是目标指令的标号。mb-as汇编器计算指令立即数的值作为mytargetlabel。如果立即数的值大于16位,mb-汇编器自动插入一个imm指令。如果mytargerlabel的值在编译时不知道,mb-as汇编器总是插入一个imm指令。使用连接器的relax选项来去除任何不需要的imm指令。GNU编译器-

113、 MicroBlaze汇编器 在支持MicroBlaze标准指令集时,mb-as汇编器还支持一些伪代码来减轻汇编编程的任务。表4.13给出了所支持的伪代码。GNU编译器- MicroBlaze汇编器伪操作操作码解解释说明明nop不做任何操作不做任何操作,用指令,用指令or R0,R0,R0代替代替La Rd,Ra,Imm被指令被指令addik Rd,Ra,imm;=Rd=Ra+Imm代替代替not Rd,Ra被指令被指令xori Rd,Ra,-1代替代替Neg Rd,Ra被指令被指令rsub Rd,Ra,R0代替代替sub Rd,Ra,Rb被指令被指令rsub Rd,Rb,Ra代替代替GNU编

114、译器- MicroBlaze连接器 1、-defsym_TEXT_START_ADDR=value 默认情况下,输出代码的代码部分从地址0x28的地方开始执行(0x800在XMDStub模式)。能使用该选项来改变执行地址。如果给mb-gcc提供这个的话,输出代码的代码部分可以从给定的value开始执行。如果使用默认的开始地址,则不需要使用这个选项 这是一个连接器的选项,当设计者独立调用连接器时应该使用这个选项。如果连接器作为mb-gcc的一部分调用,设计者必须使用下面的选项: -Wl,-defsym Wl,_TEXT_START_ADDR=valueGNU编译器- MicroBlaze连接器

115、2、-relax 这是连接器的一个选项,用来去除所有不需要的由汇编器产生的imm指令。汇编器为每一条在汇编时不能计算立即数的指令生成一条imm指令。这些指令的大部分并不需要imm指令。当设计者独立调用连接器时应该使用这个选项。如果连接器作为mb-gcc的一部分调用,自动提供给连接器。 GNU编译器- MicroBlaze连接器 3、-N 将代码和数据区域设置成可读的和可写的。并不采用页面对齐数据段。该选项只针对MicroBlaze处理器。顶层的GCC编译器自动包含这个选项,同时调用连接器,但如果设计者不使用GCC调用连接器,则应该使用该选项。启动文件启动文件 当生成一个可执行文件时,编译器在最

116、后的连接命令中包含一个预编译的启动和结束文件。启动文件在开始执行代码前,设置语言和平台环境。启动文件执行下面的行为: (1)设置所需要的复位,中断和异常向量 (2)设置堆栈指针,小数据锚和其它寄存器 (3)将BSS存储器清0 (4)调用语言初始化函数,比如C+构造器 (5)初始化硬件子系统,比如,如果程序被统计分析(Profile),则初始化统计分析定时器 (6)为主程序设置参数,并调用它启动文件启动文件 类似的,结束文件包含在应用程序执行完后必须执行的程序。下面是结束文件执行的行为: (1)调用语言清除程序,比如C+析构函数 (2)退出硬件子系统。比如,如果程序被统计分析,清除统 计分析子系

117、统初始化文件初始化文件 这些初始化文件在各种应用模式中使用,这些信息为高级用户提供改变或理解对于应用程序的启动代码。比如MicroBlaze,这里存在两个重要的C运行初始化阶段。第一个阶段用来设置向量,然后调用第二阶段初始化。它也基于不同的应用模式来提供退出存根。 这些初始化文件在各种应用模式中使用,这些信息为高级用户提供改变或理解对于应用程序的启动代码。比如MicroBlaze,这里存在两个重要的C运行初始化阶段。第一个阶段用来设置向量,然后调用第二阶段初始化。它也基于不同的应用模式来提供退出存根。 初始化文件初始化文件 第一级初始化文件 1)crt0.o 这个初始化文件用于那些运行在独立模

118、式下的程序,这些程序不使用启动引导或调试存根(debug stub),比如:xmdstub。CRT文件填充(populate)复位,中断,异常和硬件异常向量,并且调用第二级启动例程_crtinit。从_crtinit返回,在退出标号执行无限循环来结束程序。初始化文件初始化文件 第一级初始化文件 2)crt1.o 当应用程序在软件插入行为下进行调试时,使用该初始化文件。它填充所有的向量(除了断点和复位向量),并且将控制传递到第二级_crtinit启动例程。从_crtinit返回将控制返回XMDStub,用于通知调试器程序已经完成。初始化文件初始化文件 第一级初始化文件 3)crt2.0 当可执行

119、程序用启动引导代码加载时,使用该初始化文件。它填充所有的向量(除了复位向量),并将控制传递到第2级_crtinit启动例程,从_crtinit返回,通过在退出标记处执行无限循环。由于没有填充复位向量,在处理器复位时,控制被传送到启动引导代码,用于重新加载和重新开始程序。初始化文件初始化文件 第一级初始化文件 4)crt3.0 当可执行程序没有使用任何向量,并希望减少程序代码时,使用该初始化文件。它只填充复位向量,并将控制传递到第2级_crtint启动例程,并且从_crtinit返回,通过在退出标记处执行无限循环。由于没有填充其它向量,GNU连接机制并不添加任何中断和异常处理相关的例程,这样可以

120、节约代码空间。初始化文件初始化文件 第二级初始化文件 1)crtinit.o 这是默认的第二级C启动文件。该启动文件执行下面的步骤: 1将.bss清除为0 2调用_program_init 3调用“构造器”函数(_init) 4为main函数设置传递参数,并调用该函数 5调用“析构器”函数(_fini) 6调用_program_clean并且返回初始化文件初始化文件 第二级初始化文件 2)pgcrtinit.o 该文件在程序统计分析时使用。这个开始文件完成下面的步骤: 1将.bss区域清除为0 2调用_program_init 3调用_profile_init来初始化统计分析库 4调用“构造器

121、”函数(_init) 5为main函数设置传递参数,并调用该函数 6调用“析构器”函数(_fini) 7调用_program_clean,清除统计分析库 8调用_program_clean,并且返回初始化文件初始化文件 第二级初始化文件 3)sim-crtinit.o 当编译器使用_mno-clearbss选项时,使用该启动文件。这个开始文件完成下面的步骤: 1调用_program_init 2调用“构造器”函数(_init) 3为main函数设置传递参数,并调用该函数 4调用“析构器”函数(_fini) 5调用_program_clean并且返回初始化文件初始化文件 第二级初始化文件 4)s

122、im-pgcrtinit.o 在分析统计时,当编译器使用-mno-clearbss选项,使用该启动文件。这个开始文件完成下面的步骤: 1调用_program_init 2调用_profile_init来初始化统计分析库(profiling library) 3调用“构造器”函数(_init) 4为main函数设置传递参数,并调用该函数 5调用“析构器”函数(_fini) 6调用_program_clean,清除统计分析库 7调用_program_clean,并且返回初始化文件初始化文件 第二级初始化文件 5)其它文件 编译器也使用某种标准开始和结束文件为C+语言提供支持。包括crti.o,cr

123、tbegin.o,crtend.o和crtn.o。这些文件是标准的编译器文件,这些文件为.init,.finit,ctors和.dtors区域提供内容。修改启动文件修改启动文件 初始化文件分配给预编译器和源代码中。预编译器目标文件在编译器库目录下可以找到。用于MicroBlazeGNU编译器的初始化文件的源可以在 /sw/lib/microblaze/ Src目录下找到,其中为EDK的安装位置。 修改启动文件修改启动文件 为了实现定制的启动文件要求,设计者可以从源文件区域得到这些文件,并且通过包含这些文件把它作为应用程序的一部分。可以选择的方法是,设计者可以汇编文件为.o文件,并且将其放在公共

124、区域。在调用mb-gcc时使用-B directory-name命令行选项,可以指向新创建的目标文件,而不是标准文件。在最后编译行使用-nostartfiles,防止使用默认的启动文件。为C程序减少启动代码尺寸 如果对C程序代码的大小有严格的要求,需要去除所有额外的源代码的开销。这部分描述了如何减少调用C+构造器或析构器代码的额外开销。通过这种修改,可以减少大约220字节的代码空间。 1遵守前面部分所描述的为建立来自安装区域的定制拷贝启动文件的规定。 2修改 pg-crtinit.s,并且删除下面的行: brlid r15,_init /调用语言初始化函数 nop brlid r15,_fin

125、i /调用语言清除函数 nop为C程序减少启动代码尺寸 3编译这些文件到.o文件中,并将其放在所选择的目录中,或者在应用程序中包含这些文件。 4编译器添加-nostartfile选项。如果需要在特定的文件夹下汇编文件,则添加 B 选项 5编译应用程序 如果应用程序在不同的模式下运行,则选择合适的CRT文件。GNU调试器 GNU调试器(GNU Debugger,GDB)是一个强大而灵活的工具,为在开发的不同阶段用来验证MicroBlaze和PowerPC系统提供了统一的接口。它使用XMD(Xilinx MicroBlaze Debugger)作为基本引擎与处理器目标通讯。 MicroBlaze

126、GDB的使用: mb-gdb options executable fileGNU调试器- GDB调试流程调试流程 1从XPS启动XMD 2连接到处理器目标,位置在 Simulator/ Hardware/ Virtual Platform。通过它为目标打开GDB服务器 3从XPS启动GDB 4在XMD上连接到远程GDB服务器上 5下载程序和调试应用程序GNU调试器- MicroBlaze的的GDB目标目标 MicroBlaze的GNU调试器和XMD工具支持三个可能的远程目标。 通过XMD实现远程调试。通过仿真器目标,硬件目标和虚拟平台目标,主机上开始XMD服务器程序,这对mb-gbb是透明的

127、。周期精确的指令集仿真器(ISS)和硬件接口提供强大的调试工具用于验证一个完整的MicroBlaze系统。通过在TCP/IP套接字上使用远程协议,将调试器mb-gdb连接到XMD。GNU调试器- MicroBlaze的的GDB目标目标 1)仿真器目标 XMD仿真器是MicroBlaze系统一个周期精确的ISS,指示被仿真的MicroBlaze系统到GDB的状态。 2)硬件目标 使用硬件目标,XMD通过串行电缆或JTAG电缆与运行在目标板上的opb_mdm调试核或xmdstub程序通信,指示运行的MicroBlaze系统到GDB的状态。 3)虚拟平台目标 虚拟平台是一个周期精确的MicroBla

128、ze的固定参考设计。支持LMB和外部存储器,UARTlite和GPIO接口。GNU调试器- 在MicroBlaze目标上为调试进行编译 为了调试程序,当编译程序时,必须产生调试信息。调试信息保存在目标文件中;它描述了每个变量或函数的数据类型,以及在源文件行数目和可执行文件的地址的一致性。当指定了合适的修饰符时,用于Xilinx的MicroBlaze软件的mb-gcc编译器包含这个信息。在mb-gcc的-g选项允许执行源代码级的调试。调试器mb-gcc给可执行文件添加合适的调试信息,用于帮助调试代码。mb-gcc调试器提供了在源代码,汇编,以及源程序和汇编混合的调试功能。Xilinx微处理器调试

129、器 Xilinx微处理器调试器(Xilinx Microprocessor Debugger,XMD)是一个工具,用来方便调试程序和验证使用MicroBlaze或PowerPC处理器的系统。可以使用XMD调试运行在硬件板、周期精确的指令集仿真器ISS或者周期精确地虚拟平台系统上的程序。 XMD提供工具命令语言(Tool Command Language ,Tcl)接口。这个接口能用于命令行控制和目标调试,以及运行复杂的测试脚本来测试一个完整的系统。Xilinx微处理器调试器 XMD支持GNU调试器(GDB)远程TCP协议来控制对目标的调试。一些图形化的调试器使用这个接口用来调试,其中包括Pow

130、erPC和MicroBlaze GDB,SDK和EDKs的软件IDE。在这些情况下,调试器连接到运行在同一台计算机上的XMD或者连接到网络上的远程计算机。 XMD读取XMP,MHS和MSS系统文件,用于理解所调试的硬件系统。这些信息用于执行存储器范围测试,用于在较快的下载速度下确定MicroBlaze到MDM的连接性和执行其它动作行为。图4.12给出了XMD的目标结构Xilinx微处理器调试器Xilinx Microprocessor Debug(XMD)GDB远程协议接口远程协议接口XMD Tcl 接口接口XMD 套接字接口套接字接口MicroBlaze ISSGDB和和SDK手工调试器手工

131、调试器/Tcl脚本脚本外部调试器外部调试器板上板上PowerPC/MicroBlaze处理器处理器使用串口的使用串口的MicroBlaze XMDSTUBPowerPC ISSMicroBlaze UP图图5. 12 XMD目标目标Xilinx微处理器调试器-XMD使用 在启动时,XMD执行下面的步骤: 1、如果指定一个XMD的Tcl脚本,XMD执行脚本,然后退出 2、如果没有指定一个XMD的Tcl脚本,XMD开始交互模式。在 这种情况下,XMD执行下面的操作:Xilinx微处理器调试器-XMD使用 1)建立源$HOME/.xmdrc文件。可以使用这个配置文件和 XMD命令来形成定制的Tcl命

132、令。 2)如果有-ipcport选项,则打开XMD套接字服务器。 3)如果有-xmp选项,则加载系统XMP文件。 4)如果有-opt选项,则使用连接选项文件去连接到处理器目标。 5)如果没有-nx选项,当前目录中有xmd.ini文件,则提供它。 6)显示XMD%提示。从XMD Tcl提示中,可以使用XMD命令来 调试。 表5.11给出了XMD用户命令。Xilinx微处理器调试器-连接命令选项连接命令选项命令命令选项示例用法示例用法描述描述xload xmp xmpfilemhs mhsfilemss mssfilexload xmp system.xmpxload mhs system.mhs

133、xload mss system.mss加加载XMP,MHS,MSS系系统文文件件connect Target connect Type Optionsconnect mb mdmconnect ppc hw连接到目接到目标。有效的目有效的目标文件:文件:mb,ppc,mdmvpconnect mbvpconnect mb连接到接到MicroBlaze虚虚拟平台平台targets target idtargetstargets 0所有所有现在目在目标的列表或者的列表或者现在目在目标的的变化化Disconnectdisconnect 0断开与当前断开与当前处理器目理器目标的的连接,接,关关闭当前

134、当前DGB服服务器,并且器,并且恢复到以前的恢复到以前的处理器目理器目标Xilinx微处理器调试器-连接命令选项连接命令选项Debugconfig -step_mode-memory_datawidth_matchingdisable|enable-vpoptions-reset_on_runDebugconfig step_modeenable_interruptDebugconfig memory_datawidth_matching enable为目目标配置配置调试会会话dow -dataaddrdow executable.elfdow executable.elf 0x400dow

135、data system.dat 0x400下下载ELF文件格式或数据文件文件格式或数据文件到当前目到当前目标的存的存储器器runrun从程序的开始地址运行程序从程序的开始地址运行程序conaddressconcon 0x400从当前从当前PC或者地址或者地址继续运行运行stpnumber of instructionsstpstp 10单步步执行行1条或多条指令条或多条指令Xilinx微处理器调试器-连接命令选项连接命令选项cstpnumber of cyclescstpcstp 10单步步执行一个或多个周期行一个或多个周期rst -processorrst复位系复位系统stopstop停止目

136、停止目标rrd reg numrrdrrd r1(or ) rrd R1rrd 1读所有的寄存器或所有的寄存器或读reg num 寄存器寄存器srrd reg namesrrdsrrd pc读特殊目的寄存器或特殊目的寄存器或读reg num 寄存器寄存器rwrreg num|reg name wordrwr pc 0x400寄存器写寄存器写mrd w|h|bmrd 0x400mrd 0x400 10mrd 0x400 10 h从从address开始,开始,读num存存储器器位置;如果指定了位置;如果指定了变量名字,量名字,根据下根据下载的的ELF文件的全局文件的全局变量量读取存取存储器器Xil

137、inx微处理器调试器-连接命令选项连接命令选项mrd_var Elf filenamemrd gloable_var1executable.elf读存存储器,根据下器,根据下载的的ELF文文件中的全局件中的全局变量量mwr w|h|bmwr 0x400 0x12345678mwr 0x400 0x1234 hmwr 0x400 0x12345678 0x87654321 2写到写到num存存储器开始地址。器开始地址。bpssw|hwbps 0x400bps main hw在在address或或function开始的地开始的地方方设置断点。最后下置断点。最后下载的的ELF文件用来文件用来func

138、tion查找找watchr|wdatawatch r 0x400 0x1234watch r 0x40x 0x12x4watch r 0b01000000xxxx 0b00010010xxxx0100watch r 0x40x在在address设置置读、写、写监视点。点。如果如果值与与data相比相比较,停在,停在处理器上。理器上。bpr bpr 0x400bpr mainbpr all去除断点去除断点/监视点点Xilinx微处理器调试器-连接命令选项连接命令选项bplbpl列出断点列出断点/监视点点tracestart pc trace filename -function_nametrac

139、estart pctrace.txttracestart pctrace.txt function_name fntrace.txttracestart开始搜集指令和函数跟踪信息开始搜集指令和函数跟踪信息到文件到文件tracestopdonetracestoptracestop done停止搜集跟踪信息,停止搜集跟踪信息,选择done指示跟踪停止指示跟踪停止stats filenamestats trace.txtstats为ISS目目标显示示执行行统计。文。文件是来自跟踪搜集的跟踪件是来自跟踪搜集的跟踪输出出profile -o GMON output fileProfile o gprof

140、f.out写分析写分析统计(profile)输出文出文件,件,该文件能被文件能被mb-gprof识别来来产生生profile(分析(分析统计)信)信息息state target idstate显示所有目示所有目标的当前状的当前状态或者或者target id目目标Xilinx微处理器调试器-连接命令选项连接命令选项dis address num_wordsdis 0x400 10反反汇编指令(支持指令(支持MicroBlaze目目标)terminal -jtag_uart_server port noterminalterminal jtag_uart_server 4321基于基于JTAG的超

141、的超级终端与端与mdm UART通信。在通信。在mdm内使能内使能UART接口。接口。如果指定了如果指定了-jtag_uart_server选项,在,在port_no打开打开TCP服服务器。使用任何一个超器。使用任何一个超级终端端工具和工具和opb_mdm的的UART接口接口通信。通信。read_uartstart|stopTCL Channel IDread_uart startread_uart stopread_uart start$channel_id从从mdm UART接口。通接口。通过指定指定一个一个Tcl通道通道ID,O/P能被重新能被重新指向文件。指向文件。Verboselev

142、elVerbose切切换冗余模式冗余模式 ON/OFF。在冗。在冗余模式,余模式,XMD打印打印调试信息信息helpoptionshelphelp inithelp connecthelp connect mb列出所有的命令列出所有的命令Xilinx微处理器调试器-连接命令选项连接命令选项 XMD能在不同的目标(处理器或者外设)上调试程序。 为了和目标通信,XMD与目标连接。在连接后,给每个目标分配一个唯一的目标ID。 当与处理器目标连接时,启动gdb服务器,能与GDB服务器或SDK通信。 使用下面的命令进行连接: connect mb|ppc|mdm Options连接命令选项连接命令选项-

143、 MicroBlaze处理器目标 XMD通过JTAG,并且使用opb_mdm微处理器调试模块外设来连接一个或多个MicroBlaze处理器。XMD可以通过JTAG或串口与ROM监视器通信,比如XMDStub。可以使用MicroBlaze ISS调试程序。MicroBlaze MDM硬件目标 使用命令connect mb mdm连接到MDM目标,启动远程GDB服务器。MDM支持非插入式的使用硬件断点和硬件单步的调试(不需要ROM监视器)。图4.13给出了MicroBlaze的MDM目标。 当命令没有使用选项时,XMD自动监测JTAG和包含MicroBlaze-MDM系统的FPGA芯片。如果不能自

144、动连接则使用下面的命令: Connect mb hw-cable -configdevice-debugdevice -pfsl MicroBlaze MDM硬件目标MicroBlaze调试信号调试信号MicroBlazeMicroBlazeXMDMDMUARTJTAGMicroBlazeMicroBlazePLB总线总线图图5.13 MicroBlaze 的的MDM目标目标MicroBlaze MDM目标要求 1)使用MicroBlaze的硬件调试特性,比如硬件断点和硬件调试控制函数(比如停止和单步),MicroBlaze的硬件调试端口必须和MDM和opb_mdm连接。 2)使用MDM目标的

145、UART功能,必须在系统的opb_mdm例化时设置C_USE_UART参数。将程序的STDOUT打印到XMD控制台上,设置C_UART_WIDTH=8MicroBlaze存根硬件目标 使用XMDStub(运行在目标的ROM监督程序)连接到MicroBlaze目标,并且为目标启动GDB服务器。XMD通过JTAG或串口与XMDStub连接。默认设置使用JTAG接口。 1)MicroBlaze存根 JTAG目标连接命令 Connect mb stub comm jtag -cable -configdevice -debugdevice 2)MicroBlaze存根串口目标连接命令 Connect

146、mb stub comm serial MicroBlaze存根硬件目标图图5.15 MicroBlaze的的 MDM目标目标本地存储器本地存储器XMDMDMUARTJTAGMicroBlazexmdstubPLB总线总线本地存储器本地存储器XMDUartliteRS-232MicroBlazexmdstubPLB总线总线存根目标要求 4、使用XMD在硬件板上调试程序,必须满足下面的条件: 1)XMD使用JTAG或串口与板上的XMDStub通信。所以,在 MicroBlaze目标系统的MSS文件中指定opb_mdm或者UART 作为XMDSTUB_PERIPHERAL。 平台产生器能建立一个系

147、统,该系统包括opb_mdm或者 UART(当MHS文件指定),XMDStub模式下的所支持的JTAG 电缆为:Xilinx的并行电缆和平台USB电缆 存根目标要求 2)板上的XMDStub使用opb_mdm或者UART与主计算机通 讯。因此MicroBlaze系统中必须使用opb_mdm或者URAT。 Libgen工具能配置XMDStub在系统中使用XMDSTUB _PERIPHERAL。Libgen为 XMDSTUB_PERIPHERAL产生一个 配置的XMDStub,并且将其加入到code/xmdstub.elf作为MSS文 件里XMDStub指定的属性。存根目标要求 3)当系统启动时,

148、XMDStub可执行文件必须包含在MicroBlaze 本地存储器中。 Data2MEM能使用XMDStub填充MciroBlaze存储器。Libgen可以产生Data2MEM脚本文件用来去填充包含MicroBlaze系统比特流的BRAM内容。它使用在DEFAULT_INIT所指定的可执行文件。 4)对于那些必须下载程序到板上进行调试的情况,程序地址必须大于0x800,并且程序使用crt1.o内的启动代码。 当使用-xl-mode-xmdstub选项时,mb-gcc编译器程序能满足以上两种情况。MicroBlaze仿真器目标 使用mb-gdb和XMD在精确周期仿真器上调试程序,使用下面的命令:

149、 Connect mb sim -memsize 其中,memsize是指在仿真器内所分配的地址总线的宽度。程序可访问的范围是0-(2SIZE-1)。 在ISS上调试程序,必须编译程序用于调试,并且使用ctr0.o内的启动代码来连接它们。使用-g选项时,编译器用调试的信息编译程序。默认,mb-gcc使用ctr0.o连接所有的程序。明确的选项是-xl-mode-executable。存储器的大小不能超过64KB,并且从地址0启动。程序必须保存在存储器的首个64KB的地方。这种仿真下,不支持OPB外设的仿真。MicroBlaze仿真器目标 6、MDM外设目标 可以连接到opb_mdm外设,使用UA

150、RT接口去调试系统和搜集系统信息。使用下面的命令进行连接: connect mdm MDM目标的要求 为了在XMD目标中使用UART功能,当初始化系统中的opb_mdm时必须设置C_USE_UART参数。为了打印程序STDOUT的输出到XMD控制台上,将C_UART_WIDTH设置为8。 通过使用xuart w命令,也能够从主机到MicroBlaze运行程序提供UART输入。使用terminal命令打开超级终端接口从UART进行读/写操作。read_uart命令提供了写到STDIO或者文件的接口。系统ACE文件产生器 系统ACE文件产生器(Systerm ACE File Generator,

151、GenACE) ACE文件用来配置FPGA,初始化BRAM,用有效的程序或数据初始化外部存储器,启动处理器。EDK提供Tcl脚本genace.tcl,使用XMD命令产生ACE文件。 产生ACE文件要求下面的工具:genace.tcl,xmd,ISE的iMPACT工具。GenACE具有下面的特点:支持带有MDM目标的PowerPC和MicroBlaze从硬件比特流和软件ELF/数据文件产生ACE文件初始化PowerPC和MicroBlaze系统的外部存储器支持多处理器系统支持单个/多个FPGA芯片系统 GenACE模型 ACE文件产生支持系统ACE CF配置芯片的配置方案。系统ACE使用JTAG

152、指令和边界扫描链配置芯片。系统ACE CF是一个两片解决方案,要求系统ACE CF控制器,CF卡或者1英寸的微驱动硬盘驱动技术作为存储介质。系统ACE文件从串行向量格式(Serial Vector Format,SVF)文件产生。SVF文件是一个文本文件包含编程指令和配置数据,用于执行JTAG操作。 GenACE模型 XMD和iMPACT为软件和硬件系统文件分别产生SVF文件。SVF文件包括指令和数据用来执行这些操作: (1)使用iMPACT配置FPGA; (2)连接到处理器目标; (3)下载程序,从XMD运行程序。 SVF文件然后转化到ACE文件,然后写到存储介质中。这些操作通过系统ACE控制器执行来实现所确定的操作。GenACE模型 下面是使用iMPACT和XMD对一个简单硬件和软件配置的操作序列,然后转换成ACE文件。 1)使用iMPACT下载比特流,比特流down.bit,包含系统配置和启动代码; 2)使芯片脱离复位状态,引起DONE信号变高。开始启动处理器系统; 3)使用XMD连接到处理器; 4)下载多个数据文件到BRAM或外部存储器; 5)下载多个可执行文件到BRAM或外部存储器。PC指向最后一个下载的ELF文件的开始的位置; 6)从PC指令地址连续执行;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号