基于VHDL语言的数字时钟设计

合集下载

VHDL数字秒表

VHDL数字秒表

数字秒表一设计任务设计用于体育比赛的数字秒表,要求:1.计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时器的时钟频率为10MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒。

2.设计复位和起/停开关。

(1)复位开关用来使计时器清零,并做好计时准备。

(2)起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关时终止。

(3)复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时器进程立即终止,并对计时器清零。

二方案选择与设计方案选择利用VHDL语言进行数字秒表设计有多种方法。

可以利用原件例化语句将各模块联系起来,也可以使用原理图的方法实现此功能,考虑到此次设计中端口众多,使用例化语句繁琐易错,因此采用了条理清晰的绘制原理图的方法生成顶层文件,实现数字秒表功能。

根据上述设计要求,可以预先设计若干个不同进制的计数器单元模块,然后将其进行例化组合来得到数字秒表系统。

要满足数字秒表的精度,首先要获得精确的计时基准信号,这里的系统精度要求为0.001秒,因此必须设置周期为0.001秒的时钟脉冲。

0.001秒、0.01秒、0.1秒、秒、分等计时单位之间的进位转换可以通过不同进制的计数器实现。

设置十进制计数器和六进制计数器,每位计数器均能输出相应计时单位计数结果,其中,十进制计数器可以实现0.01秒、0.1秒、秒、分为单位的计数,六进制计数器可以实现以10秒、10分为单位的计数。

把各级计数器级联,即可同时显示0.001秒、0.01秒、0.1秒、秒、分钟。

级联可分为串行进位方式和并行进位方式。

在串行进位方式中,以低位片的进位输出信号作为高位片的时钟输入信号。

在并行进位方式中,以低位片的进位输出信号作为高位片的工作状态信号(计数的使能信号EN),两片的CLK端同时接计数输入信号。

fpga数字时钟课程设计

fpga数字时钟课程设计

fpga数字时钟课程设计FPGA数字时钟课程设计随着科技的不断发展,数字时钟已经成为现代人生活中必不可少的物品。

数字时钟的准确性和便捷性吸引了越来越多的人使用。

而现在,我们可以通过FPGA数字时钟课程设计来实现一个高精度的数字时钟。

FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,可以通过编程实现各种不同的功能。

数字时钟的实现也可以通过FPGA来完成。

在FPGA数字时钟课程设计中,我们需要先确定时钟的基础部分。

时钟的基础部分由时钟信号产生器、时钟分频器、时钟计数器和时钟显示器组成。

时钟信号产生器需要产生一个稳定的时钟信号,以供后续的计数器和分频器使用。

我们可以通过FPGA中的时钟模块来产生一个稳定的时钟信号。

接下来,时钟分频器需要将时钟信号分频,使得计数器可以进行精确的计数。

分频器的分频系数可以通过FPGA中的数码开关进行设置。

然后,时钟计数器需要根据分频器的设定进行精确的计数。

计数器的计数值可以通过FPGA中的计数器模块进行设置。

时钟显示器需要将计数器的计数值进行显示。

我们可以通过FPGA 中的数码管模块来实现时钟的显示功能。

除了基础部分,我们还可以通过添加更多的功能来完善数字时钟。

例如,我们可以添加闹钟功能、日期显示功能等,以增加数字时钟的实用性。

在FPGA数字时钟课程设计中,我们可以使用VHDL(VHSIC Hardware Description Language)语言进行编程。

VHDL是一种硬件描述语言,可以用于FPGA和ASIC的设计。

通过编写VHDL 程序,我们可以实现数字时钟的各种功能。

FPGA数字时钟课程设计是一个非常有趣和实用的课程项目。

通过这个项目,我们可以深入了解数字时钟的工作原理,熟悉FPGA的编程方法,同时也可以锻炼自己的编程能力。

重庆大学EDA课程设计-EDA课程设计-vhdl语言-12.24小时时钟-乐曲播放电路-函数信号发生器

重庆大学EDA课程设计-EDA课程设计-vhdl语言-12.24小时时钟-乐曲播放电路-函数信号发生器

附录一、12/24小时数字时钟VHDL设计1,系统顶层逻辑图:时序仿真波形管脚定义以及锁定2,分频模块。

