首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

第一个EDK实验

第一个EDK实验

初学EDK,在网上查找了一些EDK的资料和实验,发现XILINX的EDK大学计划文档和网上其他EDK学习文档大多是基于老版本的EDK软件,我在使用EDK13.3学习的时候发现EDK13.3版本同之前的EDK版本有了较大区别,EDK13.3将硬件平台的建立和软件的编写完全分开了,XPS进行硬件平台的建立,SDK进行软件应用程序的开发。在此记录下我在学习中进行的第一个EDK实验,希望能给使用EDK13.3学习的朋友们一点借鉴。本文档记录建立一个最简单micoblaze平台的步骤,实现8bit LED灯指示当前8bit DIP拨码状态。1.打开XPS软件。2.点击第一个选项Create New Project Using Base System Builder。3.选择工程路径和总线类型。选择PLB system点OK。     AXI总线是XILINX在EDK中新增的一种总线类型,如果选这种总线的话要保证你的实验板卡上的FPGA芯片是SPARTAN6,VIRTEX6或者KINTEX7,VIRTEX7。     PLB总线是以前低版本EDK中就支持的总线,对FPGA型号支持的也比较全。本实验选择PLB总线。4.选择I would like to create a new design。点NEXT。 5.选择板卡类型。    如果使用XILINX官方开发板则选择第一项,板卡名称(Board Name)和版本(Board Revision)选择正确即可。如果所用的不是XILINX官方开发板而是自己做的板卡或者其他板卡则选择第二项。我使用的是自己的板卡,spartan3E器件,型号XC3S250E,PQ208封装,-4等级。此外还有一项Reset Polarity设置,即复位极性设置,可根据自己板卡复位信号的极性进行选择。 6.选择单处理器还是双处理器。  选择单处理器即可。 7.进行时钟频率设置和片内存储器容量设置。       Reference clock frequency 为板卡上进入FPGA的时钟频率,我使用的晶振为125M。  System clock frequency为microblaze处理器工作的时钟频率,我选择50M,可在下拉框中选择不同的频率。      Local memory 为片内存储器容量,我选择8KB,可在下拉框中选择不同的容量。  本实验不必进行浮点运算,因此不必勾选enable floating point unit。 8.增加外设。实验需要添加8bit DIP拨码和8bit LED指示灯,拨码和指示灯都使用GPIO实现。点击Add Device增加系统IO,在IO interface type 中选择GPIO,device中选择DIP_switches,点OK。DIP_switches便在右侧处理器外设中显示了,选择GPIO data width为8。同样步骤添加LEDS外设。添加完成后如图所示。点NEXT进入下一步设置。 9.进行缓存设置(cache configuration)。 选择的处理器结构没有缓存,点NEXT进入下一步设置。10.进入summary,显示系统信息及文件路径。    点Finish完成硬件设置,点击后弹出如图所示警告窗口,提醒我们在将设计下载到板卡之前保证已经对设计顶层模块进行了正确的管脚分配以及FPGA处于正常的JTAG链路中。点OK进入XPS开发环境。 11.进入XPS开发环境进行ucf文件编辑。XPS界面如图所示。 在project区域双击UCF文件,如下图所示,打开UCF约束文件,进行管脚约束。(注意,有可能双击ucf文件无法打开,这是由于XPS选择的文本编辑器设置导致的,XPS默认使用ISE的文本编辑器,但是如果你的ISE软件里面设置的编辑器不是ISE的文本编辑器而是其他编辑器,而该编辑器的安装路径有空格,那么XPS里面就有可能打不开UCF文件,那就需要将ISE软件里面的文本编辑软件选择设置为ISE文本编辑软件,具体设置为:打开ISE13.3软件,EDIT--->preferences-->ISE general-->editors选择ISE TEXT editor)。XPS已经为UCF文件生成了模板,我们只要将约束语句前面的的注释符号删除,将板卡上与设计对应的具体管脚写在“LOC=”后面就可以了。添加完UCF约束后如图所示。 此外.mhs文件里面记录了系统硬件信息。可打开看一下。其中包括端口信息,时钟信号频率,复位信号极性以及系统包括哪些部分。12.点击Generate Netlist生成网表文件。   运行时间可能较长需耐心等待一会儿。13.点击Generate BitStream生成bit文件。14.点击Export Design 弹出下图窗口,选择Export&Launch SDK。进入SDK开发环境。(也可省略第12,13步直接Export Design,系统会自动生成网标文件和bit文件) 15.进入SDK前出现选择workspace目录。注意选择的路径不要带有空格。进入SDK后如下图所示。16.新建一个xilinx C 工程。菜单栏File-->new-->Xilinx C project 如下图所示。弹出的新建xilinx C工程选项如下图所示,可以将工程名命名为dip_led_test方便理解。工程模板选择empty application。点next进入下一步。 17.进入创建板级支持包设置界面,将工程名命名为dip_led_test_bsp_0.点finish完成设置。 18.编写应用程序文件。完成上面步骤后SDK开发环境左侧的project explorer里面会出现刚才我们建立的两个工程。如下图所示。鼠标选中dip_led_test下面的src文件夹,点鼠标右键,新建c程序源文件。如下图所示。 源文件命名为dip_led_test.c 如下图所示。点finish完成源文件建立。SDK会自动打开新建的源文件,并进行语法检测,因为当前的源程序是空的,因此SDK会报告一个没有main函数的错误,可先不用理会该错误。将下面的源码添加到源文件中。保存后系统会自动检测是否有语法错误。#include "xparameters.h"#include"xgpio.h"#include "xgpio_l.h"#include "xutil.h" int
main (void){   XGpio DIP_SWITCHES;   XGpio LEDS;   int i,dip_check;        XGpio_Initialize(&DIP_SWITCHES,XPAR_DIP_SWITCHES_DEVICE_ID);        XGpio_SetDataDirection(&DIP_SWITCHES, 1, 0xffffffff);        XGpio_Initialize(&LEDS, XPAR_LEDS_DEVICE_ID);        XGpio_SetDataDirection(&LEDS, 1, 0x0);       while (1)       {         dip_check=XGpio_DiscreteRead(&DIP_SWITCHES, 1);         XGpio_DiscreteWrite(&LEDS, 1, dip_check);         for (i=0; i<999999; i++);       }}程序中XGpio_开头的函数都是XILINX的关于GPIO使用的API函数。具体的使用方法可以查看XILINX关于设备驱动的文档。具体查看方法如下:在SDK中选择system.mss文件。点击peripheral Drivers中 GPIO后面的Documentation。如下图所示。点击后会在网页浏览器中打开一个网页类型的说明文档,点files会打开关于GPIO驱动文件列表,如下图所示。点列表中的xgpio.h便会打开关于GPIO的API的使用说明了。 19.编译工程。    点击快捷按钮或者按键CRTL+B对工程进行编译,如下图所示。 20.下载文件到FPGA中。编译完成后点击下载快捷键,如下图所示。 点击后会打开硬件配置文件和软件配置文件的选择窗口如下图所示。需要注意更改software configuration下面的文件选择,默认是bootloop,需要点下拉按钮选择elf文件。download.bit文件到FPGA中。    然后点program进行程序下载。在板子上可以测试一下8bitDIP拨码控制8个LED灯的亮灭。(在此窗口中bitstream是microblaze处理器的配置文件,该bit文件中不包括软件程序。Elf文件为软件配置文件,如果elf文件不选的话,下载后FPGA里面相对于只有一个microblaze而没有应用程序。正确下载一次后在workspace目录下的EDK_LAB_hw_platform文件夹中会生成一个download.bit的文件,该文件保护了硬件配置和软件配置,可以使用IMPACT软件下载。)这是我的第一个EDK实验,写出来希望能给想学习EDK的朋友有些帮助,我也是初学EDK文中难免有不足和遗漏之处,各位发现后可以告知我进行修改。EMAIL:jfwang1021@sina.com 转载自:jephen的博客
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表