最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

VHDL设计多功能数字钟

来源:动视网 责编:小OO 时间:2025-09-27 00:15:54
文档

VHDL设计多功能数字钟

EDA期末作业班级:020914(一)选题目的学习使用QuartusII9.0,巩固已掌握的EDA知识,增强自己的动手实践能力。(二)设计目标实现多功能数字钟的设计,主要有以下功能:①计时,并且可以24小时制和12小时制转换。②闹钟③整点报时④秒表(三)实现方案该课题的实现过程大体如下:先对4MHZ的信号进行分频使其变为1HZ;将该信号加入计数器中(模60和模24/12)实现基本时钟功能;然后在此基础上加入闹钟,秒表,整点报时,24/12小时制转换模块;最后在动态显示电路中实现上述功能。(四)
推荐度:
导读EDA期末作业班级:020914(一)选题目的学习使用QuartusII9.0,巩固已掌握的EDA知识,增强自己的动手实践能力。(二)设计目标实现多功能数字钟的设计,主要有以下功能:①计时,并且可以24小时制和12小时制转换。②闹钟③整点报时④秒表(三)实现方案该课题的实现过程大体如下:先对4MHZ的信号进行分频使其变为1HZ;将该信号加入计数器中(模60和模24/12)实现基本时钟功能;然后在此基础上加入闹钟,秒表,整点报时,24/12小时制转换模块;最后在动态显示电路中实现上述功能。(四)
EDA期末作业

班级:020914

(一)选题目的

学习使用QuartusII 9.0,巩固已掌握的EDA知识,增强自己的动手实践能力。

(二)设计目标

实现多功能数字钟的设计,主要有以下功能:

①计时,并且可以24小时制和12小时制转换。

②闹钟

③整点报时

④秒表

(三)实现方案

该课题的实现过程大体如下:先对4MHZ的信号进行分频使其变为1HZ;将该信号加入计数器中(模60和模24/12)实现基本时钟功能;然后在此基础上加入闹钟,秒表,整点报时,24/12小时制转换模块;最后在动态显示电路中实现上述功能。

(四)设计过程、模块仿真及实现结果

一、 分频器

分频器的VHDL语言为(4M分频)

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity fenpinqi is

port(

    clk_in : in std_logic;

    clk_out : out std_logic);

end fenpinqi;

architecture behivor of fenpinqi is 

    signal cou : std_logic_vector(21 downto 0);

begin

    process(clk_in)

    begin

        if clk_in'event and clk_in='1' then 

            cou<=cou+1;

        end if;

    end process;

    process(cou)    

    begin

        clk_out<=cou(21);

    end process;

end architecture behivor;

完成4Mhz到1hz的转换

仿真结果略。

二、计时器(模60,模24,模12)

模60设计的电路图如下

模24/12计数器如下

合成模块分别如下

仿真波形如下

M60

波形分析:ql[3..0]从0变到9,qh[3..0]从0变到5,当clk经过60个周期后,co输出一个脉冲。从而实现模60计数器的功能。

M24/12

模12计数器(sv6=0)

模24计数器(sv6=1)

波形分析:由于要进行24/12小时制的转换,所以加入开关sv6来控制转换模24和模12计数器。由波形图可以看出,模24和模12功能均已实现。

计时器总电路为

三、动态显示功能

1、由sv3和sv8来控制转换正常计数器、闹钟、秒表的转换。当sv3=0、sv8=0时,显示正常计时器;当sv3=0、sv8=1时,显示秒表;当sv3=1时,显示闹钟。实现此功能的VHDL语言如下:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity mand is

port(

    sv3,sv8 : in std_logic;

    sl,sh,ml,mh,hl,hh,ap,d,rsl,rsh,rml,rmh,rhl,rhh,rap,rd,swa,swb,swc,swd:in std_logic_vector(3 downto 0);

    asl,ash,aml,amh,ahl,ahh,aap,ad: out std_logic_vector(3 downto 0)

    );