①各个分频模块的模块图:②,分别对应的仿真波形:③50mhz分频至1k模块代码:library ieee;use ieee.std_logic_unsigned.all;use ieee.std_logic_1164.all;entity wh4574_divto1k isport(clk50m:in std_logic;clk1k:out std_logic);end wh4574_divto1k;architecture behav of wh4574_divto1k issignal count1:std_logic_vector(14 downto0);signal count2:std_logic;signal co:std_logic;beginprocess(clk50m)beginif clk50m'event and clk50m='1' thenif count1="110000110100111" thencount1<="000000000000000";co<='1';elsecount1<=count1+'1';co<='0';end if;end if;end process;process(co)beginif co'event and co='1' thencount2<=not count2;end if;end process;clk1k<=count2;end behav;50mhz分频至2k模块代码:library ieee;use ieee.std_logic_unsigned.all;use ieee.std_logic_1164.all;entity wh4574_divto2k isport(clk50m:in std_logic;clk2k:out std_logic);end wh4574_divto2k;architecture behav of wh4574_divto2k issignal count1:std_logic_vector(13 downto0);signal count2:std_logic;signal co:std_logic;beginprocess(clk50m)beginif clk50m'event and clk50m='1' thenif count1="11000011010011" thencount1<="00000000000000";co<='1';elsecount1<=count1+'1';co<='0';end if;end if;end process;process(co)beginif co'event and co='1' thencount2<=not count2;end if;end process;clk2k<=count2;end behav;1k分频至5hz代码:library ieee;use ieee.std_logic_unsigned.all;use ieee.std_logic_1164.all;entity wh4574_div1kto5 isport(inclk1k:in std_logic;clk5hz:out std_logic);end wh4574_div1kto5;architecture behav of wh4574_div1kto5 is signal count1:std_logic_vector(6 downto 0);signal count2:std_logic;signal co:std_logic;beginprocess(inclk1k)beginif inclk1k'event and inclk1k='1' thenif count1="1100011" thencount1<="0000000";co<='1';elsecount1<=count1+'1';co<='0';end if;end if;end process;process(co)beginif co'event and co='1' thencount2<=not count2;end if;end process;clk5hz<=count2;end behav;5分频代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity wh4574_div_5 isport(clk:in std_logic;q:out std_logic);end wh4574_div_5;architecture behav of wh4574_div_5 is signal count:std_logic_vector(2 downto 0); beginprocess(clk)beginif clk'event and clk='1' thenif count="100"thencount<="000";q<='1';elsecount<=count+1;q<='0';end if;end if;end process;end behav;。

vhdl数字电子钟的设计与实现

vhdl数字电子钟的设计与实现

基于VHDL数字电子钟的设计与实现摘要:本课程设计完成了数字电子钟的设计,数字电子钟是一种用数字显示秒、分、时的计时装置,由于数字集成电路技术的发展和采用了先进的石英技术,它使数字钟具有走时准确、性能稳定、携带方便等优点。

数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活带来极大的方便。

在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路的能力。

关键词:电子钟;门电路及单次按键;琴键开关目录第一章引言----------------------------------------------------------------11.1 课题的背景、目的------------------------------------------11.2 课程设计的内容------------------------------------------1 第二章EDA与VHDL简介--------------------------------------------------22.1 EDA的介绍---------------------------------------------22.2 VHDL的介绍--------------------------------------------32.2.1 VHDL的用途与优点-----------------------------------------------------------------32.2.2 VHDL的主要特点----------------------------------------------------------------------2.2.3 用VHDL语言开发的流程------------------------------------------------------------ 第三章数字电子钟的设计方案------------------------------------------63.1秒脉冲发生器--------------------------------------------73.2可调时钟模块--------------------------------------------83.3校正电路------------------------------------------------83.4闹铃功能------------------------------------------------103.5日历系统------------------------------------------------11 第四章结束语---------------------------------------------------------------134.1致谢----------------------------------------------------144.2参考文献------------------------------------------------151引言随着科学技术的不断发展,人们对时间计量的精度要求越来越高。

VHDL数字钟

VHDL数字钟

课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:学号:姓名:指导老师:设计时间:摘要本设计是基于VHDL语言的数字钟,硬件平台是Xilinx的Virtex2系列FPGA 开发板。

该数字钟具备预置年月日时分秒的功能,通过按键还可以改变数字钟显示的内容和进入不同的设置状态,并通过加减按键调整系统时间。

在整个VHDl数字电路系统中,采用层次化设计方法,自顶向下进行设计。

设计中根据系统的功能要求合理划分出层次,进行分级设计和仿真验证,将较为复杂的数字系统逻辑简化为基本的模型从而降低实现的难度。

