VHDL数字时钟实验报告

合集下载

VHDL电子钟实验报告

VHDL电子钟实验报告

期末大作业课程设计实验报告设计题目:基于VHDL电子钟的设计目录一、概述 (3)1.1目的 (3)1.2课程设计的要求和功能 (3)二、总结 (3)2.1课程设计进行过程及步骤 (3)2.2所遇到的问题,如何解决问题 (15)2.3体会收获以及建议 (15)3.4参考资料(书,网络资料) (15)三、教师评语 (16)四、成绩 (16)一、概述1.1目的1. 基于CPLD系统模块板,设计一个电子钟。

来熟悉CPLD的工作原理以及对VHDL的使用。

2. 通过设计出一个电子钟具有校时功能,来巩固分频,键盘扫描,计数,动态扫描等知识内容。

1.2课程设计的要求和功能设计一个电子钟,能进行正常的时分秒计时功能,分别有六个数码管显示24小时,60分钟,60秒的计数器显示。

利用实验箱系统上的按键实现“校时”、“校分”功能:(1)按下“SA”键时,计时器快速递增,按24小时循环,进行时校正;(2)按下“SB”键时,计分器快速递增,按60分循环,进行分校正(3)按下“SC”键时,秒清零,进行秒校正;二、总结2.1课程设计进行及步骤1.设计提示系统框图见下2.系统结构设计描述(1)系统顶层文件1.顶层原理图见下2.各个模块的解释(1)五个输入量clk50MHz,SA,SB,SC,reset:其中clk50MHz为总体系统提供时钟,并且经过分频来分别对电子钟模块提供时钟,产生一秒一秒的进位信号,对显示模块的计数器提供时钟实现显示模块的扫描功能,对按键去抖动提供时钟,实现键盘扫描的功能。

SA,SB,SC用来控制按键,实现按键控制,SA是实现“时”加一,SB是实现“分”加一,SC是实现“秒”清零。

Reset是来控制按键功能的使能。

(2)按键功能模块三个输入chos ,date0,date1的功能是:chos接受来自按键的信号,若按键按下,则将date0的内容,也就是通过按键产生的脉冲来控制电子钟进行加一,若按键没有按下,则将“秒”分频信号接入电子钟的clk计数输入端,通过时钟脉冲来控制电子钟。

VHDL 数字电子钟报告

VHDL 数字电子钟报告

实验报告实验项目名称:数字电子钟的设计一、实验目的掌握VHDL程序设计方法二、实验内容和要求能够实现小时(24进制)、分钟和秒钟(60进制)的计数功能具有复位功能,功能扩展:具有复位、整点报时提示、定时闹钟等功能在软件工具平台上,进行VHDL语言的各模块编程输入、编译实现和仿真验证。

三、设计思想本实验所设计的闹钟可分为四部分,并主要由三个子程序组成,这里所说的四部分主要是ADD60的计数、ADD2的计数、comp模块的比较,以及顶层文件的映射作用。

ADD60计数器,主要用于对分钟和秒钟进行计数,如果达到60的时候马上进1。

ADD24计数器,主要用于对时钟进行计数,如果达到24,则进1,即1day。

COMP模块主要用于对输入的时间和系统时间进行比较,如果相等的时候则有输出co=1,闹钟相应。

顶层文件则是通过ADD60,ADD24,COMP连接而形成端口相对应的映射从而达到闹钟所需的要求。

然后通过进行各个模块的设计输入,编译和仿真分块单独调试仿真,以使得设计符合要求。

程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLOCK ISPORT(CLK,RESET:IN STD_LOGIC;hi,mi,si:IN STD_LOGIC_VECTOR(5 DOWNTO 0);inc,ring,day:OUT STD_LOGIC;hour,minute,second:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END ENTITY CLOCK;ARCHITECTURE behav OF CLOCK ISCOMPONENT ADD60PORT(CLK,RST:IN STD_LOGIC;Y:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);CO:OUT STD_LOGIC );END COMPONENT;COMPONENT ADD24PORT(CLK,RST:IN STD_LOGIC;Y:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);CO:OUT STD_LOGIC );END COMPONENT;SIGNAL d,e,f:STD_LOGIC;SIGNAL Y1,Y2,Y3:STD_LOGIC_VECTOR(5 DOWNTO 0);COMPONENT COMPPORT(RST,CLK:IN STD_LOGIC;h,m,s,h1,m1,s1:IN STD_LOGIC_VECTOR(5 DOWNTO 0);ho,mo,so:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);inc,co:OUT STD_LOGIC);END COMPONENT;BEGINP1:ADD60 PORT MAP(RST=>RESET,CLK=>CLK,Y=>Y1,CO=>d);P2:ADD60 PORT MAP(RST=>RESET,CLK=>d,Y=>Y2,CO=>e);P3:ADD24 PORT MAP(RST=>RESET,CLK=>e,Y=>Y3,CO=>day);P4:COMP PORT MAP(RST=>RESET,CLK=>CLK,s=>Y1,m=>Y2,h=>Y3,s1=>si,m1=>mi,h1=>hi,co=>ring,so=> second,mo=>minute,ho=>hour,inc=>INC);END ARCHITECTURE behav;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADD60 ISPORT(CLK,RST:IN STD_LOGIC;Y:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);CO:OUT STD_LOGIC );END ADD60;ARCHITECTURE behav OF ADD60 ISBEGINPROCESS(CLK,RST)V ARIABLE t:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINIF RST='1' THEN t:="000000";ELSIF CLK'EVENT AND CLK='1' THENIF t<59 THEN t:=t+1;ELSE t:="000000";END IF;IF t=59 THEN CO<='1';ELSE CO<='0';END IF;END IF;Y<=t;END PROCESS;END behav;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADD24 ISPORT(CLK,RST:IN STD_LOGIC;Y:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);CO:OUT STD_LOGIC );END ADD24;ARCHITECTURE behav OF ADD24 ISBEGINPROCESS(CLK,RST)V ARIABLE t:STD_LOGIC_VECTOR(5 DOWNTO 0); BEGINIF RST='1' THEN t:=(OTHERS =>'0');ELSIF CLK'EVENT AND CLK='1' THENIF t<23 THEN t:=t+1;ELSE t:=(OTHERS =>'0');END IF;IF t=23 THEN CO<='1';ELSE CO<='0';END IF;END IF;Y<=t;END PROCESS;END behav;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COMP ISPORT(RST,CLK:IN STD_LOGIC;h,m,s,h1,m1,s1:IN STD_LOGIC_VECTOR(5 DOWNTO 0);ho,mo,so:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);inc,co:OUT STD_LOGIC);END ENTITY COMP;ARCHITECTURE behav OF COMP ISSIGNAL t:STD_LOGIC;BEGINPROCESS(RST,CLK,h,m,s)BEGINIF RST='1' THEN co<='0';ELSIF CLK'EVENT AND CLK='1' THENIF (h=h1 and m=m1 and s=s1)THEN CO<='1';ELSE co<='0';END IF;IF (s=59 and m=59) THEN t<='1';ELSE t<='0';END IF;END IF;ho<=h;mo<=m;so<=s;inc<=t;END PROCESS;END behav;RTL效果图如下:ADD60仿真波形:ADD24仿真波形:Comp仿真波形:闹钟仿真波形:该设计包含实现小时(24进制)、分钟和秒钟(60进制)的计数功能,具有复位功能,整点报时提示,定时闹钟功能,其中hi,mi,si是设置闹钟的输入,ring是闹钟输出,inc是整点输出,day是日期,hour,minute,second是显示当前时间,reset是清零复位端。

VHDL数字钟设计报告(推荐文档)

VHDL数字钟设计报告(推荐文档)

VHDL数字钟设计报告一. 数字钟总体设计方案:1.1设计目的①正确显示时、分、秒;②可手动校时,能分别进行时、分的校正;③整点报时功能;1.2设计思路数字钟的设计模块包括:分频器、去抖动电路、校时电路、“时、分、秒”计数器、校时闪烁电路、整点报时和译码显示电路。

每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合,生成顶层实体top。

该数字钟可以实现3个功能:计时功能、设置时间功能和报时功能。

二.数字钟模块细节2.1 分频器(fenpin)本系统共需3种频率时钟信号(1024Hz、512Hz、1Hz)。

