XU.J.P

第一章 走进Helloword,搭建第一个SOC系统

0
阅读(2008)

Microblaze(MB)的开发包含硬件和软件部分:硬件部分主要是搭建个SOC硬核系统,在Xilinx Platform Studio(XPS)中完成的。软件部分则在Xilinx的SDK中来实现我们所需的功能。下面正式进入Microblaze的学习,让我们先从一个Helloword开始吧。

◎ 打开ISE,新建一个工程,我们以MB_Demo命名这个工程,选择MIS603对应配套的器件。添加New Source,选择添加Embedded Processor,文件命名为mis603_soc(自行命名)。如下图所示:

clip_image002[6]

◎继续next,直到生成mis603_soc.xmp并弹出Xilinx Platform Studio(EDK)平台。在弹出的对话框中选择Yes。

clip_image004[6]

◎完成后在弹出的对话框中,选择AXI System(默认)。点击OK,弹出Board and System Selection中,做出如下选择,其他保持默认。

clip_image006[6]

◎弹出Base System Builder—AXI flow对话框,保持处理时钟100Mhz不变,其他的也默认即可。当然可根据自己实际情况对RAM大小进行修改。包括:本地RAM、指令Cache和数据Cache大小,默认均为8KB。如果不添加其他外设,点击Finish即可完成一个简易的MB系统搭建。

clip_image008[6]

◎回到XPS界面,在主界面中可以查看改系统所添加的组件或设备。通过‘+’可以查看每个设备之间的连接关系。点击Ports,可以看到External Ports选项,即与外部相连,其时钟采用差分输入CLK_N和CLK_P,与我们mis603单端输入时钟不一致。打开Project窗口下的mis603_soc.mhs文件,该文件里面记录了MB系统的硬件信息。

clip_image010[6]

◎打开信息硬件信息文件mis603_soc.mhs,做出如下修改:将差分输入改成单端输入。点击保存后,弹出Reload,确认。这时候,再去看System Assembly View,可以看出,时钟为单端,只有一个CLK了。

clip_image012[6]

◎打开UCF文件,做好外部端口时钟和复位的引脚约束。保存后,我们的最小MB系统已经搭建完成。

clip_image014[6]

◎点击Hardware下Generate Netlist,产生网表。知道Console出现Done!表示编译完成。

clip_image016[6]

◎返回到ISE界面,将mis603_soc.ucf添加到工程,文件目录:..\MB_Demo\MB_Demo\mis603_soc\data。新建一个mis603_MB.v文件,将mis603_soc例化至该文件内,如果不知道该文件的输入输出端口,可查看..\MB_Demo\MB_Demo\mis603_soc\hdl\mis603_soc.v文件,该文件是所建立MB系统的黑盒子文件。其中mis603_MB.v文件中的代码如下所示。

`timescale 1ns / 1ps

module mis603_MB(

input CLK,

input RESET

);

(* BOX_TYPE = "user_black_box" *)

mis603_soc mis603_soc_u

(

.RESET (RESET),

.CLK(CLK),

);

endmodule

◎添加完成后,编译工程,产生.bit文件。编译完成后,通过xps启动SDK,Export&Launch SDK平台。

◎为SDK平台选择workspace,这里将SDK工作目录保存在MB_Demo\MB_SDK下。打开后的SDK,系统已经导入了硬件系统文件(system.xml)。从该文件中可以看到MB系统的内部信息。

clip_image018[6]

◎打开system.xml文件,可以看到添加组件的信息,以及地址映射信息。尤其注意,每个组件必须有版本号,否则重启SDK。

clip_image020[6]

◎点击SDK平台中的file,新建个Application Project。

clip_image022[6]

◎在新建的工程中,工程名命名为Helloworld,其他保持默认即可。

clip_image024[6]clip_image026[6]

◎完成后的Helloworld工程如下所示。

clip_image028[6]

◎打开Helloworld的lscript.ld文件,可以看到程序代码放置的位置,这里我们都存储在内部RAM中。

clip_image030[6]

◎右击Helloworld,在弹出的菜单中执行build project,生成ELF目标文件。

clip_image032[6]

◎将先前生成的Bit文件预先下载到FPGA中。可直接通过ISE中的Configure Target Device下载。

clip_image034[6]

◎下载完成后,再进行SDK软件调试。打开helloworld.c文件,可以看到主要执行的代码。

◎右击helloworld,让我们来执行这段代码。运行Run Configurations,配置执行环境。

clip_image036[6]

◎双击GDB选型,生成一个Helloworld Debug。

clip_image038[6]

◎选择STDIO Connection为JTAG UART,软件执行的信息通过JTAG反馈至Console控制台。

clip_image040[6]

◎运行Run,可以看到SDK平台的Console显示出了运行的结果,这样一个简单的helloworld实验就完成了。

clip_image042[6]

◎做完上述实验,很多人可能一头雾水,硬件软件是如何工作,是通过什么样的工作原理,为嘛能够在控制台打印出hello world呢。下面对整个系统进行简单的梳理。

◎在FPGA内部搭建一个MB的SOC系统,可以理解成FPGA用纯逻辑电路搭建一个类似于单片机或STM32的系统。FPGA就是个积木,一点点地搭建个独立的在芯片内部独立的系统。只不过这个microblaze系统xilinx公司已经做好了,我们能够直接拿来配置使用即可。

◎这个MB的SOC系统,输入时钟50MHZ,工作时钟100MHZ,这当然得用到时钟倍频啦。又由于系统具有复位功能,因此,复位电路又是必不可少的。连接Microblaze系统各个组件模块之间必然存在内部总线将这些功能模块连接起来。本地存储器通过LMB(本地存储器总线)与MB连接,外部可扩展接口由axi4lite_0即AXI4总线将microbalze和外面扩展接口连接。当然,我们需要一个能够实时监测系统内部状况并予以调试的组件,这样debug应然而生。没有debug,xilinx下载线无法读取FPGA开发板的运行状态,也就自然无法反馈Hello world信息至控制台啦。结合下面这样的图,让我们对刚刚搭建的最小系统有个更深刻的理解。

clip_image044[6]

◎那么软件系统又是如何工作的呢,SDK平台又包括哪些东西呢。这样我们打开刚刚建立的Helloworld平台。首先Helloworld工程下包括两方面:工程Helloworld以及用来开发的BSP包。

◎Helloworld下面包括:生成的二进制文件(Binaries目录),Includes(包括的各类文件),Debug(调试所需的文件),src(开发的源文件)。

◎Helloworld_bsp下面包括:BSP Documention(BSP文件包,通常是打不开的,如何打开,将在后续教程介绍)、microbalze系统(开发所用的各种头文件、库文件 )、日志文件(.log)、生成链接文件(makefile)和系统硬件查看日志文件(system.mss)。

◎mis603_soc_hw_plateform包含硬件系统文件,MB系统中所添加的组件以及组件状态均可通过该文件查看。

clip_image046[6]

◎必要的说明:很多人在建立MB系统时,不需要用到ISE,直接在xps里面新建即可,本教程之所以使用ISE来进行例化,主要是为后续教程中MB系统作为协处理器配合ISE一起开发考虑。

Baidu
map