1、LED 数码显示时钟一、实验目的 :1、地运用数字系统的设计方法进行数字系统设计。2、能进行较复杂的数字系统设计。 3、数 字 钟 的 工 作 原 理 , 数 字 钟 的 工 作 流 程 图 与 原 理 方 框 图 , 自 顶 向 下 的 数 字 系 统 设 计 方法 。二、实验原理:1、数字钟的基本工作原理: 数字钟以其显示时间的直观性、走时准确性而受到了人们的欢迎并很快走进了千 家万户。作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图如下:(1)时基 T 产生电路:由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一
2、个频率为 1Hz 的、非常稳定的计数时钟脉冲。 (2)控制逻辑电路:产生调时、调分信号及位选信号。 调时、调分信号的产生:由计数器的计数过程可知,正常计数时,当秒计数器( 60进制)计数到 59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加 1。现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为 2Hz 的脉冲信号同时接到一个 2 选 1 数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为 0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为 1)
3、,则数据选择器将另外一个 2Hz 的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。 (3)计数显示电路:由计数部分、数据选择器、译码器组成,是时钟的关键部分。 计数部分: 由两个 60 进制计数器和一个 24 进制计数器组成,其中 60 进制计数器可用 6 进制计数器和 10 进制计数器构成;24 进制的小时计数同样可用 6 进制计数器和10 进制计数器得到:当计数器计数到 24 时,“2”和 “4”同时进行清零,则可实现 24 进制计数。 数据选择器:84 输入 14 输出的多路数据选择器,因为本实验用到了 8
4、个数码管(有两个用来产生隔离符号)。 译码器:七 段 译 码 器 。 译 码 器 必 须 能 译 出 , 由 实 验 二 中 译 码 器 真 值 表 可 得 : 字 母 F 的 8421BCD 码 为 “1111”, 译 码 后 为 “1000111”, 现 在 如 果 只 译 出 , 即 字 母 F 的中 间 一 横 , 则 译 码 后 应 为 “0000001”, 这 样 , 在 数 码 管 上 显 示 的 就 为 。2、自顶向下设计分割图: 数 字 钟计数显示电路控制逻辑电路2 选 1 数 据 选 择 器 位 选 信 号 发 生 器 计数器 译码器数据选择器调时、 调分控制电路位选信号发
5、生电路控制逻辑电路计数器 电路时基 T 产生电路1Hz晶振 分频整形 门控双稳 脉冲计数 译码 显示说 明 : 按 一 下 按 键 key0,完 成 复 位 功 能 ,clk5 选 择 1Hz 的 时 钟 ,clk3 选 择 的 时 钟 频 率 尽 量 高 。三、实验连线:1、将 EP1C3 适配板左下角的 JTAG 用十芯排线和万用下载区左下角的 SOPC JTAG口连接起来,万用下载区右下角的电源开关拨到 SOPC 下载的一边。2、请将 JPLED1 短路帽右插,JPLED 的短路帽全部上插,实验板右下方频率源 CLK1 接任意频率作为扫描频率。3、将实验板左端的 JP103 全部用短路帽
6、接上(共八个) 。四、实验内容与步骤:(程序:EP1C3timertimer.sof)1、打开 Quartus II 6.0 软件,点击 “FileOpenProject”出现如下的对话框( 图 10.1),选中 timer,点打开即可;图 10.12、点击“Tools-Programmer” 后出现如下的对话窗口, 3、在点”EditAdd File”出现如下对话框(图 10.2),在图 10.3 对话框中,选中EP1C3/timer/timer.sof 项目后点击打开回到 Programmer 对话框, 在下载对话窗口中“选中Program/ Configure”,点击“ Start”即进
7、行下载。图 10.2图 10.3现将 timer.vhd 原程序作如下说明:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY TIMER ISPORT( CLK5:IN STD_LOGIC;CLK3:IN STD_LOGIC;RST1:IN STD_LOGIC;SEG_SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);SEG_DA :OUT ST
8、D_LOGIC_VECTOR(7 DOWNTO 0);END TIMER;ARCHITECTURE ADO OF TIMER ISCOMPONENT CNT10PORT(CLK:IN STD_LOGIC;RST:IN STD_LOGIC;CIN:IN STD_LOGIC;CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT :OUT STD_LOGIC);END COMPONENT;COMPONENT CNT6PORT(CLK :IN STD_LOGIC;RST :IN STD_LOGIC;CIN :IN STD_LOGIC;CNT_VAL:OUT STD
9、_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END COMPONENT;COMPONENT CNT2PORT(CLK: IN STD_LOGIC;RST: IN STD_LOGIC;CIN: IN STD_LOGIC;CNT_VAL:INOUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT :OUT STD_LOGIC);END COMPONENT;COMPONENT CNT4PORT (CLK:IN STD_LOGIC;RST:IN STD_LOGIC;CIN:IN STD_LOGIC;CNT_VAL:OUT STD_LO
10、GIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END COMPONENT;SIGNAL SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SEG_BUF5,SEG_BUF6,SEG_BUF7,SEG_BUF8:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SEG_CNT :STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL SEG_TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL C
11、OUT:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL CLK:STD_LOGIC;BEGINPROCESS (CLK3)BEGINIF CLK3EVENT AND CLK3=1 THENCLK SEG_TEMP SEG_TEMP SEG_TEMP SEG_TEMP SEG_TEMP SEG_TEMP SEG_TEMP SEG_TEMP NULL;END CASE;END PROCESS;PROCESS (SEG_TEMP)BEGINCASE SEG_TEMP ISWHEN “0000“ = SEG_DA SEG_DA SEG_DA SEG_DA SEG_DA SEG
12、_DA SEG_DA SEG_DA SEG_DA SEG_DA SEG_DA SEG_DA SEG_DA SEG_DA SEG_DA SEG_DACLK5,RST=RST1,CNT_VAL=SEG_BUF1,COUT=COUT(0),CIN=1);U2 : CNT6 PORT MAP (CLK=CLK5,RST=RST1,CNT_VAL=SEG_BUF2,COUT=COUT(1),CIN=COUT(0);U3 : CNT10 PORT MAP (CLK=CLK5,RST=RST1,CNT_VAL=SEG_BUF4,COUT=COUT(2),CIN=COUT(1);U4 : CNT6 PORT
13、MAP (CLK=CLK5,RST=RST1,CNT_VAL=SEG_BUF5,COUT=COUT(3),CIN=COUT(2);U5 : CNT4 PORT MAP (CLK=CLK5,RST=RST1,CNT_VAL=SEG_BUF7,COUT=COUT(4),CIN=COUT(3);U6 : CNT2 PORT MAP (CLK=CLK5,RST=RST1,CNT_VAL=SEG_BUF8,COUT=COUT(5),CIN=COUT(4);END ADO;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.
14、ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY CNT10 ISPORT(CLK :IN STD_LOGIC;RST :IN STD_LOGIC;CIN :IN STD_LOGIC;CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT10;ARCHITECTURE BEHAVE OF CNT10 ISSIGNAL CNT_T:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK
15、)BEGIN IF RST=1 THENCNT_T=“0000“;ELSIF CLKEVENT AND CLK=1 THENIF CIN=1 THENIF CNT_T/= 9 THENCNT_T=CNT_T+1;ELSE CNT_T=“0000“;END IF;END IF;ELSE CNT_T=CNT_T;END IF;END PROCESS;COUT=1 WHEN CNT_T=9 AND CIN=1 ELSE 0 ;CNT_VAL=CNT_T;END BEHAVE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIG
16、NED.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt6 ISPORT(CLK :IN STD_LOGIC;RST :IN STD_LOGIC;CIN :IN STD_LOGIC;CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC );END CNT6;ARCHITECTURE ADO2 OF CNT6 ISSIGNAL CNT_T :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL COUTD :ST
17、D_LOGIC;BEGIN PROCESS (CLK,RST)BEGINIF RST=1 THENCNT_T=“0000“;ELSIF CLKEVENT AND CLK=1 THENIF CIN=1 THENIF CNT_T 5 THENCNT_T=CNT_T+1;ELSE CNT_T=x“0“;END IF;END IF;ELSECNT_T=CNT_T;END IF;END PROCESS;COUT=1 WHEN CNT_T=5 AND CIN=1 ELSE 0;CNT_VAL=CNT_T;END ADO2; LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;
18、USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY CNT2 ISPORT(CLK :IN STD_LOGIC;RST :IN STD_LOGIC;CIN:IN STD_LOGIC;CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT2;ARCHITECTURE ADO3 OF CNT2 ISSIGNAL CNT_T:STD_LOGIC_VECTOR (3 DOWNTO
19、 0);BEGIN PROCESS(CLK,RST)BEGINIF RST=1 THENCNT_T=“0000“;ELSIF CLKEVENT AND CLK=1 THENIF CIN=1 THENIF CNT_T1 THEN CNT_T=CNT_T+1;ELSE CNT_T=“0000“;END IF;END IF;ELSE CNT_T=CNT_T;END IF;END PROCESS;COUT=1 WHEN CNT_T=1 AND CIN=1 ELSE 0;CNT_VAL=CNT_T;END ADO3;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE
20、 IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY CNT4 ISPORT(CLK :IN STD_LOGIC;RST:IN STD_LOGIC;CIN:IN STD_LOGIC;CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT4;ARCHITECTURE BEHAVE OF CNT4 ISSIGNAL CNT_T:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK,RST)BEGINIF RST=1 THENCNT_T=“0000“;ELSIF CLKEVENT AND CLK=1 THENIF CIN=1 THENIF CNT_T3 THENCNT_T=CNT_T+1;ELSE CNT_T=“0000“;END IF;END IF;ELSECNT_T=CNT_T;END IF;END PROCESS;CNT_VAL=CNT_T;COUT=1 WHEN CNT_T=3 AND CIN=1 ELSE 0;END BEHAVE;