基于VHDL语言的电子表设计毕业设计论文.doc

上传人:laozhun 文档编号:3939454 上传时间:2023-03-28 格式:DOC 页数:16 大小:733KB
返回 下载 相关 举报
基于VHDL语言的电子表设计毕业设计论文.doc_第1页
第1页 / 共16页
基于VHDL语言的电子表设计毕业设计论文.doc_第2页
第2页 / 共16页
基于VHDL语言的电子表设计毕业设计论文.doc_第3页
第3页 / 共16页
基于VHDL语言的电子表设计毕业设计论文.doc_第4页
第4页 / 共16页
基于VHDL语言的电子表设计毕业设计论文.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《基于VHDL语言的电子表设计毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于VHDL语言的电子表设计毕业设计论文.doc(16页珍藏版)》请在三一办公上搜索。

1、装 订 线2012-2013学年第 一 学期 物电 学院期末考试卷 EDA大作业 设计制作电子表 (课程论文等试卷样式)学号: 姓名: 班级: 成绩:评语:(考试题目及要求)利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。可采用数码管或液晶显示,最好设计出个性化显示界面。注意事项:1.上述三题任选一题,采用标准的作业考核类封面,A4打印。2.第一题40分,液晶+3分,个性化界面+3分。3.第二题45分,幅度调整+3分,频率测量及显示+5分。4.第三题48分,频率分段设置+3分,频率微调+5分,频率范围酌情加分。5.雷同的程序和算法满分值只计

2、原题分值的三分之二,将依据设计报告的质量和实验结果的描述计分。设计上的创新会酌情加分,实现上的偏离会酌情扣分。6.本门课程成绩中,实验操作和实验报告占50%,本次作业考核占50%。目 录一、设计要求1二、设计思路1三、程序设计21.置数还是计数22.在哪一位置数23.计数单位24.秒35.分46.时47.数码管显示5四、仿真结果6五、实验结果81.连线82.设计结果8六、实验心得9电子表源程序10设计制作电子表一、设计要求利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。可采用数码管或液晶显示,最好设计出个性化显示界面。二、设计思路电子表其实

3、质为计数器,计数单位为1秒。由秒,分,时组成,秒和分是60进制,用十进制和六进制组成,时是24进制,直接设计一个24进制计数器即可。要让结果显示出来,则用七段式数码管输出显示计数值。此电子表需要有置数功能,加一个控制开关,当开关为低电平时计数,当开关为高电平时置数。设计思路如下图所示:三、程序设计1.置数还是计数电子表有计数和指数两种状态,工作时执行计数还是执行置数则由一控制使能端EN决定,当EN为低电平时,电子表计数,当EN为高电平时,电子表置数。2.在哪一位置数该电子表有秒低位,秒高位,分低位,分高位,时低位,时高位组成,共有六位,置数由位选决定给哪一位置数。设置一个三位的二进制开关p2,

4、p1,p0,通过编码电路实现选择置数位。 当p2p1p0为“000”时,不选择任何位,此时电子表只是停止计数,不置数。 当p2p1p0为“001”时,秒低位置数。 当p2p1p0为“010”时,秒高位置数。 当p2p1p0为“011”时,分低位置数。 当p2p1p0为“100”时,分高位置数。 当p2p1p0为“101”时,时低位置数。 当p2p1p0为“110”时,时高位置数。关键程序:if tevent and t=1 then if en=0 then 计数语句 elsif en=1 and p=001 then s0=num; end if; end if;3.计数单位首先脉冲频率要足

5、够大,提供一个较快的扫描频率,时数码管稳定地显示计数值。计数单位为1秒,对脉冲clk 进行分频,得到周期为1秒的计数单位t。程序中对clk进行512分频,所以需要一个相近的脉冲,试验箱上的CLK4的频率范围为625KHz19.5Hz,通过跳线帽选择可以调出624Hz的频率。所以脉冲频率选用624Hz。关键程序:if clkevent and clk=1 then count:=count+1; end if; t=count(9);4.秒秒是60进制的,可以用一个十进制计数器和一个六进制计数器实现。秒的低位为十进制,当第10个计数单位到达时,计数值清零,并产生一个进位信号,用以更高位的计数,而

6、其他时候进位信号为低电平,既没有进位输出。秒的高位为六进制,每一个来自低位的进位信号高电平到达时计一次数,当第六个进位信号到达时,计数值清零,同样的产生一个进位信号。关键程序:-秒低位-ss0:process(t) is begin if tevent and t=1 then if en=0 then if s0=9 then s0=0; c0=1; -进位 else s0=s0+1; c0=0; end if; elsif en=1 and p=001 then s0=num; end if; end if; end process;-秒高位-ss1:process(c0) is begi

7、n if c0event and c0=1 then if en=0 then if s1=5 then s1=0; c1=1; -进位 else s1=s1+1; c1=0; end if; elsif en=1 and p=010 then s1=num; end if; end if; end process;5.分分与秒类似,也是一个60进制的计数器,可用十进制和六进制组合实现。这里不再赘述。6.时时位不同于秒和分,因为时的低位不是任何进制的计数器,因此不能像上面那样用两个计数器组合,而只能将时的高低位作为一个整体,为一个二十四进制计数器,接受来自分位的进位信号,计数满24时清零。由于

