8路彩灯控制
- 格式:doc
- 大小:1.01 MB
- 文档页数:5
实验一 8路彩灯控制器
实验目的:
(1)学会各种8路彩灯控制器的设计方法
(2)学会VHDL的多进程及多层次设计方法
实验原理:
8路彩灯的三钟花形控制器。能控制8路彩灯按两种节拍、三种花形循环变化。两种节拍分别为0.25s和0.5s。三种花形分别为:
(1)8路彩灯从左至右按次序渐亮,全亮后后逆次序渐灭。
(2)从中间到两边对称的渐亮,全亮后逆次序渐灭。
(3)8路彩灯分成两半,从左至右顺次渐亮,全亮后则全灭。
两种节拍的交替只需要将4Hz的时钟脉冲二分频,得到一个2Hz的时钟脉冲,让这两种时钟脉冲交替来控制三种花形循环变化即可设计思想体现在图一所示的顶层原理图中。
FEN2是一个二分频器,MUX21是二选一多路选择器,CD是8路彩灯的三种花形控制器。
实验内容:
(1)在MAX+plusII中用VHDL语言输入FEN2 、MUX21、CD源程序,保存名字与实体名一致,后缀为vhd,选择目标器件为EP1K30TC144-3,然后
进行编译、仿真,.
(2)选实验电路结构图为NO.1,8路彩灯依次接PIO32~PIO39,clk 可接CLOCK0~4中的任一个,查表进行引脚锁定。
参考程序:
1. 8路彩灯的三种花形控制模块CD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cd IS
PORT(clk:IN STD_LOGIC;
jp:OUT STD_LOGIC;
qq:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END cd;
ARCHITECTURE behav OF cd IS
CONSTANT w:INTEGER:=7;
SIGNAL q:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(clk)
VARIABLE flag:BIT_VECTOR(2 DOWNTO 0):="000"; VARIABLE jp1:STD_LOGIC:='0';
BEGIN
IF clk 'EVENT AND clk='1' THEN
IF flag="0000" THEN
q<='1'&q(w DOWNTO 1);
IF q(1)='1' THEN
flag:="001";
END IF;
ELSIF flag="001" THEN
q<=q(w-1 DOWNTO 0)&'0';
IF q(6)='0' THEN
flag:="010";
END IF;
ELSIF flag="010" THEN
q(w DOWNTO 4)<=q(w-1 DOWNTO 4)&'1';
q(w-4 DOWNTO 0)<='1'&q(w-4 DOWNTO 1); IF q(1)='1' THEN
flag:="011";
END IF;
ELSIF flag="011" THEN
q(w DOWNTO 4)<=q(w-1 DOWNTO 4)&'0'; q(w-4 DOWNTO 0)<='0'&q(w-4 DOWNTO 1); IF q(1)='0' THEN
flag:="100";
END IF;
ELSIF flag="100" THEN
q(w DOWNTO 4)<='1'&q(w DOWNTO 5);
q(w-4 DOWNTO 0)<='1'&q(w-4 DOWNTO 1); IF q(1)='1' THEN
flag:="101";
END IF;
ELSIF flag="101" THEN
q<="00000000";
jp1:=NOT jp1 ;
flag:="000";
END IF;
END IF;
qq<=q;
jp<=jp1;
END PROCESS;
END behav;
仿真波形图
2. 二选一多路选择器模块MUX21 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS
PORT(a,b,s:IN STD_LOGIC;
y:OUT STD_LOGIC); END mux21;
ARCHITECTURE ar OF mux21 IS BEGIN
PROCESS(a,b,s)
BEGIN
IF s='0'THEN
y<=a;
ELSE
y<=b;
END IF;
END PROCESS;
END ar;
仿真波形图
3. 二分频模块FEN2
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY fen2 IS
PORT(clk:IN STD_LOGIC;
clkk:OUT STD_LOGIC);
END fen2;
ARCHITECTURE behav OF fen2 IS BEGIN
PROCESS(clk)
VARIABLE clkk1:STD_LOGIC:='0'; BEGIN
IF clk 'EVENT AND clk='1' THEN clkk1:=NOT clkk1;
END IF;
clkk<=clkk1;
END PROCESS;
END behav;
仿真波形图
顶层仿真波形: