热度 21
2012-5-26 16:20
3041 次阅读|
11 个评论
实验室的UWB演示系统是国家某重大专项,在超宽带的试验网上也算走在国内前列,数年前小弟对FPGA了解不多,却有幸能参与其中,接受历练,如今芯片就要回来了,回顾这些日子里的生活,感触良多。刚好馬上就要找工作了,也算是给自己攒人品吧,跟大家分享一点自己在无线通信芯片的实现和验证中的那点事吧。 我们演示系统是类似于无线个域网的多点传输系统。主要由RF、基带、MAC、PC侧应用四个部分组成。RF主要完成信号的调制解调及高频信号的发送与接收,传输频率在4GHZ,信号带宽为1G,2Ghz的采样率(赖奎斯特采样)。基带部分主要完成同步及编解码功能。MAC则主要是完成时隙管理及分配、MAC帧的拆组帧、物理帧的拆组帧、误码校验、数据缓存等等功能。PC侧应用主要是摄像头的实时采集压缩、高清视频的生成与播放,此外还包括很多的无线应用,如无线打印机等等各种实际应用器件。个人主要完成MAC部分的实现、验证以及整个系统的联调。 我们FPGA主要是Altera的 stratix 1\2\3,方案的设计与各功能块的具体实现是整个项目的重点,不过由于系统联合测试是个人觉得最为恶心的部分,也可能是大家最有共性的部分,所以仅就此扒一扒当初的那些苦逼的点点滴滴中少许收获。 首先,是对繁多的模块的正常工作的监控。由于各个模块的负责人对接口的理解可能有偏差,所以某些模块的不正常工作可是常事。而往往一个问题,就会使得整个系统的数据传输完全乱成一团,定位费时费力,大家都知道逻辑分析仪的每次重新绑定都要重新编绎,而我们总的程序又很大,编绎一跑下来就是半个小时,压力肯定山大。为此,我们设计了监控模块,对各个模块的关键信号进行统计并计数,统计结果组成IP包,通过嵌入数据接收包内,传输到PC机侧。修改应用程序面板,识别我们做过标记的IP包,实时显示各个关键数据,如同步位,帧标志位、误码误帧结果等等。这一下就省心多了,有一种坐在驾驶座前的感觉,面对各项指标有了了然于胸的轻松。 第二,误码。这个时候,其实数据流已经可以对传了,在信道衰减40dB下,双向高清视频的开启还是很流畅的,但是时不时出现的馬赛克着实让人揪心,除去BER,各项指标还挺正常。不跑高清跑测试数据吧,BER立马就下来了,完全搞不清问题在哪,连在发送节点还是接收节点都不能确定。我们只好在底层保持高清数据流的产生,维持其突发性,但偷偷把数据替换成从我们配置好的ROM里读出来的数据。再用matlab默默的仿真出其在加各种头,以及编解码后的结果。再在程序各个位置加误码统计功能模块。对每10的8次方字节的数据进行统计,并保持其历史最高值,连信道里波形都用示波器抓下来看了。最终成功的把错误找出来了。 事实上,在应用DSP中断、SDRAM、USB68013、DDR2及各类时序约束和各模块调试等等上我们都绕了挺多弯路,也遇到很多问题。比如,我们最初的代码里的FIFO都是showahead模式的,不过由于后仿实现中normal模式的更简单可靠,我们不得不花不少时间重新修改并调试,如果这些知识在最初就知道,就不会有这么折腾的事发生了。不过,上面两个是我觉得不理性最容易出问题的地方,但愿各位和我一样懵懂的同学,能有点启示。 自我注册四年以来,还真没有在EDN上写过什么东西,主要就是看看大家的分享,深感惭愧。希望以后能和版上各位多多认识,深切交流。 PS:附近件呢,是我们流片的合作院系给出的代码规范,我觉得适合刚入手硬件编程的同学看看。新手其实实现代码不难,是一个必然的过程,有一个良好的代码规范还是相当重要的。最后,祝福各位在FPGA应用上都能更加精熟,也祝自己下学期能找个好工作,~\~。