1、Microblaze串口设计流程基于Xilinx FPGA的数据通信设计流程EDK是Xilinx公司在可编程逻辑器件上进行嵌入式处理器系统设计的一系列软件工具,它支持IBM PowerPC处理器硬核和Xilinx公司的MicroBlaze处理器软核。EDK包括如下部分:Xilinx Platform Studio(XPS)图形界面;嵌入式系统工具集;嵌入式处理IP核,比如处理器和外围设备;Platform Studio SDK(软件开发工具),可用于开发嵌入式应用程序。MicroBlaze嵌入式软核是一个被Xilinx公司优化过的可以嵌入在FPGA中的RISC处理器软核,具有运行速度快、占用资
2、源少、可配置性强等优点,广泛应用于通信、军事、高端消费市场等领域。1.MicroBlaze的体系结构MicroBlaze 是基于Xilinx公司FPGA的微处理器IP核,和其它外设IP核一起,可以完成可编程系统芯片(SOPC)的设计。MicroBlaze 处理器采用RISC架构和哈佛结构的32位指令和数据总线,可以全速执行存储在片上存储器和外部存储器中的程序,并和其它外设IP核一起,可以完成可编程系统芯片(SOPC)的设计。MicroBlaze处理器采用RISC架构和哈佛结构的32位指令和数据总线,可以全速执行存储在片上存储器和外部存储器中的程序,并访问其的数据。MicroBlaze内部有32
3、个32位通用寄存器和2个32位特殊寄存器PC指针和MSR状态标志寄存器。为了提高性能,MicroBlaze还具有指令和数据缓存。所有的指令字长都是32位,有3个操作数和2种寻址模式。指令按功能划分有逻辑运算、算术运算、分支、存储器读/写和特殊指令等。指令执行的流水线是并行流水线,它分为3级流水:取指、译码和执行。MicroBlaze可以响应软件和硬件中断,进行异常处理,通过外加控制逻辑,可以扩展外部中断。利用微处理器调试模块(MDM)IP核,可通过JTAG接口来调试处理器系统。多个MicroBlaze处理器可以用1个MDM来完成多处理器调试。MicroBlaze处理器具有8个输入和8个输出快速
4、单一链路接口(FSL)。FSL通道是专用于单一方向的点到点的数据流传输接口。FLS和MicroBlaze的接口宽度是32位。每一个FSL通道都可以发送和接收控制或数据字。2.MicroBlaze的开发应用EDK(嵌入式开发套件)可以进行MicroBlaze IP核的开发。工具包中集成了硬件平台生产器、软件平台产生器、仿真模型生成器、软件编译器和软件调试工具等。EDK中提供一个集成开发环境XPS(Xilinx平台工作室),以便使用系统提供的所有工具,完成嵌入式系统开发的整个流程。EDK中还带有一些外设接口的IP核,如LMB、OPB总线接口、外部存储控制器、SDRAM控制器、UART、中断控制器、
5、定时器等。利用这些资源,可以构建一个较为完善的嵌入式微处理器系统。在FPGA上设计的嵌入式系统层次结构为5级。可在最低层硬件资源上开发IP核,或用已开发的IP核搭建嵌入式系统,这是硬件开发部件;开发IP核的设备驱动、应用接口(API)和应用层(算法),属软件开发内容。利用MicroBlaze构建基本的嵌入式系统。通过标准总线接口PLB总线的IP核,MicroBlaze就可以和各种外设IP核相连。EDK中提供的IP核均有相应的设备驱动和应用接口,使用者只需利用相应的函数库,就可以编写自己的应用软件和算法程序。对于用户自己开发的IP核,需要自己编写相应的驱动和接口函数。3.MicroBlaze的应
6、用在软件无线电系统中,一般采用“微处理器+协处理器”结构。微处理器一般使用通用DSP,主要完成系统通信和基带处理等工作;协处理器用FPGA实现,主要完成同步和预处理等底层算法的运算任务。在本课题中,采用的基带处理算法比较简单,应用软处理器IP核代替DSP,在一片FPGA内就能实现整个系统的设计。这样可以简化系统的结构,提高系统的整体性。FPGA片上系统主要完成两个任务发送和接收数据。对于发送任务,FPGA完成硬件算法的初始化,接收串口数据,并将数据存储在双口SRAM中,系统硬件算法部分对双口SRAM中数据进行基带处理,并将结果送给D/A转换器。对于接收任务,FPGA接收A/D转换器送来的数据,
7、进行基带处理,并将数据存储在双口SRAM中,把存储在双口SRAM中的数据通过串口发送回主机。在EDK开发套件的XPS集成开发环境下进行系统硬件设计。在其界面环境下,添加IP核,进行系统连接和各项参数设置。由于系统中包含的硬件算法模块不是标准模块,因此工程需要设置成子模块方式,利用平台产生器,根据硬件描述文件(.MHS文件),生成嵌入式系统子模块的网表文件(.NGC)。然后在ISE设计环境下,从外部通过GPIO端口与硬件算法模块相连,从而构成整个应用系统的硬件模型。在EDK中,每一个外设IP模块都有自己的软件函数库。利用Libgen工具,将所需外设函数数库的头文件添加进工程中,通过调用这些函数可
8、以操作和控制这些外设。使用标准C语言进行应用程序的开发,编写相应的算法软件,完成系统功能。将编写的程序代码利用mb-gcc编译工具,根据系统的软件一并,生成.ELF文件。在编译链接之前,若选择调试方式,就会在生成文件中加入调试接口SMDstub,进行程序的硬件调试。利用系统的硬件模型以及RAM块的组织结构文件、ELF文件和用户结束文件,应用FPGA综合实现工具(如Xilinx XST)进行综合,然后下载生成的配置BIT文件到目标板上。利用EDK中提供的GDB调试工具可以进行程序调试。有两种调试方法:软件仿真和硬件调试。软件仿真可以进行程序的功能调试,在开发工具内部就可以进行,不需要硬件支持。硬
9、件调试就是通过JTAG接口或串口(可在硬件设计时选择),连接到目标板上的应用系统中的XMD调试接口,将软件程序下载到系统中进行调试。4.使用XPS和SDK开发环境步骤流程4.1XPS搭建硬件平台,建立Microblaze工程EDK提供了一种简单的方式利用BSB wizard的界面帮助用户生成基本硬件系统。启动XPS界面:我们通过BSB wizard来建立工程,选中利用向导,点击OK,出现如下界面:选择建立工程的路径,修改工程名字,可以默认system.xmd,点击OK。选择新建,点击Next,选择开发板,点击Next,此处我们选择单个处理器,点击Next,设置FPGA片外晶振为100MHz,选
10、择Microblaze处理器,CPU核主频为100MHz,使用8K字节片内BlockRAM作为CPU核的数据和指令暂存,点击Next,只使用串口,选择使用中断,设置串口波特率、数据位宽和奇偶校验位,点击Next,连续点击两个Next后出现BSB wizard的最后一个界面,显示所有的选项情况,系统同时自动生成每个硬件模块的地址范围,检查无误后点击Finish进入以下界面:选中Start using Platform Studio进行其它设置,点击OK;本项目中,我们需要有八个串口来采集陀螺的数据,用一个串口将FPGA中的数据传到上位机进行显示,所以我们需要在XPS中加入八个串口,在IP Cat
11、alog里面找到XPS UART(Lite),右击添加IP,连续添加八个串口;添加完成之后,将其连接PLB总线上面;切换System Assembly View文件窗口到Ports子窗口,展开刚添加的八个IP,右击输入输出和中断将其进行新的连接,然后将RX和TX分别设置为外部连接,右击选择Make External,并且注意修改外部管教的输入输出情况;最后切换到System Assembly View文件窗口到Addresses子窗口,将每个串口地址范围设置为64K,点击自动生成。分别如下面几个图所示:以上完成了硬件逻辑上的构建工作,下面将逻辑结构定位到具体的硬件芯片中,修改UCF文件来指定管
12、脚和约束,硬件自动生成的UCF文件如下:# Virtex 4 ML403 Evaluation PlatformNet fpga_0_RS232_Uart_RX_pin LOC=W1 | IOSTANDARD = LVCMOS33;Net fpga_0_RS232_Uart_TX_pin LOC=W2 | IOSTANDARD = LVCMOS33;Net fpga_0_clk_1_sys_clk_pin TNM_NET = sys_clk_pin;TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin kHz;Net fpga_0_clk_1_sys_clk
13、_pin LOC=AE14 | IOSTANDARD = LVCMOS33;Net fpga_0_rst_1_sys_rst_pin TIG;Net fpga_0_rst_1_sys_rst_pin LOC=D6 | PULLUP;我们需要将上面的管脚重新定位到自己使用的FPGA芯片上面,同时将添加的八个串口的管脚连接到FPGA上面,修改后如下所示:# Virtex 4 ML403 Evaluation PlatformNet fpga_0_RS232_Uart_RX_pin LOC=F1 | IOSTANDARD = LVCMOS33;Net fpga_0_RS232_Uart_TX_pin
14、 LOC=A9 | IOSTANDARD = LVCMOS33;Net fpga_0_clk_1_sys_clk_pin TNM_NET = sys_clk_pin;TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin kHz;Net fpga_0_clk_1_sys_clk_pin LOC=B15 | IOSTANDARD = LVCMOS25;Net fpga_0_rst_1_sys_rst_pin TIG;Net fpga_0_rst_1_sys_rst_pin LOC=Y4 | PULLUP;Net xps_uartlite_0_RX_pin LOC
15、=C2 | IOSTANDARD = LVCMOS33;Net xps_uartlite_0_TX_pin LOC=D2 | IOSTANDARD = LVCMOS33;Net xps_uartlite_1_RX_pin LOC=D6 | IOSTANDARD = LVCMOS33;Net xps_uartlite_1_TX_pin LOC=D5 | IOSTANDARD = LVCMOS33;Net xps_uartlite_2_RX_pin LOC=D4 | IOSTANDARD = LVCMOS33;Net xps_uartlite_2_TX_pin LOC=G6 | IOSTANDAR
16、D = LVCMOS33;Net xps_uartlite_3_RX_pin LOC=H7 | IOSTANDARD = LVCMOS33;Net xps_uartlite_3_TX_pin LOC=G7 | IOSTANDARD = LVCMOS33;Net xps_uartlite_4_RX_pin LOC=C1 | IOSTANDARD = LVCMOS33;Net xps_uartlite_4_TX_pin LOC=C6 | IOSTANDARD = LVCMOS33;Net xps_uartlite_5_RX_pin LOC=C5 | IOSTANDARD = LVCMOS33;Ne
17、t xps_uartlite_5_TX_pin LOC=C4 | IOSTANDARD = LVCMOS33;Net xps_uartlite_6_RX_pin LOC=G5 | IOSTANDARD = LVCMOS33;Net xps_uartlite_6_TX_pin LOC=H6 | IOSTANDARD = LVCMOS33;Net xps_uartlite_7_RX_pin LOC=H8 | IOSTANDARD = LVCMOS33;Net xps_uartlite_7_TX_pin LOC=G9 | IOSTANDARD = LVCMOS33;修改完UCF文件后,再修改CMD文
18、件,原文件内容如下:setMode -bscansetCable -p autoidentifyassignfile -p 3 -file implementation/download.bitprogram -p 3quit在这个文件中,setMode命令设置编程模式为边界扫描模式,即我们熟悉的JTAG编程模式;setCable命令设置编程电缆类型为自动检测,使用第一个检测到的电缆下载bit文件;identify命令识别目标板上有几个可编程的器件,该命令可以列出目标板上的FPGA、PROM、ACE、CPLD等所有使用JTAG链可以编程的器件;assignfile命令指定编程使用的比特流文件;
19、program命令指编程器件;quit命令最后退出;我们的开发板在JTAG链上面连接了PROM和FPGA两个元件,并且FPGA是JTAG链上的第二个元件,所以要修改CMD文件中的两个3,将其改为2。4.2SDK里面进行软件编写通过以上步骤,在XPS里面已经完成硬件结构的搭建,然后生成网表和比特流文件,更新完比特流文件后,可以将测试代码的可执行文件下载到FPGA中进行简单测试,最后直接导入到SDK中,SDK图形界面集中提供了全面的软件设计工具,我们将在这里面完成代码的编写和调试工作,导入后图形界面如下:在SDK里面新建一个工程,按照以下方式使用默认的设置和选项进行建立;完成上述步骤后,在工程管理窗口右键单击Standalone_bsp_0,按照下图所示新建工程;在接下来出现的对话框中选择Xilinx C Project并点击Next,出现下图所示,输入工程名字,选择Empty Application并点击Next;出现下图所示界面选择Target an existing Board Support Package,完成;在工程管理窗口右击uart工程名字,选择新建Source File,输入新建原文件的名称,确定后出现代码编辑窗口,如下图所示,开始代码的编写;代码编写完成之后,下载到FPGA中进行调试,我们也可以进行Debug调试,最终实现我们需要的功能。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1