数字电子时钟实验报告2.docx
《数字电子时钟实验报告2.docx》由会员分享,可在线阅读,更多相关《数字电子时钟实验报告2.docx(13页珍藏版)》请在冰点文库上搜索。
数字电子时钟实验报告2
重庆大学光电工程学院系列课程
实验报告本
课程名称可编程逻辑电路技术
实验学期2014年至2015第1学期
学生所在学院光电工程学院
年级12级专业班级光电信息02班
学生姓名闫昊学号20123082
指导教师签名
实验最终成绩
重庆大学光电工程学院教学实验中心制
实验题目
数字电子钟实验
实验时间
2014年9月28日星期日
实验地点
主教1118
实验成绩
实验性质
□验证性□设计性√综合性
教师评语:
□出勤率好□原理正确□方案合理
□实验结果正确□回答问题正确□报告规范
一、实验目的
1、掌握VHDL程序的基本设计技巧。
2、掌握各类计数器以及他们相连的设计方法。
3、掌握VHDL的并行语句和顺序语句的设计方法。
4、掌握矩阵键盘原理和数码管动态显示方法。
二、实验内容
1、采用层次化设计方法,设计一个数字电子钟,能够正常进行时、分、秒计时,并用数码管显示计时结果。
2、所设计的数字电子钟应具有校时功能。
3、时、分、秒以及较时功能模块采用VHDL语言实现,顶层采用原理图输入方式,把时、分、秒以及较时功能模块按照一定的组合逻辑连接起来,组成数字电子时钟。
2、实验原理
图1.数字电子钟原理图
实验原理上图所示,实验箱的标准信号源模块为计数器提供基准时钟,校准按键由矩阵键盘实现,显示用实验箱上面的8位数码管实现。
在校时状况下,是对需要调整的时间模块进行计数,控制按键用来选择是正常计数还是校准时间计数,并决定调整时、分、秒;置数按键按下时,表示相应的调整模块要加1,如需要对小时调整时,显示时间的LED管闪烁且当置数键按下时,相应的小时显示要加1,。
三、使用仪器、器材
(1)PC机一台,HP-FPGA11实验箱一套。
(2)QuartusⅡ软件。
四、实验步骤
1、用文本输入法,实现时、分、秒以及较时功能,并生成实体图。
2、利用生成的底层实体图,设计出数字电子时钟的顶层实体图。
3、编译,绑定引脚,下载程序,通过实验箱验证程序的正确性。
五、实验过程原始记录(数据、图标、计算等)
秒计时模块的设计:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
useieee.std_logic_unsigned.all;
ENTITYSIXSECIS
PORT(CLK:
INSTD_LOGIC;
KONG:
INSTD_LOGIC;
OUTS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUTG:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CO:
OUTSTD_LOGIC);
ENDSIXSEC;
ARCHITECTUREbehOFSIXSECIS
SIGNALSHI,GE:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCO1:
STD_LOGIC;
BEGIN
CO1<='1'when(SHI="0000"andGE="0000")else'0';
CO<=(CO1ANDKONG);
PROCESS(CLK)--时钟作用
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFSHI="0101"THEN
IFGE="1001"THEN
SHI<="0000";
GE<="0000";
ELSEGE<=GE+1;
ENDIF;
ELSEIFGE="1001"THEN
SHI<=SHI+1;
GE<="0000";
ELSEGE<=GE+1;
ENDIF;
ENDIF;
ENDIF;
OUTS<=SHI;
OUTG<=GE;
ENDPROCESS;
ENDARCHITECTUREbeh;
秒计数器器件图:
秒计数器仿真:
由图可知:
当KONG为1时可产生进位信号,当KONG为0时进位信号被屏蔽。
分计数模块VHDL程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
useieee.std_logic_unsigned.all;
ENTITYSIXFENIS
PORT(CLK:
INSTD_LOGIC;
KONG:
INSTD_LOGIC;
ADDNUMBER:
INSTD_LOGIC;
OUTS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUTG:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CO:
OUTSTD_LOGIC);
ENDSIXFEN;
ARCHITECTUREbehOFSIXFENIS
SIGNALCLK1:
STD_LOGIC;
SIGNALCO1:
STD_LOGIC;
SIGNALCLK2:
STD_LOGIC;
SIGNALSHI,GE:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
CLK1<=CLKANDKONG;
CLK2<=CLK1OR(NOTKONGANDADDNUMBER);
CO1<='1'when(SHI="0000"andGE="0000")else'0';
CO<=CO1OR(NOTKONG);
PROCESS(CLK2)--时钟作用
BEGIN
IFCLK2'EVENTANDCLK2='1'THEN
IFSHI="0101"THEN
IFGE="1001"THEN
SHI<="0000";
GE<="0000";
ELSEGE<=GE+1;
ENDIF;
ELSEIFGE="1001"THEN
SHI<=SHI+1;
GE<="0000";
ELSEGE<=GE+1;
ENDIF;
ENDIF;
ENDIF;
OUTS<=SHI;
OUTG<=GE;
ENDPROCESS;
ENDARCHITECTUREbeh;
时计数模块VHDL程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;
ENTITYTWOSECIS
PORT(CLK:
INSTD_LOGIC;
KONG:
INSTD_LOGIC;
ADDNUMBER:
INSTD_LOGIC;
OUTS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUTG:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDTWOSEC;
ARCHITECTUREbehOFTWOSECIS
SIGNALCLK1:
STD_LOGIC;
SIGNALCLK2:
STD_LOGIC;
SIGNALSHI,GE:
STD_LOGIC_VECTOR(3DOWNTO0);
begin
CLK1<=CLKANDKONG;
CLK2<=CLK1OR(NOTKONGANDADDNUMBER);
PROCESS(CLK2)
BEGIN
IFCLK2='1'ANDCLK2'EVENTTHEN
IFSHI="0010"THEN
IFGE="0011"THEN
SHI<="0000";
GE<="0000";
ELSEGE<=GE+1;
ENDIF;
ELSEIFGE="1001"THEN
SHI<=SHI+1;
GE<="0000";
ELSEGE<=GE+1;
ENDIF;
ENDIF;
ENDIF;
OUTS<=SHI;
OUTG<=GE;
ENDPROCESS;
ENDARCHITECTUREbeh;
键盘扫描:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJIAYIIS
PORT(SIMA:
INSTD_LOGIC;
GUILIU:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
SHUCHU1:
OUTSTD_LOGIC;
SHUCHU2:
OUTSTD_LOGIC;
ADDN:
OUTSTD_LOGIC
);
ENDJIAYI;
ARCHITECTUREBEHOFJIAYIIS
TYPEXUANZEIS(S0,S1,S2);
SIGNALCURRENT_STATE,NEXT_STATE:
XUANZE;
BEGIN
PROCESS(CLK)
BEGIN
ADDN<=GUILIU;
IFSIMA'EVENTANDSIMA='1'THEN
CURRENT_STATE<=NEXT_STATE;
ENDIF;
ENDPROCESS;
PROCESS(CURRENT_STATE)
BEGIN
CASECURRENT_STATEIS
WHENS0=>NEXT_STATE<=S1;SHUCHU1<='1';SHUCHU2<='1';
WHENS1=>NEXT_STATE<=S2;SHUCHU1<='0';SHUCHU2<='1';
WHENOTHERS=>NEXT_STATE<=S0;SHUCHU1<='1';SHUCHU2<='0';
ENDCASE;
ENDPROCESS;
ENDBEH;
调时输入模块器件图:
调时输入模块仿真:
显示译码器模块通过对输入的时分秒进行译码显示,输出8位数码管的位选端和段选端,同时具有调整时或调分时,使其相应的位闪烁的功能。
其VHDL程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSHUMAGUANIS
PORT(MIAOSHI:
INSTD_LOGIC_VECTOR(3DOWNTO0);
MIAOGE:
INSTD_LOGIC_VECTOR(3DOWNTO0);
FENSHI:
INSTD_LOGIC_VECTOR(3DOWNTO0);
FENGE:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SHISHI:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SHIGE:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SHANSHUO2:
INSTD_LOGIC;
SHANSHUO3:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
WEIXUAN:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
DUANXUAN:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDSHUMAGUAN;
ARCHITECTUREBEHOFSHUMAGUANIS
SIGNALCLK1:
STD_LOGIC;
SIGNALT:
INTEGERRANGE0TO999:
=0;
SIGNALYIWEI:
STD_LOGIC_VECTOR(7DOWNTO0):
="01111111";
SIGNALYIWEI1:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
CLK1<='0'WHENT<500ELSE'1';
PROCESS(CLK,SHANSHUO2,SHANSHUO3)
VARIABLEHUANCUN:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFCLK'EVENTANDCLK='1'THEN
T<=T+1;
YIWEI(7DOWNTO1)<=YIWEI(6DOWNTO0);
YIWEI(0)<=YIWEI(7);
IFSHANSHUO2='0'THEN
YIWEI1(4)<=CLK1;
YIWEI1(3)<=CLK1;
YIWEI1(2DOWNTO0)<="000";
YIWEI1(7DOWNTO5)<="000";
ELSIFSHANSHUO3='0'THEN
YIWEI1(7)<=CLK1;
YIWEI1(6)<=CLK1;
YIWEI1(5DOWNTO0)<="000000";
ELSEYIWEI1<="00000000";
ENDIF;
WEIXUAN<=YIWEIORYIWEI1;
CASEYIWEIIS
WHEN"11111110"=>HUANCUN:
=MIAOGE;
WHEN"11111101"=>HUANCUN:
=MIAOSHI;
WHEN"11111011"=>HUANCUN:
="1010";
WHEN"11110111"=>HUANCUN:
=FENGE;
WHEN"11101111"=>HUANCUN:
=FENSHI;
WHEN"11011111"=>HUANCUN:
="1010";
WHEN"10111111"=>HUANCUN:
=SHIGE;
WHEN"01111111"=>HUANCUN:
=SHISHI;
WHENOTHERS=>HUANCUN:
="1111";
ENDCASE;
CASEHUANCUNIS
WHEN"0000"=>DUANXUAN<="11111100";
WHEN"0001"=>DUANXUAN<="01100000";
WHEN"0010"=>DUANXUAN<="11011010";
WHEN"0011"=>DUANXUAN<="11110010";
WHEN"0100"=>DUANXUAN<="01100110";
WHEN"0101"=>DUANXUAN<="10110110";
WHEN"0110"=>DUANXUAN<="10111110";
WHEN"0111"=>DUANXUAN<="11100000";
WHEN"1000"=>DUANXUAN<="11111110";
WHEN"1001"=>DUANXUAN<="11110110";
WHEN"1010"=>DUANXUAN<="00000010";
WHENOTHERS=>DUANXUAN<="00000000";
ENDCASE;
ENDIF;
ENDPROCESS;
ENDBEH;
译码显示模块器件图:
译码显示模块仿真:
六、实验结果分析
各子功能模块完成后,将各个模块通过图形文件输入方式连接,生成最终电路图,并对其进行仿真;通过仿真可以看到时、分、秒正常显示,而且可以准确无误地调整时间。
并且程序下载之后运行正常,达到预期效果。
电路连接图:
电子时钟仿真: