课程设计课程名称:EDA技术与FPGA应用设计课设题目:秒表实验地点:信息学院楼CPLD实验室专业班级:学号:学生姓名:指导教师:张文爱2016年5月24日一、设计要求1、设计一个计时范围为0.01s-60min的数字秒表。2、计时器有6位显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分。3、设置一个启动信号和一个归零信号,以便秒表能随意停止及启动。4、计时到60分钟后,蜂鸣器响10声(实验中用led灯闪烁代替)。二、设计原理由频率信号输出端输出频率为100HZ的时钟信号,输入到0.0秒模块的时钟端clk,0.01秒模块为10进制的计数器,产生的进位信号count输入到下一级秒模块的时钟端,以此类推,直到分模块计数到59进60时,产生的进位信号不输出,计数清零。将0.01秒、秒、分产生的计数通过置数/位选再通过显示模块实时显示。根据秒表的计时要求,秒表结构由以下几部分组成:1、4个十进制计数器,分别对应百分之一秒,十分之一秒,个秒和个分位。2、2个六进制计数器,分别对应十秒和十分位。3、分频器,产生100Hz的计时脉冲。4、显示译码器,完成BCD码到7段码的译码。5、显示控制模块,完成6个数码显示器的扫描显示控制。6、蜂鸣信号产生模块。用输入S控制产生“00”、“01”和“10”代表归零、启动信号、分别连接按键开关;CLK_50M代表计数时钟信号,同实验板上50MHz时钟源连接;蜂鸣器鸣响信号SPEAKER接蜂鸣器的输入;7段码输出LED[6..0]接显示模块的段信号输入口。三、设计仪器1、PC机一台。2、CPLD/FPGA适配器板:标准配置CycloneIVEEP4CE115F29C7接口板,下载接口是数字芯片的下载接口(DIGITALJTAG),主要用于CPLD/FPGA芯片的数据下载。3、实验箱四、设计过程(一)子模块设计1、十进制计数器本实验中使用四个十进制计数器分别对应百分之一秒,十分之一秒,个秒和个分位。计数器从0000开始计数计数到1001时进位,自动清零并且通过count进位输出到下一个计数器的脉冲,从而触发下一个计数器工作。源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitycount10isport(clr,start,clk:instd_logic;cout:outstd_logic;daout:outstd_logic_vector(3downto0));endcount10;architectureBehavioralofcount10issignaltemp:std_logic_vector(3downto0);beginprocess(clk,clr)beginifclr='1'thentemp=0000;cout='0';elsif(clk'eventandclk='1')thenifstart='1'theniftemp=1001thentemp=0000;cout='1';elsetemp=temp+1;cout='0';endif;endif;endif;daout=temp;endprocess;endBehavioral;生成模块2、六进制计数器实验中使用2个六进制计数器,分别对应十秒和十分位。当对应秒位和分位十进制计数器计数到1001时触发六进制计数器从0000开始工作,直到0101,自动清零并且触发下一个计数器或者蜂鸣器。源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitycounter6isport(clr,start,clk:instd_logic;daout:outstd_logic_vector(3downto0);cout:outstd_logic);endcounter6;architectureBehavioralofcounter6issignaltemp:std_logic_vector(3downto0);beginprocess(clk,clr)beginifclr='1'thentemp=0000;cout='0';elsif(clk'eventandclk='1')thenifstart='1'theniftemp=0101thentemp=0000;cout='1';elsetemp=temp+1;cout='0';endif;endif;endif;endprocess;daout=temp;endBehavioral;形成器件3、分频器模块本实验需要100Hz的时钟,则需要对50MHZ进行500000次分频,所以计数器计数250000次产生触发脉冲。源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityDIVisport(clr,clk:instd_logic;clk_100:bufferstd_logic);endDIV;architectureBehavioralofDIVissignalcounter:integerrange0to249999;beginprocess(clr,clk)beginif(clk='1'andclk'event)thenifclr='1'thencounter=0;elsifcounter=249999thencounter=0;clk_100=notclk_100;elsecounter=counter+1;endif;endif;endprocess;endBehavioral;形成器件4、控制模块通过对按键按下次数的计数实现启动/暂停/清零功能,分别对应“00”、“01”和“10”。源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;ENTITYKEYISPORT(S:INSTD_LOGIC;CLR,START:OUTSTD_LOGIC);endKEY;ARCHITECTUREBehavioralOFKEYISSIGNALQ1:STD_LOGIC_VECTOR(1DOWNTO0):=00;BEGINPROCESS(S)ISBEGINIFS'EVENTANDS='1'THENIFQ1=10THENQ1=00;ELSEQ1=Q1+1;ENDIF;ENDIF;ENDPROCESS;PROCESS(Q1)ISBEGINCASEQ1ISWHEN00=CLR='1';START='0';WHEN01=CLR='0';START='1';WHEN10=CLR='0';START='0';WHENOTHERS=CLR='1';START='0';ENDCASE;ENDPROCESS;endBehavioral;形成器件5、蜂鸣信号产生模块源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityALARMisport(ci,clk:instd_logic;Q:bufferstd_logic);endALARM;architectureBehavioralofALARMisbeginprocess(CI,CLK)beginifCI='1'thenforiin0to9loop--闪烁十次if(clk='1'andclk'event)thenQ='1';elseQ='0';endif;endloop;endif;endprocess;endBehavioral;形成器件6、数码管显示模块该模块的功能是将输入BCD码数转换为七段数码管需要的数据,将ledout中的BCD码编译到共阳数码管。源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitysegmentsisport(AIN4:instd_logic_vector(3downto0);led:outstd_logic_vector(6downto0));endsegments;architectureBehavioralofsegmentsisbeginprocess(AIN4)begincaseAIN4iswhen0000=led=NOT0111111;when0001=led=NOT0000110;when0010=led=NOT1011011;when0011=led=NOT1001111;when0100=led=NOT1100110;when0101=led=NOT1101101;when0110=led=NOT1111101;when0111=led=NOT0100111;when1000=led=NOT1111111;when1001=led=NOT1101111;whenothers=led=NOT0000000;endcase;endprocess;endBehavioral;形成器件(二)顶层模块设计实验总体电路图如图所示,由分频模块,0.01秒模块,秒模块,分模块,扫描模块,数码管模块和译码器模块组成。其中clr为复位信号低电平有效,start为启停开关,高电平有效。当50MHZ时钟信号clk经分频器clk后分频为一个100Hz脉冲。100HZ脉冲作为0.01秒计数信号输入使0.01秒模块为以一百十进制计数,满一百后进位,进位信号作为秒信号时钟使秒模块以六十进制计数,满六十后进位,进位信号作为分信号时钟使分模块以六十进制计数。0.01秒模块的个位和十位,秒模块的个位和十位,分模块的个位和十位分别输出作为扫描模块的输入信号。扫描模块选择输出信号,经过译码器和七段数码管显示时间。全局编译引脚锁定下载测试五、心得体会通过本次课程设计我对所学知识有了更加深刻的认识,对EDA和VHDL语言有了更加深入的理解,在课程设计过程中,我学会了自顶而上的模块化设计的方法,通过分别设计各个子模块的设计并封装成库,在进行顶层设计的时候使用原理图设计的方法完成整个的设计。这次设计让我对EDA的使用和设计有了更深刻的认识和掌握,也对所学习的知识进行了有效的检验和实践,加深了对知识的掌握。