今天是清明节放假的第二天,写了一下午的程序,是用FPGA来驱动LCD1602的VHDL源程序,以前写过单片机的C程序,虽然那时候刚开始写的时候也是费了很大的劲才搞定,不过现在想起来用的单片机来的驱动是挺简单的。
前几天想用的VHDL来写的时候,一直是用单片机的编程思想来的考虑这个驱动的,一直想不通怎么去用VHDL来实现,后来在网上找了一个例程,看了一遍基本上知道实现的方法了,用的状态机来的实现,
然后自己就开始写程序,参考了一下那个程序,但还是改了很多。前前后后遇到了很多的问题,其实我也知道不会是一帆风顺的。从中午一点开始一直写到了晚上8点多。这中间其实程序其实早就写好了,主要就是中间编译之后各种报错,改了N次,这其中有语法上的错误,逻辑上,当然最不好改的就是自己之前没有遇到过的。当然了写VHDL程序还不是很长的时间,经验还是要靠日积月累的。
调试过程中遇到的三个主要问题:
1 Error (10028): Can't resolve multiple constant drivers for net "current_state.st0" at LCD1602.vhd(111) 这个错误是说在两个进程中同时对同一个变量做了赋值操作。因此以后写程序要避免在两个不用的进程中,对同一个变量进行操作。
2. 第二个错误是因为程序里用了一个分频器对48M的时钟信号分频得到一个100Hz 的信号也是周期是10MS做为LCD1602的时钟信号。但时序仿真的时候时间太长,没办法仿真,所以先把周期调了一 下,大概在US级吧,仿真结果出来,基本符号要求,就下载到FPGA中,结果没显示,找了半天的错误就是不知道问题在哪,又是改程序,又是检查硬件连接。哎,结果是忘了把周期再调回去了,那么的短的操作周期,LCD1602当然工作不了。
3,第三个问题到现在还没有解决,没办法,只能等上课的时候问 一下老师,
就是用定义了一 个变量,这个变量作为一个索引值来的选择数组 的内容。
结果在状态机 的一个状态中,就是无法实现 cnt1:=cnt1+1这样的运算,时序仿真的结果老是XX未知,但的用的一个数对他赋值就可以。如cnt:=2,结果就正确,不知是什么原因 。
一直到晚上8点多才去买饭,出来之后才知道天已经很黑了。路上的同学很多,有说有笑,可以的悠闲的散步,而我却呆呆的写了一下午的程序,有时候感觉真的,做这方面真的很累,要舍弃很多的东西。不知道以后回想起自己年轻的时候,会不会后悔因为爱好这些,而放弃了本应该属于这个时期应有的东西。
tengjingshu_112148725 2009-4-6 13:06
用户1513083 2009-4-6 08:37