用AX88180和FPGA实现千兆网——NIOS II的再认识!

      最近一直没有时间写博客,因为一直忙于做千兆网的工作,因为在学NIOS II,所以开始想用NIOS中的 Three Speed Ethernet来做千兆网,但是做了一段时间后发现这个IP是加密的,需要破解或者购买许可,但是为了一个IP花很多Money,舍不得啊。况且自己先用DP83848做得百兆网也没有一次调通,故快刀斩乱麻般换了思路,在网上搜索现成的MAC芯片,功夫不负有心人,找到了AX88180。

      这次怕自己做板失败,向ASIX公司购买了他们的开发板,用之前的FPGA开发板作为控制板,开始用C写的驱动程序和发送程序,还不错,一次就成功了,配置,发送数据都没有问题,而且用Winpcap写的抓包程序也能正确的抓包,甚是开心。终于成功了!!!但是这次真的是高兴早了,因为发送数据的速度真是小的可怜,只有几十kbit/s而已,真是悲哀啊。我知道可能是NIOS II中C程序的执行效率可能有问题,但我不知道NIOS中一条指令的执行时间的,这个问题以前我也问过张亚峰,他也不知道,之前对速度并没有什么要求,所以没有在意,但是这次是我必须要知道的。

  上网搜索,并没有人明确指出过这个问题,只是看到有人说要看指令的反汇编(nios 可能是单指令周期),于是我随便试了几个指令的反汇编,最短的是赋值(2个),而IOWR,IORD要4个,而我要操作AX88180每一个数据读写都要用的这两个,也就是说,从最外一层我就损失了3/4,而加减乘除等运算更损失巨大。至此我对NIOS 有了新的认识,NIOS只是方便了我们编程,但是代价是在时钟周期上的巨大消耗。以后用NIOS要小心使用,在要速度的地方必须要用硬件语言书写,只有在不重复进行的地方,且对时钟没那么严格要求的时候可以使用,譬如AX88180的驱动,配置好了就不会再运行的,而且用硬件写驱动会比较麻烦,所以可以用C写驱动。但是在发送和接收的程序上,如果用C写的话,就是很失败的事情了!也就是不可能达到千兆网的速度,甚至10M网的速度都达不到的!不知道用Three Speed Ethernet和uC/OS做的千兆网能有多高的发送速度,估计不会很高的吧!而且毕竟IP是加密的,修改或添加东西都困难!后怕中......

  前几天我先用软件的方式测试了AX88180本身的速度,即我只发目的MAC地址到缓存,然后开启TX通道发送数据,后面的是缓存中的随机数,但是是可以发送出去的,而且可以收到,并测试速度,结果速度达到了930Mbit/s左右,所以硬件方面是可以达到的,这给我后来的改写硬件发送程序提供了信心!

本人个人主页本文地址:http://jrmen.org.ru/archives/25

posted on 2010-07-30 12:53  金瑞  阅读(1615)  评论(1编辑  收藏  举报

导航