入手一年半的任务基本完成了,它的题目是磁共振成像的双通道接收机,但是却一点都高兴不起来。
我还是想把我的流水账细说下,怕自己以后忘记了。那还是2011年的夏天,由于我设计的PCIE的主控板卡没有调试成功,所以开始着手做双通道的接收机,那个暑假又要打工,又要话接收机的电路图,还要谈恋爱,终于一个月连原理图带PCB终于完工,速度没有想象中的快,但也还可以接受。8月份开始调试sdram部分,使用的fpga是xilinx的xc3s500e,写sdram的代码,计算机能通过pci9054读写sdram,用了两个星期左右的时间。10月份,11月份,12月份一直在搞dma操作和ad6620,这三个月现在是最让人头疼的了,虽然ad6620以前师兄师姐用过,但是手头上能用的资料只有他们的毕业论文,对于ad6620的配置,我先是通过上位机调试,写一个寄存器然后再读出来,就这样在焊接,FPGA的程序,和上位机的程序三个都不能确定哪个有问题的情况下还是把ad6620给搞通了。整体调试到2012年的3月份基本调试通过了。3但是这个课题还远远没有结束,因为现在是2013年的2月份。板卡最后还是要集成到磁共振成像系统里面才能算是完成的。
于是接下来是等待,花了个把月的时间把DDS做了一下,后来又想做射频的调制和解调,再后来做一个迷你的波谱实验,以为那就是我的毕业课题,再后来接收机的成像实验又被提上了日程,那是2012年的12月份。
为了做到接收机的实用,我大刀阔斧的更改vhdl代码,各个模块的功能划分的更细了,状态机更简洁了。这一改不要紧又是纠结的两个月。代码和基本的功能调试进行的还算顺利,有个不大不小的问题是,更改了sdram和pci的程序后,计算机读取sdram有时对有时错,每当加入一个功能模块,它都回来找我麻烦,当时我给自己的解释是,ISE的bug和资源太紧张,时序约束不好等等。中间有一次我把终止sdram突发的命令和回写操作格了几个空闲周期后,pci和sdram的通信明显比以前好了很多。但是当我再加入循环的编码功能时,这个问题又找上门来,我类个去。于是在昨天我又大刀阔斧的把sdram的vhdl又重新写了一遍。直到今天早上我才发现了这个深藏已久的bug。
在终止sdram突发的情况有两种,一是地址的低10位全是1,还有一种是fifo的almost_full.而我的程序是这么写的:
bterm_sdm<='1' when
(fifo1_almost_empty='1' or flag_bt_addr='1' and flag_bterm_wr='1')
用户443554 2013-7-2 20:28
用户403664 2013-2-19 14:39