为减少输入引脚,本系统采用分频模块,只需由外部提供1024Hz基准时钟信号,其余三种频率时钟信号由分频模块得到。

分频原理:为以1024Hz基准时钟经1024分频得到512Hz,1Hz频率时钟信号。

分频器管脚代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isport(clk1024:in std_logic;clk1,clk512:out std_logic);end fenpin ;architecture cml of fenpin isbeginprocess (clk1024)variable count1: integer range 0 to 512; variable q1: std_logic;beginif clk1024' event and clk1024='1' then if count1=512 thenq1:=not q1;count1:=0;elsecount1:=count1+1;end if;end if;clk1<=q1;end process;process(clk1024)variable count512: integer range 0 to 1; variable q512: std_logic;beginif clk1024' event and clk1024='1' thenif count512=1 thenq512:=not q512;count512:=0;elsecount512:=count512+1;end if;end if;clk512<=q512;end process;end cml;2.2 校时电路(jiaoshi)本模块要实现的功能是:正常计时、校时、校分在每个状态下都会产生不同控制信号实现相应的功能。

VHDL实验报告

VHDL实验报告

EDA课程设计项目——数字钟学院:机电工程学院专业年级:07级电子科学与技术学号:学生姓名:指导老师:成绩评定:数字钟设计1、课程设计目的1、熟悉和掌握VHDL模块间的组合设计思路了解数字钟的工作原理2、掌握各芯片的逻辑功能及使用方法。

3、了解数字钟的组成及工作原理。

4、熟悉数字钟的设计与制作。

5、掌握常用仪器、仪表的正确方法,学会电路整机指标的测试6、巩固和加深学生对模拟电子技术,数字逻辑电路等课程基本知识的理解。

2、课程设计内容基本要求:1. 设计一个按HH:MM:SS(六位七段LED)显示的24小时制数字钟。

2.通过三个按键能够实现复位和校对时间的功能。

3、设计条件硬件:利用PC设计软件:MAX+PLUS2实验总原理图4、设计思路:过一个数据选择器和一个3-8译码器分别控制数码管的段选和位选实现数码管的动态扫描。

5、设计步骤:设计步骤:1、24进制计数器的vhdl语言编译、仿真程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY jjsqh ISPORT(rest,clk:IN std_logic;co:OUT std_logic;qh,ql:BUFFER std_logic_vector(3 DOWNTO 0));END jjsqh;ARCHITECTURE one OF jjsqh ISBEGINco<='1'WHEN(ql="1001"AND qh="0101")ELSE'0';PROCESS(clk,rest)BEGINIF(rest='0')THENql<="0000";qh<="0000";ELSIF(clk'EVENT AND clk='1')THEN IF(ql =3)THEN ql<="0000";IF(qh =2)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;END PROCESS;END one;2、60进制计数器的vhdl语言编译、仿真程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY jsqm ISPORT(rest,clk:IN std_logic;co:OUT std_logic;qh,ql:BUFFER std_logic_vector(3 DOWNTO 0));END jsqm;ARCHITECTURE one OF jsqm ISBEGINco<='1'WHEN(ql="1001"AND qh="0101")ELSE'0';PROCESS(clk,rest)BEGINIF(rest='0')THENql<="0000";qh<="0000";ELSIF(clk'EVENT AND clk='1')THENIF(ql =9)THEN ql<="0000";IF(qh =5)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;END PROCESS;END one;3、6选1数据选择器(控制LED的段选和位选)的vhdl语言编译、仿真程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ledchoose isport(a,b,c,d,e,f: in std_logic_vector(3 downto 0);s: out std_logic_vector(2 downto 0);z: out std_logic_vector(3 downto 0);cp:in std_logic);end ledchoose;architecture behave of ledchoose isbeginprocess(cp)variable sn :std_logic_vector(2 downto 0);beginif cp'event and cp='1' then if sn="101"thensn:="000";elsesn:=sn+1;end if;case sn iswhen "000"=>z<=a;when "001"=>z<=b;when "010"=>z<=c;when "011"=>z<=d;when "100"=>z<=e;when "101"=>z<=f;when others=>null;end case;end if;s<=sn;end process;end behave;4、3-8译码器的vhdl语言编译、仿真程序如下:library ieee;use ieee.std_logic_1164.all;entity decode isport(iny:in std_logic_vector(2 downto 0);outy:out std_logic_vector(7 downto 0));end decode;architecture behave of decode isbeginprocess(iny)begincase iny iswhen "000"=>outy<="11111110";when "001"=>outy<="11111101";when "010"=>outy<="11111011";when "011"=>outy<="11110111";when "100"=>outy<="11101111";when "101"=>outy<="11011111";when "110"=>outy<="10111111";when "111"=>outy<="01111111";when others=>null;end case;end process;end behave;5、整点报时模块的编译、仿真Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity alarm isPort( a,b,c,d:in std_logic_vector(3 downto 0);q:out std_logic);End alarm;Architecture a of alarm isBeginprocess(a,b,c,d)beginif (a=0 and b=0 and c=0 and d=0) then q<='1' ;else q<='0';end if ;end process;end a;6、LED数码管显示模块的编译、仿真程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY led ISPORT( inp:IN STD_LOGIC_VECTOR(3 DOWNTO 0);outp:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END led;ARCHITECTURE be OF led ISBEGINprocess(inp)BEGINCASE inp isWHEN"0000"=>outp<="1111110";WHEN"0001"=>outp<="0110000";WHEN"0010"=>outp<="1101101";WHEN"0011"=>outp<="1111001";WHEN"0100"=>outp<="0110011";WHEN"0101"=>outp<="1011011";WHEN"0110"=>outp<="1011111";WHEN"0111"=>outp<="1110000";WHEN"1000"=>outp<="1111111";WHEN"1001"=>outp<="1111011";WHEN others=>outp<="0000000";end CASE;END process;END be;7、校时电路:校时、校分由两个或门组成,闲置是,按键开关一端与Vcc连接,当按下时,另一端与或门输入和下拉电阻连接,实现校时功能8、将所有模块合起来就是一个完整的动态扫描时钟之所以这样做是因为从流程图我们可以清晰的看到时钟的各部分组成,能够轻易的对其进行功能模块的拆分,好进行各个模块的vhdl语言的编译、仿真,从而使编译简化,不至于那么复杂,更易于编写vhdl语言程序,而且要是出现在错误的话可以直接到各个模块去找错误,更容易修改和解决错误问题。

EDA-VHDL数字钟报告

EDA-VHDL数字钟报告

《EDA技术》实验报告数字钟班级:电子与电气081学号:830702004姓名:陈海峰指导教师:张江伟老师地点:B07-306时间:校历9-10周目录一、摘要二、关键词三、数字钟设计要求四、基本理论知识了解五、实验目的六、实验器材七、实验内容——数字钟设计方案计数部分(1)VHDL语言设计的六十进制电路,模块及其波形(2)VHDL语言设计的二十四进制电路,模块及其波形动态显示部分(1)VHDL语言设计的四进制电路,模块及其波形(2)VHDL语言设计的2线-4线译码器(3)VHDL语言设计的数据选择器波形及其模块(4)VHDL语言七段译码器设计波形及模块数字钟总电路图八、实验总结九、参考资料一、摘要数字钟由计数器、译码器、显示器等部分构成,数字钟的时、分、秒实际上就是由一个24进制计数器(00-23),两个60进制计数器(00-59)级联构成。

利用Quartus II 6.0软件编写VHDL语言,编写六十进制、二十四进制;译码、显示部分用一个四进制,二-四译码器,数据选择器及七段译码器构成。

最后生成相对应的模块连接成数字钟电路图。

二、关键词VHDL语言、数字钟、计数器、动态显示、译码显示三、数字钟设计要求(1)正常模式时,采用24小时制设计有时、分、秒。

只显示时、分。

(2)应用VHDL语言设计时要有计数、数据选择、译码、显示等要求。

四、基本理论知识了解数字钟的功能实际上是对秒信号计数。

EDA-V硬件开发系统可提供不同的时钟信号,分频后可产生秒时钟。

数字钟在结构上可分为两个部分:计数器和显示器。

计数器又可分为秒计数器、分计数器和小时计数器;秒计数器和分计数器由两个六十进制构成,小时计数器由二十四进制计数器实现。