end mand;

architecture arc of mand is

      signal tmp:std_logic_vector(3 downto 0);

begin

process(sv3)

begin

     if(sv3='0')then

        if sv8='0' then

asl<=sl;ash<=sh;aml<=ml;amh<=mh;

ahl<=hl;ahh<=hh;aap<=ap;ad<=d;

      else

asl<=swa;ash<=swb;aml<=swc;amh<=swd;

ahl<="1010";ahh<="1010";aap<="0000";ad<="1010";

        end if;

      else

asl<=rsl;ash<=rsh;aml<=rml;amh<=rmh;

ahl<=rhl;ahh<=rhh;aap<=rap;ad<=rd;

        if(rap="0010"and rhh="0000" and rhl="0000")then

ahh<="0001";ahl<="0010";

        end if;

       end if;

      end process;  

end arc;       

2、数据选择器VHDL语言描述如下:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity chs is

port(

    clk : in std_logic;

    sl,sh,ml,mh,hl,hh,ap,d:in std_logic_vector(3 downto 0);

    data: out std_logic_vector(3 downto 0);

    en: out std_logic_vector(7 downto 0)

    );

end chs;

architecture arc of chs is

    signal tt:std_logic_vector(2 downto 0);

    signal t: integer range 0 to 30000;

begin

  process(clk)

  begin

  if(clk'event and clk='1')then

t<=t+1;

if t=30000 then tt<=tt+1;

        case tt is

when "000"=>data<=sl;en<="11111110";

when "001"=>data<=sh;en<="11111101";

when "010"=>data<=ml;en<="11111011";

when "011"=>data<=mh;en<="11110111";

when "100"=>data<=hl;en<="11101111";

when "101"=>data<=hh;en<="11011111";

when "110"=>data<=ap+10;en<="10111111";

when "111"=>data<=d;en<="01111111";

             end case;

     end if;

    end if;

   end process;

 end arc;    

3、译码显示器的VHDL语言如下:

library ieee;

use ieee.std_logic_11.all;

entity seg7 is

port(a:in std_logic_vector(3 downto 0);

     f:out std_logic_vector(6 downto 0));

     end seg7;

     

architecture arc of seg7 is

     

begin

     process(a)

     begin    

        case a is

when"0000"=>f<="1000000";

when"0001"=>f<="1111001";

when"0010"=>f<="0100100";

when"0011"=>f<="0110000";

when"0100"=>f<="0011001";

when"0101"=>f<="0010010";

when"0110"=>f<="0000010";

when"0111"=>f<="1111000";

when"1000"=>f<="0000000";

when"1001"=>f<="0010000";

when"1010"=>f<="0111111";

when"1011"=>f<="0001000";

when"1100"=>f<="0001100";

when others =>f<="1000000";

        end case;

     end process;

end arc;

合成模块分别为mand、chs、seg7

总电路合成图为

四、校分校时电路

设计电路如下:

电路分析:为了保证时钟同步性,时钟的选取依然为1hz,所以o[3..0]均为1hz,o[0]为所采取出正常频率,o[1]为校分频率,o[2]为校时频率,o[3]为校天频率(星期)。电路中的四个D触发器是简易的防颤抖装置,保证o[3..0]的正常输出。Sv1和sv2是整个电路功能的控制器。当sv1sv2=00时,计数器正常工作;当sv1sv2=10时,进行校分工作;当sv1sv2=01时,进行校时工作;当sv1sv2=11时,进行校天工作。在进行这些工作时,秒钟都停止。

合成模块为setclock

仿真波形如下:

五、整点报时功能

VHDL语言:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity call is

port(

    okhz,tkhz : in std_logic;

    mh,ml,sh,sl:in std_logic_vector(3 downto 0);

    y1: out std_logic

    );

end call;

architecture arc of call is

 begin

process(okhz,tkhz,mh,ml,sh,sl)

begin

if(mh="0101"and ml="1001" and sh="0101")then

  case sl is

when"0010"=>y1<=okhz;

when"0100"=>y1<=okhz;

when"0110"=>y1<=okhz;

when"1000"=>y1<=okhz;

when"1001"=>y1<=tkhz;

when others=>y1<='0';

   end case;

 end if;

 end process;

 end arc ;  

合成模块如下:

其中okhz代表频率为1khz的信号(由4K分频器获得),tkhz代表频率为2khz的信号(由2khz分频器获得)。

仿真结果为:

波形分析:当分钟为“59”,秒钟的高位是“5”时,秒钟的低位为“2”、“4”、6”、”8”时,输出y1为低频信号;当秒钟的低位为“9”时,输出为高频信号。从而实现整点报时功能。

六、闹钟功能

电路图如下

电路说明:

由于闹钟只需要设置分钟、小时,所以分钟、始终为正常计数器,采用原来校分校时的方法来设定闹钟时间。这里用sv3和sv4构成一个2—4译码器来控制校准的对象。当sv3=0,sv4=0时,停止校准,分钟,时钟保持数字不变;当sv3=1,sv4=0时,校准分钟,时钟不变;

当sv3=0,sv4=1时,校准时钟,分钟不变。在闹钟功能中,由于用不到秒钟,所以秒钟始终显示“—”(BCD码表示为1010,)故上图中的ringsec模块就是实现秒钟置“—”功能,其VHDL语言为:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity ringsec is

port(

    en : in std_logic;

    rsl,rsh: out std_logic_vector(3 downto 0)

    );

end ringsec;

architecture arc of ringsec is

begin

process(en)

begin

           if(en='1')then  

rsl<="1010";

rsh<="1010";

           end if;

  end process;

end arc;

合成模块如上图所示(ringsec)。

为了实现闹钟功能,我们还要设计一个比较模块,当计时器与闹钟的时钟、分钟都相等的时候给蜂鸣器一个信号,使其发声。其VHDL语言如下:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity cmp is

port(

    clk : in std_logic;

    ml,mh,hl,hh,o,rml,rmh,rhl,rhh,ro: in std_logic_vector(3 downto 0);

    r: out std_logic

    );

end cmp;

architecture arc of cmp is

begin

process(clk)

begin

if(ml=rml and mh=rmh and hl=rhl and hh=rhh)then r<=clk;

else r<='0'; end if;

end process;

end arc;   

合成模块为cmp:

波形为

由波形可见,当计时器与闹钟的时钟、分钟都相等的时候,输出r会有一个信号。

七、秒表功能

设计电路图如下

合成模块为stw:

仿真波形如下:

八、24小时制转12小时制功能

用一个sv6开关来控制24小时制和12小时制。当sv6=0时为12小时制;当sv6=1时为24小时制。

1、24小时制转12小时制的模块(chg)

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity chg is

port(

    sv6 : in std_logic;

    hh,hl,ap:in std_logic_vector(3 downto 0);

    chh,chl,cap: out std_logic_vector(3 downto 0)

    );

end chg;

architecture arc of chg is

begin

 process(sv6,hh,hl,ap)

 begin

   if(sv6='0')then           ——原来是24小时制,sv6变为0,需要进行24转12的工作

     case hh is

when "0000"=>chh<=hh;chl<=hl;cap<="0001";

               ——小时高位为0时不需要变化,只需再显示一个“A”,即cap=”0001”

when "0001"=>

if hl<"0010"then chh<=hh;chl<=hl; cap<="0001";

else chh<="0000";chl<=hl-2;cap<="0010";

             end if;

           ——12以下数字不变,显示“A”,13~19小时高位变0,低位减2,显示“P”

when "0010" =>cap<="0010";

             if hl<"0010"then chl<=hl+8;  chh<="0000";          ——20~21点的变化

                 else chl<=hl-2; chh<="0001";                  ——22~23点的变化

             end if;              

when others=>null;

     end case;

   else                 ——原来是12小时制,sv6变为1,需要进行12转24的工作

         if ap="0001"then chh<=hh;chl<=hl;  

——AM的转换,数字都不变,只是不显示“A”,显示“—”

          end if;

         if ap="0010"then

              if hl<"1000" then chh<=hh+1;chl<=hl+2;   ——下午1~8点的转换

                   else chl<=hl-8;chh<=hh+2;         ——下午8~11点的转换

               end if;

         end if;

         cap<="0000";          ——换成24小时制后,原来现实A、P的管显示“—”

  end if;

 end process;

 end arc;               

2、当变化sv6时,还要对原来计时器的电路(包括闹钟中的计时电路)中的小时位进行摸12和摸60的转换。转换电路如下(newm24):

其中左上角的dmc模块是作为数据选择器74157控制信号发声器(即单脉冲发声器),其内部电路如下所示(dmc)

Newm24模块合成为

Newm24和dmc的仿真结果如下:

Newm24电路说明:为了能在拨动开关sv6的同时进行模24模12转换,必须在开关拨动的同时使其能产生一个时间长度大于计时器一个周期,不大于其两个周期的单脉冲信号,从而保证在计时器时钟边沿到来时,能将chg所产生的转换信号置数到计数器。(上图中的chh[3..0]和chl[3..0]为上述VHDL语言所编程序中的输出信号)。当sv6发生变化时,dmc会产生一个值为0的单脉冲,置数端信号为0,计数器将chh[3..0]、chl[3..0]分别置入计时器时钟的十位和个位;当sv6不变时,数据选择器选择的数均为“0000”,计数器正常计数至11或23时发生置数,正常计数。

合成后的总电路图为

开关对应功能表

Sv1、sv2

Sv1和sv2是整个电路功能的控制器。当sv1sv2=00时,计数器正常工作;当sv1sv2=10时,进行校分工作;当sv1sv2=01时,进行校时工作;当sv1sv2=11时,进行校天工作

Sv3、sv8

由sv3和sv8来控制转换正常计数器、闹钟、秒表的转换。当sv3=0、sv8=0时,显示正常计时器;当sv3=0、sv8=1时,显示秒表;当sv3=1时,显示闹钟

Sv5控制秒表
Sv3、sv4

sv3和sv4构成一个2—4译码器来控制校准的对象。当sv3=0,sv4=0时,停止校准,分钟,时钟保持数字不变;当sv3=1,sv4=0时,校准分钟,时钟不变;

当sv3=0,sv4=1时,校准时钟,分钟不变

Sv6当sv6=0时为12小时制;当sv6=1时为24小时制

(五)遇到的困难

各个模块之间的链接修改了很多次,提前没有整体构思好,单个模块设计好以后总是会在模块间的组合上出现接口不对应的情况。

在24/12小时制模块chg的设计中,不同的时间转换考虑的不周全(例如下午1~7点和下午8~11点的变化不一样)

自己对知识的掌握还是不够好,有许多模块设计了很长的时间(无论是构思还是具体编程)。

(六)对课程的建议

EDA课程上完以后,我感觉这门课程实际应用很强。非常锻炼动手能力,与其他的课程很不一样。希望学校增加该课的课时。

文档

VHDL设计多功能数字钟

EDA期末作业班级:020914(一)选题目的学习使用QuartusII9.0,巩固已掌握的EDA知识,增强自己的动手实践能力。(二)设计目标实现多功能数字钟的设计,主要有以下功能:①计时,并且可以24小时制和12小时制转换。②闹钟③整点报时④秒表(三)实现方案该课题的实现过程大体如下:先对4MHZ的信号进行分频使其变为1HZ;将该信号加入计数器中(模60和模24/12)实现基本时钟功能;然后在此基础上加入闹钟,秒表,整点报时,24/12小时制转换模块;最后在动态显示电路中实现上述功能。(四)
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top