忙碌的一周又过去了,上周计划的LCD没有调通,很是郁闷,不过令我欣慰的是高速数据传输方面有了新的进展,呵呵……
先说说LCD吧,如下图所示,是一块1602液晶,我以前用单片机控制过,几句C语言就可以搞定。板子上的这块液晶稍有不同,就是他的数据总线是4位的,每次得分两次传送。
惯例,我查看了这款液晶的手册,了解了它的控制指令和时序,,但要用VHDL来实现,这对我来说是个挑战,一是我刚学VHDL不久,二是VHDL写起来不像C语言那么方便,。查看了一些资料后,我定了如下方案,首先需要编写状态机,每个状态里面向液晶发送不同的控制指令和数据,由于每个状态所需时间不同,还需有一个模块去控制每一个状态的时间,两个模块分别对应两个进程,两个进程互相作用。按这样的思路我写了一个程序,让液晶显示‘a’,仿真觉得没什么问题,但是下进板子里面就没有显示,又是液晶还闪几下,觉得很奇怪,查了很长一段时间,觉得问题可能是控制字没有写对,再就是我的程序本身有问题,因为是第一次写状态机,不是很熟练,这些问题只能留到下周去查了。大家有什么好的方法可以在这里和我讨论,我想听听大家意见,互相学习嘛。
再说说高速数据传输的实验吧,这个板子上有两个SATA口,是全双工的,用的传输线和电脑硬盘那个是一样的。
这个实验其实很简单,因为有IP核以及详细的操作向导,最终可以生成一个实例,程序只需改动很少,然后编译就可以下载到板子上了,但要观察实验结果就需用到chipscope,它可以在线观查实验数据。花了一天时间学习了chipscope操作方法,但在实验时却总是看不到波形,非常郁闷,找师兄上来看了一下午,还是没有结果,但收到师兄的启发,晚上的时候我研究了一下程序,发现约束文件里面有两个管脚没有按我们的意图约束到相应的地方,改动之后再用chipscope看时果然有了数据,此时时间也不早了,回到宿舍休息,心情激动……^_^
第二天早上过来继续研究,发现波形不是很对,发送的两个端口都有数据,接收的只有一个端口有数据,这个问题我们又讨论了很久,从向导设置到程序到看了好多遍,结果还是一样,最终我将SATA线拔掉,在查看波形,发现接收端口竟然还有数据,这很诡异啊!只有一种可能—向导产生的实例根本就不是SATA模块的,分析之后,它是SPI模块上的,产生这个错误完全是由于这个板子的原理图所导致的,画的有问题!改正之后,在chipscope上产生了完美的波形,发送接收数据完全一致,哈哈,终于搞通了,周末好好放松一下,下周继续研究它……
用户531580 2010-3-28 00:27
用户1122702 2010-3-27 21:14