动态显示电路可用三态门构成的四选一数据选择器,和一个四进制加一个二四译码器,还有一个七段译码器7448组成。

三态门在选择了一个数码管的同时,打开一个三态门,其他的关闭。

进而实现数据选择。

如图1所示的用三态门实现动态显示的框图。

数字钟实验报告5篇范文

数字钟实验报告5篇范文

数字钟实验报告5篇范文第一篇:数字钟实验报告数字钟实验报告班级:电气信息i类112班实验时间:实验地点:指导老师:目录一、实验目的-----------------3二、实验任务及要求--------3三、实验设计内容-----------3(一)、设计原理及思路3(二)、数字钟电路的设计--------------------------4(1)电路组成---------4(2)方案分析---------10(3)元器件清单------11四、电路制版与焊接---------11五、电路调试------------------12六、实验总结及心得体会---13七、组员分工安排------------19一、实验目的:1.学习了解数码管,译码器,及一些中规模器件的逻辑功能和使用方法。

2.学习和掌握数字钟的设计方法及工作原理。

熟悉集成电路的引脚安排,掌握各芯片的逻辑功能及使用方法了解面包板结构及其接线方法。

3.了解pcb板的制作流程及提高自己的动手能力。

4.学习使用protel软件进行电子电路的原理图设计、印制电路板设计。

5.初步学习手工焊接的方法以及电路的调试等。

使学生在学完了《数字电路》课程的基本理论,基本知识后,能够综合运用所学理论知识、拓宽知识面,系统地进行电子电路的工程实践训练,学会检查电路的故障与排除故障的一般方法锻炼动手能力,培养工程师的基本技能,提高分析问题和解决问题的能力。

二、实验任务及要求1.设计一个二十四小时制的数字钟,时、分、秒分别由二十四进制、六十进制、六十进制计数器来完成计时功能。

2.能够准确校时,可以分别对时、分进行单独校时,使其到达标准时间。

3.能够准确计时,以数字形式显示时、分,发光二极管显示秒。

4.根据经济原则选择元器件及参数;5..小组进行电路焊接、调试、测试电路性能,撰写整理设计说明书。

三、实验设计内容1、设计原理及思路 3.1数字钟的构成数字钟一般由振荡器、分频器、计数器、译码器、显示器、较时电路、报时电路等部分组成,这些都是数字电路中应用最广的基本电路3.2原理分析数字钟实际上是一个对标准频率(1hz)进行计数的计数电路。

vhdl秒表报告

vhdl秒表报告

实验:vhdl秒表设计报告一、实验目的:秒表的逻辑结构比较简单,它主要由、显示译码器、分频器、十进制计数器、六进制计数器组成。

秒表实现功能:计时范围60s。

可以用4个键(k0-k3)控制计数器实现清零,开始,暂停,结束功能。

清零键k0:当k0按下后,计数器清零,显示为0.开始键k1:k1按下后,开始计数暂停键k2:k2按下后,显示暂停,但计数器继续在行走。

结束键k3:k3按下后,计数器停止,显示最终的时间。

二、结构组成:1、一个十进制计数器:用来对秒时钟进行计数;2、一个六进制计数器:用来分别对十秒进行计数;3、分频率器:用来产生1hz的计数脉冲;4、状态控制器:对秒表各状态的控制。

设计为4个状态s1,s2,s3,s4.三、实验内容及步骤:1、用vhdl语言实现各小功能模块设计。

并仿真无误,生成模块符号。

2、设计顶层原理图文件。

3、综合编译并仿真,实现特定功能。

4、下载到硬件上,确保设计的正确。

四、实验源代码如下:1,分频器模块:功能:产生秒时钟。

原理图如下源代码vhdl语言如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity div isport(inclk:in std_logic;outclk:out std_logic:='0');end;architecture behave of div issignal temp:integer range 0 to 99999;signal internal:std_logic:='0';beginprocess(inclk)beginif inclk'event and inclk='1'thenif temp=10thentemp<=0;internal<=not internal;else temp<=temp+1;end if;outclk<=internal;end if;end process;end behave;2,十进制计数器模块原理图:十进制vhdl源码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,clr,en:in std_logic;q:buffer std_logic_vector(3 downto 0);c10:out std_logic);end;architecture behave of cnt10 isbeginprocess(clr,clk)beginif clr='0'then q<="0000";elsif clk'event and clk='1'thenif en='1'thenif q<9else q<="0000";end if;end if;end if;end process;process(q)beginif q="0000"then c10<='1';else c10<='0';end if;end process;end;3,六进制计数模块原理图源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt6 isport(clk,clr,en:in std_logic;q:buffer std_logic_vector(2 downto 0);c6:out std_logic);end;architecture behave of cnt6 isbeginprocess(clr,clk)beginif clr='0'then q<="000";elsif clk'event and clk='1'thenif en='1'thenif q<5else q<="000";end if;end if;end if;end process;process(q)beginif q="000"then c6<='1';else c6<='0';end if;end process;end;4,十进制锁存原理图:代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity suo isport(inp:in std_logic_vector(3 downto 0);suo:in std_logic;--stop:in std_logic;clr:in std_logic;outp:out std_logic_vector(3 downto 0)); end;architecture behave of suo issignal temp:std_logic_vector(3 downto 0);signal temp1:std_logic_vector(3 downto 0); beginprocess(suo)beginif suo'event and suo='0'then temp<=inp;end if;end process;process(inp,clr)beginif clr='0' then outp<="0000";elsif suo='1' then outp<=inp;else outp<=temp;end if;end process;end behave;5,六进制锁存原理图:Vhdl语言:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity suo6 isport(inp:in std_logic_vector(2 downto 0);suo:in std_logic;clr:in std_logic;clk:in std_logic;outp:out std_logic_vector(3 downto 0)); end;architecture behave of suo6 issignal temp:std_logic_vector(3 downto 0); beginprocess(suo)beginif suo'event and suo='0'then temp<='0'&inp; --temp1<=temp;end if;end process;process(clr,clk)beginif clr='0' then outp<="0000";elsif clk'event and clk='1'thenif suo='1' then outp<='0'&inp;else outp<=temp;end if;end if;end process;end behave;6,状态机控制器原理图:Vhdl语言:library ieee;use ieee.std_logic_1164.all;entity key isport(clk:in std_logic;k:in std_logic_vector(3 downto 0);suo:out std_logic;clr:out std_logic;--stop:out std_logic;en:out std_logic);--_vector(2 downto 0)); end;architecture behave of key istype statetype is (s0,s1,s2,s3);signal state:statetype:=s0;beginprocess(clk)beginif clk'event and clk='1'thencase state iswhen s0=> if k(1)='0'then state <=s1;else state <=s0;end if;when s1=> if k(0)='0'then state <=s0;elsif k(2)='0' then state <=s2;elsif k(3)='0' then state <=s3;else state <=s1;end if;when s2=> if k(1)='0'then state <=s1;elsif k(3)='0' then state <=s3;else state <=s2;end if;when s3=> if k(0)='0'then state <=s0;else state <=s3;end if;when others=>null;end case;end if;end process;process(clk)beginif clk'event and clk='1'thencase state iswhen s0=> en<='0'; suo<='0'; clr<='0';when s1=> en<='1'; suo<='1'; clr<='1';when s2=> en<='1'; suo<='0'; clr<='1';when s3=> en<='0'; suo<='1'; clr<='1';when others=> null;end case;end if;end process;end;五,顶层原理图文件:六,仿真结果结果分析:k0为0时,清零初始化。

多功能数字电子钟_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

基于VHDL的时钟、正弦波和方波实验报告

基于VHDL的时钟、正弦波和方波实验报告

数字时钟、正弦波和方波实验报告一:实验要求。

设计一个时钟,能设置两个时间,到这两个时间能够控制自动响铃30秒。

时间调整和定时的设置使用两个按钮实现。

二:试验程序及说明。

说明:clk:时钟基准信号,做正常走时的秒时钟信号。

clk2:用于在调整(校准)时间和设置闹铃时间时,相应的时钟位能闪烁。

clk5:用于使蜂鸣器响所需的1KHz的时钟。

pb1:用于调整时间的按钮。

