安徽工业经济职业技术学院
毕业论文(
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
)
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目: 基于VHDL的数字钟设计
系 别:
电子信息技术系
专 业:
电子信息
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
技术
学 号:
201254427
学生姓名:
王翀
指导教师:
王俊
职 称:
二〇一四年 五月 月 十三 日
【摘要】
20世纪90年代,国际上电子和计算机技术较为先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。
EDA技术在电子系统设计领域越来越普及,本设计主要利用VHDL语言在EDA平台上设计一个电子数字钟,
【关键词】
数字钟 EDA VHDL语言
目录
摘要:......................................................................................................................... 1
关键词:………………........................................................................................... 1
绪论………………………………………………………………………………....3
1.设计目的 .............................................................................................................. 4
2.设计内容 ...............................................................................................................4
3.设计原理 ...............................................................................................................4
3.1数字钟的基本工作原理…………………………………………….….………4
3.2数字钟设计的电路原理图……………………………..………………………6.
4.单元模块的设计………………………………………………………………….6
4.1秒计数器的模块………………………………………………………….……..6
4.2分计数器的模块…………………………..…………………………….............8
4.3时计数器的模块……………………………………..……………………...…10
4.4整点报时器模块…………………………………………………………….....12
4.5调时调分模块………………………..………………………………….……..13
4.6 LED显示译码器模块…………………………………………..………..…..15
5.仿真结果………………………………………………………………………..17.
结语......................................................................................................................... 17
参考文献 ............................................................................................................... 18
绪论
EDA是电子设计自动化(Elcctronic Design Automation)的缩写,是90年代初从CAD(计算机辅助设备),CAM(计算机辅助制造),CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL完成的设计文件,自动的完成逻辑编译,化简,分割,综合及优化,布局布线,仿真以及对特定目标芯片的适配编译和编程下载等工作,这种将设计实体内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。其优点是:与其它硬件描述语言相比,VHDL具有更强的行为描述能力,从而解决了他成为系统设计领域最佳的硬件描述语言,强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证;VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能和可行性,及时可对设计进行。
它的计时周期为24小时,显示满刻度为24时59分59秒,另外还具有校时功能和闹钟功能。总的程序由几个各具不同功能的单元模块程序拼接而成,
其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、译码显示程序模块和拼接程序模块。
并且使用QUARTUS II软件进行电路波形仿真,下载到EDA实验箱进行验证。
1.设计目的
1)熟练地运用数字系统的设计方法进行数字系统设计;
2)能进行较复杂的数字系统设计;
3)按
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
设计一个数字钟。
2.设计内容
1)要求显示秒、分、时,显示格式如下:
图显示格式
2)可清零、可调时,具有整点报时功能。
3.设计原理
3.1数字钟的基本工作原理:
数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,
在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图:
数字钟实现原理框图
1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分 ——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。
2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。
5)LED灯在时钟显示时有花样显示信号产生。即根据进位情况,LED不停的闪烁,从而产生“花样”信号。
根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用
数字时钟 控制单元 时调整 分调整 使能端信号 CLK信号 时显示 分显示 秒显示 24进制 60进制 60进制 LED显示 整点报时 花样显示
24进制,而分钟均是采用6进制和10进制的组合。
3.2数字钟设计的电路原理图
24进制数字钟的电路图
4.单元模块的设计
4.1.秒计数器模块
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY second IS
PORT(
clk,reset,setmin:IN STD_LOGIC;
enmin:OUT STD_LOGIC;
daout:out std_logic_vector(6 downto 0));
END entity second;
ARCHITECTURE fun OF second IS
SIGNAL count:STD_LOGIC_VECTOR(6 downto 0);
SIGNAL enmin_1,enmin_2:STD_LOGIC; ----enmin_1为59秒时的进位信号
BEGIN daout<=count; ----enmin_2由clk调制后的手动调分脉冲信号串
enmin_2<=(setmin and clk); -----setmin为手动调分控制信号,高电平有效
enmin<=(enmin_1 or enmin_2); ----enmin为向分进位信号
process(clk,reset,setmin)
begin
if(reset='0') then count<="0000000"; ----若reset为0,则异步清零
elsif(clk'event and clk='1')then ----否则,若clk上升沿到
if(count(3 downto 0)="1001")then ----若个位计时恰好到“1001”即9
if(count<16#60#)then ----又若count小于16#60#,即60H
if(count="1011001")then ----又若已到59D
enmin_1<='1';count<="0000000"; ----则置进位为1及count复0
else count<=count+7; ----未到59D,则加7,而+7=+1+6,则作“加6校正”
end if;
else ----若count不小于16#60#(即count等于或大于16#60#)
count<="0000000"; ----count复0
end if; ----end if(count<16#60#)
elsif(count<16#60#)then ----若个位计数未到“1001”则转此句再判
count<=count+1; ----若count<16#60#则count加1
enmin_1<='0' after 100 ns; ----则没有发生进位
else
end if;
end if;
end process;
end fun
编译过程:
仿真图如下:
4.2.分计数器模块
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY minute IS
PORT(
clk,clk1,reset,sethour:IN STD_LOGIC;
enhour:OUT STD_LOGIC;
daout:out std_logic_vector(6 downto 0));
END entity minute;
ARCHITECTURE fun OF minute IS
SIGNAL count:STD_LOGIC_VECTOR(6 downto 0);
SIGNAL enhour_1,enhour_2:STD_LOGIC;
BEGIN
daout<=count;
enhour_2<=(sethour and clk1);
enhour<=(enhour_1 or enhour_2);
process(clk,reset,sethour)
begin
if(reset='0')then
count<="0000000"; ----若reset=0,则异步清零
elsif(clk'event and clk='1')then ----否则,若clk上升沿到
if(count(3 downto 0)="1001")then ----若个位计时恰好到“1001”即9
if(count<16#60#)then ----又若count小于16#60#,即60
if(count="1011001")then ----又若已到59D
enhour_1<='1'; ----则置进位为1
count<="0000000"; ----count复0
ELSE
count<=count+7; ----若count未到59D,则加7,即作“加6校正”
end if; ----使前面的16#60#的个位转变为8421BCD的容量
else
count<="0000000"; ----count复0(有此句,则对无效状态电路可自启动)
end if;
elsif(count<16#60#)then
count<=count+1; ----若count<16#60#则count加1
enhour_1<='0'after 100 ns; ----没有发生进位
else
count<="0000000"; ----否则,若count不小于16#60#count复0
end if;
end if;
end process;
END fun;
编译过程:
仿真图如下:
4.3.时计数器模块
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY hour IS
PORT(
clk,reset:IN STD_LOGIC;
daout:out std_logic_vector(5 downto 0));
END entity hour;
ARCHITECTURE fun OF hour IS SIGNAL count:STD_LOGIC_VECTOR(5 downto 0);
BEGIN
daout<=count;
process(clk,reset)
begin
if(reset='0')then count<="000000"; ----若reset=0,则异步清零
elsif(clk'event and clk='1')then ----否则,若clk上升沿到
if (count(3 downto 0)="1001")then ----若个位计时恰好到‘’1001‘’即9
if(count<=16#23#)then ----23进制
count<=count+7; ----若到23D则
else
count<="000000"; ----复0
end if;
elsif(count<16#23#)then ----若未到23D,则count进1
count<=count+1;
else ----否则清零
count<="000000";
end if;
end if;
end process;
END fun;
编译过程:
仿真图如下:
4.4.整点报时器模块
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY alert IS
PORT(
clk:IN STD_LOGIC;
dain:IN STD_LOGIC_VECTOR (6 DOWNTO 0);
speak:OUT STD_LOGIC;
lamp:OUT STD_LOGIC_VECTOR (2 DOWNTO 0));
END alert;
ARCHITECTURE fun OF alert IS
signal coun:std_logic_vector (1 downto 0);
signal count1:std_logic_vector (1 downto 0);
BEGIN
speaker:process(clk)
begin
speak<=count1(1);
if(clk'event and clk='1')then
if(dain="0000000")then
if(count1>="10")then
count1<="00"; ----count1为三进制加法计数器
else
count1<=count1+1;
end if;
end if;
end if;
end process speaker;
lamper:process(clk)
begin
if(rising_edge(clk))then
if(coun<="10")then
if(coun="00")then
lamp<="001"; ----循环点亮三只灯
elsif(coun="01")then
lamp<="010";
elsif(coun="10")then
lamp<="100";
end if;
coun<=coun+1;
else
coun<="00";
end if;
end if;
end process lamper;
END fun;
编译过程:
仿真图如下:
4.5.调时调分模块
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY seltime IS
PORT(
clk1,reset:IN STD_LOGIC;
sec,min:IN STD_LOGIC_VECTOR(6 downto 0);
hour:in std_logic_vector(5 downto 0);
daout:OUT STD_LOGIC_vector(3 downto 0);
dp:OUT std_LOGIC;
sel:out std_logic_vector(2 downto 0));
END seltime;
ARCHITECTURE fun OF seltime IS
SIGNAL count:STD_LOGIC_vector(2 downto 0);
BEGIN sel<=count;
process(clk1,reset)
begin
if(reset='0')then
count<="000";
elsif(clk1'event and clk1='1')then
if(count>="101")then
count<="000";
else
count<=count+1;
end if;
end if;
case count is
when"000"=>daout<=sec(3 downto 0);dp<='0';
when"001"=>daout(3)<='0';daout(2 downto 0)<=sec(6 downto 4);dp<='0';
when"010"=>daout<=min(3 downto 0);dp<='1';
when"011"=>daout(3)<='0';daout(2 downto 0)<=min(6 downto 4);dp<='0';
when"100"=>daout<=hour(3 downto 0);dp<='1';
when others=>daout(3 downto 2)<="00";
daout(1 downto 0)<=hour(5 downto 4);dp<='0';
end case;
end process;
end fun;
编译过程:
仿真图如下:
4.6.LED显示译码器模块
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY deled IS
PORT(num:IN std_logic_vector(3 downto 0);
led:OUT std_logic_vector(6 downto 0));
end deled;
ARCHITECTURE fun OF deled IS
BEGIN
led<="1111110"when num="0000"else
"0110000"when num="0001"else
"1101101"when num="0010"else
"1111001"when num="0011"else
"0110011"when num="0100"else
"1011011"when num="0101"else
"1011111"when num="0110"else
"1110000"when num="0111"else
"1111111"when num="1000"else
"1111011"when num="1001"else
"1110111"when num="1010"else
"0011111"when num="1011"else
"1001110"when num="1100"else
"0111101"when num="1101"else
"1001111"when num="1110"else
"1000111"when num="1111";
END fun;
编译过程:
仿真图如下:
5.仿真结果
下图是最后仿真的结果,但是总是无法选中芯片,都是000,得不到正确的结果。可能的原因是FPGA的时钟输出为20MHZ,经过分频器得到1KHZ和1HZ的频率需要多次的计数,由于计数值太大无法得到正确的仿真结果。
数字钟仿真波形
6.结语
本次试验的数字时钟能只够显示时间,其它功能如闹铃、调时、分、秒都能在此基础上进一步的实现,由于时间有限只能调试到这里。 经过努力,简易电子时钟的设计基本上算是完成了,在整个设计中,我最大的体会就是:难!我们在本次的课程设计中,发现了很多问题,同时做起来也很难不顺手,看着简单的电路,要动手把它设计出来实非易事,主要原因是我们没有经常动手设计电路,这就要求我们在以后的学习中,应该注意到这一点,更重要的是我们要学会把从书本上学到的知识和实际电路联系起来,这不论对我们以后的学习还是就业,都会起到很大的促进和帮助,我相信,通过这次的课程设计,在下一阶段的学习中我们会更加努力,力争把这门课学好学精。 同时通过本次课程设计,巩固了我们以前学过的专业知识,通过这次的程序设计,使我们对数字系统结构也有了更进一步的了解与认识,同时对数据库软件EDA技术,VHDL语言等系列知识都有了一定的了解与认识。使用EDA技术开发页面的能力也有了提高,也使我们把理论与实践从正真意义上结合了起来,考验了我们的动手能力,查阅相关资料的能力,还有组织材料的能力。通过此次实践,我们从中可以找出自己知识的不足与欠缺,以便我们在日后的学习中得以改进与提高。 经过本次设计使我们对所学习到的知识得以进一步实践,这将对我们走出校园走向社会走向工作岗位奠定坚实的基础。
最后感谢老师对我们的指导,以及同学们对我的帮助,使得实验能够顺利完成!
参考文献
[1]潘松,黄继业.VHDL设计初步 [J].EDA技术实用
教材
民兵爆破地雷教材pdf初中剪纸校本课程教材衍纸校本课程教材排球校本教材中国舞蹈家协会第四版四级教材
,2009,5-29:70-82.
[2]华成英,童诗白.集成运算放大电路[J].模拟电子基础,2006,5-4:185-187.
[3]阎石.时序逻辑电路 [M].北京:高等教育出版社,2008.
[4]李建东,郭梯云,邬国扬.移动通信.第四版.[M].西安:西安电子科技大学出版社,2006.
[5]沈明山编著,EDA技术及可编程器件应用实训 北京:科学出版社
[6]崔建明主编,电工电子EDA仿真技术 北京:高等教育出版社,2004