vhdl的电子钟设计
- 格式:doc
- 大小:88.00 KB
- 文档页数:7
实验报告 实验项目名称:数字电子钟的VHDL程序设计 实验项目性质:普通试验 所属课程名称:VHDL程序设计 实验计划学时:4学时
一、 实验目的 掌握VHDL程序设计方法
二、 实验内容和要求 能够实现小时(24进制)、分钟和秒钟(60进制)的计数功能 具有复位功能 功能扩展:具有复位、整点报时提示、定时闹钟等功能 在软件工具平台上,进行VHDL语言的各模块编程输入、编译实现和仿真验证。 三、 实验主要仪器设备和材料 计算机
四、 实验方法、步骤及结果测试 数字电子钟由计数器、比较器,寄存器和校时电路组成。振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数器的输出分别经译码器送显示器显示。 1)时钟产生电路。将开发板上的时钟信号经过分频得到不同频率的时钟,分别作用于定时计数、LED扫描。 2)控制逻辑电路。完成电子钟的系统逻辑控制,包括计时控制、时间校对、显示扫描的逻辑控制,可完成系统复位、调整时间的功能。 3)计时电路。主要按照时钟模式完成计时功能。 4)闹钟电路。通过输入信号与电子钟比较,输出闹钟信号。
各功能模块的设计 60进制计数器设计 秒数的计数以1Hz的输入CLKS为触发信号,分数的计数以秒数的进位输出作为触发。是60进制计数器器件图形。 接口: CLKS:1hz时钟信号 OUTS:输出显示 RES:复位信号 INMIN:输出十进制信号
每来一个CLKS上升沿,计数器就加1,当计数器当到达第60个上升沿时,由59归零,仿真符合60进制计数器的要求。
24进制计数器设计 24进制计数器的结构和原理与60进制计数器相类似,只是将除以60改为除以24。下是生成的24进制计数器器件图形。 接口: CLKH:分的进位信号 RES:复位信号 OUTH:输出十进制的小时数
每来一个CLKH上升沿,计数器就加1,当计数器当到达第24个上升沿时,OUTH由24归零,仿真符合24进制计数器的要求。
整点报时及闹钟设计思路及原理图 当计数时间在59分59秒时,报时模块输出报时控制信号。在报时设定时间与计数信号相同时,闹钟控制信号输出。 接口: NZS1 NZM2 NZH1:时钟计数信号 NZS2 NZM2 NZH2:设定闹钟信号 Q:报时响铃信号
由图可知,当时钟计数信号和设定闹钟信号相同时,报时响铃信号Q 输出。当时钟计数信号为零(整点)时,报时响铃信号Q 输出。
顶层设计 通过调用各模块功能,得出如下仿真波形,证明设计成功,能够完成闹钟功能及整点报时功能。 接口:CLK,RES:输入时钟脉冲,复位信号 LEDS,LEDM,LEDH:时钟显示信号 NZS,NZM,NZH:输入闹钟设置信号 QQQ :响铃信号
程序代码 顶层程序文件 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CLOCK IS PORT(CLK,RES:IN STD_LOGIC; LEDS,LEDM,LEDH:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); NZS,NZM,NZH:IN STD_LOGIC_VECTOR(5 DOWNTO 0); QQQ :OUT STD_LOGIC);
END CLOCK; ARCHITECTURE BEHAV OF CLOCK IS COMPONENT SEC PORT(CLKS: IN STD_LOGIC; RES1: IN STD_LOGIC; INMIN:OUT STD_LOGIC; OUTS:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END COMPONENT; COMPONENT MIN PORT(CLKM: IN STD_LOGIC; RES2: IN STD_LOGIC; INHOUR:OUT STD_LOGIC; OUTM:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END COMPONENT; COMPONENT HOUR PORT(CLKH: IN STD_LOGIC; RES3: IN STD_LOGIC; OUTH:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END COMPONENT; COMPONENT NZ PORT(NZS1,NZS2,NZM1,NZM2,NZH1,NZH2:IN STD_LOGIC_VECTOR(5 DOWNTO 0); Q :OUT STD_LOGIC); END COMPONENT; SIGNAL S: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL M: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL H: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL A: STD_LOGIC; SIGNAL B: STD_LOGIC; SIGNAL C: STD_LOGIC;
BEGIN u1 :SEC PORT MAP(CLKS=>CLK,RES1=>RES,INMIN=>A,OUTS=>S); u2 :MIN PORT MAP(CLKM=>A,RES2=>RES,INHOUR=>B,OUTM=>M); u3 :HOUR PORT MAP(CLKH=>B,RES3=>RES,OUTH=>H); U4:NZPORTMAP(NZS1=>S,NZM1=>M,NZH1=>H,NZS2=>NZS,NZM2=>NZM,NZH2=>NZH,Q=>C); LEDS<=S;LEDH<=H;LEDM<=M;QQQ<=C; END ARCHITECTURE BEHAV;
秒钟计时模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SEC IS PORT(CLKS: IN STD_LOGIC; RES: IN STD_LOGIC; INMIN:OUT STD_LOGIC; OUTS:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END SEC; ARCHITECTURE BEHAV OF SEC IS SIGNAL S1:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL S2:STD_LOGIC; BEGIN PROCESS(CLKS,RES) BEGIN IF RES ='1' THEN S1<="000000";S2<='0'; ELSIF CLKS'EVENT AND CLKS='1' THEN IF S1<"111011" THEN S1<=S1+1;S2<='0'; ELSIF S1="111011" THEN S1<="000000";S2<='1'; END IF; END IF; INMIN<=S2;OUTS<=S1; END PROCESS; END BEHAV;
分钟计时模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MIN IS PORT(CLKM: IN STD_LOGIC; RES: IN STD_LOGIC; INHOUR:OUT STD_LOGIC; OUTM:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END MIN; ARCHITECTURE BEHAV OF MIN IS SIGNAL M1:STD_LOGIC_VECTOR(5 DOWNTO 0):="111010"; SIGNAL M2:STD_LOGIC; BEGIN PROCESS(CLKM,RES) BEGIN
IF RES ='1' THEN M1<="000000";M2<='0'; ELSIF CLKM'EVENT AND CLKM='1' THEN IF M1<"111011" THEN M1<=M1+1;M2<='0'; ELSIF M1="111011" THEN M1<="000000";M2<='1'; END IF; END IF; INHOUR<=M2;OUTM<=M1; END PROCESS; END BEHAV;
时钟计时模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY HOUR IS PORT(CLKH: IN STD_LOGIC; RES: IN STD_LOGIC;
OUTH:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END HOUR; ARCHITECTURE BEHAV OF HOUR IS SIGNAL H1:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN PROCESS(CLKH,RES) BEGIN IF RES ='1' THEN H1<="000000"; ELSIF CLKH'EVENT AND CLKH='1' THEN IF H1<"011000" THEN H1<=H1+1; ELSIF H1="011000" THEN H1<="000000";
END IF; END IF; OUTH<=H1; END PROCESS; END BEHAV;
闹钟及整点报时模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY NZ IS