1、EDA 课程设计报告数字秒表的设计指导老师: 时间: 组员:一、设计流程1.文本编辑:用 Active-HDL 的编译环境进行编写源代码,编译通过后,保存为.hdl 文件格式。2.功能仿真:将文件调入 Active-HDL 仿真环境里进行功能仿真,检查逻辑功能是否正确。3.逻辑综合与物理实现:将源代码调入 ISE 软件中,逻辑综合,管脚分配,下载到 FPGA 板上调试物理实现。二、设计规划本系统设计采用自顶向下的设计方案,系统的整体组装设计原理图如图 1所示,它主要由控制模块、时基分频模块,计时模块和显示模块四部分组成。各模块分别完成计时过程的控制功能、计时功能与显示功能。三、各模块的原理及其
2、程序本系统设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。各模块实现秒表不同的功能 。1、控制模块数字秒表计时控制电路控制状态机计时电路 显示电路时基分频电路 计数器六十进制计数器扫描电路 七段译码器一百进制计数器图 1 系统组成框图计时模块的作用是针对计时过程进行控制。计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。部分源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CTRL ISPORT( CLR,CLK,SP:IN STD_LOGIC;EN :OUT
3、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 ISPORT( CLK: IN STD_LOGIC;CO : OUT STD_LOGIC);END CB10;ARCHITECTURE ART OF CB10 ISSIGNAL COUNT:STD_LO
4、GIC_VECTOR (3 DOWNTO 0);BEGINPROCESS(CLK)BEGINIF RISING_EDGE(CLK)THENIF COUNT=“1001“THENCOUNTENENENENOUTBCDOUTBCDOUTBCDOUTBCDOUTBCDOUTBCDOUTBCDOUTBCDOUTBCDOUTBCDOUTBCD=“0000“; SEG=“00000000“;END CASE;END IF;END PROCESS;END ART;BCD 七段译码器驱动器的源程序(BCD7.VDH)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IE
5、EE.STD_LOGIC_UNSIGNED.ALL;ENTITY BCD7 ISPORT( BCD:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END BCD7;ARCHITECTURE ART OF BCD7 ISBEGINLED=“1111110“WHEN BCD =“0000“ ELSE“0110000“WHEN BCD =“0001“ ELSE“1101101“WHEN BCD =“0010“ ELSE“1111001“WHEN BCD =“0011“ ELSE“0110011“WHEN BC
6、D =“0100“ ELSE“1011011“WHEN BCD =“0101“ ELSE“1011111“WHEN BCD =“0110“ ELSE“1110000“WHEN BCD =“0111“ ELSE“1111111“WHEN BCD =“1000“ ELSE“1111011“WHEN BCD =“1001“ ELSE“0000000“;END ART;5. 顶层设计的源程序(MB.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MB ISPORT( SP,CLR,C
7、LK: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
8、: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_
9、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);END COMPONENT ;COMPONENT MULXPORT( CLK,CLR,EN:IN STD_LOGIC;S_1MS:IN STD_LOGIC_VECTOR(3 DOWNT
10、O 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_VECT
11、OR(3 DOWNTO 0);SEG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;SIGNAL C,E:STD_LOGIC;SIGNAL MS1_S,MS10_S,MS100_S:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL S1S_S,S10_S:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MIN1_S,MIN10_S:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL H:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCD_S,MS10_S
12、,MS100_S:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINU0: CTRL PORT MAP(CLR,CLK,SP,E);U1: CB10 PORT MAP(CLK,C);U2: COUNT PORT MAP(C,CLR,E,MS1_S,MS10_S,MS100_S,S1S_S,S10_S,MIN1_SMIN10_S,H);U3:MULXPORTMAP(CLR,CLK,E,MS1_S,MS10_S,MS100_S,S1S_S,S10_S,MIN1_SMIN10_S,H,BCD_S,SEG);U4: BCD7 PORT MAP(BCD_S,LED);CO=C;EN=E;OUTBCD=BCD_S;END ART;