◎添加完成后,编译工程,产生.bit文件。编译完成后,通过xps启动SDK,Export&Launch SDK平台。
◎为SDK平台选择workspace,这里将SDK工作目录保存在MB_Demo\MB_SDK下。打开后的SDK,系统已经导入了硬件系统文件(system.xml)。从该文件中可以看到MB系统的内部信息。
◎打开system.xml文件,可以看到添加组件的信息,以及地址映射信息。尤其注意,每个组件必须有版本号,否则重启SDK。
◎点击SDK平台中的file,新建个Application Project。
◎在新建的工程中,工程名命名为Helloworld,其他保持默认即可。
◎完成后的Helloworld工程如下所示。
◎打开Helloworld的lscript.ld文件,可以看到程序代码放置的位置,这里我们都存储在内部RAM中。
◎右击Helloworld,在弹出的菜单中执行build project,生成ELF目标文件。
◎将先前生成的Bit文件预先下载到FPGA中。可直接通过ISE中的ConfigureTarget Device下载。
◎下载完成后,再进行SDK软件调试。打开helloworld.c文件,可以看到主要执行的代码。
◎右击helloworld,让我们来执行这段代码。运行Run Configurations,配置执行环境。
◎双击GDB选型,生成一个Helloworld Debug。
◎选择STDIO Connection为JTAG UART,软件执行的信息通过JTAG反馈至Console控制台。
◎运行Run,可以看到SDK平台的Console显示出了运行的结果,这样一个简单的helloworld实验就完成了。
◎做完上述实验,很多人可能一头雾水,硬件软件是如何工作,是通过什么样的工作原理,为嘛能够在控制台打印出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信息至控制台啦。结合下面这样的图,让我们对刚刚搭建的最小系统有个更深刻的理解。
◎那么软件系统又是如何工作的呢,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系统中所添加的组件以及组件状态均可通过该文件查看。
◎必要的说明:很多人在建立MB系统时,不需要用到ISE,直接在xps里面新建即可,本教程之所以使用ISE来进行例化,主要是为后续教程中MB系统作为协处理器配合ISE一起开发考虑。