查看: 3759|回复: 6

【CMika EDK实验系列①】FPGA 上的嵌入式系统设计基础

[复制链接]
  • TA的每日心情
    开心
    2020-8-5 15:33
  • 签到天数: 1274 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-8-21 11:44:01 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 CMika 于 2013-8-21 11:54 编辑

           C360_2012-12-27-17-26-15.jpg
    psb.jpg
    original_bAER_381e00005d94118d.jpg
                MicroBlaze 处理器
    MicroBlaze 是一款Xilinx 公司开发的嵌入式处理器软核,采用32 位RISC(Reduced Instruction Set Computer)优化结构,用以开发Xilinx 的FPGA 上的嵌入式工程。它符合IBM CoreConnect 标准,能够与PPC405 系统无缝连接。在FPGA内部可以集成多个MicroBlaze 处理器,这极大增加了FPGA 开发的灵活性。它是一个非常简化,却具有较高性能的软核,在Spartan3(-E)系列FPGA 中,它只占用400 个slice 资源,相当于10 万门FPGA 容量的三分之一,市场价值仅为10 美元左右,非常适合消费类嵌入式产品的应用需求。
    1.jpg
    2.jpg
                                     
              MicroBlaze 性能介绍
    Micro Blaze 软核的性能具有高度的可配制性,允许开发者根据自己的设计需要进行适当的选择。
    软核性能的固定部分特点:
    1.配置32 个32 位通用寄存器;
    2.配置32 位指令字长和3 个操作数及两种寻址模式;
    3.配置32 位地址总线;
    4.采用单事件流水技术。
    软核性能的可选部分特点(根据不同版本做了具体区分):
    2.jpg
    3.jpg
    4.jpg
    5.jpg
    6.jpg
    7.jpg


               MicroBlaze 结构
    Micro Blaze 处理器采用RISC 架构和哈佛结构,32 位地址总线,独立的指令和数据缓存,并且有独立的数据和指令总线连接到IBM 的OPB 总线,使得它能很容易和其它外设IP 核一起完成整体功能。
    1.jpg
    1.jpg
               Micro Blaze 的数据和指令
    Micro Blaze 支持字、半字和字节的数据形式。下图标示了这几种数据形式的具体内容。
             Micro Blaze 支持的字、半字和字节的具体内容
    1.jpg

    Micro Blaze 的32 位指令有两种定义模式。A 型指令最多有2 个寄存器源操作数和1 个寄存器目的操作数,而B 型指令则有1 个寄存器源操作数和1 个16位立即数以及1 个寄存器目的操作数,其立即数还可使用IMM 指令扩展为32位。这两种定义模式MicroBlaze 的指令分为了算术指令、逻辑指令、程序流控制指令、输出传送指令和特殊指令五种指令类型。下2图分别列出了Micro Blaze 指令集的语法定义和参考实例。
              Micro Blaze 指令集的语法定义
    2.jpg
    3.jpg
    4.jpg
    5.jpg
    6.jpg
    7.jpg
              Micro Blaze 指令集的参考实例
    1.jpg
    2.jpg

              MicroBlaze 的寄存器结构
    Micro Blaze 有32 个32 位通用目的寄存器和最多18 个32 位特殊目的寄存器。
    1.通用目的寄存器
    这32 个通用目的寄存器分为6 类。
    R0:其值永远为0,任何写入的数据都无效。
    R1-R13 和R18-R31:通用目的寄存器,可用于指令操作数或者地址寄存器。
    R14:中断返回地址寄存器。存储中断的返回地址。
    R15:一般作通用寄存器用。Xilinx 公司建议将其作为用户向量下的返回地址寄存器。
    R16:暂停(Break)返回地址寄存器。存储暂停的返回地址。
    R17:如果配置了硬件异常支持,这个寄存器用来存储引起硬件异常指令后一条指令的地址(延迟缓冲区中的异常除外,这种异常由BTR(Branch Target Register)存储);如果没有配置,则作为一般的通用目的寄存器使用。
    2. 特殊目的寄存器
    特殊目的寄存器分为7 类:程序计数器PC(Program Counter)、状态寄存器MSR(Machine Status Register)、异常地址寄存器EAR(Exception Address Register)、异常状态寄存器ESR(Exception Status Register)、分支目标寄存器BTR(Branch Target Register)、浮点状态寄存器FSR(Floating Point Status Register)和处理器版本寄存器PVR(Processor Version Register)。以下将逐一介绍:
    PC:纪录了执行指令的地址。它可以被MFS 指令读取,但是不能被MTS指令写入。
    MSR:纪录了处理器的控制和状态信息,包括PVR 存在、异常、中断、暂停、数据和指令Cache、除数为0、算术进位和算术位拷贝等,具体位的定义和声明请参见相关文档。它可以由MFS 指令读取,也可以由MTS、MSRSET 和MSRCLR 指令写入。
    EAR:纪录了引起异常的数据输出传送指令的完整地址,包括延时缓冲池的异常、特殊状态的异常、异常的原因、非法数据和指令输入、总线错误、除数为0、浮点错误等,具体位的定义和声明请参见相关文档。它可以由MFS 指令读取。BTR:当处理器被设置为可以使用异常机制时,该寄存器才存在。它纪录所有延时缓冲池中被执行的分支指令的目标地址。它可以由MFS 指令读取。
    FSR:纪录了浮点运算中的状态,包括非法操作数、除数为0、上溢出和下溢出、非正常化操作数错误等。它可以由MFS 指令读取,也可以由MTS 指令写入。
    PVR:由C_PVR 参数控制,纪录处理器的各种信息,具体位的定义和声明请参见相关文档。它可以由MFS 指令读取。

                           MicroBlaze 的流水结构
    早期的MicroBlaze 处理器采用3 级流水线的结构,而新版本的MicroBlaze处理器则采用3 级和5 级混合的流水线结构。流水线的每一级基本上都在一个时钟周期内完成,对于一些指令的执行级可能要多个时钟周期完成的情况,系统采用停止并等待的方式,直到执行级结束才继续进行流水。同时为了避免取指令时遇到慢速设备而导致的流水线等待,处理器采用了一个预取指缓冲区的结构,从而化解了这一问题。对于分支指令的处理,MicroBlaze 处理器采用了延时缓冲池的结构以减少重填满流水线的等待延时。由于采取让译码及之后的流水级继续执行而只重填取指级的策略,使得重填的延时从原来的2 个时钟周期变为现在的1 个时钟周期(假设3 级流水,且每级均可在一个时钟周期内完成)。用户只需在原来的分支指令后加D 即可使用延时缓冲池来处理指令,比如BNE 指令将不采用延时缓冲池来处理,而BNED 指令则将采用其来处理。
                       下图分别显示的3 级流水和5 级流水的结构。
    1.jpg
    三级流水结构(Fetch(取指)、Decode(译码)、Execute(执行))
    2.jpg

                      五级流水结构
    (IF(取指)、OF(译码)、EX(执行)、MEM(从存储器中读取数据)、WB(写回))

                         MicroBlaze 的存储结构
    MicroBlaze 采用哈佛的存储结构,也就是指令和数据采用分离的地址空间结构,每个地址空间有32 位宽,可以最多分别处理4GB 的指令和数据存储。另外指令和数据的存储空间可以重叠地被映射到同一块物理地址中,以方便软件调试。除非声明了支持非法异常,所有的指令必须以合法字的形式被接收。由于MicroBlaze 没有区分数据接口为I/O 和存储,所以处理器存储的接口也是OPB、LMB 和XCL,而且LMB 存储地址空间必须不能和OPB 及XCL 重叠。这一部分内容在总线接口中还会涉及。

                        MicroBlaze 的中断机制MicroBlaze 支持重置、硬件异常、中断、用户异常、暂停等机制。它们的优先级排序为(标号越小,优先级越高):
    1、重置
    2、硬件异常
    3、不可掩饰暂停
    4、暂停
    5、中断
    6、用户异常
    表列出了这些中断机制的返回地址寄存器和实例 (详细信息请参考相关文档)
    1.jpg
    2.jpg


                                  MicroBlaze 的FPU(Floating Point Unit)
    MicroBlaze 采用基于IEEE 754 标准的FPU,支持加、减、乘、除、比较运算,采取四舍五入的取舍方式,对溢出和非法操作有专门的标志方法。单元采用常规的硬件异常机制,对溢出、除数为0、非法操作和非正常操作数的异常进行处理。

                                 MicroBlaze 指令和数据CacheMicroBlaze 使用了可配置的指令和数据Cache 用以执行LMB 地址空间外的代码和数据。他们具有如下特点
    1.直接映射(1 路联合)。
    2.使用可选择的Cache 存储地址空间。
    3.可配置Cache 和tag 的大小。
    4.通过XCL 接口Cache。
    5.可选择4 或者8 字Cache-line。
    6.使用MSR 中的一位控制Cache 的使用和关闭。
    7.可选择用WIC/WDC 指令使Cache-line 中的指令无效。
    8.直接写入(只是数据Cache 的特点)。
    下图显示了指令Cache 和数据Cache 的结构图。
    1.jpg

                       指令Cache结构图

    2.jpg
                       数据Cache结构图
    下面是一个配置的例子: 假设我们设置C_ICACHE_BASEADDR=0x00300000,C_ICACHE_HIGHADDR=0x0030ffff, C_CACHE_BYTE_SIZE=4096,_ICACHE_LINELEN=8
    那么我们可以得到Cache 的存储大小为64KB 的16 位字节地址和4KB 的12位字节地址,因此tag 的地址宽度就是(16-12)=4 位。所以配置时我们需要2个RAM16 来存储1024 个指令字和1 个RAM16 来存储128 个由4 位tag、8 个有效字位和1 个有效线位构成的Cache-line,即我们总共需要3 个RAM16。
                               MicroBlaze 的总线接口
    采用了哈佛结构的 MicroBlaze 配置了以下总线接口对指令和数据进行分别传输:
    OPB(On-chip Peripheral Bus):32 位版本v2.0。
    LMB(Local Memory Bus):采用简单同步协议,使BRAM 的传输更有效。
    FSL(Fast Simplex Link):提供快速不判断流信息机制。
    XCL(Xilinx Cache Link):提供Cache 和外部存储控制器间的快速不判断从边流接口。
    调试接口:用以支持微处理器调试模块MDM 核。
    追踪接口:用以支持性能分析。
    下面将对其进行逐一介绍。

    OPB
    OPB 总线分为D(Data)OPB 和I(Instruction)OPB 两类接口,主要用来挂接数据和指令的片上外设,是各类外设连接处理器的主要方式。关于OPB 总线的详细内容可参见IBM 的64 位OPB v2.0 结构说明书。

    LMB
    LMB 总线主要用来连接片上BRAM(Block RAM)。为了使得访问在一个时钟周期内完成,LMB 采用了最少的控制信号和简单的协议的方式。它分为D(Data)LMB 和I(Instruction)LMB 两类接口,而且这些接口只和BRAM 连接。LMB 上的读写操作分为一般读写操作和背靠背读写操作四种。
    下图显示了这四种操作。
    1.jpg
                 LMB 的一般写操作
    2.jpg

                 LMB 的一般读操作

    3.jpg
                 LMB 的背靠背写操作

    4.jpg
                 LMB 的背靠背读操作

    另外LMB 支持读写数据的转换,比如字、半字、字节到字的转换,半字、字节到半字的转换,字节到字节的转换等。

    XCL
    XCL 是一个连接外部存储设备的高性能总线。它直接连接存储控制器和集成的FSL 缓冲器,从而使得系统有最小的延时和最少的实例。它分为D(Data)XCL 和I(Instruction)XCL 两类接口。只有当Cache 被使能之后,这一总线才能够起作用,Cache 以外的指令和数据仍将通过OPB 或者LMB 总线传输,而没有Cache 使能的情况下,指令和数据都通过OPB 总线进行传输。下图给出了总线的一种连接。
    1.jpg

    FSL 提供了输出FIFO 和输入FIFO 之间的一种点对点传输通道。它分为M(Master)FSL 和S(Slave)FSL 两类接口。每一类接口都有最多8 个。下图给出了总线的一种连接。
    1.jpg

                   FSL 用以实现硬件加速函数Fx
    FSL 的读写操作是通过put 和get 指令完成的。写操作在一个时钟周期内使寄存器的内容转移到输出FIFO 中(只要FIFO 不满)。这里存在两种模式:阻塞模式和非阻塞模式。如果FIFO 已满,在阻塞模式下处理器会等待直到FIFO 因为输出而变得不满为止;而在非阻塞模式下,写操作被禁止,同时在MSR 中设置进位信号。这时指令仍将被完成执行。同样的,读操作也存在着两种模式。从输入FIFO 到寄存器内容转移过程需要两个时钟周期(只要FIFO 中有数据),如FIFO 中没有数据,那么在阻塞模式下,处理器会等待直到FIFO 因为输入而获得数据为止;而在非阻塞模式下,数据的传输没有发生,同时在MSR 中设置
    进位信号,但是传输仍将被完成。

    调试接口和追踪接口
    调试接口用来支持基于JTAG 的软件调试工具,比如XMD。接口连接FPGA上的MDM 进行对多处理器核的软件调试,可以设置断点、暂停或者重置、读写寄存器和存储空间信息、写入指令和数据Cache 等。追踪接口可以输出内部信号的状态用以进行性能的监视和分析。Xilinx 公司声称不能保证这一IP 可以向后兼容。

                       Xilinx 嵌入式系统开发工具介绍
    Xilinx 公司推出的Embedded Development Kit (EDK)是包含了所有用于设计嵌入式编程系统的集成开发解决方案。这个由Xilinx 预配置的套件包括了Xilinx Platform Studio(XPS)工具以及嵌入式IBMPowerPC™ 硬件处理器核和Xilinx MicroBlaze™软处理器核进行Xilinx平台FPGA 设计时所需的技术文档和IP。对于Xilinx 平台的FPGA 系列,例如Virtex-4、Virtex-II Pro 或Spartan-3 器件系列,EDK 套件提供了软件和硬件两个方面的集成,允许工程团队定制他们的硬核/软核设计,以优化其特性集、性能、尺寸和成本. EDK 采用灵活的可编程平台,这些智能的平台工具能够使系统架构、硬件和软件工程师在可编程系统领域进行迅捷而富有创造
    力的开发工作。处理器开发工具是Xilinx 综合性嵌入式解决方案的关键部分,面向Virtex 和Spartan 的FPGA,由Xilinx 工具包通过提取和自动化处理器系统设计,大大加速了嵌入式开发。EDK 同时对使用Xilinx ISE 的结合开发提供了良好的支持。

                       EDK 套件组件介绍
    1. Embedded Development Kit (EDK)组成:
    嵌入式系统工具:
    Xilinx Platform Studio (XPS),
    Software Development Kit (SDK),
    Xilinx Microprocessor Debug (XMD),
    工业接口仿真工具(Interface to industry standard simulation tools),
    ChipScope Pro 支持,
    总线功能模块仿真支持(Bus Functional Model (BFM) simulation
    support),
    GNU 工具链(编译器和调试器),
    对MicroBlaze和PowerPC指令集仿真(Instruction Set Simulator (ISS)
    for MicroBlaze and PowerPC),
    Flash编程器(Flash programmer);
    MicroBlaze™ 核和许可协议;
    处理器周边IP核;
    程序实例。
    QQ截图20130725234252.jpg
    2. XPS 介绍
    1.jpg
    XPS 为嵌入式处理器系统提供了一个创建软件和硬件规范流程的集成的环境。它的功能和特点如下:
    使用基本系统向导Base System Builder (BSB)来进行硬件平台生成;
    自定义IP 创建向导;
    ChipScope Pro 调试支持;
    多软件工程项目支持;
    面向独立系统,例如Xilinx MicroKernel,Wind River VxWorks, MontaVista
    Linux,和其他第三方系统,的板支持包Board Support Package (BSP)。
    1.jpg
    3.SDK 集成开发环境介绍
    2.jpg
    SDK 是一个对于XPS 的IDE 集成开发环境补充,提供了一个软件工程项目
    的开发环境。其功能和特点如下:
    基于Eclipse 开放源代码标准;
    项目管理;
    功能完善的C/C++代码编辑器和编译环境;
    程序创建配置和自动化的Makefile 生成;
    完美集成的对嵌入式对象的无缝调试环境;
    源码版本控制;
    支持类似CVS 的插件支持。
    1.jpg

    ChipScope Pro Support
    ChipScope Pro 分析器(analyzer)主要被用来做硬件系统调试。它支持利用
    GNU 调试器同时对软件和硬件进行调试;
    以下的ChipScope Pro核被包含在EDK中:
    – OPB and PLB IBA (Integrated Bus Analyzer)
    – VIO (Virtual I/O)
    – ICON (Integrated Controller)
    – ILA (Integrated Logic Analyzer)

                        Xilinx 嵌入式系统开发流程
    1.使用BSB 向导构建硬件平台
    用BSB 向导生成硬件平台向导可以帮助开发人员为一个特定的开发板或者用户自定义的开发板迅速构建一个新的嵌入式处理器系统.
    1.jpg
              BSB 向导生成硬件平台向导
    Base System Builder (BSB)允许用户在向导中对一下内容进行配置:
    -处理器类型(MicroBlaze 或 PowerPC);
    -处理器和总线频率;
    -调试接口;
    -内存大小和类型;
    -通用外围设备,例如GPIO,UART,定时器等;
    -内存和外围设备测试软件生成;
    Xilinx 开发板说明文件(Xilinx Board Description (XBD) file)定义了特定开发板外围设备参数和连接FPGA 设备的方式。
    通过BSB 向导的设置将产生Xilinx 的开发板描述文件(Xilinx BoardDescription File),后缀名为.xbd,它定义了特定开发板的外围设备和这些外围设备同FPGA 设备的连接方式。

    2.设定工程选项
    从XPS 的界面菜单调出[Project|Preoject Option...]对话框,在Device andRepository 标签中可以看到通过BSB 向导选择的开发板的设备信息。在Hierarchyand Flow 标签中可以选择设计的模式,默认为顶层设计通过XPS 来实现,如果选择sub-module design 模式,将通过调用ISE Project Navigator 来实现。
    3.创建硬件
    从XPS 的界面菜单调用[Hardware|Generate Bitstream],可以生成一个硬件平台的二进制文件。当Generae Bitstream 菜单被调用时,XPS 会从 $EDK/data/xflow 文件夹复制bitgen.ut 文件到工程目录的etc 文件夹。etc 文件夹还有一个fast_runtime.opt 文件已经在BSB 向导环节从同样的目录复制过来。XPS 将用这两个文件生成用于硬
    件平台的二进制文件。当二进制文件生成后,可以在/implementation 目录通过查看system.par 文件查看生成的详细结果。
    4.设置软件选项和生成软件库
    从XPS 的界面菜单调出[Software|Software Platform Settings]对话框,在OS& Library Settings 可以选择一个用于设计的可选操作系统。XPS 支持Standalone(默认), Xilinx MicroKernel, Monta Vista Linux 和vxWorks 操作系统。其他的操作系统可以通过安装Microprocessor Library Definition(MLD)文件来实现。在这里也可以添加相应的库来实现一些具体的功能,如添加lwip 可以支持
    网络功能。
    5. 建立一个新的软件工程项目
    从XPS 的界面菜单调出[Software|Add Software Appliction Project]对话框,用户可以选择针对的处理器添加起软件工程项目。新添加的软件工程项目将保存于$EDK/SDK_Projects 文件夹中。当程序员完成代码编写后,可以先通过EDK进行交叉编译,这是因为EDK 已经内置了一套PowerPC/MicroBlaze 的GNU 编译工具。在Applications 标签下右键单击建立的Project。在出现的下拉菜单中选择Set Compiler Options,里面有关于这种编译应用程序的参数选择。程序员可根据具体情况进行设置。EDK 还附带提供基于Eclipse 技术的SDK,使开发者能够像使用VC 一样对所开发的程序进行debug 和性能分析。
    6.配置FPGA,下载软件到开发板并验证设计功能
    从XPS 的界面菜单选择[Device Configuration|Downloads Bitstream],将之前生成的位流下载到开发板中。然后可以通过超级终端进行交互来验证设计功能。
    7.在设计中包含额外的IP 核(可选)
    在XPS 左边面板[Project Information Area|IP Catalog]中,选择需要的IP 添加如工程内,同时XPS 支持用户添加自定义IP。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-4-27 13:14
  • 签到天数: 104 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-8-21 12:52:27 | 显示全部楼层
    楼主讲的好深奥
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-4-2 16:02
  • 签到天数: 257 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-21 14:28:38 | 显示全部楼层
    好NX的东西,有精力了可以好好研究一下了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-24 12:35
  • 签到天数: 26 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-8-21 20:45:32 | 显示全部楼层
    买不起这块板子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-29 18:58
  • 签到天数: 213 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-8-30 11:20:48 | 显示全部楼层
    都是精华部分啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2013-11-10 15:57
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-11-9 12:16:54 | 显示全部楼层
    果断保存 留着慢慢看。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 3868 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    发表于 2013-11-9 13:15:40 | 显示全部楼层
    VirtexII Pro 很经典的板子,应该有PowerPC核吧!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-13 15:39 , Processed in 0.158906 second(s), 28 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.