EDA计数器实验
- 格式:doc
- 大小:363.00 KB
- 文档页数:12
计数器
一、实验目的
1、设计一个带使能输入、进位输出及同步清0的增1十进制计数器
2、设计一个带计数使能、同步清0、同步加载的4位计数器
3、设计一个带使能、同步清0控制和进位输出的增14位二进制计数器,计数结果由一位7段码管显示。
4、设计一个带使能和同步清0控制的增1减18位二进制计数器,计数结果由7段数码管显示。
二、实验内容
1、带使能、同步清0控制和进位输出的增14位二进制计数器
VHDL源代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity counter2 is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
en : in STD_LOGIC;
co : out STD_LOGIC;
y : out STD_LOGIC_VECTOR (6 downto 0));
end counter2;
architecture Behavioral of counter2 is
signal cnt:STD_LOGIC_VECTOR(3 downto 0);
signal led:STD_LOGIC_VECTOR(6 downto 0);
begin
process(clk)
begin
if(clk'event and clk='1')then
if clr='1' then
cnt<=(others=>'0');
elsif en='1' then
if cnt="1111" then
cnt<="0000";
else
cnt<=cnt+'1';
end if;
end if;
end if;
end process;
co<='1' when cnt="1111" else '0';
y<=not led;
with cnt select led<="1111001"when"0001",
"0100100"when"0010",
"0110000"when"0011",
"0011001"when"0100",
"0010010"when"0101",
"0000010"when"0110",
"1111000"when"0111",
"0000000"when"1000",
"0010000"when"1001",
"0001000"when"1010",
"0000011"when"1011",
"1000110"when"1100",
"0100001"when"1101",
"0000110"when"1110",
"0001110"when"1111",
"1000000"when others;
end Behavioral;
激励文件源代码
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY counter_2_tbw_vhd IS
END counter_2_tbw_vhd;
ARCHITECTURE behavior OF counter_2_tbw_vhd IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT counter2
PORT(
clk : IN std_logic;
clr : IN std_logic;
en : IN std_logic;
co : OUT std_logic;
y : OUT std_logic_vector(6 downto 0)
);
END COMPONENT;
--Inputs
SIGNAL clk : std_logic := '0';
SIGNAL clr : std_logic := '0';
SIGNAL en : std_logic := '0';
--Outputs
SIGNAL co : std_logic;
SIGNAL y : std_logic_vector(6 downto 0);
BEGIN
-- Instantiate the Unit Under Test (UUT) uut: counter2 PORT MAP(
clk => clk,
clr => clr,
en => en,
co => co,
y => y
);
clk<=not clk after 20 ns;
tb : PROCESS
BEGIN
clr<='1','0' after 30 ns;
en<='0','1' after 20 ns;
-- Wait 100 ns for global reset to finish
--wait for 100 ns;
-- Place stimulus here
wait; -- will wait forever
END PROCESS;
END;
功能仿真
时序仿真
管脚设置 NET "clk" LOC = "E10" ;
NET "clr" LOC = "L13" ;
NET "co" LOC = "F12" ;
NET "en" LOC = "L14" ;
NET "y<0>" LOC = "B4" ;
NET "y<1>" LOC = "A4" ;
NET "y<2>" LOC = "D5" ;
NET "y<3>" LOC = "C5" ;
NET "y<4>" LOC = "A6" ;
NET "y<5>" LOC = "B6" ;
NET "y<6>" LOC = "E7" ;
实验现象
七段数码管显示0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F,每次循环完成co所接led灯亮一下,表示进位。实验现象与设计相符,实验结果正确。
2、带使能输入、进位输出及同步清0的增1十进制计数器
VHDL源代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity counter3 is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
en : in STD_LOGIC;
co : out STD_LOGIC;
count : out STD_LOGIC_VECTOR (3 downto 0));
end counter3;
architecture Behavioral of counter3 is
SIGNAL cnt : STD_LOGIC_VECTOR(3 downto 0);
begin
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF clr = '1' THEN
cnt <= (OTHERS => '0');
ELSIF en = '1' THEN IF cnt = "1001" THEN
cnt <= "0000";
co<='1';
ELSE
cnt <= cnt + '1';
co<='0';
END IF;
END IF;
END IF;
END PROCESS;
count <= cnt;
end Behavioral;
激励信号代码
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY counter_tbw_vhd IS
END counter_tbw_vhd;
ARCHITECTURE behavior OF counter_tbw_vhd IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT counter3
PORT(
clk : IN std_logic;
clr : IN std_logic;
en : IN std_logic;
co : OUT std_logic;
count : OUT std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
SIGNAL clk : std_logic := '0';
SIGNAL clr : std_logic := '0';
SIGNAL en : std_logic := '0';
--Outputs
SIGNAL co : std_logic;
SIGNAL count : std_logic_vector(3 downto 0);
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: counter3 PORT MAP(
clk => clk,
clr => clr,
en => en,