上篇我们生成了能够加速图像边缘检测的硬件模块,将code,drivers,pcores这三个文件夹及其内容拷贝到先前建立的EDK工程目录下,然后重新打开一遍EDK工程,然后就可以在IP Catalog下面的Project Repository下看到生成的硬件加速模块了(如图所示):
?
?
然后按照添加IP的流程将该模块添加到已有的MicroBlaze硬件平台上。在这里,由ImpulseC转换生成的硬件模块包含有两条FSL(Fast Simple Link)通道接口,通过FSL通道,MicroBlaze能够将处理前和处理后的数据直接传输至该模块,而不用去占用较拥挤的OPB总线,这样数据传输延迟当然是大大低于一般总线的传输延迟的。因此在添加完fsl_img外设后,再添加两条FSL总线,一条(fsl_v20_0)专门用来作为MicroBlaze(Slave)从fsl_img(Master)模块读取数据的通道,另一条(fsl_v20_1)专门用来作为MicroBlaze(Master)从fsl_img(Slave)模块写数据的通道,如下图所示:
?
在Ports 连接窗口中,进行如下图所示的设置:
两条FSL总线和fsl_img硬件模块的时钟信号FSL_Clk都设成和系统时钟(也就是OPB总线的时钟信号)同步,而复位信号SYS_Rst则是直接和net_gnd相连,也就是说这个复位信号并没有作用。(为此我专门在ImpulsC的论坛上问过,得到的官方答复是因为该模块Run Only Once。因此,对复位信号并没有特殊要求,就将它直接和net_gnd相连了)。
就此,添加硬件模块到EDK工程中的工作也完成了,是不是没有想象的那么复杂呢?然后就可以执行Update Bitstream来更新该工程的配置文件了。
最后一步就是要在Linux的环境下编译code文件夹中的C文件得到和硬件配合工作的应用程序:
还记得编译uClinux内核要用到的microblaze-elf-tools吗?这个就是Microblaze平台的编译环境,code中的C代码通过这个编译环境里包含的各种编译工具就能得到可以在MicroBlaze上执行的应用程序了:
将code文件夹复制到Linux中你想要存放的地方,然后在终端中将microblaze-elf-tools的环境变量导出一下,以便能够直接使用mb-gcc的命令。然后进到code目录下,执行如下命令:
make FSL=0
这里需要解释一下的是,在ImpulseC导出software的时候已经自动生成了一个Makefile文件,这里的FSL=0?是作为参数传递进Makefile的,其涵义是告诉应用程序在该应用中可以利用的第一条FSL总线序号是从0开始的,也就是fsl_v20_0(其实本工程中还有一条FSL总线,只不过这条总线是用来下载uClinux内核的数据通道,与本应用无关,而且Instance Name叫做download_link,与fsl_v20_0和fsl_v20_1无关,特此说明)。
如图所示,执行完这一步后,将得到一个名为img的可执行程序。至此,所有的实验素材都已经准备好了,现在就开始验证实验结果了:
首先建立一个波特率为115200的超级终端连接(步骤省略);
然后在EDK下面将Bitstream文件下载到FPGA板上去,启动XMD控制台,下载uClinux内核镜像到硬件系统中,输入命令:
dow –data image.bin 0x30000000
con
随即就能够在超级终端上看到在MicroBlaze上面运行uClinux的启动信息;
接着在uClinux下输入ifconfig命令查看本机的IP设置,这里可以看到平台的
IP地址为192.168.10.54
子网掩码为255.255.255.0
网关为192.168.10.255
这时,在TFTP服务器端(也就是PC机)进行如下网络设置:
IP地址192.168.10.53(其实这个只要和前面XUPV2P板的IP地址处于同一网段即可,这里我设置为53),
子网掩码为255.255.255.0
网关:192.168.10.255
DNS可以不填(因为两端属於同一个子网,不需要DNS)
在uClinux中下载实验材料,首先进入/tmp目录(前面提到过,这里是RAMdisk文件系统,用户对其具有读写权限),
??cd tmp
接着输入命令:
??>tftp –g –r peppers.tiff 192.168.10.53
??>tftp –g –r img 192.168.10.53
这是就可以看到这两个文件都已经保存到本地环境了。然后修改img程序的权限:
??>chmod 777 img
?
这样,最激动人心的时刻到来了!输入如下命令:
?>./img peppers.tiff results.tiff
这是可以从超级终端上看到在MicroBlaze平台上的边缘检测程序开始执行并很快结束,从显示的时间来看,整个应用的执行时间大约为2秒(214976us),比先前在PC上执行相同的边缘检测要快的多。继续查看实验结果,可以看到在当前目录下生成了一个名为results.tiff的文件,将这个文件上传至tftp服务器:
??>tftp –p –l results.tiff 192.168.10.53
?
?
这时在PC机上就可以查看硬件执行边缘检测的效果图片了:
从图片上来看,在FPGA上执行得到的结果和在PC机上执行得到的结果完全一样,整个实验完成。(THE END)?
用户1122702 2009-3-9 21:03