定时器设计.docx
《定时器设计.docx》由会员分享,可在线阅读,更多相关《定时器设计.docx(12页珍藏版)》请在冰豆网上搜索。
![定时器设计.docx](https://file1.bdocx.com/fileroot1/2023-1/12/608c956b-8c72-4035-a759-e5bacd409939/608c956b-8c72-4035-a759-e5bacd4099391.gif)
定时器设计
课程设计
题目:
定时器设计
班级:
姓名:
学号:
指导教师:
成绩:
电子与信息工程学院
信息与通信工程系
定时器设计
1概述
人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。
1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。
它利用机械钟带动开关来控制煤气阀门。
起初每周上一次发条,1918年使用电钟计时后,就不用上发条了。
定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多。
人们甚至将定时器用在了军事方面,制成了定时炸弹,定时雷管。
现在的不少家用电器都安装了定时器来控制开关或工作时间。
2设计要求
2.1功能:
实现2位数(单位是秒)的倒数
输入信号:
置数(为二进制数),开始计数信号(高电平有效),时钟信号clk为1kHz
输出信号:
计数信号的LED数码管(共阴极)显示码(动态显示方式),段选信号(选择当前显示码对应的LED)(高电平有效),计数结束信号(高电平有效)
2.2要求:
系统由分频器(将1kHz时钟变为1Hz)、减法计数器(秒的倒计时)、LED刷新时钟(刷新时间为10毫秒)、显示码译码器(将时间的BCD码转换成LED显示码)。
要求给出系统总体组成框图,设计思路,完成以上模块的VHDL实现及功能仿真,顶层文件及整体仿真。
3系统总体组成框图
4减法计数器模块
4.1减法计数器功能:
从输入数值减1直到0为止。
4.2模块的源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSUBBIS
PORT(CLKS:
INSTD_LOGIC;
RETS:
INSTD_LOGIC;
EN:
INSTD_LOGIC;
A:
INSTD_LOGIC_VECTOR(6DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITY;
ARCHITECTUREONEOFSUBBIS
SIGNALQI:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
PROCESS(CLKS,RETS)
BEGIN
IFRETS='0'THEN
QI<=A;
ELSIFEN='1'THEN
IFCLKS'EVENTANDCLKS='1'THEN
IFQI="0000000"THEN
QI<="0000000";
ELSEQI<=QI-'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
Q<=QI;
ENDARCHITECTURE;
4.3仿真波形
周期设置为10纳秒
仿真波形输出
4.4RTL电路
5译码器模块
5.1译码器功能:
译码器模块的显示方式为动态显示,刷新时间为10ms。
5.2译码器源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYyimaqiIS
PORT(
CLOCK:
INSTD_LOGIC;
RET:
INSTD_LOGIC;
input:
INSTD_LOGIC_VECTOR(7DOWNTO0);--------输入显示数据
DIV10FLAG:
OUTSTD_LOGIC;-----------------------10ms方波数码管扫描周期
LEDDIPLY:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);------数码管段选
SELECCT:
OUTSTD_LOGIC_VECTOR(1DOWNTO0)-------数码管位选
);
ENDENTITY;
ARCHITECTUREONEOFyimaqiIS
SIGNALCNT2:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALDIV10:
STD_LOGIC;
SIGNALWX:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
PROCESS(CLOCK,RET)
BEGIN
IFRET='0'THEN
CNT2<="000";
ELSIFCLOCK'EVENTANDCLOCK='1'THEN
IFCNT2="101"THEN
CNT2<="000";
DIV10<=NOTDIV10;
ELSECNT2<=CNT2+'1';
ENDIF;
ENDIF;
ENDPROCESS;
DIV10FLAG<=DIV10;
PROCESS(DIV10,RET)
BEGIN
IFRET='0'THEN
WX<="01";
ELSIFDIV10'EVENTANDDIV10='1'THEN
IFWX="10"THEN
WX<="01";
ELSEWX<="10";
ENDIF;
ENDIF;
ENDPROCESS;
SELECCT<=WX;
PROCESS(WX,RET)
BEGIN
IFRET='0'THEN
LEDDIPLY<="0000000";
ELSE
CASEWXIS
WHEN"10"=>
CASEinput(3DOWNTO0)IS
WHEN"0000"=>LEDDIPLY<="0111111";
WHEN"0001"=>LEDDIPLY<="0000110";
WHEN"0010"=>LEDDIPLY<="1011011";
WHEN"0011"=>LEDDIPLY<="1001111";
WHEN"0100"=>LEDDIPLY<="1100110";
WHEN"0101"=>LEDDIPLY<="1101101";
WHEN"0110"=>LEDDIPLY<="1111101";
WHEN"0111"=>LEDDIPLY<="0000111";
WHEN"1000"=>LEDDIPLY<="1111111";
WHEN"1001"=>LEDDIPLY<="1101111";
WHENOTHERS=>LEDDIPLY<="0111111";
ENDCASE;
WHEN"01"=>
CASEinput(7DOWNTO4)IS
WHEN"0000"=>LEDDIPLY<="0111111";
WHEN"0001"=>LEDDIPLY<="0000110";
WHEN"0010"=>LEDDIPLY<="1011011";
WHEN"0011"=>LEDDIPLY<="1001111";
WHEN"0100"=>LEDDIPLY<="1100110";
WHEN"0101"=>LEDDIPLY<="1101101";
WHEN"0110"=>LEDDIPLY<="1111101";
WHEN"0111"=>LEDDIPLY<="0000111";
WHEN"1000"=>LEDDIPLY<="1111111";
WHEN"1001"=>LEDDIPLY<="1101111";
WHENOTHERS=>LEDDIPLY<="0111111";
ENDCASE;
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
ENDPROCESS;
ENDARCHITECTURE;
5.3仿真波形
周期设置为1微秒
仿真波形输出
5.4RTL电路
6分频器模块
6.1分频器功能:
把1kHZ的频率分为1HZ的频率
6.2分频器源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFENPINIS
PORT(CLKF:
INSTD_LOGIC;
RSTF:
INSTD_LOGIC;
DIVOUT:
OUTSTD_LOGIC);
ENDENTITY;
ARCHITECTUREONEOFFENPINIS
SIGNALDIV:
STD_LOGIC;
BEGIN
PROCESS(CLKF,RSTF)
VARIABLECNT1:
STD_LOGIC_VECTOR(0TO8);
BEGIN
IFRSTF='1'THEN
CNT1:
="000000000";
DIV<='0';
ELSIFCLKF'EVENTANDCLKF='1'THEN
IFCNT1="111110100"THEN
CNT1:
="000000000";
DIV<=NOTDIV;
ELSECNT1:
=CNT1+1;
ENDIF;
ENDIF;
ENDPROCESS;
DIVOUT<=DIV;
ENDARCHITECTURE;
6.3仿真波形
周期设置为10纳秒
仿真波形输出
6.4RTL电路
7总体设计
7.1顶层文件
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYWJQIS
PORT(
CLK:
INSTD_LOGIC;
RST:
INSTD_LOGIC;
START:
INSTD_LOGIC;--使能信号
INTEMP:
INSTD_LOGIC_VECTOR(7DOWNTO0);--输入数据
SELETOUT:
OUTSTD_LOGIC_VECTOR(1DOWNTO0);--位选信号
OUTDADA:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);--段选信号
FLAG:
OUTSTD_LOGIC;--分频输出1HZ
FLAGHZ:
OUTSTD_LOGIC--数码管扫描周期10ms
);
ENDENTITY;
ARCHITECTUREONEOFWJQIS
COMPONENTFENPIN
PORT(CLKF:
INSTD_LOGIC;
RETF:
INSTD_LOGIC;
DIVOUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTSUBB
PORT(CLKS:
INSTD_LOGIC;
RETS:
INSTD_LOGIC;
EN:
INSTD_LOGIC;
A:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCOMPONENT;
COMPONENTyimaqi
PORT(CLOCK:
INSTD_LOGIC;
RET:
INSTD_LOGIC;
input:
INSTD_LOGIC_VECTOR(7DOWNTO0);
DIV10FLAG:
OUTSTD_LOGIC;
LEDDIPLY:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
SELECCT:
OUTSTD_LOGIC_VECTOR(1DOWNTO0));
ENDCOMPONENT;
SIGNALHF1:
STD_LOGIC;
SIGNALDATADA:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALREN:
STD_LOGIC;
SIGNALHX:
STD_LOGIC;
BEGIN
U1:
FENPINPORTMAP(CLKF=>CLK,RETF=>RST,DIVOUT=>HF1);
U2:
SUBBPORTMAP(CLKS=>HF1,RETS=>RST,EN=>REN,A=>INTEMP,Q=>DATADA);
U3:
yimaqiPORTMAP(CLOCK=>CLK,RET=>RST,input=>DATADA,DIV10FLAG=>HX,LEDDIPLY=>OUTDADA,SELECCT=>SELETOUT);
FLAGHZ<=HX;
FLAG<=HF1;
REN<=START;
ENDARCHITECTURE;
7.2总体电路图
7.3总体电路仿真结果
8设计总结
通过这次课程设计,我了解到了进行课程设计的方法,有关定时器的结构和基本原理。
本设计通过了仿真软件的测试,或者说就是基于仿真软件设计的。
这也让我们学会了一种解决问题的方法。
本方案之前也讨论更改过很多方案。
特别是在进制问题和参数设置问题上研究了很久,但是基本的思维是不变的。
本次课程设计还使我们熟悉了quartus2软件的操作使用,这是我们最大的受益所在。
参考文献
[1]潘松,黄继业.EDA技术与VHDL
[2]EDA实验指导书