每按一下,相应的时钟位时钟加一。

pb2:用于调整时钟的状态。

正常走时状态0,设置时钟小时1,设置时钟分钟2,设置定时a小时时3,设置定时a分钟4,设置定时b小时5,设置定时b小时6,然后回到0。

状态的变化根据pb1的信号变化。

pb2用来改变设置值。

pt1:输出的秒时钟信号。

pt2:输出的10秒位信号。

ptml:输出的分钟信号的低位。

ptmh:输出的分钟信号的高位。

pthl:输出的小时信号的低位。

pthh:输出的小时信号的高位。

ring:输出的打铃信号,它和时钟信号clk5相与的结果作为蜂鸣器的输入信号。

k:打铃开关信号,当为高电平时,打铃时间设置有效,到打铃时间,蜂鸣器会响;当为低电平时,到打铃时间,蜂鸣器不响。

下面的signal信号均为中间量,并不作为最终的输出信号。

q1,q2,q3,q4,q5,q6:秒的高低位输出信号,分钟的高低位输出信号,小时的高低位输出信号。

dq1,dq2,dq3,dq4,dq5,dq6:正常走时的时钟信号输出,相应的译码输出,分别对应:秒的高低位,分钟的高低位,小时的高低位。

dpa1,dpa2,dpa3,dpa4,dpb1,dpb2,dpb3,dpb4:设置的打铃时间的小时和分钟的译码输出信号,分为a和b。

dpa1,dpa2:a打铃时间的分钟的低高位,dpa3,dpa4:小时的低高位;dpb1,dpb2:b打铃时间的低高位,dpb3,dpb4:小时的低高位。

c1,c2,c3,c4:c1:秒低位的进位信号,c2:秒高位的进位信号,c3:分钟的低位进位信号,c4:分钟的高位进位信号。

基于VHDL的多功能数字钟设计报告

基于VHDL的多功能数字钟设计报告

基于VHDL的多功效数字钟设计陈述021215班卫时章02121451一.设计请求1.具有以二十四小时制计时.显示.整点报时.时光设置和闹钟的功效.2.设计精度请求为1秒.二.设计情况:Quartus II三.体系功效描写1.体系输入:时钟旌旗灯号clk采取50MHz;体系状况及较时.准时转换的控制旌旗灯号为k.set,校时复位旌旗灯号为reset,均由按键旌旗灯号产生.2.体系输出:LED显示输出;蜂鸣器声音旌旗灯号输出.3.多功效数字电子钟体系功效的具体描写如下:(一)计时:正常工作状况下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时.(二)校时:在计时显示状况下,按下“k”键,进入“小时”待校准状况,若此时按下“set”键,小时开端校准;之后按下“k”键则进入“分”待校准状况;中断按下“k”键则进入“秒”待复零状况;再次按下“k”键数码管显示闹钟时光,并进入闹钟“小时”待校准状况;再次按下“k”键则进入闹钟“分”待校准状况;若再按下“k”键恢复到正常计时显示状况.若校时进程中按下“reset”键,则体系恢复到正常计数状况.(1)“小时”校准状况:在“小时”校准状况下,显示“小时”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(2)“分”校准状况:在“分”校准状况下,显示“分”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(3)“秒”校准状况:在“秒复零”状况下,显示“秒”的数码管以2Hz闪耀,并以1Hz的频率递增计数.(4)闹钟“小时”校准状况:在闹钟“小时”校准状况下,显示“小时”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(5)闹钟“分”校准状况:在闹钟“分”校准状况下,显示“分”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(三)整点报时:蜂鸣器在“59”分钟的第“51”.“53”.“55”.“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,停止时为整点.(四)显示:采取扫描显示方法驱动4个LED数码管显示小时.分,秒由两组led灯以4位BCD 码显示.(五)闹钟:闹钟准不时光到,蜂鸣器发出频率为1000Hz的高音,中断时光为60秒.四.各个模块剖析解释1.分频器模块(freq.vhd)(1)模块解释:输入一个频率为50MHz的CLK,应用计数器分出1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz.(2)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq isport (CLK: in std_logic ; --输入时钟旌旗灯号q1KHz: buffer std_logic;q500Hz: buffer std_logic;q2Hz: buffer std_logic;q1Hz: out std_logic);end freq;architecture bhv of freq isbeginP1KHZ:process(CLK)variable cout:integer:=0;beginif CLK'event and CLK='1' thencout:=cout+1; --每来个时钟上升沿时cout开端计数if cout<=25000 then q1KHz<='0'; --当cout<=25000时,q1KHz输出“0”elsif cout<50000 then q1KHz<='1'; --当25000<cout<=50000时,q1KHzelse cout:=0; --输出“1”,完成1KHz 频率输出end if;end if;end process;P500HZ:process(q1KHz) --q1KHz作为输入旌旗灯号,分出q500Hzvariable cout:integer:=0;beginif q1KHz'event and q1KHz='1' thencout:=cout+1;if cout=1 then q500Hz<='0'; --二分频elsif cout=2 then cout:=0;q500Hz<='1';end if;end if;end process;P2HZ:process(q500Hz)variable cout:integer:=0;beginif q500Hz'event and q500Hz='1' then cout:=cout+1;if cout<=125 then q2Hz<='0';elsif cout<250 then q2Hz<='1';else cout:=0;end if;end if;end process;P1HZ:process(q2Hz)variable cout:integer:=0;beginif q2Hz'event and q2Hz='1' thencout:=cout+1;if cout=1 then q1Hz<='0';elsif cout=2 then cout:=0;q1Hz<='1'; end if;end if;end process;end bhv;(3)模块图:2.控制器模块(contral.vhd)(1)模块解释:输入端口k,set键来控制6个状况,这六个状况分离是:显示计不时光状况,调计时的时.分.秒的3个状况,调闹铃的时.分的3个状况,reset键是复位键,用往返到显示计不时光的状况.(2)波形仿真图:(3)模块图:3、二选一模块(mux21a.vhd)(1)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux21a isport(a,b,s:in bit;y:out bit);end entity mux21a;architecture one of mux21a isbeginprocess(a,b,s)beginif s='0' theny<=a; --若s=0,y输出a,反之输出b. else y<=b;end if;end process;end architecture one;(2)仿真波形图:(3)模块图:4、计时模块a.秒计时(second.vhd)(1)仿真波形图:(2)模块图:b.分计时(minute.vhd)(1)仿真波形图:(2)模块图:c.小时计时(hour.vhd)(1)仿真波形图:(2)模块图:d.闹钟分计时(cntm60b.vhd)(1)仿真波形图:(2)模块图:e.闹钟小时计时(cnth24b.vhd)(1)仿真波形图:(2)模块图:5.闹钟比较模块(compare.vhd)(1)模块解释:比较正常计数时光与闹钟准不时光是否相等,若相等,compout输出“1”,反之输出“0”.(2)仿真波形图:(3)模块图:6.报时模块(bell.vhd)(1)模块解释:该模块既实现了整点报时的功效,又实现了闹铃的功效,蜂鸣器经由过程所选频率的不合,而发出不合的声音.(2)仿真波形图:(3)模块图:7.控制显示模块(show_con.vhd)(1)模块解释:该模块实现了数码管既可以显示正常时光,又可以显示闹钟时光的功效;调时进程的准时闪耀功效也在此模块中真正实现.(2)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show_con isport(th1,tm1,ts1:in std_logic_vector(7 downto 4);th0,tm0,ts0:in std_logic_vector(3 downto 0);bh1,bm1:in std_logic_vector(7 downto 4);bh0,bm0:in std_logic_vector(3 downto 0);sec1,min1,h1: out std_logic_vector(7 downto 4);sec0,min0,h0: out std_logic_vector(3 downto 0);q2Hz,flashs,flashh,flashm,sel_show:in std_logic); end show_con;architecture rtl of show_con isbeginprocess(th1,tm1,ts1,th0,tm0,ts0,bh1,bm1,bh0,bm0,q2Hz,flas hs,flashh,flashm,sel_show)beginif sel_show='0'thenif ( flashh='1'and q2Hz='1')thenh1<="1111";h0<="1111"; --显示小时数码管以2Hz闪耀min1<=tm1;min0<=tm0;sec1<=ts1;sec0<=ts0;elsif (flashm='1'and q2Hz='1')thenh1<=th1;h0<=th0;min1<="1111";min0<="1111";sec1<=ts1;sec0<=ts0;elsif (flashs='1'and q2Hz='1')thenh1<=th1;h0<=th0;min1<=tm1;min0<=tm0;sec1<="1111";sec0<="1111";elseh1<=th1;h0<=th0;min1<=tm1;min0<=tm0;sec1<=ts1;sec0<=ts0;end if;elsif sel_show='1'then--若sel_show为“1”,数码管显示闹钟时光if(flashh='1' and q2Hz='1')thenh1<="1111";h0<="1111";min1<=bm1;min0<=bm0;sec1<="0000";sec0<="0000";elsif ( flashm='1' and q2Hz='1')thenh1<=bh1;h0<=bh0;min1<="1111";min0<="1111";sec1<="0000";sec0<="0000";elseh1<=bh1;h0<=bh0;min1<=bm1;min0<=bm0;sec1<="0000";sec0<="0000";end if ;end if;end process;end rtl;(3)模块图:8.动态扫描显示模块(scan_led.vhd)(1)模块解释:由4组输入旌旗灯号和输出旌旗灯号进而实现了时钟时.分的动态显示.(2)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan_led isport(clk1:in std_logic;h0:in std_logic_vector(3 downto 0);h1:in std_logic_vector(7 downto 4);min0:in std_logic_vector(3 downto 0);min1:in std_logic_vector(7 downto 4);ML:out std_logic_vector(7 downto 0);MH:out std_logic_vector(7 downto 0);HL:out std_logic_vector(7 downto 0);HH:out std_logic_vector(7 downto 0));end scan_led;architecture one of scan_led issignal cnt4:std_logic_vector(1 downto 0);signal a: std_logic_vector(3 downto 0) ;beginp1:process(clk1)beginif clk1'event and clk1 ='1' thencnt4<=cnt4+1;if cnt4=3 thencnt4<="00";end if;end if;end process p1;p2:process(cnt4,h1,h0,min1,min0)begincase cnt4 is --控制数码管位选when "00"=>case min0 iswhen "0000"=>ML<="11000000";when "0001"=>ML<="11111001";when "0010"=>ML<="10100100";when "0011"=>ML<="10110000";when "0100"=>ML<="10011001";when "0101"=>ML<="10010010";when "0110"=>ML<="10000010";when "0111"=>ML<="11111000";when "1000"=>ML<="10000000";when "1001"=>ML<="10010000";when others=>NULL;end case;when "01"=>case min1 iswhen "0000"=>MH<="11000000"; when "0001"=>MH<="11111001";when "0010"=>MH<="10100100";when "0011"=>MH<="10110000";when "0100"=>MH<="10011001";when "0101"=>MH<="10010010";when "0110"=>MH<="10000010";when "0111"=>MH<="11111000";when "1000"=>MH<="10000000";when "1001"=>MH<="10010000";when others=>NULL;end case;when "10"=>case h0 iswhen "0000"=>HL<="11000000"; when "0001"=>HL<="11111001";when "0010"=>HL<="10100100";when "0011"=>HL<="10110000";when "0100"=>HL<="10011001";when "0101"=>HL<="10010010";when "0110"=>HL<="10000010";when "0111"=>HL<="11111000";when "1000"=>HL<="10000000";when "1001"=>HL<="10010000";when others=>NULL;end case;when "11"=>case h1 iswhen "0000"=>HH<="11000000"; when "0001"=>HH<="11111001";when "0010"=>HH<="10100100";when "0011"=>HH<="10110000";when "0100"=>HH<="10011001";when "0101"=>HH<="10010010";when "0110"=>HH<="10000010";when "0111"=>HH<="11111000";when "1000"=>HH<="10000000";when "1001"=>HH<="10010000";when others=>NULL;end case;when others =>null;end case;end process p2;end one;(3)模块图:五、端口设定k:button2 ,set:button1 ,reset:button0 ;Bell:SW1 用于开关蜂鸣器;六.顶层电路图七、心得领会此次的数字钟设计重在于按键的控制和各个模块代码的编写,固然能把键盘接口和各个模块的代码编写出来,并能正常显示,但对于各个模块的优化设计还有必定的缺点和缺少,比方对按键消抖等细节处并未作出优化.经由此次数字钟的设计,我确切从中学到许多的器械.起首,经由过程VHDL硬件说话的进修,我充分熟悉到了功效模块若何用说话实现,让我初步懂得到了一个数字电路用硬件说话设计的方法和设计思惟.其次,也让我深深地领会到实践的主要性,起先我学VHDL说话的时刻,只是学得书本上的常识,经由此次课程设计,经由过程对模块的说话实现,对于VHDL说话我有了更深的熟悉.并且在程序错误的发明和纠正的进程中,我得到了更多的收成,也确切让我提高了许多.再次,当我碰到一些问题的时刻,就教先生,和同窗们一路评论辩论,令我受益颇多!最后,这个多功效数字电子钟是自我创造与汲取借鉴配合感化的产品,是自我尽力的成果.这让我对数字电路的设计充满了信念.固然课程设计已经停止,但这其实不代表着我已经真正控制了VHDL说话,仍需中断进修!。

数字电路设计实验vhdl语言实验报告

数字电路设计实验vhdl语言实验报告

实验一秒表计数器的设计实验目的:本实验通过设计四种频率可选的数字时钟系统, 以达到熟悉VHDL 语言编程语法、设计思路和熟练掌握Quartus II 开发软件的目的。

二、实验内容:该数字时钟的显示格式如下所示: HH: MM: SS, 其中HH表示时计数的两位, MM表示分计数的两位, SS表示秒计数的两位。

本系统输入信号分别为复位信号rst(高有效)、sel(两位信号, 分别可以选择2分频、4分频8分频和16分频)、clk_in(时钟信号)、8位时输出、8位分输出、8位秒输出(其中高4为表示对应的高半字节、低4位表示的低半字节, 譬如当时间为08:59:30时, 时输出为”0000_1000”,分输出为”0101_1001”,秒输出为”0011_0000”)。

该时钟系统可以通过Sel信号时钟运行的快慢。

三、实验流程:通过对实验内容的分析: 可以考虑时钟系统的可由三部分组成: 1.分频器:分频器为时序电路并且通过《数字电路》理论课程的学习可知由计数器来实现, 同学可以回想一下实验1中是如何实现计数器电路的设计), 该模块主要产生2.4.8、16分频的时钟信号;2.多路选择器:在VHDL中多路选择器为组合逻辑, 可以有多种实现方法, 在这里主要选用了case语句来实现。

该模块的作用是从分频器中根据Sel信号选择适当的时钟信号;3.时钟控制器:该模块比较复杂, 主要实现功能是实现一个24小时的计时。

当时间为00:00:59的时候下一个时钟到来时状态的跳变为00:01:00, 计时中多数计数为加1操作, 有几个特殊状态需要重点考虑:当时间产生分进数时, 譬如上例。

当时间产生时进数时, 譬如00:01:59时刻的下一个状态为00:02:00;当时间产生时进数时, 譬如00:59:59是个的下一个状态为01:00:00。

当时间产生天进数时, 譬如23:59:59的下一个状态为00:00:00。

四、仿真要求:1、本次试验的结果全部采用功能仿真分析:在结果图中能够看到让复位信号rst为有效的情况下, 所有的输出为00:00:00;2.当频率选择输出分别为”00”、”01”、”10”、”11”时秒为的进数分别包含2.4.8、16倍clk_in的时钟周期;3.可以看到完整的计时周期00:00:00->23:59:59->00:00:00。

VHDL数字电路课程实验报告

VHDL数字电路课程实验报告

VHDL数字电路课程实验报告实验一8分频器一、实验要求:分别用信号量和变量实现八分频器二、实验过程:1、代码:8分频器vhdlibrary ieee;use ieee.std_logic_1164.all;entity freq_divider isport(clk: in std_logic;out1, out2: buffer bit);end freq_divider;architecture example of freq_divider issignal count1: integer range 0 to 7;beginprocess(clk)variable count2: integer range 0 to 7;beginif(clk'event and clk='1') thencount1<=count1+1;count2:=count2+1;if(count1=3) thenout1<=not out1;count1<=0;end if;if(count2=4) thenout2<=not out2;count2:=0;end if;end if;end process;end example;八分频器tbLIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY fd_tb isEND fd_tb;architecture behavior of fd_tb iscomponent freq_dividerport(clk:IN STD_LOGIC;out1, out2: buffer bit);end component;signal clk:std_logic;signal out1,out2:bit;beginu1: freq_divider port map(clk,out1,out2);processbeginclk<='0';wait for 50 ns;loopclk<=not clk;wait for 25 ns;end loop;end process;end behavior;2、结果图:实验二实现例8.6一、实验要求:电路只有一个输入时钟信号,输出信号在适中的两个边沿都会发生变化二、实验内容:1、代码信号发生器vhdENTITY signal_gen ISPORT (clk: IN BIT;outp: OUT BIT);END signal_gen;ARCHITECTURE fsm OF signal_gen ISTYPE state IS (one, two, three);SIGNAL pr_state1, nx_state1: state;SIGNAL pr_state2, nx_state2: state;SIGNAL out1, out2: BIT;BEGINPROCESS(clk)BEGINIF (clk'EVENT AND clk = '1') THENpr_state1 <= nx_state1;END IF;END PROCESS;PROCESS (clk)BEGINIF (clk'EVENT AND clk = '0') THENpr_state2 <= nx_state2;END IF;END PROCESS;PROCESS (pr_state1)BEGINCASE pr_state1 ISWHEN one =>out1 <= '0';nx_state1 <= two;WHEN two =>out1 <= '1';nx_state1 <= three;WHEN three =>out1 <= '1';nx_state1 <= one;END CASE;END PROCESS;PROCESS (pr_state2)BEGINCASE pr_state2 ISWHEN one =>out2 <= '1';nx_state2 <= two;WHEN two =>out2 <= '0';nx_state2 <= three;WHEN three =>out2 <= '1';nx_state2 <= one;END CASE;END PROCESS;outp <= out1 AND out2;END fsm;信号发生器tbentity tb_fsm isend tb_fsm;architecture behavior of tb_fsm is component signal_gen isport( clk: in bit;outp: out bit);end component;signal clk,outp:bit;beginu1: signal_gen port map(clk,outp); processbeginclk<='0';wait for 20 ns;loopclk<=not clk;wait for 10 ns;end loop;end process;end behavior;2、结果图实验三常数比较器一、实验要求常数比较器,用于比较的变量位宽应大于等于常数二、实验内容1、代码常数比较器vhdLIBRARY ieee;USE ieee.std_logic_1164.all;entity compare isport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end compare;architecture compare of compare isconstant a: integer:=10;beginx1<='1' when a>b else '0';x2<='1' when a=b else '0';x3<='1' when a<b else '0';end compare;常数比较器tbLIBRARY ieee;USE ieee.std_logic_1164.all;entity tb_compare isend tb_compare;architecture behavior of tb_compare iscomponent compareport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end component;signal b: integer;signal x1,x2,x3: std_logic;beginu1: compare port map(b, x1,x2,x3);processbeginb<=5; wait for 10 ns;b<=8; wait for 10 ns;b<=10; wait for 10 ns;b<=13; wait for 10 ns; b<=10; wait for 10 ns; b<=3; wait for 10 ns; end process;end behavior;2、结果图实验四序列检测器一、实验要求序列检测’1001’弱检测到,输出‘1‘,否则输出’0‘二、实验内容1、状态图2、代码序列检测器vhdlibrary ieee;use ieee.std_logic_1164.all;entity string_detector isport(datain,clk: in bit;q: out bit);end string_detector;architecture sd of string_detector istype state is (zero, one, two, three, four);signal pr_state, nx_state: state;beginprocess(clk)beginif(clk'event and clk='1') thenpr_state<=nx_state;end if;end process;process(datain, pr_state)begincase pr_state iswhen zero=>q<='0';if(datain='1') then nx_state<=one;else nx_state<=zero;end if;when one=>q<='0';if(datain='0') then nx_state<=two;else nx_state<=zero;end if;when two=>q<='0';if(datain='0') then nx_state<=three;else nx_state<=zero;end if;when three=>q<='0';if(datain='1') then nx_state<=four;else nx_state<=zero;end if;when four=>q<='1';nx_state<=zero;end case;end process;end sd;序列检测器tb------------------------------------------------------------------ library ieee;use ieee.std_logic_1164.all;------------------------------------------------------------------ entity testBench isend testBench;------------------------------------------------------------------architecture test of testBench iscomponent string_detector isport(datain,clk: in bit;q: out bit);end component;signal datain,clk:bit;signal q:bit;beginSD: string_detector port map(datain,clk,q);processbeginfor i in 0 to 100 loopclk<='0';wait for 10 ns;clk<='1';wait for 10 ns;end loop;end process;processbegindin<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;end process;end test;3、结果图。

vhdl实验报告--数字钟

vhdl实验报告--数字钟

VHDL实验报告一、实验目的1、设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分。

2、通过复杂实验,进一步加深对VHDL语言的掌握程度。

二、实验原理数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分为模60计数器,小时是模24计数器,分别产生3位BCD码。

BCD码经译码,驱动后接数码管显示电路。

秒模60计数器的进位作为分模60计数器的时钟,分模60计数器的进位作为模24计数器的时钟。

为了实现手动调整时间,在外部增加了setm(调整分),seth(调整时)按键,当这两个按键为低电平时,电路正常计时,当为高电平时,分别调整分,时。

同时在外部还增加了一个清零按键clr.和消抖动电路。

三、实验步骤1、单元模块设计部分1)消抖动电路关键部分signal key_in1,key_in2:std_logic:='0';beginprocess(clk,key_in)beginif clk'event and clk='1' thenkey_in1<=key_in;key_in2<=key_in1;if key_in='1' and key_in1='1' and key_in2='1' then key_out<='1';else key_out<='0';end if;2) 模60计数器程序关键部分:signal md_temp,mg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr)beginif clr='1' thenmd_temp<="0000"; mg_temp<="0000";elsif set='1' thenmd_temp<=setl; mg_temp<=seth;elsif clk'event and clk='1' thenif md_temp="1001" thenmd_temp<="0000";mg_temp<=mg_temp+'1';else md_temp<=md_temp+'1';if md_temp="1001" and mg_temp="0101" thenmd_temp<="0000";mg_temp<="0000";2、模24计数器程序关键部分signal hd_temp,hg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr,set,setl,seth)isbeginif set='1' then hd_temp<=setl; hg_temp<=seth;elsif clr='1' then hd_temp<="0000"; hg_temp<="0000";elsif clk'event and clk='1' thenif hg_temp="0010" and hd_temp="0011" thenhd_temp<="0000"; hg_temp<="0000";elsif hd_temp="1001" thenhg_temp<=hg_temp+'1' hd_temp<="0000";else hd_temp<=hd_temp+'1';end if;end if;end process ;3、清零和调时部分显示部分关键程序process (sd,sg,md,mg,hd,hg)begincase sd iswhen "0000" =>sl<="1111110";when "0001" =>sl<="0110000";when "0010" =>sl<="1101101";when "0011" =>sl<="1111001";when "0100" =>sl<="0110011";when "0101" =>sl<="1011011";when "0110" =>sl<="1011111";when "0111" =>sl<="1110000";when "1000" =>sl<="1111111";when "1001" =>sl<="1111011";when others =>sl<="0000000";end case;if clk_g'event and clk_g='1' thenif sel="101" thensel<="000";else sel<=sel+'1';end if;end if;process(sel,sd,sl,sg,sh,md,ml,mg,mh,hd,hl,hg,hh)begincase sel iswhen"000"=>led<=sl;led_which<=sd;when"001"=>led<=sh;led_which<=sg;when"010"=>led<=ml;led_which<=md;when"011"=>led<=mh;led_which<=mg;when"100"=>led<=hl;led_which<=hd;when"101"=>led<=hh;led_which<=hg;when others=>led<="0000000";led_which<="0000";end case;4、顶层文件关键程序port(clk,clk_g:in std_logic;-----clk_g是用在数码管显示里面的信号clr: in std_logic;------clr=1时清零setm,seth:in std_logic;---------setm为1时调分,seth为1时调时setd,setg:in std_logic_vector(3 downto 0);----调整时间的时候,setd调整的是低位setg 调整高位led:out std_logic_vector(6 downto 0);sel_out: out std_logic_vector(2 downto 0);led_which: out std_logic_vector(3 downto 0));---输出的是秒分时的哪一个beginu1:de_shake port map (clk=>clk,key_in=>clr,key_out=>clro);u2:de_shake port map (clk=>clk,key_in=>setm,key_out=>setmo);u3:de_shake port map (clk=>clk,key_in=>seth,key_out=>setho);u4:s60 port map (clk=>clk,clr=>clro,sd=>sdl,sg=>sgh,fenmaichong=>fenmaichong o);u5:m60 port map (clk=>fenmaichongo,clr=>clro,md=>mdl,mg=>mgh,xiaoshimaichong=> xiaoshimaichongo,setl=>setd,seth=>setg,set=>setmo);u6:h24 port map (clk=>xiaoshimaichongo,clr=>clro,hd=>hdl,hg=>hgh,set=>setho,se tl=>setd,seth=>setg);u7:led_xs port map (clk_g=>clk_g,sd=>sdl,sg=>sgh,md=>mdl,mg=>mgh,hd=>hdl, hg=>hgh,led=>led,sel_out=>sel_out,led_which=>led_which);四、实验结果及分析本设计,满足了本次试验设计的任务要求,能显示时分秒,并且可以手动调节分和时。

