数字秒表Word下载.docx
- 文档编号:22042881
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:19
- 大小:213.18KB
数字秒表Word下载.docx
《数字秒表Word下载.docx》由会员分享,可在线阅读,更多相关《数字秒表Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
九参考文献………………………………………………………………………14
一、方案设计与论证
将该任务分成四个模块进行设计,分别为:
计数模块、数据选择模块、译码器模块,最后是撰写顶层文件。
1、计数模块:
在这个模块中,有十进制计数器,共用六个十进制,分别表示数字秒表的百分之一秒、十分之一秒、秒、分、十秒和十分。
2、数据选择模块:
在这个模块中,数据选择器是选择百分之一秒、十分之一秒、秒、十秒、分、十分的输出。
3、译码器模块:
在这个模块中,译码器是选择百分之一秒、十分之一秒、秒、十秒、分、十分所对应的数码管。
4、顶层文件:
在这个模块中,是对前面四个模块综合编写的文件,是数字秒表的总程序。
二、单元电路设计
根据电路持点,用层次设计概念将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口。
做出个模块,然后再将各模块合起来联试。
以加深加深层次化设计概念。
1计数模块:
2十进制计数器(count10)
原理为加法计数器,计数十时由COUT进位
三、系统组成框图
四、各模块原理及其程序
4.1VHDL源程序
(1)秒表主程序
moduleMB(clk,ret,pause,stop,start,up_a,down_a,data,cs_6
LED1
LED2
LED3
LED4);
inputclk,ret,pause,stop,start,up_a,down_a;
output[7:
0]data;
outputLED1,LED2
LED4;
output[5:
0]cs_6;
reg[7:
0]data_r;
reg[5:
0]cs_6_r;
regzifu;
regzifuA;
reg[3:
0]saomiaoA;
0]saomiao;
reg[26:
0]count,countA,count7;
reg[23:
0]shuzi;
regLED1
LED2
LED3
LED4;
0]jishu[0:
9];
regcount2;
regcount3;
regcount4;
regcount5;
regflag1;
regflag2;
initial
begin
jishu[0]=4'
d0;
jishu[1]=4'
d1;
jishu[2]=4'
d2;
jishu[3]=4'
d3;
jishu[4]=4'
d4;
jishu[5]=4'
d5;
jishu[6]=4'
d6;
jishu[7]=4'
d7;
jishu[8]=4'
d8;
jishu[9]=4'
d9;
LED1=1;
LED2=1;
LED3=1;
LED4=1;
flag1=1;
flag2=1;
end
always@(shuzi,LED4)
if(!
LED4)
data_r<
=8'
b111_111;
else
case(saomiaoA)
4'
d0:
begindata_r<
b10111111;
end
d1:
b10000110;
d2:
b11011011;
d3:
b11001111;
d4:
b11100110;
d5:
b11101101;
d6:
b11111101;
d7:
b10000111;
d8:
b11111111;
d9:
b11101111;
default:
d11111111;
endcase
always@(saomiao,LED4)
cs_6_r<
=6'
b111_111;
case(saomiao)
begincs_6_r<
b000_001;
saomiaoA<
=jishu[shuzi[3:
0]];
b000_010;
=jishu[shuzi[7:
4]];
b000_100;
=jishu[shuzi[11:
8]];
b001_000;
=jishu[shuzi[15:
12]];
b010_000;
=jishu[shuzi[19:
16]];
b100_000;
=jishu[shuzi[23:
20]];
begincs_6_r<
assigndata=data_r;
assigncs_6=cs_6_r;
always@(posedgeclk,negedgeLED4)
if(!
countA<
=0;
saomiao<
=4'
else
if(countA==26'
d1_000_0)
begin
saomiao<
=saomiao+1;
countA<
else
=countA+1;
if(saomiao==4'
d6)
//LED<
=1;
always@(posedgeclk)//,negedgeLED4
if(count==26'
d25_000_0)
zifu=~zifu;
count<
elsecount<
=count+1;
if(count7==26'
d80_000_0)
zifuA=~zifuA;
elsecount7<
=count7+1;
always@(posedgezifu,negedgeLED4,negedgeLED2)
shuzi<
=0;
flag1<
=~flag1;
elseif(!
LED2)
=shuzi;
elseif(flag2)
begin
=shuzi+1;
if(shuzi[3:
0]==4'
b1010)
beginshuzi[3:
0]<
b0000;
shuzi[7:
4]<
=shuzi[7:
4]+1;
elseif(shuzi[7:
4]==4'
beginshuzi[7:
shuzi[11:
8]<
=shuzi[11:
8]+1;
elseif(shuzi[11:
8]==4'
beginshuzi[11:
shuzi[15:
12]<
=shuzi[15:
12]+1;
elseif(shuzi[15:
12]==4'
beginshuzi[15:
12]<
shuzi[19:
16]<
=shuzi[19:
16]+1;
elseif(shuzi[19:
16]==4'
beginshuzi[19:
shuzi[23:
20]<
=shuzi[23:
20]+1;
elseif(shuzi[23:
20]==4'
beginshuzi[23:
=24'
b0000_0000_0000_0000;
always@(posedgezifuA)
begin
if(!
stop)begin
case(count2)
0:
count2<
=count2+1'
b1;
1:
LED1<
=1'
b0;
elsebegin
always@(posedgezifuA)
pause)begin
case(count3)
count3<
=count3+1'
beginLED2<
LED2<
start)begin
case(count4)
count4<
=count4+1'
LED3<
ret)begin
case(count5)
count5<
=count5+1'
LED4<
always@(negedgeLED2)
flag2<
=~flag2;
endmodule
(2)十进制计数器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitycount10is
port(
clr,start,clk:
instd_logic;
cout:
outstd_logic;
daout:
bufferstd_logic_vector(3downto0));
endcount10;
architecturebehaveofcount10is
process(clr,start,clk)
ifclr='
1'
thendaout<
="
0000"
;
elsif(clk'
eventandclk='
)then
ifstart='
then
ifdaout="
1001"
cout<
='
elsedaout<
=daout+1;
0'
endif;
endif;
endprocess;
endbehave;
(3)蜂鸣器
entityalarmis
port(clk,I:
q:
outstd_logic
);
endalarm;
architecturearofalarmis
signaln:
integerrange0to20;
signalq0:
std_logic;
process(clk)
ifclk'
then
ifi='
thenq0<
n<
elsifn<
=19andi='
q0<
=notq0;
=n+1;
elseq0<
q<
=q0;
endar;
(4)译码器
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architectureaofdeledis
process(num)
casenumis
when"
=>
led<
0111111"
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
0101"
1101101"
0110"
1111101"
0111"
0100111"
1000"
1111111"
1101111"
whenothers=>
0000000"
endcase;
endprocess;
enda;
(5)控制器
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='
andclk'
event)then
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;
五、系统仿真
(1)十进制
(2)译码器
(3)控制器
六、性能测试与分析
6.1秒表性能测试与分析
调试试验箱,验证结果。
当计时达60分钟后,蜂鸣器鸣响10声。
此外,秒表还有一个启动信号和一个归零信号,以保证秒表能随意停止及启动。
本实验主要通过计数器实现计数并通过数码管显示控制模块实现计时与输出,报警电路完成报警,两控制端控制整个电路的开始和归零,实现了可设要求内容。
七、实验设备
计算机,EL教学实验箱
八、心得体会
近三周的课设实验之后,让我对FPGA的编程的方法有了更为深刻的认识。
通过在设计中所遇到的问题让我们也学到了很多东西,不仅能在以后的学习生活中给我们帮助,也能为毕业设计打下坚实的基础。
在这次课设中自己的亲身体会让我了解了很多在课设中应该注意的事项,及重点所在。
在我们做的数字秒表中,最困难的我觉得就是编程,为了编写正确的程序,我们查阅了很多的资料,并问过很多这方面学习很好的同学,我们经过反复的推敲与修改,才终于编写出一套正确的程序。
通过这次课设,让我对FPGA以及VHDL语言也有了更为更深刻的认识。
在下载的过程中我们也遇到了很多问题,开始我们的试验箱不能下载,我们只能逐一寻找功能正常的实验箱,在整个过程中我们又对我们的程序进行了检查和修改,在我们认为很正确的情况下对它下载,下载后才发现我们怎么也弄不出数据变化,我们又对我们的SEL信号进行了检查,最终实验箱的显示达到了我们预期的要求,这让我们兴奋不已。
通过这次课设,我们不仅学到了课本上的知识,也对实际的操作有了更深刻的理解。
更明白了团队合作的重要性,只有集思广益才能提高工作效率,才能更好的做好设计,达到预定目标。
九、参考文献
[1]陈跃东.数字秒表系统设计[J].自动化与仪器仪表,2006,270
(1):
65~97.
[2]廖常初.可编程序控制器应用技术(第三版)[M].重庆:
重庆大学出版社,2000:
85~153.
[3]俞一鸣.Altera可编程逻辑器件的应用与设计[M].北京:
机械工业出版社,2007:
133~206.
[4]周景润.基于Quartus的FPGA数字系统设计[M].北京:
电子工业出版社,2007:
212~306.
[5]孟庆辉.EDA技术实用教程[M].北京:
国防工业出版社,2008:
101~169.
[6]陈林.EDA技术在电子技术基础实验教学中的应用[J].信息技术,2003,6(3):
58~108.
[7]谢自美.电子线路综合设计[M].武汉:
华中科技大学出版社,2006:
135~168.
[8]康华光.电子技术基础(数字部分)[M].北京:
高等教育出版社,2000:
92~144.
[9]余孟尝.数字电子技术基础简明教程(第二版)[M].高等教育出版社,1999,54~73.
[10]阎石.数字电子技术基础(第四版)[M].北京:
高等教育出版社,1997:
202~265.
[11]
Li
S
G,
Gao
D
Y,
Nie
P
Q.
Study
on
multitask
management
unit
MTU
of
emb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 秒表