数字跑表课程设计.doc
《数字跑表课程设计.doc》由会员分享,可在线阅读,更多相关《数字跑表课程设计.doc(20页珍藏版)》请在冰点文库上搜索。
目录
一:
设计目的 2
二:
设计方案 2
1.方案论证 2
2.模块电路设计 2
3.计时电路 3
4.计数器模块 3
5.数字跑表的流程图 3
6.控制信号的作用 4
三:
设计总体框图 5
四:
硬件电路设计与程序设计 6
1.设计思路 6
2.控制模块 6
3.十进制计数模块 7
4.六进制计数模块 7
5.数码管扫描模块 7
6.七段译码显示模块 8
五:
程序设计如下 9
六:
编译仿真及硬件测试 15
1.编译仿真 15
2.顶层设计图 15
3.仿真后得到如下仿真波形图 16
七.硬件实验调试 17
1.开始计时 17
2.暂停 17
3.清零 18
八.实验心得及体会 19
九.参考文献 20
一:
设计目的
(1)学会利用QuartusⅡ和所学的数字电路知识,搭建复杂一点的数字电路或系统。
(2)学会使用EDA的程序语言FPGA/CPLD设计数字跑表,设计主要包括功能分析、方案设计和电路测试几个步骤。
二:
设计方案
1.方案论证
数字跑表设三个输入端,分别为时钟输入(CLK),复位(CLR),启动、暂停按键(PUSE)。
复位信号高电平有效,可对跑表异步清零;当启动、暂停键为低电平时跑表开始计时,为高电平时暂停,变低后在原来的数值基础上继续计数。
数字跑表的结构示意图如下:
图1跑表示意图
2.模块电路设计
数字跑表实际上为计数器,数据选择器,七段数码管译码器等模块构成,核心模块应为计数器,其次为暂停控制和清零控制。
3.计时电路
计时电路又分为百分秒计时电路、秒计时电路和分计时电路三个模块。
百分秒计时电路是一个100进制的计数器,以100Hz输入信号作为计数时钟,其进位信号作为秒计数电路的计数时钟,当秒计数器计满时,产生的进位信号又作为分计数电路的计数时钟。
电路的暂停和复位信号用于控制计时的开始、停止和清零。
4.计数器模块
数字跑表的计时器功能是,当PAUSE为低电平时开始计数,百分秒低位自加一,加到九时归零,百分秒高位自加一,加到九时归零,且向秒位发出一个高电平,秒低位自加一,加到九时归零,秒高位自加一,加到五时归零,且向分位发出一个高电平,分低位自加一,加到六时系统清零。
5.数字跑表的流程图
数字跑表主要由计时器,七段数码管译码器组成。
流程框图如图所示。
数码管译码器
百分秒计数器
CLK msl
pause
秒计数器
clr
分计数器
图2程序流程图
6.控制信号的作用
表1控制信号的作用
复位clr
异步复位信号,高电平有效
pause
同步暂停信号,低电平有效计数。
sel
共阴数码管的位选信号
seg
共阴数码管的段选信号
三:
设计总体框图
图3设计总体框图
四:
硬件电路设计与程序设计
1.设计思路
数字秒表电路计时范围的要求为0.01~1小时,即59分59.99秒,所以这就需要获得一个比较精确的计时基准信号,此基准信号可以由CPLD/FPGA试验箱提供的频率具体设定分频器。
分频器在实验中显得很重要,因为如果分频的要求达不到,便会出现诸如缺少数字位、计时不精确等实验现象。
六进制计数器针对10秒和10分位,十进制针对0.01秒、0.1秒、1秒和1分位,这是根据不同的计数进位而设定的。
电路还需要一个扫描电路,对每一位的计时结果进行不断的扫描,扫描的速度要大于输入信号的频率,避免出现扫描滞后、显示的结果不是当前结果的现象。
扫描的同时还需要一个位码电路。
位码电路的作用是将数字秒表的各位选中,以便七段数码管的显示。
2.控制模块
为了方便控制所有计数模块清零和使能功能需要设计一个控制模块,所以该模块的功能就是控制什么时候发出置零信号和使能信号来控制计数器工作。
其模块图如下图所示:
Clk为开始/暂停功能按钮(下降沿有效),初次按下它clc(控制计数器清零)为低电平,en(使计数器计数)为高电平;再次按下它时,clc保持为低电平,en跳变为低电平,如此重复循环。
Reset为清零按钮(下降沿有效),无论何时按下它时,clc跳变为高电平,en变为低电平,以达到使计数器清零的目的。
3.十进制计数模块
此模块的功能就是完成十进制的计数功能,同时输出进位信号。
其模块图如下图所示:
Clk为时钟信号输入端,rst为计数器清零端(高电平有效),en为计数器使能端(高电平有效);daout为数据输出端,cout为进位信号输出端。
4.六进制计数模块
此模块的功能就是完成六进制的计数功能,同时输出进位信号。
其端口功能同十进制计数模块,在次不再重复诉说。
5.数码管扫描模块
该模块的功能是选择各个计数端口来的数据,当相应的数据到来时,数据选择器选择数据后输出给七段译码器,同时输出位选信号,再接入到实验箱上的8字数码显示电路上就可显示了。
其模块图如下图所示:
Clk为时钟信号输入端,msec1…...minute2是各个计数端口来的数据的输入端,deout为数据选择器选择数据后输出端,sel为位选信号输出端。
6.七段译码显示模块
该模块的功能就是把输入的四位二进制数据转换为七段数码管的显示编码,再输入到七段数码管中显示出数据。
其模块图如下图所示:
五:
程序设计如下
分频计的源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFPIS
PORT(CLK:
INSTD_LOGIC;
NEWCLK:
OUTSTD_LOGIC);
ENDFP;
ARCHITECTUREARTOFFPIS
SIGNALCNTER:
INTEGERRANGE0TO10#29999#;
BEGIN
PROCESS(CLK)IS
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNTER=10#29999#THENCNTER<=0;
ELSECNTER<=CNTER+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNTER)IS
BEGIN
IFCNTER=10#29999#THENNEWCLK<='1';
ELSENEWCLK<='0';
ENDIF;
ENDPROCESS;
ENDART;
六进制计数器的源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYTN6IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTINTEGERRANGE0TO15;
CARRY_OUT:
OUTSTD_LOGIC);
ENDTN6;
ARCHITECTUREARTOFTN6IS
SIGNALCQI:
INTEGERRANGE0TO15;
BEGIN
PROCESS(CLK,CLR,ENA)IS
BEGIN
IFCLR='1'THENCQI<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI<5THENCQI<=CQI+1;
ELSECQI<=0;ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CQI)IS
BEGIN
IFCQI=5THENCARRY_OUT<='1';
ELSECARRY_OUT<='0';ENDIF;
ENDPROCESS;
CQ<=CQI;
ENDART;
十进制计数器源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYTN10IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTINTEGERRANGE0TO15;
CARRY_OUT:
OUTSTD_LOGIC);
ENDTN10;
ARCHITECTUREARTOFTN10IS
SIGNALCQI:
INTEGERRANGE0TO15;
BEGIN
PROCESS(CLK,CLR,ENA)IS
BEGIN
IFCLR='1'THENCQI<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI<9THENCQI<=CQI+1;
ELSECQI<=0;ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CQI)IS
BEGIN
IFCQI=9THENCARRY_OUT<='1';
ELSECARRY_OUT<='0';ENDIF;
ENDPROCESS;
CQ<=CQI;
ENDART;
扫描电路的源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSCANIS
PORT(scanclk:
instd_logic;
count1,Count2,count3,count4,count5,count6:
instd_logic_VECTOR(3DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYSCAN;
ARCHITECTUREDATAFLOWOFSCANIS
SIGNALSS:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(scanclk)
begin
IF(scanclk'EVENTANDscanclk='1')THEN
IF(SS="101")THEN
SS<="000";
ELSE
SS<=SS+1;
ENDIF;
ENDIF;
ENDPROCESS;
S<=SS;
DOUT<=COUNT1WHENSS="000"ELSE
COUNT2WHENSS="001"ELSE
COUNT3WHENSS="010"ELSE
COUNT4WHENSS="011"ELSE
COUNT5WHENSS="100"ELSE
COUNT6;
ENDDATAFLOW;
位码选择电路的源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYIMAIS
PORT(INP:
INSTD_LOGIC_VECTOR(2DOWNTO0);
OUTP:
OUTBIT_VECTOR(7DOWNTO0));
ENDYIMA;
ARCHITECTUREARTOFYIMAIS
BEGIN
OUTP(0)<='1'WHENINP="000"ELSE'0';
OUTP
(1)<='1'WHENINP="001"ELSE'0';
OUTP
(2)<='1'WHENINP="010"ELSE'0';
OUTP(3)<='1'WHENINP="011"ELSE'0';
OUTP(4)<='1'WHENINP="100"ELSE'0';
OUTP(5)<='1'WHENINP="101"ELSE'0';
OUTP(6)<='1'WHENINP="110"ELSE'0';
OUTP(7)<='1'WHENINP="111"ELSE'0';
ENDART;
七位数码管显示电路的源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDELEDIS
PORT(NUM:
INSTD_LOGIC_VECTOR(3DOWNTO0);
A,B,C,D,E,F,G:
OUTSTD_LOGIC);
ENDDELED;
ARCHITECTUREARTOFDELEDIS
SIGNALLED:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
PROCESS(NUM)
BEGIN
CASENUMIS
WHEN"0000"=>LED<="1111110";
WHEN"0001"=>LED<="0110000";
WHEN"0010"=>LED<="1101101";
WHEN"0011"=>LED<="1111001";
WHEN"0100"=>LED<="0110011";
WHEN"0101"=>LED<="1011011";
WHEN"0110"=>LED<="1011111";
WHEN"0111"=>LED<="1110000";
WHEN"1000"=>LED<="1111111";
WHEN"1001"=>LED<="1111011";
WHEN"1010"=>LED<="1110111";
WHEN"1011"=>LED<="0011111";
WHEN"1100"=>LED<="1001110";
WHEN"1101"=>LED<="0111101";
WHEN"1110"=>LED<="1001111";
WHENOTHERS=>LED<="1000111";
ENDCASE;
ENDPROCESS;
A<=LED(6);B<=LED(5);C<=LED(4);D<=LED(3);E<=LED
(2);F<=LED
(1);G<=LED(0);
ENDART;
六:
编译仿真及硬件测试
1.编译仿真
当完成了以上秒表系统各个模块的VHDL设计,就可以使用QuartusⅡ对本设计进行编译和仿真。
首先使用文本编辑器输入本设计的所有模块的源程序,先对各个模块进行编译和仿真,当所有模块全部编译通过和仿真功能正确后,就可以利用图形编辑工具完成顶层设计,其设计图如顶层设计图所示。
然后再对图形编辑器编辑出的顶层设计图进行全程编译,通过之后就可以进行系统的整体仿了。
其中各个模块的仿真已在模块设计中完成,在此从略,下面只说明系统的整体仿真。
2.顶层设计图
在仿真中,合理选取start和reset信号,就可以进行系统的整体仿真了。
3.仿真后得到如下仿真波形图
七.硬件实验调试
1.开始计时
2.暂停
图为运行至5.42秒暂停
3.清零
八.实验心得及体会
从实验中,我对整个流程有了初步了解;对实验进行了深入学习,让我掌握硬件描述语言VerilogHDL语言的语言规则,数据类型,语句结构和模块设计;接着是最关键的编程,需要根据任务书分析需要的模块,编程并仿真。
两周的课程设计已经结束,虽然时间很短,但是增强了我的实践动手能力,使我深刻地认识到仅仅学习课本上的知识是远远不够的,必须要多多动手,多多实践,才能真正理解并掌握所学的知识,达到学以致用的目的,为以后的工作积累了宝贵的经验,同时我也深深地感受到严谨的态度对于科学研究的重要性。
由于在设计的过程中,一点点的失误都可能造成整个系统的瘫痪,所以每一个细节都要认真思考,认真操作,不能有丝百分的大意。
这使我认识到要想做一个科研工作者是多么的不易!
自己身上的缺点还有很多,要靠以后艰苦的努力来克服!
这次的课程设计给了我一次非常重要也非常难得的实践机会,使我可以将平时课本上学习的理论知识应用于实际操作。
设计的过程是十分艰苦的,由于从未接触过类似的领域,所以刚开始的时候一片茫然,不知道该干些什么。
随着研究的逐渐深入,自己渐渐的摸出头绪,掌握了一些规律和方法,设计的成果也逐步成型,最终按照要求完成了设计。
在实际操作的过程中,碰到了许多的困难,但最终在老师的耐心指导和同学的热情帮助下,按时完成了任务。
在此对老师和同学们表示衷心的感谢!
最后感谢老师给与我这次宝贵的实践机会!
九.参考文献
1.康华光主编.电子技术基础(数字部分),高等教育出版社。
2.阎石主编.电子技术基础(数字部分),清华大学出版社。
3.陈大钦主编,电子技术基础实验,高等教育出版社。
4.彭介华主编,电子技术课程设计指导,高等教育出版社。
5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
7.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社
20