利用VHDL语言写的一个数字钟的程序。该数字钟实现 的功能有:
1.时间:显示及校时,时间为24小时制
2.日历:显示年月日,及设定功能;自动判定闰年,每个月的天数;
3.秒表:启动/停止/保持显示/清零;
4.闹钟:设定闹钟时间,由蜂鸣器闹铃。
利用开发板上提供的40MHz晶振时钟信号做脉冲,接与P183管脚;
还有一个11.0592MHz的时钟信号做扫描脉冲
管脚定义:
Clr: 时间清零 : P94
Clr+Sclock: 秒表清零: P94+P96
Clr+Data: 年月日初始化: P94+P97
Clock: 闹钟显示: P95
Sclock: 秒表显示: P96
Data: 年月日显示: P97
H_add: 调整时间(小时): P99
M_add: 调整时间(分钟): P100
Clock+hclock: 调整闹钟小时: P95+P101
Clock+hclock: 调整闹钟分钟: P95+P102
Pause: 秒表暂停: P96+P103
Data+hclock: 调整年: P97+P101
Data+mclock: 调整月: P97+P102
Data+pause: 调整日: P97+P103
在具体程序实现时,发现VHDL语言语法的一些莫名其妙的问题:
1、信号量STD_LOGIC_VECTOR,STD_LOGIC类型等不允许赋初值
,一旦赋初值,后面就不能改变。这样设计的理由?
2、尽管信号量有默认值,但在用之前假如没有赋值语句,就可
能报错!
3、关于信号上升沿的问题,自己在编程运用的过程中发现并非
所有信号都能用rising_edge()来做条件,即使你定义该信号时的情
况与时钟信号的定义是一样的,具体原因还不明白。
4、关于变量和信号量的问题:即使定义时用的是同一个数据类
型,例如整形INTEGER,但在具体用时却有不同的问题,尽管两者可
以赋值,但赋值后有可能会产生奇怪的问题,例如将信号量付给变
量,变量的很多运算可能会报错。
5、VHDL中的算术运算有一些奇怪的特性,对REM取余,MOD取
模等对操作数都有限制,但令人难以捉摸。不明白其中的原因。
6、VHDL中除法运算‘/’好像存在这样一个问题,例如a/b,如
果a为变量,则b必须是2的乘方数;而如果a是一个整型数值,则对b
没有该要求!这个问题对写程序产生很大的麻烦,不知为什么这样
设计,或者有无其他解决办法。
以上问题我在程序中遇到,不断调试总是存在,还请高手指点!
以下附完整源程序下载
VHDL语言数字钟
多功能电子数字钟文档