精品文档
课程名称:
课设题目:
精品文档
本科实验报告
CPLD/FPGA应用设计 交通灯控制器
精品文档
交通灯控制器
一、设计要求
设计一个由一条主干道和一条支干道的十字路口的交通灯控制器,具体要求如下:
(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
(2) 主干道处于常允许通行状态,而支干道有车来才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯。 (3) 当主、支道均有车时,两者交替允许通行,主干道每次放行45 s,支干道每次放行25 s,由亮绿灯变成亮红灯转换时,先亮5 s的黄灯作为过渡,并进行减计时显示。
二、设计方案 1基本原理
(1) 设置支干道有车开关SB。
(2) 系统中要求有45秒、25秒和5秒三种定时信号,需要设计三种相应的计时显示电路。计时方法为倒计时。定时的起始信号由主控电路给出,定时时间结束的信号输入到主控电路。
(3) 主控制电路的输入信号一方面来自车辆检测,另一方面来自45秒、25秒、5秒的定时到信号;输出有计时启动信号(置计数起始值)和红绿灯驱动信号。 (4) 状态转移如图所示,用状态机描述。
状态转移图
(5) 模块结构
精品文档
精品文档
JTDKZclksbRSTINPUTVCCINPUTVCCINPUTVCCCLKSBcntRSTenMRMYMGBRBYBGdin[7..0]yima7OUTPUTOUTPUTmrmyOUTPUTOUTPUTOUTPUTOUTPUTmgbrbybginst1A[3..0]LED7S[6..0]OUTPUTLEDH[6..0]jsqinst2enRSTDin[7..0]CLKCntQH[3..0]QL[3..0]yima7A[3..0]LED7S[6..0]OUTPUTLEDL[6..0]instinst3 模块结构图
2设计框图
交通灯控制器原理框图如下图所示,包括置数模块、计数模块、主控制器模块和译码器模块。置数模块将交通灯的点亮时间预置到置数电路中,计数模块以秒为单位倒计时,当计数值减为零时,主控电路改变输出状态,电路进入下一个状态的倒计时。其中,核心部分是主控制模块。
红 绿 黄 红 绿 黄 清零 主控制器 特殊状态 定时计数器 置数器 译码器 显示器
三、实验设备
计算机一台
操作系统:WINDOWS XP
软件: ispDesignEXPERT System 硬件: 1016E开发板
四、设计步骤
精品文档
精品文档
1打开ispEXPERT软件,建立一个新的工程JTD
单击菜单File→New Project, 输入工程路径,工程名
2建立VHDL文件
单击File→New菜单项,选择VHDL File选项,单击OK按钮以建立VHDL文
件,分别建立主控制器模块程序的vhd文件JTDKZ.vhd、计数器模块程序的vhd文件jsq.vhd、七段译码器程序的vhd文件yima7.vhd和主程序的vhd文件zhu.vhd。
a)主控制器模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY JTDKZ IS
PORT(CLK,SB,cnt,RST:IN STD_LOGIC;
en,MR,MY,MG,BR,BY,BG: OUT STD_LOGIC; din:out STD_LOGIC_vector(7 downto 0)); END ENTITY JTDKZ;
ARCHITECTURE ART OF JTDKZ IS TYPE STATE_TYPE IS(A,B,C,D);
SIGNAL p_STATE,n_state: STATE_TYPE; BEGIN
reg:PROCESS(CLK,rst) IS
BEGIN
if rst='1' then p_STATE<=A;
ELSIF(CLK'EVENT AND CLK='1')THEN p_STATE<=n_state; END IF;
end process reg;
com:PROCESS(sb,cnt,p_state) begin
CASE p_STATE IS
WHEN A=>MR<='1'; MY<='1'; MG<='0'; BR<='0'; BY<='1'; BG<='1'; IF(SB AND cnt)='1' THEN
n_STATE<=B; din<=\"00000101\"; EN<='0'; ELSE
n_STATE<=A; din<=\"01000101\"; EN<='1'; END IF;
WHEN B=>MR<='1'; MY<='0'; MG<='1'; BR<='0'; BY<='1'; BG<='1';
精品文档
精品文档
IF cnt='1' THEN
n_STATE<=C; din<=\"00100101\"; EN<='0'; ELSE
n_STATE<=B; din<=\"01000101\"; EN<='1'; END IF;
WHEN C=>MR<='0'; MY<='1'; MG<='1'; BR<='1'; BY<='1'; BG<='0'; IF cnt='1' THEN
n_STATE<=D; din<=\"00000101\"; EN<='0'; ELSE
n_STATE<=C; din<=\"01000101\"; EN<='1'; END IF;
WHEN D=>MR<='0'; MY<='1'; MG<='1'; BR<='1'; BY<='0'; BG<='1'; IF cnt='1' THEN
n_STATE<=A;din<=\"01000101\"; EN<='0'; ELSE
n_STATE<=D; din<=\"01000101\"; EN<='1'; END IF; END CASE;
END PROCESS com;
END ARCHITECTURE ART;
b)计数器模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY jsq IS
PORT(en, RST: IN STD_LOGIC;
Din: IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC;
Cnt: OUT STD_LOGIC;
QH, QL:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END ENTITY jsq;
ARCHITECTURE ART OF jsq IS BEGIN
cnt<='1' WHEN (QH=\"0000\" AND QL=\"0000\") ELSE '0'; PROCESS(CLK,en,RST) BEGIN
IF RST='1' THEN
QH<=\"0100\";QL<=\"0101\";
ELSIF CLK'EVENT AND CLK='1' THEN IF en='0' THEN
精品文档
精品文档
QH<=Din(7 DOWNTO 4); QL<=Din(3 DOWNTO 0); elsIF QL=0 THEN QL<=\"1001\";
IF QH=0 THEN QH<=\"1001\";
ELSE
QH<=QH-1; END IF; ELSE
QL<=QL-1; END IF; END IF;
END PROCESS;
END ARCHITECTURE ART;
c)7段译码器
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_11.ALL ; ENTITY yima7 IS
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END ;
ARCHITECTURE art OF yima7 IS BEGIN
PROCESS( A ) BEGIN
CASE A IS
WHEN \"0000\" => LED7S <= \"1000000\" ; WHEN \"0001\" => LED7S <= \"1111001\" ; WHEN \"0010\" => LED7S <= \"0100100\" ; WHEN \"0011\" => LED7S <= \"0110000\" ; WHEN \"0100\" => LED7S <= \"0011001\" ; WHEN \"0101\" => LED7S <= \"0010010\" ; WHEN \"0110\" => LED7S <= \"0000010\" ; WHEN \"0111\" => LED7S <= \"1111000\" ; WHEN \"1000\" => LED7S <= \"0000000\" ; WHEN \"1001\" => LED7S <= \"0010000\" ; WHEN OTHERS => LED7S <= \"1111111\" ; END CASE ; END PROCESS ; END ;
d)顶层链接文件
精品文档
精品文档
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY JTD IS
PORT(CLK,SB,RST:IN STD_LOGIC;
LED1,LED2,LED3,LED4,LED5,LED6:OUT STD_LOGIC; SEG1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SEG2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END JTD;
ARCHITECTURE BEHAVIORAL OF JTD IS SIGNAL E:STD_LOGIC; SIGNAL CN:STD_LOGIC;
SIGNAL DI:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL YIMA1,YIMA2:STD_LOGIC_VECTOR(3 DOWNTO 0); COMPONENT JTDKZ IS
PORT(CLK,SB,cnt,RST: IN STD_LOGIC; en,MR,MY,MG,BR,BY,BG: OUT STD_LOGIC; din:out STD_LOGIC_vector(7 downto 0) );
END COMPONENT; COMPONENT JSQ IS
PORT(en, RST: IN STD_LOGIC;
Din: IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC;
Cnt: OUT STD_LOGIC; QH, QL:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) );
END COMPONENT; COMPONENT YIMA7 IS
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );
END COMPONENT; BEGIN
U0:JTDKZ PORT MAP(CLK,SB,CN,RST,E,LED1,LED2,LED3,LED4,LED5,LED6,DI); U1:JSQ PORT MAP(E,RST,DI,CLK,CN,YIMA1,YIMA2);
U2:YIMA7 PORT MAP(YIMA1,SEG1);
U3:YIMA7 PORT MAP(YIMA2,SEG2);
END BEHAVIORAL;
精品文档
精品文档
3调试程序
4引脚锁定
精品文档
精品文档
5器件下载
6、波形仿真
7、硬件调试
精品文档
精品文档
五、设计结果与分析
1、RST为复位信号,当RST=0时,显示器终止原来的计数变成00,RST=1时正常计数。
2、当SB=0时支路没车,主路一直有车通过,实验板上显示器一直从0到45秒变化。
当SB=1时,主,支干道均有车,两者交替允许通行,主干道每次放行45s,支干道每次放行25s,由亮绿灯变成亮红灯转换时,先亮5s的黄灯作为过渡,并进行减时显示。
六、设计总结
精品文档