可编程片上系统开发平台.ppt
可编程片上系统开发平台,何宾2012.02,本章内容,该章描述在Xilinx嵌入式开发套件(Xilinx Development Kit,XDK)嵌入式系统工具的结构和设计流程。XDK用于开发基于MicroBlaze软核和PowerPC硬核处理器的SOPC系统。该章的主要内容包括:EDK简介、设计流程概述、平台开发结构的工具。Xilinx的EDK工具主要包含:Xilinx Platfrom Studio(XPS)人机界面、嵌入式系统工具套件、嵌入式处理IP核,例如处理器和外设、Platform Studio SDK(Software Development Kit,SDK)。SDK基于Eclipse开放源码框架,可以选择使用SDK开发自己的嵌入式软件应用程序(从EDK13.1开始,必须在SDK内开发软件应用程序)。,设计流程及EDK工具-设计流程,EDK中所提供的工具用来完成嵌入式设计的整个过程。图5.1给出了基于EDK的基本嵌入式设计流程。,设计流程及EDK工具-建立硬件平台,Xilinx的FPGA技术允许设计者在处理器子系统中定制硬件逻辑。这种定制不可能使用标准的现成的微处理器或控制器芯片。“硬件平台”是指设计人员根据应用的需要而使用Xilinx的技术建立的灵活地、嵌入式处理子系统。硬件平台是由一个或多个处理器或外设连接到处理器总线构成的。EDK通过微处理器硬件规范(Microprocessor Hardware Specification,MHS)文件记录硬件平台信息。,设计流程及EDK工具-软件平台建立,软件平台是软件驱动和用于建立应用程序的操作系统(可选)组成的。所建立的软件映像文件只包含用户所使用到的一部分Xilinx的库。EDK通过微处理器软件规范(Microprocessor Software Spectifcation,MSS)记录软件平台信息。设计人员可以在软件平台运行多个应用程序。,设计流程及EDK工具-使用仿真的硬件平台验证,验证硬件平台的正确功能,设计人员可以建立一个仿真模型,并且在HDL仿真器上运行。当仿真系统时,处理器运行可执行文件。设计人员可以选择建立行为、结构或者精确的时序仿真模型。,设计流程及EDK工具-使用调试的软件验证,调试嵌入式软件的基本技术是加载设计到所支持的开发板和使用调试工具去调试处理器。作为可选择的方式,设计人员可以使用指令集仿真器或简化系统仿真器模型(“虚拟平台”)运行在主机上来调试设计代码。设计人员可以通过概要分析代码的执行来估计系统性能。,设计流程及EDK工具-芯片配置,一旦软件和硬件平台建立完成,设计人员可以为FPGA建立一个的配置比特文件。对于原型设计,当连接主机和芯片时,设计者可以在下载比特流时,将希望运行在嵌入式平台上的软件同时下载。对于产品,设计人员将配置比特流和软件保存在和FPGA连接的非易失性存储器中。,设计流程及EDK工具-EDK工具,图5.2 EDK工具的结构,设计流程及EDK工具-EDK工具,设计流程及EDK工具-EDK工具,设计流程及EDK工具-EDK工具,设计流程及EDK工具-Xilinx Platform Studio(XPS),XPS提供了集成环境为基于MicroBlaze和PowerPC处理器的嵌入式处理器系统创建软件和硬件规范流程。XPS也提供编辑器和项目管理接口用来创建和编辑源代码。XPS提供工具流程配置选项的定制和提供图形化的系统编辑器用来连接处理器、外设和总线。XPS可以在Windows、Solaris和Linux平台下使用。从XPS中,设计人员可以运行所有的用于处理硬件和软件的嵌入式系统工具。在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为应用软件提供开发环境。SDK基于Eclipse开放源码标准。SDK主要有以下特点:(1)功能丰富的C/C+编辑器和编译环境;(2)导入基于XPS生成的硬件平台定义;(3)提供项目管理;(4)支持基于单个处理器或者多个处理器系统的软件应用程序的 开发;(5)支持以团队环境的形式开发软件应用程序;(6)为第三方的操作系统创建和配置板级支持包BSP;,设计流程及EDK工具-Xilinx Software Development Kit,SDK,(7)提供现成的简单软件工程来测试硬件和软件功能;(8)通过GUI接口为软件应用程序、编程FPGA芯片和编 程并行flash存储器产生链接脚本;(9)应用程序的建立配置和自动的MAKE文件生成;(10)错误浏览;(11)为无缝调试和概要分析目标提供了好的集成环境;,设计流程及EDK工具-The Base System Builder(BSB)Wizard,BSB向导帮助设计人员快速建立一个嵌入式系统工程。对于更复杂的工程,BSB向导提供基本的系统,通过这个系统设计人员可以定制完成嵌入式设计。为了高效率的建立工程,Xilinx推荐使用BSB向导。,设计流程及EDK工具-The Base System Builder(BSB)Wizard,基于设计人员选择的板子,设计人员通过BSB选择并配置基本的元素,比如:处理器类型、调试接口、缓存配置、存储器类型和大小、外设等。对于BSB不支持的目标系统,设计人员可以选择定制板选项。使用这个选项时,必须指定未来板子的硬件,并且要给出用户约束文件UCF。如果选择的是支持的目标板,BSB向导自动的加入UCF文件。当退出BSB时,BSB所建立的MHS和MSS文件自动加入到XPS工程中,设计人员能在XPS中进行更进一步的设计。,设计流程及EDK工具-Platform Generator,Platgen,平台产生器Platgen将对嵌入式系统的高级描述编译成能在目标FPGA芯片上实现的HDL网表。嵌入式系统硬件平台典型的由一个或多个处理器和不同的外设和存储器模块组成,这些模块通过处理器总线连接。每个外设的IP核有很多的参数,通过调整这些参数来定制行为。这些参数也用来为这些存储器和外设进行地址映射。由于EDK提供可选择的特性,FPGA只需要实现应用程序所要求的功能子集。硬件平台保存了MHS文件。MHS文件是表示所设计的嵌入式系统的硬件元件的最主要文件。MHS文件以ASCII码形式存在。,设计流程及EDK工具-Platform Generator(Platgen),Platgen读取MHS文件作为基本的设计输入。Platform也从EDK库和用户IP库中读取不同的处理器核硬件描述文件(MPD,PAO)。Platgen为嵌入式系统产生顶层HDL设计文件,该文件包含所有参数化了的IP核。在这个过程中,将MHS中所有高层总线连接变成连接处理器、外设和片上存储器的真实信号。它也调用XST编译器综合每个例化的IP核(Platgen产生的系统级网表也用来作为FPGA实现过程的一部分)。此外,Platgen也产生BMM(BRAM Memory Map)文件,该文件包含所用到的片上BRAM的地址。,设计流程及EDK工具-建立和导入IP向导,该向导帮助设计人员建立自己的外设并且将它们导入相应的XPS工程中。在创建模式下,创建和输入外设向导建立很多文件,这些文件的一些是模板文件帮助设计人员实现外设,而不需要详细的知道总线协议,命名规则和特殊接口文件的格式。通过参考模板中的例子和使用不同的辅助设计支持文件,设计人员可以很快的进行逻辑定制。在导入模式下,该工具帮助设计人员建立接口文件和目录结构。对于这种操作模式,必须遵守EDK的命名规则。一旦导入完成,用户的定制外设在EDK外设库中可以使用。,设计流程及EDK工具-建立和导入IP向导,当创建或输入一个外设时,自动生成MPD(Microprocessor Peripheral Defination)文件和PAO(Peripheral Analyze Order)文件。MPD文件定义了外设的接口,PAO文件通知其它工具(Platgen,Simgen),对外设需要编译哪个HDL文件和以什么样的顺序编译。,设计流程及EDK工具-配置协处理器向导,如果设计中包含MicroBlaze和PowerPC处理器时,可以使用该向导。该向导添加和连接协处理器到CPU。协处理器是一个硬件模块用来实现用户在FPGA内定义的功能和通过FSL接口与处理器连接。FSL通道是一个专用的32位,点对点的通信接口。,设计流程及EDK工具-库产生器(Libgen),Libgen为嵌入式处理器系统配置库,设备驱动,文件系统和中断句柄,以及创建板级支持包BSP。嵌入式软件平台为每个处理器定义了系统内外设的驱动(板级支持包),可选择的库,标准的输入/输出设备,中断句柄例程和其它相关的软件特征。SDK工程进一步定义了运行在每个处理器上的软件,这些软件基于BSP运行。,设计流程及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处理器的应用,XPS运行powerpc-eabi-gcc编译器。编译器能读取C代码,头文件和汇编代码。链接器将编译的程序和选择的库连接在一起产生ELF可执行文件。连接器也读取连接脚本(默认产生或用户产生)。,设计流程及EDK工具-Xilinx Microprocessor Debugger(XMD),设计人员可以使用指令集仿真器或者虚拟平台调试软件程序。XMD读ELF文件。对于调试物理的FPGA,XMD和FPGA通讯使用和FPGA下载相同的电缆。,设计流程及EDK工具-GNU调试器(GDB),GNU调试器是个强大和灵活的工具,它为在不同的开发周期验证MicroBlaze和PowerPC系统提供了统一的调试和验证手段。GDB使用了XMD作为最基本的引擎和处理器目标通讯。,设计流程及EDK工具-Simulation Model Generator(Simgen),仿真模型产生器Simgen为硬件产生和配置不同的模型。为产生行为模型,Simgen使用MHS文件作为基本的输入。为产生结构或时序模型,Simgen使用综合后或布局布线后的设计数据库作为基本的输入。Simgen为每个处理器也读取嵌入式应用ELF文件去初始化片上存储器;这样处理器在仿真阶段就可以执行这些软件代码。,设计流程及EDK工具-Simulation Library Compiler(CompEDKLib),CompEDKLib使用不同仿真工具厂商提供的仿真器编译EDK基于HDL的仿真库。这个工具可以运行在GUI和批处理模式下。在GUI模式下,允许设计人员使用CompXLib编译Xilinx的库和EDK中可以使用的库。,设计流程及EDK工具-Virtual Platform Generator(VPgen),虚拟平台是硬件系统的周期级的仿真模型。可以在主机上用虚拟平台来调试和评估软件应用代码,而不需要得到运行在原型板上的硬件。,设计流程及EDK工具-Bus Functional Model Compiler(BFM),总线功能仿真简化了依附在总线上的硬件元件的验证。,设计流程及EDK工具-Bitstream Initializer(Bitinit),比特流初始化工具使用软件信息来初始化与处理器连接的片上BRAM存储器。这个工具读取ISE工具产生的硬件比特流文件(system.bit),产生一个新的输出比特流文件(download.bit),这个比特流文件包含ELF文件。这个工具使用BMM文件,该文件由Platgen产生,通过使用每个BRAM块的物理的布局信息由ISE工具更新。在内部,比特流初始化工具Bitinit使用在ISE中提供的Data2MEM工具来更新比特流文件。,设计流程及EDK工具-System ACE File Generator(Gen ACE),从FPGA比特流中产生 Xilinx System 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 Management Wizard,格式版本工具revup更新已经存在EDK工程到当前的版本。revup工具只执行格式的变化,对设计不进行更新。在应用revup前,备份MHS,MSS,XMP等文件。当使用新版本的EDK工具打开老版本的工程时,就会显示版本管理向导。当执行revup后,调用版本管理向导。向导提供有关设计中使用的Xilinx处理器IP核的变化信息。如果新版本的IP核可以使用,向导将升级到新的版本。,设计流程及EDK工具-LibXil Memory File System Generator(LibXil MFS),以文件句柄的形式提供管理程序存储器的能力。设计人员可以建立目录,并在目录中存放不同文件。文件系统能通过使用高级C语言进行函数调用来访问。,设计流程及EDK工具-Platform Specification Utility,平台规范工具能够自动产生建立IP核的MPD文件。通过建立和导入外设向导的帮助,能够使用这个工具提供的功能。,平台产生器,硬件的产生是由平台产生器(Platform Generator,Platgen)生成。Platgen以硬件网表的形式(HDL和实现网表文件)建立片上可编程系统。Platgen使用MHS文件作为输入并建立硬件平台。除了以NGC、EDIF等网表文件格式外,Platgen为下面的工具和顶层的HDL封装提供支持文件,可以使设计者添加其它元件并且自动的产生硬件平台。,平台产生器,当运行Platgen时,FPGA的实现工具运行完成硬件的实现。典型的,XPS为实现工具调用项目管理器(Project Navigator)前端,用于控制实现过程。ISE流程结后,产生用于配置FPGA的比特流文件。这个比特流文件包括为FPGA片上BRAM的初始化信息。如果设计的代码或数据必须在启动时放在这些存储器时,Data2MEM工具使用包含在可执行文件内的代码/数据信息来更新比特流文件,这个可执行文件在软件应用程序建立和验证流程的结束时产生。,平台产生器-加载路径,图5.3给出了外设IP路径的结构。Platgen使用查找优先级机制来确定外设的位置:,平台产生器-加载路径,(1)在工程目录下,寻找pcore目录(2)通过-lp选项寻找指定的/pcores位置(3)查找XILINX_EDK/hw/pcores 从pcores目录中,外设的名字就是根目录的名字。从根目录中,基本的目录结构为:data、hdl和netlist。,平台产生器-输出文件,Platgen产生下面的文件和目录:hdl、implementation和synthesis。在工程目录下,这是最基本的目录结构。1、HDL目录 HDL目录包含下面的文件:1)system.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、Synthesis目录 该目录包含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和.bit文件输入到Data2MEM。Data2MEM将数据片断转换为正确的初始化记录,这些记录用于Virtex系列的BRAM。,仿真模型产生器,仿真模型产生器(Simulation Model Generator,Simgen)为一个给定的硬件生成和配置不同的VHDL和Verilog仿真模型。MHS文件作为Simgen的输入,MHS文件描述了硬件元件的例化和连接。Simgen也为指定厂商的综合工具生成脚本。脚本编译产生的仿真模型。,仿真库,仿真网表使用低层次的Xilinx FPGA可使用的硬件原语。Xilinx为这些原语提供了仿真模型。下面介绍了Xilinx的仿真流程中所使用的库。HDL代码必须参考相对应的编译库。HDL仿真库必须将逻辑库与物理编译的库相对应。Xilinx的库可以使用CompXLib工具进行编译。,仿真库-UNISIM库,UNISIM库是功能模型库,用于行为和结构仿真。该库包含所有的Xilinx统一的库元件,这些库元件可以被大部分的综合工具识别。UNISIM库也包含了那些通用的例化元件,比如I/O和存储器单元。设计人员在设计中例化UNISIM库,并且在行为仿真时进行仿真。Simgen产生的结构仿真模型例化UNISIM库元件。在UNISIM库中的所有元件都是0延迟的。所有的同步元件有一个单位的延迟避免竞争条件,对于同步元件的clock-to-out延迟是100ps。,仿真库-SIMPRIM库,SIMPRIM库用于时序仿真。它包含所有的Xilinx实现工具中使用的Xilinx的原语库元件。Simgen产生的时序仿真模型例化SIMPRIM库元件。,仿真库-XilinxCoreLib库,Xilinx的核产生器是一个图形化的IP设计工具用来产生高层次模块,比如FIR滤波器,FIFOs,CAMs和其它高级IP。设计人员可以定制和预优化模块来利用Xilinx FPGA芯片的固有的结构特点,比如,块乘法器,SRL,快速进位逻辑和片上的单端口或双端口RAM。核产生器HDL库模型用于行为仿真。设计人员选择合适的HDL模型添加到HDL设计中。模型不使用用于全局信号的库元件。,仿真库-EDK库,EDK库用于行为仿真。该库保存了所有的EDK IP元件,这些元件预编译用于ModelSim SE、PE或NcSim。库免除了需要为每一个工程重新编译EDK元件,减少了编译的时间。EDK IP元件库只提供VHDL语言,并且可能加密。未加密的EDK IP元件能使用Xilinx的CompEDKLib工具编译。对于加密的EDK IP元件提供了预编译库。,仿真模型产生器-仿真模型,功能仿真设计输入设计综合设计网表设计实现设计实现的网表时序仿真行为仿真结构仿真图4.4 FPGA设计仿真阶段 该部分介绍行为仿真模型、结构仿真模型和时序仿真模型。图5.4给出了FPGA的设计仿真阶段。在设计过程的每个点,Simgen建立一个合适的仿真模型模型。,仿真模型产生器-仿真模型,仿真模型产生器-行为模型,图5.5给出了行为仿真模型。Simgen要求MHS文件作为输入。Simgen建立一系列的仿真模型。可选的,Simgen为指定厂商的仿真器产生编译脚本。如果指定,Simgen能用数据产生HDL文件去初始化与存在设计中的BRAM相关联。这个数据从存在在可执行和连接格式(ELF)文件中得到。,仿真模型产生器-行为模型,仿真模型产生器-结构模型,图5.6所示,Simgen要求MHS文件和相关的综合网表文件作为输入。从这些网表文件中建立一系列的HDL文件结构建模设计功能。Simgen可以为指定厂商的仿真器产生一个编译脚本。如果指定,Simgen能用数据产生HDL文件去初始化与存在设计中的BRAM相关联。这个数据从存在在可执行和连接格式(ELF)文件中得到。,仿真模型产生器-结构模型,仿真模型产生器-时序模型,图5.7所示,Simgen要求MHS文件和相关的实现网表文件作为输入。从这些网表文件中建立一个的HDL文件对设计建模和包含合适的时序信息的SDF文件。Simgen可以为指定厂商的仿真器产生一个编译脚本。如果指定,Simgen能用数据产生HDL文件去初始化与存在设计中的BRAM相关联。这个数据从存在在可执行和连接格式(ELF)文件中得到。,仿真模型产生器-时序模型,仿真模型产生器-输出文件,Simgen在输出目录的仿真目录下产生所有的仿真文件和每个仿真模型的子目录。Output_directory/simulation/sim_model 当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)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)通常是第一个工具用于配置库和设备驱动。Libgen使用设计人员建立的MSS文件。MSS文件定义了与外设,标准I/O设备,中断句柄例程和其它软件特性相关的驱动。Libgen使用这些信息配置库和驱动。运行 libgen options filename命令来运行库产生器。,库产生器加载路径,库产生器加载路径,库产生器输出文件,Libgen在设计工程目录下产生目录和输出文件。对于MSS文件的每个处理器实例,Libgen产生和处理器实例名字相对应的目录。在每一个处理器实例目录下,Libgen产生下面的目录和文件:include目录、lib目录、libsrc目录、code目录。,库产生器输出文件,1、include目录 Include目录包含驱动程序必须的C头文件。Libgen在这个目录下创建xparameter.h文件。该文件定义了系统中外设的基地址,#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目录 该目录包含EDK可执行文件。Libgen在该目录中创建xmdstub.elf文件(该文件用于MicroBlaze的板上调试)。,库产生器生成库和驱动-基本观点,MHS和MSS文件定义了系统。对于系统中的每个处理器,Libgen找到可寻址的外设清单。对于每一个处理器,建立一个唯一的驱动和库的清单。Libgen为每个处理器完成下面的过程:,库产生器生成库和驱动-基本观点,(1)建立在输出文件部分所定义的目录结构(2)为驱动,OS和库拷贝必要的源文件到处理器实例指定的区 域:OUTPUT_DIR/processor_instance_name/libsrc.(3)为处理器可见的每一个驱动、OS和库调用设计规则检查 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 程序(如果在和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的名字 2)generate Libgen定义的程序,当文件被拷贝后被调用 3)post_generate Libgen定义的程序,当generate被调用后调用该 程序 4)execs_generate Libgen定义的程序,当BSP,库和驱动产生后 调用该程序;,库产生器生成库和驱动驱动,大多数外设都需要软件驱动。MSS文件包含一个驱动块用于每一个外设实例。块包含对驱动的名字(DRIVER_NAME参数)和版本(DRIVER_VER)参考。这些参数没有默认值。驱动LEVEL与所要求的驱动功能有关。驱动目录中为不同级的驱动包含源文件和头文件,以及用于驱动的MAKE文件。,库产生器生成库和驱动驱动,驱动有一个MDD文件和/或Tcl文件关联。MDD文件为驱动指定了所有可配置的参数。这是数据定义文件。每一个MDD文件有一个相关的Tcl文件。Tcl文件产生数据,其中包括头文件的产生、C文件的产生,用于运行驱动的DRC,产生可执行文件。,库产生器生成库和驱动驱动,设计者可以编写自己的驱动。这些驱动必须在一个指定的目录下(YOUR_PROJECT/driver或library_name/drivers)。DRIVER_NAME属性允许设计人员为驱动指定任何名字(该名字也是驱动目录的名字)。源文件和MAKE文件必须在DRIVER_NAMEsrc目录下。MAKE应该有对象(include和libs)。每个驱动应该包含MDD文件和Tcl文件(在data子目录中)。参考已经存在的EDK驱动来了解驱动的结构。,库产生器生成库和驱动库,MSS文件为每一个库包含一个库块。库块包含对库名字(LIBRARY_NAME参数)和版本(LIBRARY_VER)参考。这些参数没有默认值。库目录中包含用于库的C源文件、头文件和MAKE文件。MLD文件为每一个库指定了可配置的选项。每个MLD文件都有Tcl文件与之关联。,库产生器生成库和驱动库,设计人员可以编写自己的库。这些必须在一个指定的目录中(YOUR_PROJECT/sw _services或library_name/sw_services)。LIBRARY_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文件与之关联。,库产生器生成库和驱动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)工具能自动生成微处理器外设定义(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工程文件或PAO文件使用PsfUtility工具。,FLASH存储器编程-flash编程,典型的,设计者可以对flash进行下面进行编程:可执行/可引导的应用程序的映像文件FPGA的硬件比特流文件文件系统的映像,数据文件,例如简单数据和算法的表格,FLASH存储器编程-flash编程,第一种情况最普遍,当处理器离开复位状态时,开始执行保存在处理器复位位置指定的BRAM内的代码。典型的,BRAM非常小以至于不能提供整个设计的软件应用程序的映像。因此,设计人员可以将软件应用程序的映像保存在flash中。设计一个可以装在BRAM内的小的引导启动代码,离开复位后,从flash中读取软件应用程序的映像文件,然后将其复制复制到外部的存储器中,然后将控制传送到设计的软件应用程序中。,FLASH存储器编程-flash编程,设计人员通过工程所建立的软件应用程序是可执行的ELF格式。通常并不存储和引导ELF映像文件本身,这是因为启动引导一个ELF映像文件会增加启动引导的复杂度。取而代之的是,ELF的映像文件被转化成一个通用的引导启动映像格式,例如:SREC(Motorola-S记录格式)或IHEX,这样启动引导就变得简单,代码长度也减少了。,FLASH存储器编程-支持Flash硬件,FLASH存储器编程对话框允许设计人员对板上的外部CFI(Common Flash Interface,CFI)接口兼容的并行存储器进行编程,方法是通过外部存储器(Externel Memory Controller,EMC)IP核连接。编程方案被设计成是通用的,并且面向不同Flash硬件和布局。,FLASH存储器编程-支持Flash硬件,通过与处理器连接的调试器来实现编程。XPS或者SDK在目标处理器上下载和执行小的系统内Flash编程存根(stub)。主机Tcl脚本使用命令驱动系统内Flash编程存根(stub)来完成对Flash的编程。对话框不处理或理解被编程的映像文件,只是将其编程到flash存储器上。设计的软件应用和硬件设置必须推断出编程所期望的文件内容。表4.5给出了所支持的Flash的配置。表5.6给出了CFI定义的命令集。,FLASH存储器编程-支持Flash硬件,FLASH存储器编程-支持Flash硬件,FLASH存储器编程-支持Flash硬件,默认情况下,flashwriter程序只支持那些CFI设备,即其扇区映射匹配存放在CFI表中的内容。一些flash厂商知道在CFI中存放扇区映射,但是根据flash启动结构有所不同。当对flash进行编程时,假定满足下面条件:(1)flash硬件假定在复位状态;(2)所有的flash扇区都假定在非保护状态;(3)flash编程存根不会解锁或者初始化flash。如果flash不 在准备状态或者非锁定状态时,将产生错误报告。,FLASH存储器编程-编程的先决条件,在使用编程Flash存储器对话框时,必须满足下面先决条件:1)在合适的EDK工程中,打开对话框;对话框从当前打开的 EDK工程中推断和使用数据;2)设计的硬件必须在flash和至少一个处理器之间通过 PLB/AXI EMC外设正确的连接;3)设计人员必须确认通过JTAG和主机连接,使用工程 的比特流文件初始化FPGA,这是因为对话框通过下载和 执行flashwritter程序来工作。,FLASH存储器编程-编程的先决条件,4)必须使用XMD调试选项对话框来指定当前设计的调试器的 信息。如果使用MicroBlaze处理器来编程flash存储器,处理 器必须将MDM和flash连接。如果XMD STUB软件插入的监 视器用于与处理器的调试连接,则不能执行flash编程操作。5)在之前必须执行产生库和BSP的步骤,这是因为flashwritter使 用处理器的库。6)Flashwritter必须有至少8KB的空间。Flashwritter本身会占用一 大部分的储存器。剩余的一大块区域用于缓冲来自主机的比 特流。因此,当分配给flashwritter的空间多余8KB时,将大大 提高flashwritter的速度,这对于大的映像文件的编程是非常重 要的。,FLASH存储器编程-编程对话框,单击TOOLS-Program Flas