您的当前位置:首页正文

VHDL电子时钟的设计

2021-03-17 来源:欧得旅游网


中北学院

现代电子系统设计_数字电子钟实验报告

姓班学专

名 : 级 : 号 : 业 :

叶子 0932班

电子信息工程

倪小琦 2012年5月19日

任课教师 : 完成时间 :

word文档 可自由复制编辑

目录

第一章数字电子钟功能简介………………………………………………………3

第二章数字电子钟原理介绍………………………………………………………3 2.1数字电子钟基本原理 …………………………………………………………3 2.2数字电子钟电路组成 …………………………………………………………3

第三章利用QuartusII设计数字电子钟 …………………………………………7 3.1按键去抖动模块 ………………………………………………………………7 3.2分频电路模块 …………………………………………………………………9 3.3选择器模块……………………………………………………………………13 3.4计数模块………………………………………………………………………14 3.5分位电路模块…………………………………………………………………18 3.6数码管动态显示扫描模块……………………………………………………21 3.7数码管动态显示模块…………………………………………………………22

第四章仿真与实现………………………………………………………………25

word文档 可自由复制编辑

第一章数字电子钟功能简介

计时功能:这是本计时器设计的基本功能,可进行时、分、秒计时,并显示在

6个七段数码管上。。

调时功能:当需要校时,可通过实验箱上的按键控制,按下对应的按键,可调

整对应的时、分状态。

第二章数字电子钟原理简介

2.1数字电子钟基本原理

数字钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,计数器清零,重新开始计时。

秒计数器的计数时钟CLK为1Hz的标准信号,可以由27MHz信号通过分频得到。当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号。时、分、秒的计时结果通过6个数码管来动态显示。

数字钟除了能够正常计时外,还应能够对时间进行调整。可通过模式选择信 号控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定分、时状态。

当数字钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字钟处于调整时间状态时,被调的分或时会一秒一秒地增加。 2.2数字电子钟电路组成

本实验数字电子钟的设计电路主要由七个模块组成,分别是:按键去抖动模块、分频电路模块、选择器模块、计数模块、分位电路模块、数码管动态显示扫描模块、数码管动态显示模块。 按键去抖动模块如图2-1所示

word文档 可自由复制编辑

图2-1

分频电路模块如图2-2所示

图2-2

word文档 可自由复制编辑

选择器模块如图2-3所示

图2-3

计数模块如图2-4所示

图2-4

分位电路模块如图2-5所示

word文档 可自由复制编辑

图2-5

数码管动态显示扫描模块如图2-6所示

图2-6

数码管动态显示模块如图2-7所示

图2-7

word文档 可自由复制编辑

电路图整体设计如图2-8所示

图2-8

第三章利用QuartusII设计数字电子钟

3.1按键去抖动模块

按键去抖动模块的元件设计如图3-1所示

图3-1

按键去抖动的VHDL语言设计如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

word文档 可自由复制编辑

use ieee.std_logic_arith.all;

entity debounce is port ( );

end debounce;

architecture behave of bounce is type state is (S0,S1,S2); signal current: state; Begin

process(clk,qin) begin

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

case current is

when S0 => qcout <= '1';

if(qcin = '0') then

current <= S1; current <= S0; else end if;

if(qcin = '0') then

current <= S2; current <= S0; else end if;

if(qcin = '0') then

current <= S2;

clk:in std_logic; qcin:in std_logic; qcout:out std_logic

when S1 => qcout <= '1';

when S2 => qcout <= '0';

word文档 可自由复制编辑

else

current <= S0; end if;

current <= S0;

when others => qcout <= '1';

end case;

end if; end process;

end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.2分频电路模块

分频电路模块元件设计如图3-2所示:

图3-2

分频模块VHDL语言设计如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity clk1kHz is

generic(N: integer:=50000); port (

clk: in std_logic;

word文档 可自由复制编辑

);

clk1kHz: out std_logic

end clk1kHz;

architecture behave of clk1kHz is

signal cnt: integer range 0 to N/2-1;

signal temp: std_logic; Begin

process(clk) begin

