《数字跑表设计优质资料.docx》由会员分享,可在线阅读,更多相关《数字跑表设计优质资料.docx(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数字跑表设计优质资料(可以直接使用,可编辑 优质资料,欢迎下载)西南科技大学设计报告课程名称: 基于FPGA的现代数字系统设计 设计名称: 基于原理图的数字跑表设计 姓 名: 学 号: 班 级: 指导教师: 西南科技大学信息工程学院一、 实验目的1、 设计一个数字跑表,具有复位、暂停、秒表等功能二、 实验原理1.完成一个具有数显输出的数字跑表计数器设计,原理图如下图所示。、数字跑表计数器原理图任务分析:输入端口: 1)复位信号CLR,当CLR=1,输出全部置0,当CLR=0,系统正常工作。2)暂停信号PAUSE,当PAUSE=1,暂停计数,当PAUSE=0,正常计数。 3)系统时钟CLK,CL
2、K=50MHz输出端口:数码管驱动-DATA1,位宽14位,其中,DATA17:0是数 码管显示值,DATA114:8是数码管控制端口屏蔽未用端口-ctr,位宽是2,将未用的两个数码管显示关闭(1) 跑表的计时范围为0.01s59min59.99s,计时精度为10ms;(2)具有异步复位清零、启动、计时和暂停功能;(3)输入时钟频率为100Hz;(4)要求数字跑表的输出能够直接驱动共阴极7段数码管显示.按照自顶向下设计,应该分为以下模块:分频-将下载板上50MHz时钟分频为周期是0.01秒的时钟,提供给百分计数计数1-百分计数,输入周期是0.01秒的时钟,计数,满100进位,注意个位,十位的不
3、同生成计数2-60进制计数器,输入百分位,或者秒位的进位,计数,满60向高位进位,注意个位,十位的不同生成数码管显示控制-驱动数码管数据,显示控制端口。三、 实验步骤1、 数码管显示驱动模块的设计(1)建立工程:file-New Project,并注意器件、EDA工具的正确选择(2)建立新Verilog HDL模块编辑窗口,选择资源类型为Verilog Module,并输入合法文件名,在文本编辑窗口输入代码。(3)执行综合得到综合后的电路,并进行功能时序仿真。2.计数器模块的设计设计步骤同数码管的设计,并完成模块的设计输入、综合、功能仿真。3.数码管和计数器组合为一个系统 用Verilog H
4、DL将数码管和计数器组合为一个模块,完成综合、功能仿真,分析波形,修正设计。4.把电路进行综合的编译之后,锁定引脚,下载到板子上进行实际仿真验证四、 实验结果及分析1.在Design窗口中,选择Design UtilitiesCreate Schematic Symbol创建跑表模块; 2. 时序图激励文件代码timescale 1ns / 1psmodule TSET;reg CLK;reg CLR;reg PAUSE;wire 13:0 DATA1;paobiao uut (.CLK(CLK), .CLR(CLR), .PAUSE(PAUSE), .DATA1(DATA1);initial
5、 beginCLK = 0;CLR = 0;PAUSE = 0;#10 CLR=1;#10 CLR=0;forever begin #10 CLK=!CLK;endendEndmodule解释:过了10时间后clk=1,再过10时间后clk=0;每过10个时间后,clk的值进行一次翻转,从而生成的时钟周期是20个时间单位3. 锁定引脚# PlanAhead Generated physical constraints NET CLK LOC = V10;NET CLR LOC = D14;NET PAUSE LOC = C14;NET DATA10 LOC = R7;NET DATA11 LO
6、C = V7;NET DATA12 LOC = U7;NET DATA13 LOC = V6;NET DATA14 LOC = T6;NET DATA15 LOC = P6;NET DATA16 LOC = N5;NET DATA17 LOC = P7;NET DATA113 LOC = N8;NET DATA112 LOC = M8;NET DATA111 LOC = T8;NET DATA110 LOC = R8;NET DATA19 LOC = V9;NET DATA18 LOC = T9;用开关一来实现对数字的清除操作用开关二来实现对数字的暂停操作五、 体会我初步掌握了VerilogH
7、DL这种目前应用最广泛的硬件描述语言的编写方法以及联机下载到硬件验证的整个流程,圆满完成了设计任务。程序设计是这次实验的重点,通过老师上课讲的内容自己实际做了进位程序以及分频程序,基本掌握了它的使用。在写完程序后,发现不能调用各个程序模块,后来在同学的点拨下改成使用程序模块来生成具体的模块来使整个系统正常工作。程序设计遇到了数码管无法显示的瓶颈,在老师的指导下最终解决了这一问题。在此次课程设计过程中,我提升了自己的自学能力和动手能力,这也是一笔很大的收获。代码:timescale 1ns / 1psmodule paobiao(CLK,CLR,PAUSE,DATA1);input CLK,CL
8、R;input PAUSE;output13:0 DATA1;reg3:0 MSH,MSL,SH,SL,MH,ML,dig;reg cn1,cn2;reg 10:0 div_count1;reg 18:0 div_count;reg timer_clk;always (posedge CLK or posedge CLR)if(CLR) div_count = 19h0;else if(div_count = 19h7a11f) div_count = 19h0;else div_count = div_count+1b1;always (posedge CLK or posedge CLR)
9、 if(CLR) timer_clk = 1b0;else if(div_count= 0) timer_clk = 1b1; else timer_clk = 1b0;always (posedge timer_clk or posedge CLR)beginif(CLR) beginMSH,MSL=8h00;cn1=0;endelse if(!PAUSE)beginif(MSL=9) beginMSL=0;if(MSH=9) begin MSH=0; cn1=1; endelse MSH=MSH+1;endelsebeginMSL=MSL+1; cn1=0;endendendalways
10、(posedge cn1 or posedge CLR)beginif(CLR) beginSH,SL=8h00;cn2=0;endelseif(SL=9)beginSL=0;if(SH=5)begin SH=0; cn2=1; endelse SH=SH+1;endelse begin SL=SL+1; cn2=0; endendalways (posedge cn2 or posedge CLR)beginif(CLR)begin MH,ML=8h00; endelse if(ML=9)beginML=0;if(MH=5) MH=0;else MH=MH+1;endelse ML=ML+1
11、;endfunction7:0 Xrom;input 3:0 sum; case(sum) 4b0000 : Xrom = 7b1111110 ; 4b0001 : Xrom = 7b0110000 ; 4b0010 : Xrom = 7b1101101 ; 4b0011 : Xrom = 7b1111001 ; 4b0100 : Xrom = 7b0110011 ; 4b0101 : Xrom = 7b1011011 ; 4b0110 : Xrom = 7b1011111 ; 4b0111 : Xrom = 7b1110000 ; 4b1000 : Xrom = 7b1111111 ; 4b
12、1001 : Xrom = 7b1111011 ; 4b1010 : Xrom = 7b1110111 ; 4b1011 : Xrom = 7b0011111 ; 4b1100 : Xrom = 7b1001110 ; 4b1101 : Xrom = 7b0111101 ; 4b1110 : Xrom = 7b1001111 ; 4b1111 : Xrom = 7b1000111 ; default : Xrom = 7b1111110 ; endcaseendfunction always (posedge CLK or posedge CLR)if(CLR)begindiv_count1
13、= 11h0;dig = 3b000;endelse begindiv_count1 = div_count1 + 1;if(div_count1 = 0) if(dig=3b101)dig = 3b000;elsedig = dig + 1b1;else dig = dig;endreg13:0 DATA1;always (posedge CLK or posedge CLR)if(CLR) DATA1 = 14b0; else case(dig)3b000:DATA1=6b111110,Xrom(MSL); 3b001:DATA1=6b111101,Xrom(MSH); 3b010:DAT
14、A1=6b111011,Xrom(SL); 3b011:DATA1=6b110111,Xrom(SH); 3b100:DATA1=6b101111,Xrom(ML); 3b101:DATA1=6b011111,Xrom(MH); default:DATA1=14h3fff; endcaseendmodule北 华 航 天 工 业 学 院EDA技术综合设计课程设计报告报告题目: 数字秒表设计作者所在系部: 电子工程系 作者所在专业: 自动化专业 作者所在班级:作 者 姓 名 :指导教师姓名:完 成 时 间 :2011年12月2日内 容 摘 要应用VHDL语言设计数字系统,很多设计工作可以在计算机
15、上完成,从而缩短了数字系统的开发时间。我们尝试利用VHDL为开发工具设计数字秒表。秒表的逻辑结构较简单,它主要由十进制计数器、六进制计数器、数据选择器、和显示译码器等组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止及启动。 秒表有共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便与同显示译码器连接。关键词: VHDL,数字钟,MAX+plusII,时序仿真图。目 录一、 实验目的1二、硬件要求1三、方案论证1四、模块说
16、明11. 六进制计数器12. 十进制计数器23. 蜂鸣器34. 译码器45. 控制器56. 顶层文件8五、整体连接图9六、实验步骤10七、实验结果10八、实验总结10九、参考文献10课程设计任务书课题名称数字秒表完成时间12.02指导教师职称学生姓名班 级总体设计要求和技术要点设计要求:秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便于和显示译码器的连接。当计时达60分钟后,蜂鸣器鸣响10声。除此之外,整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。设计要点:秒表的逻辑结构较简单
17、,它主要由显示译码器、分频器、十进制计数器、六进制计数器和报警器组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲。工作内容及时间进度安排工作内容:在软件上编辑、编译程序,并仿真到达实验要求。进度安排;课下编写程序,并要求程序能通过编译仿真;第十四周的周三在实验板上下载调试程序;周四课设答辩课程设计成果1与设计内容对应的软件程序2课程设计报告书3成果使用说明书一、 实验目的学习使用VHDL语言,以及EDA芯片的下载仿真二、硬件要求(1)主芯片EPF10K10LC84-4。(2)蜂鸣器。(3)8位八段扫描共阴极数码显示管。(4)二个按键开关(清零,开始)。三、方案论证数字秒表计时控
18、制电路控制状态机计时电路显示电路分频电路计数器六进制计数器扫描电路七段译码器十进制计数器 系统组成框图四、模块说明时钟的设计共化分为6个模块:六进制计数器(count6),十进制计数器(count10),报警电路(bs),扫描电路(seltime),译码电路(ym)。下面具体分析各个模块的原理、内容和功能。(1)六进制计数器(count6)能够实现6进制循环计数,带有清零端stop、开始端start、时钟信号端clk、其文本语言(文件名:count6.vhd)为底层文本,图1为六进制计数器的仿真波形图。library ieee;use ieee.std_logic_1164.all;use i
19、eee.std_logic_unsigned.all;entity count6 is port (clk,clr,start:in std_logic; daout:out std_logic_vector(3 downto 0); cout:buffer std_logic );end count6;architecture behave of count6 is signal temp:std_logic_vector(3 downto 0);beginprocess(clk,clr) begin if clr=1 then temp=0000; cout=0; elsif clkeve
20、nt and clk=1 thenif start=1then if temp=0101 then temp=0000; cout=1;else temp=temp+1;cout=0;end if; elsif start=0 then temp=temp;cout=cout; end if; end if; end process;daout=temp; end behave;图1. 六进制计数器的仿真波形(2)十进制计数器(COUNT10)能够实现10进制循环计数,带有清零端stop、开始端start、时钟信号端clk、其文本语言(文件名:COUNT10.vhd)为底层文本,图2为十进制计
21、数器的仿真波形图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count10 is port (clk,clr,start:in std_logic; daout:out std_logic_vector(3 downto 0); cout:buffer std_logic );end count10;architecture behave of count10 is signal temp:std_logic_vector(3 downto 0);beginprocess(clk
22、,clr) begin if clr=1 then temp=0000; cout=0; elsif clkevent and clk=1 thenif start=1then if temp=1001 then temp=0000; cout=1; else temp=temp+1; cout=0;end if; elsif start=0 then temp=temp;cout=cout; end if; end if; end process;daout=temp; end behave;图2. 十进制分计数器的仿真波形(3)蜂鸣器library ieee;use ieee.std_lo
23、gic_1164.all;use ieee.std_logic_unsigned.all;entity alarm isport(clk,I:in std_logic; q:out std_logic );end alarm;architecture ar of alarm issignal n:integer range 0 to 20;signal q0:std_logic;beginprocess(clk)begin if clkevent and clk=1 thenif i=0 then q0=0;n=0;else if n=19 then q0=not(q0);n=n+1;else
24、 q0=0;n=0;end if;end if;end if;end process;qledledledledledledledledledledled=0000000; end case; end process; end a;(5)控制器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity seltime is port(clr,clk: in bit; dain0,dain1,dain2,dain3,dain4,dain5: in std_logic_vector(3 downto
25、 0); sel: out std_logic_vector(2 downto 0); daout: out std_logic_vector(3 downto 0);end seltime;architecture b of seltime is signal temp:integer range 0 to 5;begin process(clk) begin if clr=1 then daout=0000;sel=000;temp=0; elseifclkevent and clk=1 then if temp=5 then temp=0;else tempsel=000;daoutse
26、l=001;daoutsel=010;daoutsel=011;daoutsel=100;daoutsel=101;daoutledout(0);b=ledout(1);c=ledout(2);d=ledout(3);e=ledout(4);f=ledout(5);g=ledout(6);u1: count10 port map(clk,stop,start,daout1,count_cout(0);u2: count10 port map(count_cout(0),stop,start,daout2,count_cout(1);u3: count10 port map(count_cout
27、(1),stop,start,daout3,count_cout(2);u4: count6 port map(count_cout(2),stop,start,daout4,count_cout(3);u5: count10 port map(count_cout(3),stop,start,daout5,count_cout(4);u6: count6 port map(count_cout(4),stop,start,daout6,count_cout(5);u7:cfq port map(clk2,count_cout(5),count_cout(6);u7:seltimeport m
28、ap(stop,clk,daout1,daout2,daout3,daout4,daout5,daout6,sel,daout7);u8: ym port map(daout7,ledout);u9: alarm port map(clk,count_cout(6),speak);end c;五、数字钟的整体连接图9图6. 数字钟各个模块连接示意图六、实验步骤(1)安装MAX+plus软件,为本项设计建立文件夹。(2)输入设计项目的各个模块,存盘检查,编译并仿真至无误。(3)调用底层文件的各个模块,连接整体原理图,进行存盘检查,编译仿真至无误。(4)将PC机与试验箱进行连接选择器件并锁定引脚,
29、然后进行编译下载。(5)按照锁定好的引脚进行连线,进行硬件测试,验证仿真和测试结果。七、实验结果 通过硬件测试,得到如下测试结果:(1)数码管能够正确显示时钟数字。(2)给复位端(reset)低电平时,能够进行复位。(3)给手动调时(sethour)调分(setmin)信号端高电平时,能够进行调时调分。(4)整点时蜂鸣器能够报时,3只LED灯循环点亮。八、总结本次EDA课程设计历时一个星期,一个星期的日子里,可以说是苦多于甜,但是让我学到了很多东西,同时巩固以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。但是在
30、编调试顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了。在硬件实验时,也遇到了一点困难,想要的结果不能在数码管上得到正确的显示:在设定输入的时钟信号后,数字秒表开始计数,但是始终是乱码。后来,经过多次调试之后,才发现是因为输入的时钟信号出了问题。经过屡次调试,终于找到了比较合适的输入脉冲,时钟周期设置在100hz秒左右比较合适。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自
31、己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总的来说,这次设计的数字秒表还是比较成功的,虽然在实际的过程中曾经遇到了大量的问题,但是经过自己的努力,都给妥善解决了,这样的积累对于现在大学生来说是十分宝贵的。希望以后能有更多的动手实践机会,在硬件中发现自己的不足,弥补自己的不足,最终成为一个合格的大学生。最后,特别感谢老师对我的帮助。九、参考文献1李国洪、胡辉、沈明山.EDA技术与实验.机械工业出版社,20212闫石数字电子技术基础(第五版)高等教育出版社,200610指导教师评语及设计成绩 评 语 课程设计成绩: 指导教师:日期:年月日电子系统设计与实践课程论文(2021-2021学年第二学期)班级:电子134班学号: