写这篇东西,主要还是要发泄心中之不爽,毕竟debug不出来很影响食欲和心情,也没心情陪妹纸了。
一个月前,师兄便开始带我fpga,先让我驱动个dds作为训练。由于暑假的原因,就停停放放的,在家先把VHDL简单过了一遍,又反复研究了一下AD9854的datasheet。什么寄存器啊,时序啊都了解的差不多了。一个星期前开始着手编。
但是菜鸟不会重头编啊,所以先拿了一个网上的驱动程序,根据板子的实际电路对程序作了修改。感觉不是很难吧,但示波器木有一丁点现象啊,芯片却在发热。然后我就开始一点一点的改啊,改了一段时间,仿真器出了点问题。这个学生版的usb-blaster也太弱了吧,于是上淘宝买了个企业版的,等了两天。
重新拿到好的仿真器,就又开始改一点,测一点。最后实在没啥好改了,就是出不来现象。于是屁颠屁颠去跟学长讲。
学长人真好,给我讲了点经验,然后给了我个程序跑跑看。我一看,我去,快一千多行代码了,还分三个文件,写的还有点乱。我就静下心来开始读程序,边读边注释。其中有一段时钟管理的程序实在是看不下去了,就想,先跑跑看吧,我到现在都不知道现象是什么。结果真是出乎我意料,居然没现象。
一方面,我和学长讲,给我的程序好像没法用,另一方面我又写了另外一个版本的状态机程序,结果调啊调,还是出不来波形,我tm都快调吐了。
今天我学长突然和我说有现象了,叫我去看。我还真是在他那看到了现象,这还是我第一次看到这块芯片应有的现象。他说改了个分频的时钟,再拿去试试看吧。然后我考了程序,新建工程,ctrlc-ctrlv文件,然后经过一系列的编译出来sof文件,烧到板子里。结果又瞎了我,还是没现象!
我都有点蒙了,我看了看,这的确是学长刚给我的程序啊。最后再把学长文件夹中原有的sof文件烧了进去,结果有波形的说!这回我真是瞎了!
同样的程序,我这编译出来的就不行?搞笑吧。我给学长发了微信,说没有现象,会不会是quartus版本不同造成的不兼容,他说好像有可能,管脚配置错了没检查下?对啊,检查n遍了啊,我都会背诵了啊。不过学长可能有点事,今晚就没一起讨论。
然后我呢,洗了个衣服后继续对学长的源程序检查了引脚,编译,还是没现象。不过我倒是注意到一直有3个critical warning。虽然说warning这种东西我一般都是不理的,不过现在也只能看看是什么warning了,况且还是crtical的。
有两个warning是cannot find constraint file......。网上说是缺少时序约束文件,好像10后的版本都需要,不然会有不确定的情况。于是我就跟着教程,去timing向导那generate了sdc文件,然后在settings->timing那里添加了sdc文件。再重新编译,两个crtical warning没有了,但是还是没有现象。
继续根据网上的说法,把优化选项设置为all pins,编译水平设置为highest efforts。但还是没有现象。
现在只剩最后一个严重警告,timing requirements not met...。然后我就找到向导那里打算改寄存器建立时间和保持时间。今天看了《深入理解Altera FPGA》刚好有讲到这点,但是之前没有改过,一下子不知道怎么改sdc了,也不知道应该忘什么方向改。倒是可以将警告去掉,但是还是没有波形出来。说明可能改的不对,或者根本不是时序约束的问题呢。
一个芯片调试了这么久,我也是淡然了,大部分时间是表示出无奈的表情。因为中秋到了,这个先放一放了,明天还要陪妹纸去798。
程序一样但没有结果,这和电路一样但没有现象是一种性质的问题,就是非确定性因素,未知的因素。因为未知,所以没有思路,所以恐惧啊!