EDA课程设计数字秒表的设计Word下载.docx
《EDA课程设计数字秒表的设计Word下载.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字秒表的设计Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
各模块实现秒表不同的功能。
1、控制模块
计时模块的作用是针对计时过程进行控制。
计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。
部分源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCTRLIS
PORT(CLR,CLK,SP:
INSTD_LOGIC;
EN:
OUTSTD_LOGIC);
……………………
COM:
PROCESS(SP,CURRENT_STATE)
BEGIN
ENDIF;
ENDPROCESS;
ENDBEHAVE;
2、时基分频模块
时基分频模块的作用把输入时钟信号变为分频输出信号。
ENTITYCB10IS
PORT(CLK:
INSTD_LOGIC;
CO:
OUTSTD_LOGIC);
ENDCB10;
ARCHITECTUREARTOFCB10IS
SIGNALCOUNT:
STD_LOGIC_VECTOR(3DOWNTO0);
PROCESS(CLK)
BEGIN
IFRISING_EDGE(CLK)THEN
IFCOUNT="
1001"
THEN
COUNT<
="
0000"
;
CO<
='
1'
ELSE
=COUNT+1;
0'
ENDIF;
ENDPROCESS;
ENDART;
3、计时模块
计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。
他是由四个十进制计数器和俩个六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。
十进制计数器:
ENTITYCDU10IS
CLR,EN:
CN:
OUTSTD_LOGIC;
COUNT10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCDU10;
……………………………………
六进制计数器:
ENTITYCDU6IS
…………………………………
…………………………………
计数器:
ENTITYCOUNTIS
………………………………
………………………………
4、显示模块
计时显示电路的作用是将计时值在LED数码管上显示出来。
计时电路产生的值经过BCD七段译码后,驱动LED数码管。
计时显示电路的实现方案采用扫描显示。
数据选择器:
ENTITYMULXIS
PORT(CLK,CLR,EN:
S_1MS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_10MS:
S_100MS:
S_1S:
S_10S:
M_1MIN:
M_10MIN:
HOUR:
OUTBCD:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
SEG:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDMULX;
ARCHITECTUREARTOFMULXIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(3DOWNTO0);
ENDCASE;
BCD七段译码器:
ENTITYBCD7IS
PORT(
BCD:
LED:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDBCD7;
ARCHITECTUREARTOFBCD7IS
LED<
1111110"
WHENBCD="
"
0110000"
0001"
1101101"
0010"
1111001"
0011"
0110011"
0100"
1011011"
0101"
1011111"
0110"
1110000"
0111"
1111111"
1000"
1111011"
0000000"
四、系统仿真
1、时基分频模块的仿真
分析:
CLK为时钟信号的输入,CO为分频输出信号。
2、控制模块的仿真
CLK、CLR和SP为输入信号,EN为输出信号。
3、计时电路模块的仿真(如图4-3~图4-5所示)
十进制计数器的仿真
六进制计数器的仿真
计数器的仿真
clk为时钟脉冲脉冲,s_1ms是毫秒计数值,s_10ms是十毫秒计数器,s_100ms是百毫秒计数器,s_1s是秒计数器,s_10s是十秒计数器,m_1min是分计数器,s_10min是十分计数器,hour是小时计数器。
它们均为输入信号。
每来两个时钟脉冲,s_1ms加1,当s_1ms满十时,s_10ms加1,依次类推,s_10ms满十的时候,s_100ms加1等等作为输出。
4、显示电路模块的仿真(如图4-6~图4-7所示)
数据选择器的仿真
BCD七段译码器驱动器的仿真
bcd为时钟脉冲输入信号,led是输出信号,如图所示:
当输出为“1111110”时候,输入为“0000”;
当输出为“0110000”时输入“0001”,当输入为“0010”时输出为“1101101”,当输入为“0011”时输出为“1111001”等等来实现七段译码功能。
5、数字秒表整个系统的仿真
数字秒表起始工作的仿真图状态仿真图
秒表开始从零开始计数,每次增加10ms。
工作正常。
五、ISE软件物理实现
打开ISE软件,创建项目工程,将源程序带入综合,然后定义输入输出管脚约束,设计实现。
下载到FPGA板子上,可以观察到设计的数字秒表可以按照设计要求正常工作。
至此,整个课程设计完成。
六、结束语
开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。
在编程时,应充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。
用Active-HDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法在数字系统设计中发挥越来越重要的作用。
附录源程序如下:
1.时基分频模块的源程序(CB10.VHD)
STD_LOGIC_VECTOR(3DOWNTO0):
2.控制模块的源程序(CTRL.VHD)
END;
ARCHITECTUREBEHAVEOFCTRLIS
CONSTANTS0:
STD_LOGIC_VECTOR(1DOWNTO0):
00"
CONSTANTS1:
01"
CONSTANTS2:
11"
CONSTANTS3:
10"
TYPESTATESIS(S0,S1,S2,S3);
SIGNALCURRENT_STATE,NEXT_STATE:
STATES;
CASECURRENT_STATEIS
WHENS0=>
EN<
IFSP='
NEXT_STATE<
=S1;
=S0;
WHENS1=>
=S2;
WHENS2=>
=S3;
WHENS3=>
SYNCH:
PROCESS(clk)
IFCLR='
CURRENT_STATE<
ELSIFCLK'
EVENTANDCLK='
CURRENT_STATE<
=NEXT_STATE;
3.计时模块的源程序
十进制计数器的源程序(CDU10.VHD)
ARCHITECTUREARTOFCDU10IS
SIGNALSCOUNT10:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGINCOUNT10<
=SCOUNT10;
PROCESS(CLK,CLR,EN)
BEGINIF(CLR='
)THEN
SCOUNT10<
CN<
ELSIFRISING_EDGE(CLK)THEN
IF(EN='
IFSCOUNT10="
ELSE
=SCOUNT10+'
六进制计数器的源程序(CDU6.VDH)
PORT(CLK,CLR,EN:
COUNT6:
ENDCDU6;
ARCHITECTUREARTOFCDU6IS
SIGNALSCOUNT6:
BEGIN
COUNT6<
=SCOUNT6;
IF(CLR='
SCOUNT6<
ELSIFRISING_EDGE(CLK)THEN
IFSCOUNT6="
=SCOUNT6+'
计数器的源程序(COUNT.VHD)
S_1MIN:
S_10MIN:
ENDCOUNT;
ARCHITECTUREARTOFCOUNTIS
COMPONENTCDU10
PORT(CLK,CLR,EN:
ENDCOMPONENTCDU10;
COMPONENTCDU6
ENDCOMPONENTCDU6;
SIGNALA,B,C,D,E,F,G,H:
STD_LOGIC;
UL:
CDU10PORTMAP(CLK,CLR,EN,A,S_1MS);
U2:
CDU10PORTMAP(A,CLR,EN,B,S_10MS);
U3:
CDU10PORTMAP(B,CLR,EN,C,S_100MS);
U4:
CDU10PORTMAP(C,CLR,EN,D,S_1S);
U5:
CDU6PORTMAP(D,CLR,EN,E,S_10S);
U6:
CDU10PORTMAP(E,CLR,EN,F,S_1MIN);
U7:
CDU6PORTMAP(F,CLR,EN,G,S_10MIN);
U8:
CDU10PORTMAP(G,CLR,EN,H,HOUR);
4.显示模块的源程序
数据选择器的源程序(MULX.VDH)
SIGNALCOUNT:
STD_LOGIN_VECTOR(3DOWNTO0);
PROCESS(CLK)
IFCLR='
COUNT<
1111"
IFEN='
THEN
=COUNT+'
IFCLK'
THEN
CASECOUNTIS
WHEN"
=>
OUTBCD<
=S_1MS;
SEG<
11111110"
=S_10MS;
11111101"
=S_100MS;
11111011"
=S_1S;
11110111"
=S_10S;
11101111"
=S_1MIN;
11011111"
=S_10MIN;
10111111"
=HOUR;
01111111"
WHENOTHERS=>
00000000"
BCD七段译码器驱动器的源程序(BCD7.VDH)
USE