EDA课程设计:数字秒表的设计.doc_第1页
EDA课程设计:数字秒表的设计.doc_第2页
EDA课程设计:数字秒表的设计.doc_第3页
EDA课程设计:数字秒表的设计.doc_第4页
EDA课程设计:数字秒表的设计.doc_第5页
免费预览已结束,剩余13页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA课程设计报告数字秒表的设计指导老师: 时间: 组员:一、设计流程1.文本编辑:用Active-HDL的编译环境进行编写源代码,编译通过后,保存为.hdl文件格式。2.功能仿真:将文件调入Active-HDL仿真环境里进行功能仿真,检查逻辑功能是否正确。3.逻辑综合与物理实现:将源代码调入ISE软件中,逻辑综合,管脚分配,下载到FPGA板上调试物理实现。二、设计规划本系统设计采用自顶向下的设计方案,系统的整体组装设计原理图如图1所示,它主要由控制模块、时基分频模块,计时模块和显示模块四部分组成。各模块分别完成计时过程的控制功能、计时功能与显示功能。数字秒表计时控制电路控制状态机计时电路显示电路时基分频电路计数器六十进制计数器扫描电路七段译码器一百进制计数器图1 系统组成框图三、各模块的原理及其程序本系统设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。各模块实现秒表不同的功能 。1、控制模块计时模块的作用是针对计时过程进行控制。计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。部分源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CTRL IS PORT( CLR,CLK,SP:IN STD_LOGIC; EN :OUT STD_LOGIC);COM:PROCESS(SP,CURRENT_STATE) BEGINEND IF;END PROCESS;END BEHAVE;2、时基分频模块时基分频模块的作用把输入时钟信号变为分频输出信号。部分源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CB10 IS PORT( CLK: IN STD_LOGIC; CO : OUT STD_LOGIC);END CB10;ARCHITECTURE ART OF CB10 IS SIGNAL COUNT:STD_LOGIC_VECTOR (3 DOWNTO 0); BEGINPROCESS(CLK)BEGIN IF RISING_EDGE(CLK)THEN IF COUNT=1001THEN COUNT=0000; CO=1; ELSE COUNT=COUNT+1; CO=0; END IF; END IF; END PROCESS;END ART;3、计时模块计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。他是由四个十进制计数器和俩个六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。部分源程序:十进制计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CDU10 IS PORT( CLK:IN STD_LOGIC; CLR,EN:IN STD_LOGIC; CN :OUT STD_LOGIC; COUNT10:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CDU10;END IF;END IF;END PROCESS;END ART;六进制计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CDU6 IS END IF;END IF;END PROCESS;END ART;计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNT IS END ART;4、显示模块计时显示电路的作用是将计时值在LED数码管上显示出来。计时电路产生的值经过BCD七段译码后,驱动LED数码管。计时显示电路的实现方案采用扫描显示。部分源程序:数据选择器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MULX IS PORT( CLK,CLR,EN:IN STD_LOGIC; S_1MS:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_10MS:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_100MS:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_1S:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_10S:IN STD_LOGIC_VECTOR(3 DOWNTO 0); M_1MIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); M_10MIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); HOUR:IN STD_LOGIC_VECTOR(3 DOWNTO 0); OUTBCD:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END MULX;ARCHITECTURE ART OF MULX ISSIGNAL COUNT:STD_LOGIC_VECTOR(3 DOWNTO 0);END CASE;END IF;END PROCESS;END ART;BCD七段译码器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BCD7 IS PORT( BCD:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); END BCD7;ARCHITECTURE ART OF BCD7 ISBEGINLED=1111110WHEN BCD =0000 ELSE0110000WHEN BCD =0001 ELSE1101101WHEN BCD =0010 ELSE1111001WHEN BCD =0011 ELSE0110011WHEN BCD =0100 ELSE1011011WHEN BCD =0101 ELSE1011111WHEN BCD =0110 ELSE1110000WHEN BCD =0111 ELSE1111111WHEN BCD =1000 ELSE1111011WHEN BCD =1001 ELSE0000000;END ART;四、系统仿真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)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CB10 IS PORT( CLK: IN STD_LOGIC; CO : OUT STD_LOGIC);END CB10;ARCHITECTURE ART OF CB10 IS SIGNAL COUNT:STD_LOGIC_VECTOR (3 DOWNTO 0) :=0000; BEGINPROCESS(CLK)BEGIN IF RISING_EDGE(CLK)THEN IF COUNT=1001THEN COUNT=0000; CO=1; ELSE COUNT=COUNT+1; COEN=0; IF SP=1THEN NEXT_STATE=S1; ELSE NEXT_STATEEN=1; IF SP=1THEN NEXT_STATE=S1; ELSE NEXT_STATEEN=1; IF SP=1THEN NEXT_STATE=S3; ELSE NEXT_STATEEN=0; IF SP=1THEN NEXT_STATE=S3; ELSE NEXT_STATE=S0; END IF;END CASE;END PROCESS;SYNCH:PROCESS(clk)BEGIN IF CLR=1THENCURRENT_STATE =S0;ELSIF CLKEVENT AND CLK=1THENCURRENT_STATE=NEXT_STATE;END IF;END PROCESS;END BEHAVE;3. 计时模块的源程序十进制计数器的源程序(CDU10.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CDU10 IS PORT( CLK:IN STD_LOGIC; CLR,EN:IN STD_LOGIC; CN :OUT STD_LOGIC; COUNT10:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CDU10;ARCHITECTURE ART OF CDU10 ISSIGNAL SCOUNT10: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN COUNT10=SCOUNT10;PROCESS (CLK,CLR,EN)BEGIN IF(CLR=1)THENSCOUNT10=0000;CN=0;ELSIF RISING_EDGE(CLK)THENIF(EN=1)THENIF SCOUNT10=1001THENCN=1;SCOUNT10=0000;ELSECN=0;SCOUNT10=SCOUNT10+1;END IF;END IF;END IF;END PROCESS;END ART;六进制计数器的源程序(CDU6.VDH)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CDU6 IS PORT( CLK,CLR,EN:IN STD_LOGIC; CN :OUT STD_LOGIC; COUNT6:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CDU6;ARCHITECTURE ART OF CDU6 ISSIGNAL SCOUNT6: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN COUNT6=SCOUNT6;PROCESS (CLK,CLR,EN)BEGIN IF(CLR=1)THENSCOUNT6=0000;CN=0;ELSIF RISING_EDGE(CLK) THENIF(EN=1)THENIF SCOUNT6=0101THENCN=1;SCOUNT6=0000;ELSECN=0;SCOUNT6=SCOUNT6+1;END IF;END IF;END IF;END PROCESS;END ART;计数器的源程序(COUNT.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNT IS PORT( CLK,CLR,EN:IN STD_LOGIC; S_1MS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_10MS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_100MS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_1S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_10S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_1MIN:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_10MIN:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); HOUR:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COUNT;ARCHITECTURE ART OF COUNT ISCOMPONENT CDU10PORT( CLK,CLR,EN:IN STD_LOGIC; CN :OUT STD_LOGIC; COUNT10:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT CDU10;COMPONENT CDU6PORT( CLK,CLR,EN:IN STD_LOGIC; CN :OUT STD_LOGIC; COUNT6:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT CDU6;SIGNAL A,B,C,D,E,F,G,H:STD_LOGIC;BEGINUL:CDU10 PORT MAP (CLK,CLR,EN,A,S_1MS);U2:CDU10 PORT MAP (A,CLR,EN,B,S_10MS);U3:CDU10 PORT MAP (B,CLR,EN,C,S_100MS);U4:CDU10 PORT MAP (C,CLR,EN,D,S_1S);U5:CDU6 PORT MAP (D,CLR,EN,E,S_10S);U6:CDU10 PORT MAP (E,CLR,EN,F,S_1MIN);U7:CDU6 PORT MAP (F,CLR,EN,G,S_10MIN);U8:CDU10 PORT MAP (G,CLR,EN,H,HOUR);END ART;4. 显示模块的源程序数据选择器的源程序(MULX.VDH)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MULX IS PORT( CLK,CLR,EN:IN STD_LOGIC; S_1MS:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_10MS:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_100MS:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_1S:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_10S:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_1MIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S_10MIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); HOUR:IN STD_LOGIC_VECTOR(3 DOWNTO 0); OUTBCD:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END MULX;ARCHITECTURE ART OF MULX ISSIGNAL COUNT :STD_LOGIN_VECTOR(3 DOWNTO 0);BEGINPROCESS (CLK)BEGINIF CLR=1THENCOUNT=1111;ELSIF RISING_EDGE(CLK)THENIF EN =1 THEN COUNT=0000;ELSECOUNTOUTBCD=S_1MS; SEGOUTBCD=S_10MS; SEGOUTBCD=S_100MS; SEGOUTBCD=S_1S; SEGOUTBCD=S_10S; SEGOUTBCD=S_1MIN; SEGOUTBCD=S_10MIN; SEGOUTBCD=HOUR; SEGOUTBCD=S_1MS; SEGOUTBCD=S_10MS; SEGOUTBCD=0000; SEG=00000000;END CASE;END IF;END PROCESS;END ART;BCD七段译码器驱动器的源程序(BCD7.VDH)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BCD7 IS PORT( BCD:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); END BCD7;ARCHITECTURE ART OF BCD7 ISBEGINLED=1111110WHEN BCD =0000 ELSE0110000WHEN BCD =0001 ELSE1101101WHEN BCD =0010 ELSE1111001WHEN BCD =0011 ELSE0110011WHEN BCD =0100 ELSE1011011WHEN BCD =0101 ELSE1011111WHEN BCD =0110 ELSE1110000WHEN BCD =0111 ELSE1111111WHEN BCD =1000 ELSE1111011WHEN BCD =1001 ELSE0000000;END ART;5. 顶层设计的源程序(MB.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MB IS PORT( SP,CLR,CLK:IN STD_LOGIC; CO,EN: OUT STD_LOGIC; LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); OUTBCD:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) SEG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END MB;ARCHITECTURE ART OF MB ISCOMPONENT CTRLPORT( CLK,CLR,SP:IN STD_LOGIC; EN :OUT STD_LOGIC);END COMPONENT ;COMPONENT CB10PORT( CLK:IN STD_LOGIC; CO :OUT STD_LOGIC);END COMPONENT ;COMPONENT COUNTPORT( CLK,CLR,EN:IN STD_LOGIC; S_1MS: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_10MS: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_100MS: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_1S: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_10S: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_1MIN: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_10MIN: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); HOUR: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;COMPONENT BCD7PORT( BCD:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED :OUT STD_LOGIC_VECTOR(6 DOWNTO 0);E

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论