VHDL语言数字钟

VHDL语言数字钟

       
        利用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语言数字钟
                           多功能电子数字钟文档

你可能感兴趣的:(VHDL语言数字钟)