数字秒表课程设计1Word文档格式.docx
《数字秒表课程设计1Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字秒表课程设计1Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
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;
endprocess;
process(counter)
ifcounter=24999thenco<
='
;
elseco<
0'
endart;
2、十进制计数器模块
useieee.std_logic_unsigned.all;
entityTENis
port(clk,clr,en:
instd_logic;
Y:
outstd_logic_vector(3downto0);
endentityTEN;
architectureartofTENis
signalcount10:
std_logic_vector(3downto0);
Y<
=count10;
process(clk,clr,en)
ifclr='
thencount10<
="
0000"
elsif(clk'
eventandclk='
)then
if(en='
ifcount10="
1001"
thencount10<
co<
elsecount10<
=count10+'
co<
endif;
endprocess;
3、六进制计数器模块
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
entitycount6is
Port(
clr,start,clk:
cout:
outstd_logic;
daout:
bufferstd_logic_vector(3downto0));
endcount6;
architecturebehaveofcount6is
process(clr,start,clk)
thendaout<
elsif(clk'
)then
ifstart='
then
ifdaout="
0101"
cout<
elsedaout<
=daout+1;
endbehave;
4.报警器代码:
当记时到一小时时,报警器报警,并响十声。
entityalarm1is
port(clk,I:
q:
endalarm1;
ARCHITECTUREaOFalarm1IS
signaln:
integerrange0TO20;
signalq0:
std_logic;
begin
process(clk)
begin
if(clk='
andclk'
event)then
ifi='
then
q0<
n<
elsif(n<
=19andi='
=notq0;
=n+1;
else
q<
=q0;
ENDa;
5.数据选择和数码管选择模块代码:
其功能是选择个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。
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);
outstd_logic_vector(3downto0));
endseltime;
architectureaofseltimeis
signaltemp:
integerrange0to5;
process(clk)
if(clr='
)then
daout<
sel<
000"
temp<
elsif(clk='
iftemp=5thentemp<
elsetemp<
=temp+1;
casetempis
when0=>
sel<
daout<
=dain0;
when1=>
001"
=dain1;
when2=>
010"
=dain2;
when3=>
011"
=dain3;
when4=>
100"
=dain4;
when5=>
101"
=dain5;
endcase;
enda;
6.数码管驱动模块代码:
数码管驱动电路,驱动数码管发光。
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architectureaofdeledis
process(num)
casenumis
when"
=>
led<
0111111"
-----------3FH
0001"
0000110"
-----------06H
0010"
1011011"
-----------5BH
0011"
1001111"
-----------4FH
0100"
1100110"
-----------66H
1101101"
-----------6DH
0110"
1111101"
-----------7DH
0111"
0100111"
-----------27H
1000"
1111111"
-----------7FH
1101111"
-----------6FH
whenothers=>
0000000"
-----------00H
七、实验连线
A)输入接口
1.秒表的归零,启动信号RESET、START的管脚分别连接按键开关。
2.蜂鸣器鸣响信号SPEAKER接蜂鸣器的输入。
3.秒表计数时钟信号CLK的管脚同2.5MHz时钟源相连。
B)输出接口
秒表扫描显示的驱动信号管脚SEL2,SEL1,SEL0和A~G参照设计一中的连法。
八、实验总结
开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。
在编程时,我充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法在数字系统设计中发挥越来越重要的作用。