数字秒表课程设计1.docx
《数字秒表课程设计1.docx》由会员分享,可在线阅读,更多相关《数字秒表课程设计1.docx(9页珍藏版)》请在冰豆网上搜索。
![数字秒表课程设计1.docx](https://file1.bdocx.com/fileroot1/2022-11/28/462ee8e6-58fa-41a7-8dc9-d234d8e2075c/462ee8e6-58fa-41a7-8dc9-d234d8e2075c1.gif)
数字秒表课程设计1
北华航天工业学院
电子工程系
EDA综合课程设计
——数字秒表设计
姓名:
_____
班级:
_______
指导老师:
________
摘要
EDA技术作为电子工程领域的一门新技术,极大的提高了电子系统设计的效率和可靠性。
本次课程设计就是利用VHDL语言结合硬件电路来实现数字秒表的功能,数字秒表有4个模块构成,分别为分频电路模块,去抖电路模块,时间计数电路模块,显示模块。
用VHDL语言编程来实现各个模块的功能,再用原件例化的方法实现各模块之间的连接,从而实现整个数字秒表电路的功能。
1、设计要求
秒表的逻辑结构主要由显示译码器、分频器、十进制计数器、六进制计数器和报警器组成。
在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需要有一个启动信号和归零信号,以便秒表能随意停止及启动。
秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之对应,6个计数器的输出全部都为BCD码输出,这样便于和显示译码器的连接。
当计时达60分钟后,蜂鸣器报警。
2、模块结构
1.四个10进制计数器:
用来分别对百分之一、十分之一秒、秒和分进行计数;
2.两个6进制计数器:
用来分别对10秒和10分进行计数:
3.分频率器:
用来产生100Hz计时脉冲:
4.显示译码器:
完成对显示的控制。
3、硬件要求
1.主芯片EPF10K10LC84-4
2.6位八段扫描共阴极数码显示管
3.二个按键开关(归零、启动)
4、实验内容及步骤
1.根据电路特点,用层次设计概念将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口。
分别让学生分作和调试其中之一,然后再将各模块结合起来联试。
以培养学生之间的合作精神,同时加深层次化设计概念。
2.了解软件的元件管理深层含义,以及模块元件之间的连接该概念,对于不同目录下的同一设计,如何熔合。
3.适配划分前后的仿真内容有何不同概念,仿真信号对象有何不同,让学生有更深一步了解。
熟悉CPLD设计的调试过程中手段的多样化。
4.按适配划分后的管脚定位,同相关功能块硬件电路接口连线。
5.所有模块全用VHDL语言描述。
五、设计原理与技术方法:
包括:
电路工作原理分析与原理图、元器件选择与参数计算、电路调试方法与结果说明;
软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。
(一)设计流程
1、设计实验目的:
在MAX+plusII软件平台上,熟练运用VHDL语言,完成数字时钟设计的软件编程、编译、综合、仿真,使用EDA
实验箱,实现数字秒表的硬件功能。
2、设计原理总体框图:
本系统设计采用自顶向下的设计方案,系统的整体组装设计原理框图如图
(1)所示,它主要由控制模块、时基分频模块,计时模块和显示模块四部分组成。
各模块分别完成计时过程的控制功能、计时功能与显示功能。
数字秒表设计原理图
六、数字秒表各个模块的VHDL语言设计
1、时基分频模块
将实验箱提供的2.5MHz的时钟脉冲分频后变成100Hz的脉冲,该模块的VHDL设计代码如下:
libraryieee;
useieee.std_logic_1164.all;
entitycb10is
port(
clk:
instd_logic;
co:
outstd_logic);
endcb10;
architectureartofcb10is
signalcounter:
integerrange0to24999;
begin
process(clk)
begin
if(clk='1'andclk'event)then
ifcounter=12499thencounter<=0;
elsecounter<=counter+1;
endif;
endif;
endprocess;
process(counter)
begin
ifcounter=24999thenco<='1';
elseco<='0';
endif;
endprocess;
endart;
2、十进制计数器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityTENis
port(clk,clr,en:
instd_logic;
Y:
outstd_logic_vector(3downto0);
co:
outstd_logic);
endentityTEN;
architectureartofTENis
signalcount10:
std_logic_vector(3downto0);
begin
Y<=count10;
process(clk,clr,en)
begin
ifclr='1'thencount10<="0000";
elsif(clk'eventandclk='1')then
if(en='1')then
ifcount10="1001"thencount10<="0000";co<='1';
elsecount10<=count10+'1';co<='0';
endif;
endif;
endif;
endprocess;
endart;
3、六进制计数器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitycount6is
Port(
clr,start,clk:
instd_logic;
cout:
outstd_logic;
daout:
bufferstd_logic_vector(3downto0));
endcount6;
architecturebehaveofcount6is
begin
process(clr,start,clk)
begin
ifclr='1'thendaout<="0000";
elsif(clk'eventandclk='1')then
ifstart='1'then
ifdaout="0101"thendaout<="0000";cout<='1';
elsedaout<=daout+1;cout<='0';
endif;
endif;
endif;
endprocess;
endbehave;
4.报警器代码:
当记时到一小时时,报警器报警,并响十声。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityalarm1is
port(clk,I:
instd_logic;
q:
outstd_logic);
endalarm1;
ARCHITECTUREaOFalarm1IS
signaln:
integerrange0TO20;
signalq0:
std_logic;
begin
process(clk)
begin
if(clk='1'andclk'event)then
ifi='0'then
q0<='0';
n<=0;
elsif(n<=19andi='1')then
q0<=notq0;
n<=n+1;
else
q0<='0';
endif;
endif;
endprocess;
q<=q0;
ENDa;
5.数据选择和数码管选择模块代码:
其功能是选择个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。
libraryieee;
useieee.std_logic_1164.all;
USEieee.std_logic_UNSIGNED.all;
entityseltimeis
port(clr,clk:
inbit;
dain0,dain1,dain2,dain3,dain4,dain5:
instd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0);
daout:
outstd_logic_vector(3downto0));
endseltime;
architectureaofseltimeis
signaltemp:
integerrange0to5;
begin
process(clk)
begin
if(clr='1')then
daout<="0000";
sel<="000";
temp<=0;
elsif(clk='1'andclk'event)then
iftemp=5thentemp<=0;
elsetemp<=temp+1;
endif;
casetempis
when0=>sel<="000";daout<=dain0;
when1=>sel<="001";daout<=dain1;
when2=>sel<="010";daout<=dain2;
when3=>sel<="011";daout<=dain3;
when4=>sel<="100";daout<=dain4;
when5=>sel<="101";daout<=dain5;
endcase;
endif;
endprocess;
enda;
6.数码管驱动模块代码:
数码管驱动电路,驱动数码管发光。
libraryieee;
useieee.std_logic_1164.all;
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architectureaofdeledis
begin
process(num)
begin
casenumis
when"0000"=>led<="0111111";-----------3FH
when"0001"=>led<="0000110";-----------06H
when"0010"=>led<="1011011";-----------5BH
when"0011"=>led<="1001111";-----------4FH
when"0100"=>led<="1100110";-----------66H
when"0101"=>led<="1101101";-----------6DH
when"0110"=>led<="1111101";-----------7DH
when"0111"=>led<="0100111";-----------27H
when"1000"=>led<="1111111";-----------7FH
when"1001"=>led<="1101111";-----------6FH
whenothers=>led<="0000000";-----------00H
endcase;
endprocess;
enda;
七、实验连线
A)输入接口
1.秒表的归零,启动信号RESET、START的管脚分别连接按键开关。
2.蜂鸣器鸣响信号SPEAKER接蜂鸣器的输入。
3.秒表计数时钟信号CLK的管脚同2.5MHz时钟源相连。
B)输出接口
秒表扫描显示的驱动信号管脚SEL2,SEL1,SEL0和A~G参照设计一中的连法。
八、实验总结
开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。
在编程时,我充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法在数字系统设计中发挥越来越重要的作用。