1.用 VHDL 语言设计实现一个分频系数为 10,分频输出信号占空比为 50%
的分频器,仿真验证设计。
2.用 VHDL 语言设计实现一个带异步复位的 8421 码十进制计数器,仿真验
证其功能。
3.将分频器、计数器和数码管译码器 3 个电路进行连接,实现一个每秒加 1
的计数器,并在数码管上显示计数结果。
需要修改代码,以满足题目要求
allproject部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY allproject IS
PORT(
clear2 :IN STD_LOGIC;
clk1:IN STD_LOGIC;
b1:OUT STD_LOGIC_VECTOR(6 downto 0);
CAT:OUT STD_LOGIC_VECTOR(7 downto 0)
);
end allproject;
ARCHITECTURE a OF allproject IS
COMPONENT div_10
PORT(
clk :IN STD_LOGIC;
clk_out:OUT STD_LOGIC
);
END COMPONENT;
COMPONENT count10
PORT(
clk,reset:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END COMPONENT;
COMPONENT seg7_1
PORT(
a:IN STD_LOGIC_VECTOR(3 downto 0);
b:OUT STD_LOGIC_VECTOR(6 downto 0)
);
END COMPONENT;
SIGNAL na:STD_LOGIC;
SIGNAL nb:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
u1:div_10 PORT MAP(clk_out=>na,clk=>clk1);
u2:count10 PORT MAP(reset=>clear2,clk=>na,q=>nb);
u3:seg7_1 PORT MAP(a=>nb,b=>b1);
CAT<="11111101";
END a;
计数器count10部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY count10 IS
PORT(
clk,reset:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END count10;
ARCHITECTURE a OF count10 IS
SIGNAL q_temp:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(clk,reset)
BEGIN
IF reset='0' THEN
q_temp<="0000";
ELSIF clk'EVENT AND clk='1' THEN
IF q_temp="1001" THEN
q_temp<="0000";
ELSE q_temp<=q_temp+1;
END IF;
END IF;
END PROCESS;
q<= q_temp;
END a;
分频器div__10部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY div_10 IS
PORT(
clk :IN STD_LOGIC;
clk_out:OUT STD_LOGIC;
clear : IN STD_LOGIC
);
END div_10;
ARCHITECTURE a OF div_10 IS
SIGNAL tmp:INTEGER RANGE 0 TO 4;
SIGNAL clktmp:STD_LOGIC;
BEGIN
PROCESS(clear,clk)
BEGIN
IF clk'event AND clk='1' THEN
IF tmp = 4 THEN
tmp<=0;clktmp<=NOT clktmp;
ELSE
tmp <=tmp+1;
END IF;
END IF;
END PROCESS;
clk_out<=clktmp;
END a;
数码管seg7_1部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY seg7_1 IS
PORT (
a: IN STD_LOGIC_VECTOR(3 downto 0);
b: OUT STD_LOGIC_VECTOR(6 downto 0);
cat:out std_logic_vector(5 downto 0)
);
end seg7_1;
ARCHITECTURE seg7_1_arch OF seg7_1 IS
BEGIN
PROCESS ( a )
BEGIN
CASE a IS
WHEN "0000" => b <="1111110"; --0
WHEN "0001" => b <="0110000"; --1
WHEN "0010" => b <="1101101"; --2
WHEN "0011" => b <="1111001"; --3
WHEN "0100" => b <="0110011"; --4
WHEN "0101" => b <="1011011"; --5
WHEN "0110" => b <="1011111"; --6
WHEN "0111" => b <="1110000"; --7
WHEN "1000" => b <="1111111"; --8
WHEN "1001" => b <="1111011"; --9
WHEN OTHERS => b <="0000000";
END CASE;
END PROCESS;
cat<="111101";
END;
最好能达到这样的仿真效果
