读写映射的设备,这两个I/O函数同*pDestMem = Value(直接读写存储器操作)的差别在于前者做了读写同步(调用eieio汇编指令)。参考芯片手册编写CS8900A的驱动,实现基本I/O操作CS8900A_SendFrame和CS8900A_RecvFrame。EDK中有需付费的 以太网 IP CORE并附带有一些TCP/IP协议栈,该协议栈实现了大部分常用功能,但也有一些重要功能并未实现,例如TCP包的超时未达重发,收发操作的中断工作方式。通过修改、增加和完善这些软件包,实现了真正面向用户更高层应用软件的网络编程接口。
● 软件开发中的部分问题
软件开发过程中遇到的几个主要问题归纳如下:
(1)IEEE 802.3网络及网络控制器CS8900A采用的均是Little Endian编码,而XC2VP40内含的处理器PowerPC 405D5采用的是Big Endian编码方式,因此在数据I/O过程中需要做一下转换。
(2)可通过编写链接控制脚本文件控制应用程序的链接过程,从而控制程序映像在存储器中的重定位过程。这在FPGA这种存储器资源有限的环境中有时很有用。
(3)要将EDK提供的默认bootloop程序打包到硬件初始化流中,这样做的目的是提供默认的CPU复位后运行程序,保证CPU处在可预知的状态,而不是因为执行了存储器中的随机代码而处于一种未知的状态。
系统调试方法
由于PowerPC 405处理器核中已包含调试模块,并用JTAG端口引出,只要在系统中添加一个叫做JTAGPPC的IP模块并和PowerPC 405相连便可将其调试端口串入FPGA的JTAG链中,这样只需使用FPGA本身的下载电缆和JTAG接口便可完成系统软件调试而不需要增加额外电路。
EDK提供的软件调试工具主要有XMD和GDB。值得一提的是利用XMD下载可执行程序映像时还会显示各程序段的重定位情况,在发生错误时会报告错误,诸如要求的地址空间大于实际提供的地址空间等错误,而这在EDK集成环境下是看不到的。在存在多种类型存储器资源的情况下,编写链接控制脚本文件控制重定位过程可能能够解决上述某地址空间不够的问题。网络通信部分的调试主要由Sniffer软件辅助完成。
GDB是EDK附带的GNU的主机方图形界面调试工具,它通过和XMD通信完成图形界面调试功能,此时XMD则扮演了一个主机方调试代理的角色,所有的调试通信是由XMD同目标机通信完成的。
结语
SoPC 使得硬件设计能真正实现象搭积木一样方便迅速,而
www.55dianzi.com
利用EDK开发工具就可以实现一个基于FPGA的 嵌入式 系统的软硬件一体化的开发,的确大大提高了嵌入式系统的开发效率,但是目前它还有许多不够完善的方面。
首先是系统设计对设计工具软件的依赖性很大,而这些软件还有许多有待修正完善的地方,设计师无法避免将在使用熟悉软件方面花许多时间。其次,IP Core的不断丰富和完善是 SoPC 的基础,昂贵的付费IP核不利于此技术的推广,尤其在国内,而要设计验证用户自己的IP Core对设计者的要求较高。如今一个完善的嵌入式系统都有实时操作系统在运行,SoPC要成为主流也需要更丰富的RTOS的支持。