1、本题目中将要用到的元件:
--************************************************--
--***********十进制
计数器(count10.vhd)************--
--************************************************--
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--************************************************--
ENTITY COUNT10 IS
PORT(CLK,CLR,ENA:IN STD_LOGIC;
QOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END COUNT10;
--************************************************--
ARCHITECTURE BEHAV OF COUNT10 IS
BEGIN
PROC
ESS(CLK,CLR,ENA)
VARIABLE TMP:INTEGER RANGE 0 TO 10;
BEGIN
IF CLR='1' THEN
TMP:=0;
ELSIF CLK'EVENT AND CLK='1' THEN
IF ENA='1' THEN
TMP:=TMP+1;
IF TMP=10 THEN
TMP:=0;
END IF;
END IF;
END IF;
QOUT<=CONV_STD_LOGIC_VECTOR(TMP,4);
END PROCESS;
END BEHAV;
==================================
--************************************************--
--**********扫描
信号发生器(count8.vhd)**********--
--************************************************--
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--************************************************--
ENTITY COUNT8 IS
PORT(CLK:IN STD_LOGIC;
QOUT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)
);
END COUNT8;
--************************************************--
ARCHITECTURE BEHAV OF COUNT8 IS
signal TMP:INTEGER RANGE 0 TO 10;
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
TMP<=TMP+1;
IF TMP=8 THEN
TMP<=0;
END IF;
END IF;
QOUT<=CONV_STD_LOGIC_VECTOR(TMP,3);
END PROCESS;
END BEHAV;
================================
--************************************************--
--************七段译码器(de
LED.vhd)*************--
--************************************************--
library ieee;
use ieee.std_logic_1164.all;
--************************************************--
entity deled is
port(
datain:in std_logic_vector(3 downto 0);
qout:out std_logic_vector(6 downto 0)
);
end deled;
--************************************************--
architecture func of deled is
begin
process(datain)
begin
if datain= "0000" then qout<="1111110";
elsif datain= "0001" then qout<="0110000";
elsif datain= "0010" then qout<="1101101";
elsif datain= "0011" then qout<="1111001";
elsif datain= "0100" then qout<="0110011";
elsif datain= "0101" then qout<="1011011";
elsif datain= "0110" then qout<="1011111";
elsif datain= "0111" then qout<="1110000";
elsif datain= "1000" then qout<="1111111";
elsif datain= "1001" then qout<="1111011";
else null;
end if;
end process;
end func;
--====================================
--===========顶层文件描述=============
--====================================
--************************************************--
--***********scan.vhd************--
--************************************************--
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
--************************************************--
ENTITY SCAN IS
PORT(CLKK,CLK_SEL,CLRR,ENAA:IN STD_LOGIC;
SELOUT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
QOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END SCAN;
--************************************************--
ARCHITECTURE BEHAV OF SCAN IS
--************************************************--
--***************定义个元件*******************--
COMPONENT COUNT10 --定义个元件:十进制计数器的调用;
PORT(CLK,CLR,ENA:IN STD_LOGIC;
QOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END COMPONENT;
--************************************************--
--***************定义第二个元件*******************--
COMPONENT COUNT8 --定义第二个元件:扫描信号
发生器的调用;
PORT(CLK:IN STD_LOGIC;
QOUT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)
);
END COMPONENT;
--************************************************--
--***************定义第三个元件*******************--
COMPONENT DELED --定义第三个元件:七段通用译码器的调用;
port(
datain:in std_logic_vector(3 downto 0);
qout:out std_logic_vector(6 downto 0)
);
END COMPONENT;
--************************************************--
--*******************定义信号*********************--
SIGNAL S1:STD_LOGIC_VECTOR(3 DOWNTO 0);
--************************************************--
--****************元件例化体开始******************--
BEGIN
U1:COUNT10 PORT MAP(CLKK,CLRR,ENAA,S1); --例化个元件;
U2:DELED PORT MAP(S1,QOUT); --例化第二个元件;
U3:COUNT8 PORT MAP(CLK_SEL,SELOUT); --例化第三个元件;
END BEHAV;
--************************************************--
--*****************程序结束××*******************--
--************************************************--