8、数码管只能显示09的数字,所以数码管显示时仍然要分高低位分别显示。对于如何用两个数码管显示着24个数,用分段的方法解决。h表示时位的计数值 ,h1表示时的高位,h0表示时的低位 h在09范围内,则h1=0,h0=h; h在1019范围内,则h1=1,h0=h-10; h在2023范围内,则h1=2,h0=h-20;关键程序:hh:process(c3,h) is begin if c3event and c3=1 then if h=23 then h=0; else hh1=0;h0h1=1;h0h1=2;h0null; end case; end process;7.数码管显示秒分时个两位

9、,分与秒,时与分之间用短线隔开,所以需要用8个数码管,从右到左分别为秒低位,秒高位,短线,分低位,分高位,短线,时低位,时高位。时高位h1时低位h0分高位m1分低位m0秒高位s1秒低位s0关键程序:process(clk,w) isbegin if clkevent and clk=1 then if w=111 then w=000; else wnnnnnnnnnull; end case; end process; sel=w;四、仿真结果1.clk分频后用以计数,s0为十进制,仿真结果如下:2.s1为六进制3m0为十进制4m1为六进制5h为二十四进制 五、实验结果1.连线设定器件为EP

10、M7128LC84-6,按分配好的引脚在试验箱上连线。输入管脚有:脉冲clk,使能控制端en,置数选择p2p1p0,置数端x3x2x1x0。输出管脚有:数码管位选输出selsel0,数码管段选输出d6d0。连线照片如下:2.设计结果电子表实物照片如下:从左到右为时,分,秒。六、实验心得本次实验花费了较长时间,刚开始想电子表就是一个计数器,之前实验做过计数器,应该很快能做出来,但当开始写程序时发现有很多不同,也遇到了比较困难的问题,要让计数单位为1秒,脉冲还要比较快,脉冲的选择和分频就是一个重要问题。还有时的高低位如何在数码管上显示出来的问题,因为时是二十四进制的,自己想了很久也没有办法解决,后

11、来请教同学,经同学点拨,采用分段赋值的方法让时的地高位分别显示。觉得自己还是思维方式太狭窄,解决问题的方法太单一,以后要扩展思维,一条路行不通就换另一种方法,也许会更简单。总的来说,本次设计受益匪浅,一方面巩固了所学知识,另一方面对自己的思维方式也有一些反思。七、附录电子表源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity dzb is port (clk:in std_logic; en:in std_logic; -置

12、数开关 p:in std_logic_vector(2 downto 0);-置数选择 x:in std_logic_vector(3 downto 0);-置数值 sel:out std_logic_vector(2 downto 0); -扫描 d:out std_logic_vector(6 downto 0); end dzb;architecture behaver of dzb issignal t:std_logic; -计数单位,即1秒signal num:integer range 0 to 9;-置数值signal n:integer range 0 to 10; -数码管

13、显示值signal s0,s1,m0,m1,h0,h1:integer range 0 to 10;-秒,分,时signal h:integer range 0 to 23; signal c0,c1,c2,c3:std_logic; -进位信号signal w:std_logic_vector(2 downto 0); -位选begin-分频-fenpin:process(clk) is variable count:std_logic_vector(9 downto 0); begin if clkevent and clk=1 then count:=count+1; end if; t

14、=count(9); end process; -秒低位-ss0:process(t) is begin if tevent and t=1 then if en=0 then if s0=9 then s0=0; c0=1; -进位 else s0=s0+1; c0=0; end if; elsif en=1 and p=001 then s0=num; end if; end if; end process;-秒高位-ss1:process(c0) is begin if c0event and c0=1 then if en=0 then if s1=5 then s1=0; c1=1;

15、 -进位 else s1=s1+1; c1=0; end if; elsif en=1 and p=010 then s1=num; end if; end if; end process;-分低位-mm0:process(c1) is begin if c1event and c1=1 then if en=0 then if m0=9 then m0=0; c2=1; -进位 else m0=m0+1; c2=0; end if; elsif en=1 and p=011 then m0=num; end if; end if; end process;-分高位-mm1:process(c

16、2) is begin if c2event and c2=1 then if en=0 then if m1=5 then m1=0; c3=1; -进位 else m1=m1+1; c3=0; end if; elsif en=1 and p=100 then m1=num; end if; end if; end process;-时-hh:process(c3,h) is begin if c3event and c3=1 then if h=23 then h=0; else hh1=0;h0h1=1;h0h1=2;h0null; end case; end process;-置数-

17、zhizhu:process(x) is begin case x is when 0000=numnumnumnumnumnumnumnumnumnumnull; end case; end process;-数码管位选-weixuan:process(clk,w) isbegin if clkevent and clk=1 then if w=111 then w=000; else wnnnnnnnnnull; end case; end process; seldddddddddddnull; end case;end process;end architecture behaver;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号