资源描述
湖北轻工职业技术学院机电系 08电子测量 EDA综合实训
项目一 秒表的设计和实现
一、任务
试设计一款数字秒表,具体要求如下:
l 6位输出显示,分别显示百分之一秒、十分之一秒、秒、十秒、分、十分;
l 能实现启动、停止、归0控制。
扩展:
l 在第59分钟内,计时即将溢出时,进行声音提示;
l 系统时钟为10MHz,试设计分频器得到1kHz、500Hz、1Hz信号。
二、任务分解
三、系统设计
1、系统框图
2、顶层gdf文件
总体设计说明
3、模块设计
(1)VHDL程序及说明
(2)仿真
四、系统实现
1、电路
2、测试
测试方案:
测试结果:
附:参考设计
1、顶层gdf文件:
2、底层设计:
(1)scan模块vhdl程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY scan IS
PORT(clk100 :IN STD_LOGIC;
din5 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
din4 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
din3 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
din2 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
din1 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
din0 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
led :OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
SEL :OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END;
ARCHITECTURE a OF scan IS
SIGNAL scantmp:STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL q :STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
p1:PROCESS(clk100)
BEGIN
IF clk100'event AND clk100='1' THEN
scantmp<=scantmp+1;
END IF;
END PROCESS p1;
p2:PROCESS(scantmp)
BEGIN
CASE scantmp IS
WHEN "000"=>sel<="000";q<=din0(3 DOWNTO 0);
WHEN "001"=>sel<="000";q<=din1(3 DOWNTO 0);
WHEN "010"=>sel<="000";q<=din2(3 DOWNTO 0);
WHEN "011"=>sel<="000";q<=din3(3 DOWNTO 0);
WHEN "100"=>sel<="000";q<=din4(3 DOWNTO 0);
WHEN "101"=>sel<="000";q<=din5(3 DOWNTO 0);
WHEN OTHERS=>NULL;
END CASE;
END PROCESS p2;
p3:PROCESS(q)
BEGIN
CASE q IS
WHEN "0000" => led<="0111111"; --0
WHEN "0001" => led<="0000110"; --1
WHEN "0010" => led<="1011011"; --2
WHEN "0011" => led<="1001111"; --3
WHEN "0100" => led<="1100110"; --4
WHEN "0101" => led<="1101101"; --5
WHEN "0110" => led<="1111101"; --6
WHEN "0111" => led<="0000111"; --7
WHEN "1000" => led<="1111111"; --8
WHEN "1001" => led<="1101111"; --9
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
END a;
(2)count6模块vhdl程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY count6 IS
PORT(clk : IN STD_LOGIC;
clr, start_stop: IN STD_LOGIC;
co : out STD_LOGIC;
q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));
END count6;
ARCHITECTURE a OF count6 IS
BEGIN
PROCESS(clk,start_stop,clr)
BEGIN
IF clr='0' THEN
q<="0000";
co<='0';
ELSIF start_stop='1' THEN
ELSIF clk'event AND clk='1' THEN
IF q="0101" THEN
q<="0000";
co<='1';
ELSE q<=q+1;co<='0';
END IF;
END IF;
END PROCESS;
END a;
(3)count10模块vhdl程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY count10 IS
PORT(clk : IN STD_LOGIC;
clr, start_stop: IN STD_LOGIC;
co : out STD_LOGIC;
q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));
END count10;
ARCHITECTURE a OF count10 IS
BEGIN
PROCESS(clk,start_stop,clr)
BEGIN
IF clr='0' THEN
q<="0000";
co<='0';
ELSIF start_stop='1' THEN
ELSIF clk'event AND clk='1' THEN
IF q="1001" THEN
q<="0000";
co<='1';
ELSE q<=q+1;co<='0';
END IF;
END IF;
END PROCESS;
END a;
(5)分频器设计实例:
4MHz信号产生1kHz、500Hz、1Hz信号VHDL程序:
(6)电路
6
展开阅读全文