工程中底层实体实现了年月日、时分秒的双向计数器功能,另外还单独设计了系统的时钟模块,用来生成周期为125Hz的按键扫描时钟和周期为1Hz单位脉冲时钟。

为了消除按键的抖动,为此设计了按键消抖模块,采用了状态机来对按键进行消抖。

为了实现根据年份和月份对当前月的天数的判断逻辑,采用了函数对该逻辑进行分析,给出正确的判断结果。

为了提高利用率,在工程中建立了一个包集文件,对底层实体进行了统一封装,方便顶层的调用。

底层的所有实体系统的顶层主要完成了底层的元件例化,主控状态机对系统的状态转换进行控制,按键响应和时钟重新分配电路则完成了整个系统的控制逻辑。

关键词:层次化设计,元件例化,函数,状态机目录摘要 (2)一、课程设计目的 (4)二、课程设计内容及其要求 (4)三、VHDL程序设计 (5)1.设计方案论证 (5)2.设计思路与方法 (6)3.VHDL源代码及其仿真结果 (7)1、六进制可逆计数器 (7)2、十进制可逆计数器, (9)3、十二进制可逆计数器, (11)4、二十四进制可逆计数器 (13)5、天数计数器 (16)6、判断闰年和月份 (18)7、时钟分频模块 (22)8、按键消抖模块 (24)9、程序包 (27)10、顶层实体(主控状态机) (29)四、编程下载 (38)五、课程设计总结 (38)六、参考文献 (38)一、课程设计目的诞生于1983年的VHDL语言,在1987年被美国国防部和IEEE指定为标准硬件描述语言。

VHDL语言实现数字电路设计

VHDL语言实现数字电路设计

VHDL语言实现数字电路设计数字电路是由逻辑门、寄存器以及其他数字组件组成的电子系统,用于处理和传输数字信号。

VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于描述数字电路和系统。

通过使用VHDL语言,我们可以实现数字电路的设计,从而满足各种需求。

VHDL语言提供了一种结构化的设计方法,允许设计者描述硬件电路的结构、功能以及时序行为。

以下是一些常见的数字电路设计任务,以及如何使用VHDL语言来实现它们。

1. 门电路设计门电路是最简单的数字电路之一,由逻辑门组成。

使用VHDL语言,我们可以通过描述逻辑门的输入和输出来实现门电路的设计。

例如,我们可以使用VHDL语言描述一个与门:```vhdlentity AND_gate isport (A, B : in bit;Y : out bit);end entity AND_gate;architecture dataflow of AND_gate isbeginY <= A and B;end architecture dataflow;```在这个例子中,我们定义了一个输入端口A和B,以及一个输出端口Y。

在architecture部分,我们使用VHDL语言描述了Y的逻辑值为A和B的逻辑与。

2. 时序逻辑电路设计时序逻辑电路是根据时钟信号进行操作和状态转换的电路。

使用VHDL语言,我们可以描述时序逻辑电路的行为和状态变化。

例如,我们可以使用VHDL语言描述一个触发器:```vhdlentity D_flip_flop isport (D, CLK : in bit;Q : out bit);end entity D_flip_flop;architecture behavior of D_flip_flop issignal Q_temp : bit;beginprocess(CLK)beginif CLK'event and CLK = '1' thenQ_temp <= D;end if;end process;Q <= Q_temp;end architecture behavior;```在这个例子中,我们定义了一个输入端口D和CLK,以及一个输出端口Q。

电子秒表设计VHDL

电子秒表设计VHDL

一、设计题目:基于VHDL语言的电子秒表设计(可调时,有闹钟、定时功能)二、设计目的:⑴掌握较复杂的逻辑设计和调试⑵学习用原理图+VHDL语言设计逻辑电路⑶学习数字电路模块层次设计⑷掌握QuartusII软件及Modelsim软件的使用方法三、设计内容:(一)设计要求1、具有以二十四小时计时、显示、整点报时、时间设置和闹钟的功能。

2、设计精度要求为1S。

(二).系统功能描述1 . 系统输入:系统状态及校时、定时转换的控制信号为k、set、ds;时钟信号clk,采用实验箱的50MHz;系统复位信号为reset。

输入信号均由按键产生。

系统输出:8位LED七段数码管显示输出,蜂鸣器声音信号输出。

多功能数字钟系统功能的具体描述如下:2. 计时:set=1,ds=1工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。

3. 校时:在set=0,ds=0状态下,按下“k键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k键”则进入“秒校准”状态,之后如此循环。