if(clk'event and clk='1') then if(cnt=N/2-1) then cnt <= 0; temp <= NOT temp; else

cnt <= cnt+1; end if; end if; end process; clk1KHz <= temp; end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity clk1Hz is

word文档 可自由复制编辑

generic(N: integer:=50000000); port ( );

clk: in std_logic; clk1Hz: out std_logic

end clk1Hz;

architecture behave of clk1Hz is signal cnt: integer range 0 to N/2-1; signal temp: std_logic; Begin

process(clk) begin

if(clk'event and clk='1') then if(cnt=N/2-1) then cnt <= 0; temp <= NOT temp; else

cnt <= cnt+1; end if; end if; end process; clk1Hz <= temp; end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

library ieee;

use ieee.std_logic_1164.all;

word文档 可自由复制编辑

use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity clk10Hz is

generic(N: integer:=20000000); port ( );

clk: in std_logic; clk10Hz: out std_logic

end clk10Hz;

architecture behave of clk10Hz is

signal cnt: integer range 0 to N/2-1;

signal temp: std_logic; Begin

process(clk) begin

if(clk'event and clk='1') then if(cnt=N/2-1) then cnt <= 0; temp <= NOT temp; else

cnt <= cnt+1; end if; end if; end process; clk10Hz <= temp; end behave;

/////////////////////////////////////////////////////////////////////

word文档 可自由复制编辑

/////////////////////////////////////////////////////////////////////////

3.3选择器模块

选择器模块元件设计如图3-3所示:

图3-3

选择器模块VHDL与颜色合计如下所示: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity xzq is port ( ); end xzq;

architecture behave of xzqis begin

with sel select

dcout <=date0 when '0', sel: in std_logic; date0,date1:in std_logic; dcout:out std_logic

word文档 可自由复制编辑

date1 when others;

end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.4计数模块

计数模块元件设计如图3-4所示:

图3-4

计数器模块VHDL语言设计如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity count60s is port ( );

clk:in std_logic; clk10:in std_logic; set: in std_logic:='1'; change: out std_logic;

qcout: buffer integer range 0 to 59:=0

word文档 可自由复制编辑

end count60s;

architecture behave of count60s is

signal temp:integer range 0 to 59; signal temp1:std_logic;

begin

process(clk,set,clk10) begin

if(set='0') then

temp <= 0;

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

if(qcout=59) then

temp <= 0; temp1 <= '1';

else

temp <= temp+1; temp1 <= '0';

end if;

end if;

qcout <= temp; change <= temp1; end process; end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

word文档 可自由复制编辑

entity count60m is port ( );

end count60m;

architecture behave of count60m is

signal temp:integer range 0 to 59; signal temp1:std_logic; clk:in std_logic; change: out std_logic;

qcout: buffer integer range 0 to 59:=0; set:in std_logic:='1'

begin process(clk) begin

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

if(qcout=59) then

temp <= 0; temp1 <= '1';

else

temp <= temp+1; temp1 <= '0';

end if;

end if;

qcout <= temp; if(set = '1') then

change <= car;

end if;

word文档 可自由复制编辑

end process; end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity count24h is port ( );

end count24h;

architecture behave of count24h is

signal temp:integer range 0 to 23; clk:in std_logic;

qcout: buffer integer range 0 to 23:=0

begin process(clk) begin

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

if(qcout=23) then

temp <= 0;

else

temp <= temp+1;

end if;

end if;

word文档 可自由复制编辑

qcout <= temp; end process; end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.5分位电路模块

分位电路模块元件设计如图3-5所示

图3-5

分位电路模块VHDL语言设计如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity decircuit is port ( );

end decircuit;

architecture behave of decircuit is

word文档 可自由复制编辑

cnt: in integer range 0 to 59; ge: out integer range 0 to 9; shi: out integer range 0 to 9

begin

--fenwei circuit

process(cnt)

variable shi_temp:integer;

begin

ge <= cnt mod 10; shi <= cnt / 10;

end process;

end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity decircuit is port ( );

end decircuit;

architecture behave of decircuit is begin

cnt: in integer range 0 to 59; ge: out integer range 0 to 9; shi: out integer range 0 to 9

word文档 可自由复制编辑

process(cnt)

variable shi_temp:integer;

begin

ge <= cnt mod 10; shi <= cnt / 10;

end process;

end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity decircuit2 is port ( );

end decircuit2;

architecture behave of decircuit2 is begin

--fenwei circuit

cnt: in integer range 0 to 23; ge: out integer range 0 to 9; shi: out integer range 0 to 9

process(cnt)

variable shi_temp:integer;

word文档 可自由复制编辑

begin

ge <= cnt mod 10; shi <= cnt / 10;

end process;

end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.6数码管动态显示扫描模块 图3-6元件设计如图3-6所示:

图3-6

数码管动态显示扫描模块VHDL语言设计如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity dyn_display_count is port ( );

end dyn_display_count;

word文档 可自由复制编辑

clk1kHz: in std_logic; qout: out integer range 0 to 7

architecture behave of dyn_display_count is

signal temp:integer range 0 to 7 :=0;

Begin

process(clk1kHz) begin

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

if(temp=7) then

temp <= 0;

else

temp <= temp + 1;

end if;

end if; qout <= temp;

end process;

end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.7数码管动态显示模块

数码管动态显示模块元件设计如图3-7所示:

图3-7

word文档 可自由复制编辑

数码管动态显示模块VHDL语言设计如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity display is port ( );

end display;

architecture behave of display is

signal data: integer range 0 to 10; qcnt: in integer range 0 to 7;

secshi,secge,minshi,minge,hshi,hge:in integer range 0 to 9; seg: out std_logic_vector(6 downto 0); scan: out std_logic_vector(7 downto 0)

begin

process(qcnt,secshi,secge,minshi,minge,hshi,hge) begin

case qcnt is

when 0 => scan <= \"11111110\";data <= secge; when 1 => scan <= \"11111101\";data <= secshi; when 2 => scan <= \"11111011\";data <= 10; when 3 => scan <= \"11110111\";data <= minge; when 4 => scan <= \"11101111\";data <= minshi; when 5 => scan <= \"11011111\";data <= 10; when 6 => scan <= \"10111111\";data <= hge;

word文档 可自由复制编辑

when 7 => scan <= \"01111111\";data <= hshi; when others => scan <= \"11111111\";data <=0;

end case;

end process;

process(data)

begin

case data is

when 0 => seg <= \"0111111\"; when 1 => seg <= \"0000110\"; when 2 => seg <= \"1011011\"; when 3 => seg <= \"1001111\"; when 4 => seg <= \"1100110\"; when 5 => seg <= \"1101101\"; when 6 => seg <= \"1111101\"; when 7 => seg <= \"0000111\"; when 8 => seg <= \"1111111\"; when 9 => seg <= \"1100111\"; when 10 => seg <= \"1000000\"; when others => seg <= \"0111111\"; end case;

end process; end behave;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

word文档 可自由复制编辑

第四章仿真与实现

硬件仿真结果如图4-1所示

图4-1

word文档 可自由复制编辑

因篇幅问题不能全部显示,请点此查看更多更全内容