原创 ImpulseC介绍(三)

2009-5-7 16:10 2950 7 8 分类: FPGA/CPLD

上篇我们生成了能够加速图像边缘检测的硬件模块,将code,drivers,pcores这三个文件夹及其内容拷贝到先前建立的EDK工程目录下,然后重新打开一遍EDK工程,然后就可以在IP Catalog下面的Project Repository下看到生成的硬件加速模块了(如图所示):

?

IP Catalog

?

然后按照添加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相连了)。

ports connection

就此,添加硬件模块到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)

点击看大图
启动TFTPD32程序:设置合适的服务器根目录,这里已经将待处理的图片文件peppers.tiff和刚刚编译好的应用程序img都放在此目录下了;
tftp root

在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

点击看大图

?

?
upload results
?

?

这时在PC机上就可以查看硬件执行边缘检测的效果图片了:

results


从图片上来看,在FPGA上执行得到的结果和在PC机上执行得到的结果完全一样,整个实验完成。(THE END)?






PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1122702 2009-3-9 21:03

希望能介绍一下生成单元的逻辑资源耗用,以及时序性能!
相关推荐阅读
用户1109524 2009-06-12 14:53
cy7c68013 usb 开发经验(转)
经验1:快速获取资料如果直接从 http://www.cypress.com/  网站进入搜索资料则速度很慢,如果点击如下连接则速度比较快。CY7C68013A 资源下载地址:http://app.c...
用户1109524 2009-05-22 09:23
一个比较重要的驱动函数的讲解(74HC595)
一个比较重要的驱动函数的讲解(74HC595)概述     74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过...
用户1109524 2009-05-22 08:44
嵌入式程序员应知道的几个基本问题
嵌入式程序员应知道的几个基本问题    预处理器(Preprocessor)   1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)      #define S...
用户1109524 2009-05-20 11:33
Windows CE OAL层的结构与开发
Windows CE OAL层的结构与开发 收藏  Windows CE是微软针对嵌入式领域推出的一款全新的操作系统。之所以说它是一款全新的操作系统,是因为尽管Windows CE的UI非常接近其它的...
用户1109524 2009-05-20 10:39
wince驱动开发学习笔记
因为课题前期调研没做好,用的CPU板卡和数据采集卡来自两个部门。加上买的是裸板,自己定制的OS,技术支持不爱搭理。所以给的AI板卡的驱动一直装不上,自己在郁闷中寻找答案,就扎进了wince驱动的知识库...
用户1109524 2009-05-20 10:32
Windows CE 下I/O操作基础
对外设进行 I/O 操作实际上也就是读写外设的寄存器,而我们通常使用的X86或者ARM处理器在硬件上决定了wince系统启动后,无法直接访问物理地址,因此需要做一些工作来实现I/O操作.<?xm...
我要评论
1
7
关闭 站长推荐上一条 /3 下一条