欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    基于VHDL语言的电子表设计.doc

    • 资源ID:2393766       资源大小:733KB        全文页数:16页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于VHDL语言的电子表设计.doc

    装 订 线2012-2013学年第 一 学期 物电 学院期末考试卷 EDA大作业 设计制作电子表 (课程论文等试卷样式)学号: 姓名: 班级: 成绩:评语:(考试题目及要求)利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。可采用数码管或液晶显示,最好设计出个性化显示界面。注意事项:1.上述三题任选一题,采用标准的作业考核类封面,A4打印。2.第一题40分,液晶+3分,个性化界面+3分。3.第二题45分,幅度调整+3分,频率测量及显示+5分。4.第三题48分,频率分段设置+3分,频率微调+5分,频率范围酌情加分。5.雷同的程序和算法满分值只计原题分值的三分之二,将依据设计报告的质量和实验结果的描述计分。设计上的创新会酌情加分,实现上的偏离会酌情扣分。6.本门课程成绩中,实验操作和实验报告占50%,本次作业考核占50%。目 录一、设计要求1二、设计思路1三、程序设计21.置数还是计数22.在哪一位置数23.计数单位24.秒35.分46.时47.数码管显示5四、仿真结果6五、实验结果81.连线82.设计结果8六、实验心得9电子表源程序10设计制作电子表一、设计要求利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。可采用数码管或液晶显示,最好设计出个性化显示界面。二、设计思路电子表其实质为计数器,计数单位为1秒。由秒,分,时组成,秒和分是60进制,用十进制和六进制组成,时是24进制,直接设计一个24进制计数器即可。要让结果显示出来,则用七段式数码管输出显示计数值。此电子表需要有置数功能,加一个控制开关,当开关为低电平时计数,当开关为高电平时置数。设计思路如下图所示:三、程序设计1.置数还是计数电子表有计数和指数两种状态,工作时执行计数还是执行置数则由一控制使能端EN决定,当EN为低电平时,电子表计数,当EN为高电平时,电子表置数。2.在哪一位置数该电子表有秒低位,秒高位,分低位,分高位,时低位,时高位组成,共有六位,置数由位选决定给哪一位置数。设置一个三位的二进制开关p2,p1,p0,通过编码电路实现选择置数位。 当p2p1p0为“000”时,不选择任何位,此时电子表只是停止计数,不置数。 当p2p1p0为“001”时,秒低位置数。 当p2p1p0为“010”时,秒高位置数。 当p2p1p0为“011”时,分低位置数。 当p2p1p0为“100”时,分高位置数。 当p2p1p0为“101”时,时低位置数。 当p2p1p0为“110”时,时高位置数。关键程序:if t'event and t='1' then if en='0' then 计数语句 elsif en='1' and p="001" then s0<=num; end if; end if;3.计数单位首先脉冲频率要足够大,提供一个较快的扫描频率,时数码管稳定地显示计数值。计数单位为1秒,对脉冲clk 进行分频,得到周期为1秒的计数单位t。程序中对clk进行512分频,所以需要一个相近的脉冲,试验箱上的CLK4的频率范围为625KHz19.5Hz,通过跳线帽选择可以调出624Hz的频率。所以脉冲频率选用624Hz。关键程序:if clk'event and clk='1' then count:=count+1; end if; t<=count(9);4.秒秒是60进制的,可以用一个十进制计数器和一个六进制计数器实现。秒的低位为十进制,当第10个计数单位到达时,计数值清零,并产生一个进位信号,用以更高位的计数,而其他时候进位信号为低电平,既没有进位输出。秒的高位为六进制,每一个来自低位的进位信号高电平到达时计一次数,当第六个进位信号到达时,计数值清零,同样的产生一个进位信号。关键程序:-秒低位-ss0:process(t) is begin if t'event 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 c0'event 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时清零。由于数码管只能显示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 c3'event and c3='1' then if h=23 then h<=0; else h<=h+1; end if; end if; case h is when 0 to 9 =>h1<=0;h0<=h; when 10 to 19 =>h1<=1;h0<=h-10; when 20 to 23 =>h1<=2;h0<=h-20; when others =>null; end case; end process;7.数码管显示秒分时个两位,分与秒,时与分之间用短线隔开,所以需要用8个数码管,从右到左分别为秒低位,秒高位,短线,分低位,分高位,短线,时低位,时高位。时高位h1时低位h0分高位m1分低位m0秒高位s1秒低位s0关键程序:process(clk,w) isbegin if clk'event and clk='1' then if w="111" then w<="000" else w<=w+1; end if; end if; case w is when "000"=>n<=s0; when "001"=>n<=s1; when "010"=>n<=10; -第10种状态,显示分与秒之间的短线。 when "011"=>n<=m0; when "100"=>n<=m1; when "101"=>n<=10; -第10种状态,显示时与分之间的短线。 when "110"=>n<=h0; when "111"=>n<=h1; when others=>null; end case; end process; sel<=w;四、仿真结果1.clk分频后用以计数,s0为十进制,仿真结果如下:2.s1为六进制3m0为十进制4m1为六进制5h为二十四进制 五、实验结果1.连线设定器件为EPM7128LC84-6,按分配好的引脚在试验箱上连线。输入管脚有:脉冲clk,使能控制端en,置数选择p2p1p0,置数端x3x2x1x0。输出管脚有:数码管位选输出selsel0,数码管段选输出d6d0。连线照片如下:2.设计结果电子表实物照片如下:从左到右为时,分,秒。六、实验心得本次实验花费了较长时间,刚开始想电子表就是一个计数器,之前实验做过计数器,应该很快能做出来,但当开始写程序时发现有很多不同,也遇到了比较困难的问题,要让计数单位为1秒,脉冲还要比较快,脉冲的选择和分频就是一个重要问题。还有时的高低位如何在数码管上显示出来的问题,因为时是二十四进制的,自己想了很久也没有办法解决,后来请教同学,经同学点拨,采用分段赋值的方法让时的地高位分别显示。觉得自己还是思维方式太狭窄,解决问题的方法太单一,以后要扩展思维,一条路行不通就换另一种方法,也许会更简单。总的来说,本次设计受益匪浅,一方面巩固了所学知识,另一方面对自己的思维方式也有一些反思。七、附录电子表源程序: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; -置数开关 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; -数码管显示值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 clk'event and clk='1' then count:=count+1; end if; t<=count(9); end process; -秒低位-ss0:process(t) is begin if t'event 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 c0'event 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;-分低位-mm0:process(c1) is begin if c1'event 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(c2) is begin if c2'event 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 c3'event and c3='1' then if h=23 then h<=0; else h<=h+1; end if; end if; case h is when 0 to 9 =>h1<=0;h0<=h; when 10 to 19 =>h1<=1;h0<=h-10; when 20 to 23 =>h1<=2;h0<=h-20; when others =>null; end case; end process;-置数-zhizhu:process(x) is begin case x is when "0000"=>num<=0; when "0001"=>num<=1; when "0010"=>num<=2; when "0011"=>num<=3; when "0100"=>num<=4; when "0101"=>num<=5; when "0110"=>num<=6; when "0111"=>num<=7; when "1000"=>num<=8; when "1001"=>num<=9; when others=>null; end case; end process;-数码管位选-weixuan:process(clk,w) isbegin if clk'event and clk='1' then if w="111" then w<="000" else w<=w+1; end if; end if; case w is when "000"=>n<=s0; when "001"=>n<=s1; when "010"=>n<=10; when "011"=>n<=m0; when "100"=>n<=m1; when "101"=>n<=10; when "110"=>n<=h0; when "111"=>n<=h1; when others=>null; end case; end process; sel<=w;-数码管段选-duanxuan:process(n) isbegin case n is -gfedcba when 0=>d<="0111111" -0 when 1=>d<="0000110" -1 when 2=>d<="1011011" -2 when 3=>d<="1001111" -3 when 4=>d<="1100110" -4 when 5=>d<="1101101" -5 when 6=>d<="1111101" -6 when 7=>d<="0000111" -7 when 8=>d<="1111111" -8 when 9=>d<="1101111" -9 when 10=>d<="1000000" -_ when others=>null; end case;end process;end architecture behaver;

    注意事项

    本文(基于VHDL语言的电子表设计.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开