数字钟VHDL

数字钟VHDL

VHDL实验报告:数字钟一:数字钟的功能1:具有以二十四小时计时、显示、整点报时、时间设置和闹钟的功能。

设计精度要求为1S。

二.功能描述1 . 系统输入:系统状态及校时、定时转换的控制信号为k、trans、set;时钟信号clk,采用1024Hz;系统复位信号reset。

输入信号均由按键产生。

系统输出:LED显示输出,蜂鸣器声音信号输出。

2. 计时:正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。

3. 校时:在计时状态显示下,按下“set键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k 键”则进入“秒复零”状态,第三次按下“k 键”又恢复到正常计时显示状态。

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

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

C:“秒”复零状态:在“秒复零”状态下,显示“秒”的数码管复零。

4. 整点报时:蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57‘秒发频率为512Hz的低音,在“59”分钟的第“59”秒发频率为1024Hz的高音,结束时为整点。

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

闹钟:闹钟定时时间到,蜂鸣器发出周期为1s的“滴”、“滴”声,持续时间为10s;闹钟定时显示。

6. 闹钟定时设置:在闹钟定时显示状态下,按下“set键”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k 键”则进入“秒”设置状态,第三次按下“k键”又恢复到闹钟定时显示状态。

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

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

三:仿真。

分主控模块、计时校时模块、闹钟设定模块、选择显示模块、整点报时及闹铃模块、分频模块、动态显示模块。

VHDL数字钟实验报告

VHDL数字钟实验报告

XXXXXXXXXXXXXXXXXX CPLD实验报告实验名称:VHDL数字钟姓名: XXXXXX班级:电子与电气081学号: 830702043指导老师: XXXXXX实验摘要一、实验摘要数字钟用到了很多我们数字电路里所学的数电知识,例如译码器、编码器、数据选择器、计数器等~。

因此,做数字钟有着非常现实的意义。

本实验使用VHDL 语句进行各模块的编写。

由于本实验采用的是动态扫描的方式循环点亮四个共阳数码管,所以需要编写共阳显示译码器,三态门芯片、四进制计数器以及二~四译码器。

关键字:数字钟、CPLD、VHDL、动态扫描、三态门实验目的二、实验目的学会使用Quartus Ⅱ这款EDA常用设计软件。

掌握在Quartus Ⅱ中VHDL语句的使用方法。

加强巩固层次设计思路、电路图的作法、仿真方法和作图技巧。

掌握CPLD实验箱的使用和电路的加载运行方法。

实验内容三、实验内容(1)认识VHDL数字系统设计分为硬件设计和软件设计,但是随着计算机技术、超大规模集成电路(CPLD、FPGA)的发展和硬件描述语言的出现,软、硬件设计之间的界限被打破数字系统的硬件设计可以完全用软件来实现,只要掌握了HDL语言就可以设计出各种各样的数字逻辑电路。

(2)60进制计数器的设计60进制计数器输入信号:时钟脉冲,对于本次数字钟设计为节省资源占用可不设置清零输入,输出信号:两位BCD码输出,一个进位输出。

entity counter60v isport(clk :in bit;ql :buffer integer range 9 downto 0;qh :buffer integer range 5 downto 0;jinwei:out bit);end counter60v;architecture c60 of counter60v is 生成的模块功能示意图:beginprocess( clk )beginif(clk'event and clk='1')thenif ql=9 then Array ql<=0;if qh=5 thenqh<=0;elseqh<=qh+1;end if;elseql<=ql+1;end if;end if;if(qh=5 and ql=9)thenjinwei<='1';elsejinwei<='0';end if;end process;end c60;(3)24进制计数器的设计24进制计数器输入信号:时钟脉冲,对于本次数字钟设计为节省资源占用可不设置清零输入,输出信号:两位BCD 码输出,这里不需要进位输出。

VHDL数字时钟实验报告

VHDL数字时钟实验报告

VHDL数字时钟实验报告VHDL 数字时钟设计、实验目的:进一步练习VHDL语言设计工程的建立与仿真的步骤和方法、熟悉VHDL语言基本设计实体的编写方法。

同时,在已有知识的基础上,简单综合编写程序,仿制简单器械。

二、实验环境:PC个人计算机、Win dows XP操作系统、Quartus II集成开发环境软件。

三、设计要求:运用VHDL语言编写一个数字钟,具体要求:1.具有时、分、秒计数的十进制数字显示功能,以 24 小时循环计时。

2.具有手动调节小时,分钟的功能。

3.具有闹钟的功能,能够在设定的闹钟时间发出闹铃声。

四、实验步骤:1. 定义输入输出信号量port(clk:in std_logic; ---speak:out std_logic; ---dout:out std_logic_vector(7 downto0); - setclk:in std_logic_vector(2downto 0); -- d1,d2,d3,d4,d5,d6:out std_logic); --2. 定义结构体中的信号量signal sel:std_logic_vector(2 downto时钟铃-- 晶体管显示- 操作按钮六个晶体管signal hou1:std_logic_vector(3 downto0); -signal hou2:std_logic_vector(3downto 0);signal min1:std_logic_vector(3 downto0); signal min2:std_logic_vector(3时分秒的个位和十位signal seth1:std_logic_vector(3 downto 0); signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0); signal setm2:std_logic_vector(3 downto 0); signal sec1:std_logic_vector(3 downto0); signal sec2:std_logic_vector(3downto 0);signal h1:std_logic_vector(3 downto 0); signal h2:std_logic_vector(3 downto 0); signal m1:std_logic_vector(3 downto 0); signal m2:std_logic_vector(3 downto 0);signal s1:std_logic_vector(3 downto 0);signal s2:std_logic_vector(3 downto 0);signal sph1,sph2,spm1,spm2,sps1,sps2:std_logic_vector(3 downto 0);signal count_sec:std_logic_vector(9 downto 0);signal sec_co :std_logic;signal co1,co2,co3,co4:std_logic; -- 进位signal switch :std_logic_vector(1 downto 0); -- 表示状态3. 分频模块用来定义秒count_sec 用来计时钟个数,当count_sec=11 时,及得到1Hz 信号。

(2024版)vhdl数字时钟设计

(2024版)vhdl数字时钟设计

可编辑修改精选全文完整版一、题目分析1、功能介绍(1)具有时、分、秒计数显示功能,以24小时循环计时。

(2)时钟计数显示时有LED灯的花样显示。

(3)具有调节小时、分钟及清零的功能。

(4)具有整点报时功能。

2、总体方框图3、性能指标及功能设计1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。

2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。

我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。

3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。

可以根据我们自己任意时间的复位。

4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。

产生“滴答.滴答”的报警声音。

5)LED灯在时钟显示时有花样显示信号产生。

即根据进位情况,LED不停的闪烁,从而产生“花样”信号。

二、选择方案1、方案选择方案一:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。

采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。

显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。

方案二:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。

采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。

显示:小时采用24进制,而分钟和秒均60进制。

终上所述,考虑到试验时的简单性,故我选择了方案二。

三、细化框图根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:四、编写程序、仿真和分析1、秒计数器1)VHDL 语言描述程序见附录 2)秒计数器的仿真波形图3)波形分析利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即enmin=1;reset 作为复位信号低电平有效,数字时钟控制单元 时调整 分调整使能端信号 CLK 信号时显示 分显示 秒显示24进制 60进制 60进制LED 显示整点报花样显即高电平时正常循环计数,低电平清零。