1)“小时”校准状态:在“小时”校准状态下,显示“小时”数码管以1Hz的频率递增计数。

2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以1Hz的频率递增计数。

3)“秒”复零状态:在“秒复零”状态下,显示“分”的数码管以1Hz的频率递增计数。

4. 整点报时:蜂鸣器在“59”分钟的第50—59,以1秒为间隔分别发出1000Hz,500Hz的声音。

5. 显示:采用扫描显示方式驱动8个LED数码管显示小时、分、秒。

闹钟:闹钟定时时间到,蜂鸣器发出交替周期为1s的1000Hz、500Hz的声音,持续时间为一分钟;6. 闹钟定时设置:在set=0,ds=1状态下,按下“k”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k 键”则进入“秒”设置状态, 之后如此循环。

1)闹钟“小时”设置状态:在闹钟“小时”设置状态下,显示“小时”的数码管以1Hz 的频率递增计数。

多功能数字电子钟_VHDL

多功能数字电子钟_VHDL

四、各功能模块的源程序代码 :
-- CONTOR 模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity contor is
1 )“小时” 校时状态: 进入“小时”校时状态后,显示 “小时” 的数码管闪烁,每按动“ k” 键一次,“小时” +1,若不按动“ k”键 则小时数不变,一直按下“ k” 键则小时数一 4Hz 的频率递增计数。
2 )“分”校时状态:进入“分”校时状态后,显示“分”的数 码管闪烁,每按动“ k” 键一次,“分” +1,若不按动“ k”键则分数 不变,一直按下“ k” 键则分数一 4Hz的频率递增计数。
chs,cms,css,f4 :in std_logic; bsg,bmg,bhg,bsd,bmd,bhd :buffer std_logic_vector(3 downto 0); comout :out std_logic); end time_com; architecture time_comx of time_com is begin com:process(hh,mh,sh,hl,ml) begin if(bhg=hh and bhd=hl and bmg=mh and bmd=ml and bsg=sh)then comout<='1'; else comout<='0'; end if; end process; set:process(f4) begin if(f4'event and f4='1')then if(chs='1'and k='0')then if(bhg="0010" and bhd="0011")then bhd<="0000";bhg<="0000"; elsif(bhd="1001")then bhd<="0000";bhg<=bhg+1; elsif(bhd="0000"or bhd="0001" or bhd="0010"or bhd="0011"or bhd="0100"or bhd="0101"or bhd="0110"or bhd="0111"or bhd="1000")then bhd<=bhd+1; end if; end if; end if; end process; process(f4) begin if(f4'event and f4='1')then if(cms='1'and k='0')then if(bmg="0101" and bmd="1001")then
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程:CPLD与FPGA设计及应用实验:基于VHDL语言的数字时钟设计学号:*********姓名:**专业:信号与信息处理学院:电子与信息学院2011年12月基于VHDL语言的数字时钟设计一:主要功能1:具有时、分、秒计数显示功能,以24小时循环计时。

2:具有日期和星期显示功能。

3:具有秒表功能4:具有调节日期,星期,小时,分钟,清零的功能。

5:具有定时和闹铃的功能。

二:结构框图三:RTL图四:功能实现4.1分频模块设计本设计使用的输入时钟信号为50Mhz,经过分频产生两路时钟信号,其中一路为微秒计数时钟信号,一路为动态扫描时钟信号。

同时模块有一输入控制信号,其功能是停止微秒计数时钟信号,以实现定时的功能。

输入:clk_in 为50Mhz,setstop为微秒计数时能信号输出:clk_out1为1/60hzclk_out2为1khz源代码如下:library ieee;use ieee.std_logic_1164.all;entity div isport(clk_in,setstop: in std_logic;clk_out1,clk_out2: out std_logic);end entity div;architecture fun of div isconstant a:integer:=8333333;constant b:integer:=49999;signal c:integer range 0 to a;signal d:integer range 0 to b;beginprocess(clk_in,setstop)beginif(clk_in 'event and clk_in='1') thenif(( c+7500000)<a and setstop='1') then c<=c+1;clk_out1<='1';else c<=0;clk_out1<='0';end if;end if;end process;process(clk_in)beginif(clk_in 'event and clk_in='1') thenif d<=b then d<=d+1; clk_out2<='1';else d<=0;clk_out2<='0';end if;end if;end process;end fun;4.2计时模块设计4.2.1 微秒计时模块计数器的第一个模块为微秒计时模块,其实质为一个六十进制计数器。

