当前位置:文档之家› EDA数字钟实验报告

EDA数字钟实验报告

目录1.设计思路—————————————————————(3)1.1总体结构——————————————————(3)2.方案论证与选择——————————————————(3)3.单元模块设计部分—————————————————(3)3.1 CNT10 模块的设计———————————————(4)3.2 CNT6 模块的设计———————————————(5)3.3 CNT101模块的设计———————————————(6)3.4 CNT61模块的设计———————————————(7)3.5 CNT23模块的设计———————————————(8)4.系统仿真—————————————————————(9) 4.1数字钟的引脚锁定———————————————(9) 4.2数字钟原理图————————————————(12) 4.3数字钟仿真图————————————————(10)4.4数字钟编译报告———————————————(11)5.参考文献————————————————————(13)EDA数字钟设计中文摘要:数字钟学习的目的是掌握各类计数器及它们相连的设计方法;掌握多个数码管显示的原理与方法;掌握FPGA技术的层次化设计方法;掌握用VHDL语言的设计思想以及整个数字系统的设计。

此数字钟具有时,分,秒计数显示功能,以24小时为计数循环;能实现清零,调节小时,分钟以及整点报时的功能。

关键词:数字钟,计数器,,FPGA,VHDL1.设计思路基于VHDL语言,用Top—To--Down的思想进行设计。

1.1 确定总体结构,如图1-1所示。

图1-12. 方案论证与选择方案:设置小时和分,输出整点报时信号和时,分,秒信号。

方案采用自顶向下的设计方法,它由秒计数模块,分计数模块,小时计数模块和顶层模块四部分组成。

3. 单元模块设计部分RES是整个系统的复位键,低电平有效,复位时,各个输出都为零,时间显示0时0分0秒;clk是输入时钟,提供秒信号,上升沿触发,每出发一次,时间增加一秒;HRTMP,MIN10TMP,MINTMPKEYI可以分别设置小时位,10分位,分位,起到调时的作用,高电平有效,有效时,每来一个CLK时钟(1s),所对应的位都将以各自的计数循环;RING是整点报时。

3.1 CNT10模块设计10进制计数器。

CLK为秒信号;RES是复位信号,与CLK同步;EN为选通信号;COUT3..0]输出秒个位;CA是进位信号。

如图1-2所示。

图1-2十进制的秒模块的VHDL源程序(CNT10.VHD),如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(en,res,clk: in std_logic; --系统时钟信号res: in std_logic; --系统复位信号en: in std_logic; --选通信号ca : out std_logic; --进位信号cout : out std_logic_vector(3 downto 0)); ---输出秒信号end;architecture rtl of cnt10 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1') thenif(q=9) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)beginif(q=9) thenca<=en;ca<='0';end if;end process p2;cout<=q;end rtl;3.2 CNT6模块设计即进制计数器,CLK为秒信号;RES为复位信号,与CLK同步;EN为选通信号;COUT[3..0]输出秒的十位;CA是进位信号。

如图1-3所示。

图1-3library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt6 isport(clk: in std_logic; ---系统秒信号en: in std_logic; ---系统选通信号res: in std_logic; ---系统复位信号ca : out std_logic; ---系统进位信号cout : out std_logic_vector(3 downto 0)); ---系统输出秒的十位end;architecture rtl of cnt6 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1') thenif(q=5) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)if(q=5) thenca<=en;elseca<='0';end if;end process p2;cout<=q;end rtl;3.3 CNT101模块设计即十进制计数器,输出分的个位。

EN接CNT6的进位CA,产生正常的时钟;EN2由外部断口控制,可用来调节时间,高电平有效,输出将以秒的速度递增循环。

如图1-4 所示。

图1-4library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt101 is --output minitute's geweiport(clk : in std_logic; ---分计数时钟信号res: in std_logic; ---系统复位信号en : in std_logic;en2: in std_logic;ca : out std_logic; --系统输出进位信号icout : out std_logic_vector(3 downto 0)); ---分计数值end;architecture rtl of cnt101 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,en2,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1'or en2='1') thenif(q=9) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)beginif(q=9) thenca<=en;elseca<='0';end if;end process p2;cout<=q;end rtl;3.4 CNT61模块的设计六进制计数器,输出分的十位。

EN接CNT101的进位CA,产生正常的时钟;EN2由外部端口控制,可用来调节时间,高电平有效,输出分的十位将以秒的速度递增循环。

如图1-5所示。

图1-5library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt61 is --output minitute's shiweiport(en2,en,res,clk : in std_logic;ca : out std_logic; --进位信号cout : out std_logic_vector(3 downto 0));---输出分的十位计数值end;architecture rtl of cnt61 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,en2,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1'or en2='1') thenif(q=5) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)beginif(q=5) thenca<=en;elseca<='0';end if;end process p2;cout<=q;end rtl;3.5 CNT23模块设计24进制计数器,输出时个位和时十位,由两个选通信号EN和EN2控制,EN2用来调时。

如图1-6所示。

图1-6library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt23 isport(en2,en,res,clk : in std_logic;a,b: out std_logic_vector(3 downto 0);ca : out std_logic );end cnt23;architecture rtl of cnt23 issignal aout,bout : std_logic_vector(3 downto 0);beginp1 : process(en,en2,clk,res)beginif(res='0') thenaout<="0000";bout<="0000";elsif(clk'event and clk='1') thenif(en='1' or en2='1') thenif bout>1 thenif aout>2 thenaout<="0000" ;bout<="0000";elseaout<=aout+1;end if;elsif(aout=9) thenaout<="0000";bout<=bout+1;elseaout<=aout+1;end if;end if;end if;end process ;process(en,clk,aout,bout)beginif clk'event and clk='1' thenif en='1'thenif aout=3 and bout=2 thenca<='1';elseca<='0';end if;end if;end if;end process;a<=aout;b<=bout;end rtl;4.系统仿真4.1数字钟的引脚锁定RES是整个系统的复位键,低电平有效,复位时,各个输出都为零,时间显示0时0分0秒;clk是输入时钟,提供秒信号,上升沿触发,每出发一次,时间增加一秒;HRTMP,MIN10TMP,MINTMPKEYI可以分别设置小时位,10分位,分位,起到调时的作用,高电平有效,有效时,每来一个CLK时钟(1s),所对应的位都将以各自的计数循环;RING是整点报时。

相关主题