课程设计论文实验报告基于VHDL的数字钟设计

课程设计论文实验报告基于VHDL的数字钟设计

本科实验报告题目:数字钟课程名称:学院(系):专业:班级:学生姓名:学号:完成日期:成绩:2011 年12 月12 日题目:数字钟1 设计要求系统功能:1.计时,数码管显示的‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器2.星期,lcd1602显示星期:MON/TUE/WEN/THU/FRI/SAT/SUN3.校准,具有手动校星期、校时、校分、校秒的功能。

4.秒表,显示1%秒、60秒,60分,能手动开始和停止5.闹钟,能在设定的时间发出闹铃声。

6.整点报时,即从59分55秒起,每隔1秒钟发出一次低音“嘟”的信号,连续2次,最后一次为高音“嘀”的信号,此信号结束即达到整点,发音的同时伴有led闪烁。

7.倒计时,能在设定的时间开始倒计时,至0时0分0秒停止2 设计分析及系统方案设计一.设计分析:依据功能要求,程序分为:1.计时与校准模块①计时:秒钟计数到59后清零并向分钟进一位,分钟计数到59后清零并向时钟进一位,时钟计数到23后清零并向星期进一位,星期按照MON/TUE/WEN/THU/FRI/SAT/SUN循环变化②校准:使用k1/k0两个功能键,k1切换要改变的位,k0校正2.数码管显示模块①显示译码②利用k3切换显示内容,根据不同模式关闭用不到的数码管。

3.lcd显示模块①定义七个常量数组,数组内容分别为MON/TUE/WEN/THU/FRI/SAT/SUN的ASCⅡ码。

②液晶初始化③液晶显示,将相应字母的ASCⅡ码写入ddram的相应地址中,由cnt1值决定地址,cnt1由0到2循环,因此用到lcd开始的前三个位显示字符。

由星期(m)值决定写入内容,m值不同,cnt1扫描显示的就是不同的数组。

4.闹钟与整点报时模块①整点报时:利用分频得到1k和的频率,当分钟位到达‘59’,秒钟位为‘55’、‘57’时,将频率接到输出引脚,秒钟位为‘59’时,将1k频率接到输出引脚。

②闹钟:到达闹钟时间,将1k频率接到输出引脚,时长3秒③Led闪烁:将led输出引脚连接至频率输出引脚即可(设为inout)5.秒表模块①开启显示1%秒、60秒、60分的数码管。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VHDL数字时钟设计一、实验目的:进一步练习VHDL语言设计工程的建立与仿真的步骤和方法、熟悉VHDL语言基本设计实体的编写方法。

同时,在已有知识的基础上,简单综合编写程序,仿制简单器械。

二、实验环境:PC个人计算机、Windows XP操作系统、Quartus II集成开发环境软件。

三、设计要求:运用VHDL语言编写一个数字钟,具体要求:1. 具有时、分、秒计数的十进制数字显示功能,以24小时循环计时。

2. 具有手动调节小时,分钟的功能。

3. 具有闹钟的功能,能够在设定的闹钟时间发出闹铃声。

四、实验步骤:1. 定义输入输出信号量port(clk:in std_logic; ---时钟speak:out std_logic; ---铃dout:out std_logic_vector(7 downto 0); ---晶体管显示 setclk:in std_logic_vector(2 downto 0); ---操作按钮 d1,d2,d3,d4,d5,d6: out std_logic); ---六个晶体管 2. 定义结构体中的信号量signal sel:std_logic_vector(2 downto 0);signal hou1:std_logic_vector(3 downto 0); --时分秒的个位和十位signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);signal h1:std_logic_vector(3 downto 0);signal h2:std_logic_vector(3 downto 0);signal m1:std_logic_vector(3 downto 0);signal m2:std_logic_vector(3 downto 0);signal s1:std_logic_vector(3 downto 0);signal s2:std_logic_vector(3 downto 0);signal sph1,sph2,spm1,spm2,sps1,sps2:std_logic_vector(3 downto 0);signal count_sec:std_logic_vector(9 downto 0);signal sec_co :std_logic;signal co1,co2,co3,co4:std_logic; --进位signal switch :std_logic_vector(1 downto 0); --表示状态3. 分频模块用来定义秒count_sec用来计时钟个数,当count_sec=11时,及得到1Hz信号。

代码如下:process (clk) is --define a secondbeginif(clk'event and clk='1')thenif(count_sec="11")thencount_sec<="0000000000";sec_co<='1';elsecount_sec<=count_sec+'1';sec_co<='0';end if;end if;end process;4.时钟正常走时模块该模块使用6个进程实现,分别为秒个位计时、秒十位计时、分个位计时、分十位计时、时个位计时、时十位计时。

process(sec_co) is ------------秒个位beginif switch="00" then --正常状态if sec_co='1' thenif sec2="1001" thensec2<="0000";co1<='1';elsesec2<=sec2+'1';co1<='0';end if;end if;elsif switch="01" then --调时状态 sec2<="0000";end if;end process;-------------------------------------------------- process (co1) is -------秒十位beginif switch="00" thenif co1'event and co1='1' thenif (sec1="0101")thensec1<="0000";co2<='1';elsesec1<=sec1+'1';co2<='0';end if;end if;elsif switch="01" thensec1<="0000";end if;end process;------------------------------------------------- process (co1,co2) is --------分钟个位beginif switch="00" thenif co2'event and co2='1' thenif min2="1001" thenmin2<="0000";co3<='1';elsemin2<=min2+'1';co3<='0';end if;end if;elsif switch="01" thenmin2<=setm2;end if;end process;------------------------------------------------------ process (co3) is -----------分钟十位beginif switch="00" thenif co3='1' thenif min1="0101" thenmin1<="0000";co4<='1';elsemin1<=min1+'1';co4<='0';end if;end if;elsif switch="01" thenmin1<=setm1;end if;end process;--------------------------------------------------------- process(co4) -------小时beginif switch="00" thenif co4='1' thenif (hou1="0010") then --小时十位为2时,个位满3进一 if(hou2="0011")thenhou2<="0000";hou1<="0000";elsehou2<=hou2+'1';end if;else --小时十位为0或1,个位满9进一if(hou2="1001")thenhou2<="0000";hou1<=hou1+'1';elsehou2<=hou2+'1';end if;end if;end if;elsif switch="01" thenhou1<=seth1;hou2<=seth2;end if;end process;5.调时模块该进程用来控制时钟状态,switch为“00”时正常显示时间,为“01”时是进行调时,为“10”时是设置闹钟时间。

代码如下:process (setclk(0)) isbeginif(setclk(0)'event and setclk(0)='1')then if(switch="10")thenswitch<="00";elseswitch<=switch+'1';end if;end if;end process;process (setclk(2),switch,setclk(1)) isbegin --setclk(1)为1调分if(switch="01" and setclk(1)='1')then if(setclk(2)'event and setclk(2)='1')thenif(setm2="1001")thensetm2<="0000";if(setm1="0101")thensetm1<="0000";elsesetm1<=setm1+'1';end if;elsesetm2<=setm2+'1';end if;end if;end if;end process;process (setclk(2),switch,setclk(1)) is begin --setclk(1)为0调时if(switch="01" and setclk(1)='0')then if(setclk(2)'event and setclk(2)='1')then if(seth1="0010")thenif(seth2="0011")thenseth1<="0000";seth2<="0000";elseseth2<=seth2+'1';end if;elseif(seth2="1001")thenseth1<=seth1+'1';seth2<="0000";elseseth2<=seth2+'1';end if;end if;end if;end if;end process;6.闹钟模块该模块由3个小模块组成,分别为设置闹钟时间、判断闹钟时间是否到达以及闹铃声音模块。

相关文档
最新文档