输入:clk为1/60hz,reset为清零复位键输出:ensecond为秒模块的进位信号Daout为微妙输出显示信号源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity msecond isport(clk,reset:in std_logic;ensecond:out std_logic;daout:out std_logic_vector(6 downto 0));end entity msecond;architecture fun of msecond issignal count:std_logic_vector(6 downto 0);signal enmin_1:std_logic;beginprocess(clk,reset)beginif(reset='0')then count<="0000000";elsif(clk 'event and clk='1')thenif(count(3 downto 0)="1001")thenif(count<16#60#)thenif(count="1011001")thenenmin_1<='1';count<="0000000";elsecount<=count+7;end if;elsecount<="0000000";end if;elsif(count<16#60#)thencount<=count+1 ;enmin_1<='0' ;elsecount<="0000000";end if;end if;end process;daout<=count;ensecond<=enmin_1 ;end fun;4.2.2 秒计时模块计数器的第二个模块为秒计时模块,其实质为一个六十进制计数器。

输入:clk为秒进位信号,reset为清零复位键,setmin为调分信号,setclk为消抖时钟输出:enmin为分模块的进位信号daout为秒输出显示信号源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport(clk,setclk,reset,setmin:in std_logic;enmin:out std_logic;daout:out std_logic_vector(6 downto 0));end entity second;architecture fun of second issignal count:std_logic_vector(6 downto 0);signal enmin_1,enmin_2:std_logic;beginprocess(clk,reset,setmin)beginif(reset='0')then count<="0000000";elsif(clk 'event and clk='1')thenif(count(3 downto 0)="1001")thenif(count<16#60#)thenif(count="1011001")thenenmin_1<='1';count<="0000000";elsecount<=count+7;end if;elsecount<="0000000";end if;elsif(count<16#60#)thencount<=count+1 ;enmin_1<='0' ;elsecount<="0000000";end if;end if;end process;process(setclk,setmin)beginif(setclk 'event and setclk='1')thenenmin_2<=not setmin ;end if;end process;daout<=count;enmin<=(enmin_1 or enmin_2);end fun;4.2.3 分计时模块计数器的第三个模块为秒计时模块,其实质为一个六十进制计数器。

输入:clk为分进位信号,reset为清零复位键,sethour为调时信号,setclk为消抖时钟输出:enhour为小时模块的进位信号daout为分输出显示信号源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute isport(clk,setclk,reset,sethour:in std_logic;enhour:out std_logic;daout:out std_logic_vector(6 downto 0));end entity minute;architecture fun of minute issignal count:std_logic_vector(6 downto 0);signal enhour_1,enhour_2:std_logic;beginprocess(clk,reset)beginif(reset='0')thencount<="0000000";elsif(clk 'event and clk='1')thenif(count(3 downto 0)="1001")thenif(count<16#60#)thenif(count="1011001")thenenhour_1<='1';count<="0000000";elsecount<=count+7;end if;elsecount<="0000000";end if;elsif(count<16#60#)thencount<=count+1;enhour_1<='0' ;elsecount<="0000000";end if;end if;end process;process(setclk,sethour)beginif(setclk 'event and setclk='1')thenenhour_2<=not sethour ;end if;end process;daout<=count;enhour<=(enhour_1 or enhour_2);end fun;4.2.4小时计时模块计数器的第四个模块为小时计时模块,其实质为一个二十四进制计数器。

输入:clk为分进位信号,reset为清零复位键,setweek为调小时信号,setclk为消抖时钟输出:enweek为日期模块的进位信号daout为小时输出显示信号源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(clk,setclk,reset,setweek:in std_logic;enweek:out std_logic;daout:out std_logic_vector(6 downto 0));end entity hour;architecture fun of hour issignal count:std_logic_vector(6 downto 0);signal enweek_1,enweek_2:std_logic;beginprocess(clk,reset)beginif(reset='0')thencount<="0000000";elsif(clk 'event and clk='1')thenif(count(3 downto 0)="1001") and (count<16#23# )then count<=count+7;elsif (count="0100011")thenenweek_1<='1';count<="0000000";elsif(count<16#23#)thencount<=count+1;enweek_1<='0';elsecount<="0000000";end if;end if;end process;process(setclk,setweek)beginif(setclk 'event and setclk='1')thenenweek_2<=not setweek;end if;end process;daout<=count;enweek<=(enweek_1 or enweek_2) ;end fun;4.3日期和星期模块设计4.3.1 星期显示模块星期显示模块其实质为一个七进制计数器。

相关文档
最新文档