集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2061|回复: 3

求助?自动交通控制系统

[复制链接]
xchromosome 发表于 2010-5-18 14:38:48 | 显示全部楼层 |阅读模式
题目:自动交通控制系统

设计任务:用FPGA实现设计

在一个具有主、支干道的十字路口,设计一个交通灯自动控制装置。要求:

1.当主干道与支干道均无车辆要求通行时,主干道应保持畅通,亮绿灯,支干道亮红灯。

2.如果主干道无车,支干道有车,则允许支干道通行,主干道亮红灯,支干道亮绿灯。

3.如果主干道和支干道均有车要求通行,则两者应交替通行,并要求主干道每次通行30秒,支干道每次通行20秒。
ccs 发表于 2010-5-18 15:56:45 | 显示全部楼层
给你参考
交通灯源码
交通灯源码
交通灯

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY TrafficLight IS
PORT (Clk        : IN STD_LOGIC;
    S,Reset      : IN STD_LOGIC;
    LED        : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
    Mg,My,Mr,Cg,Cy,Cr : OUT STD_LOGIC );
END TrafficLight ;

ARCHITECTURE rtl OF TrafficLight IS
TYPE TrafficState IS (mgcr, mycr, mrcg, mrcy);
SIGNAL State  : TrafficState ;
SIGNAL DataOut : STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL Count  : STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL SetCount : STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL Clrn   : STD_LOGIC ;
SIGNAL LEDB   : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN

Counter : PROCESS(clk)
BEGIN
  IF Reset = &#39;1&#39; OR (Clrn = &#39;1&#39; AND NOT(Count = "000000")) THEN Count <= "000000";
  ELSIF clk&#39;EVENT AND clk = &#39;1&#39; THEN
   IF NOT(Count = "111011" AND State = mgcr) THEN Count <= Count + 1;END IF;
  END IF;
END PROCESS Counter;

StateTransition : PROCESS(clk)
BEGIN
  IF Reset = &#39;1&#39; THEN State <= mgcr;Clrn <= &#39;0&#39;;
   ELSIF clk&#39;EVENT AND clk = &#39;1&#39; THEN
    CASE State IS
     WHEN mgcr => IF Count >= "111011" AND S = &#39;1&#39; THEN State <= mycr;Clrn <= &#39;1&#39;;
            ELSE Clrn <= &#39;0&#39;;
            END IF;
     WHEN mycr => IF Count >= "000011" THEN State <= mrcg;Clrn <= &#39;1&#39;;
            ELSE Clrn <= &#39;0&#39;;
            END IF;
     WHEN mrcg => IF Count >= "010011" OR S = &#39;0&#39; THEN State <= mrcy;Clrn <= &#39;1&#39;;
            ELSE Clrn <= &#39;0&#39;;
            END IF;
     WHEN mrcy => IF Count >= "000011" THEN State <= mgcr;Clrn <= &#39;1&#39;;
            ELSE Clrn <= &#39;0&#39;;
            END IF;
     WHEN OTHERS => NULL;
    END CASE;
  END IF;
END PROCESS StateTransition;

CountDown : PROCESS(CLK)
BEGIN
  IF LEDB > 59 THEN LED <= LEDB + 36;
  ELSIF LEDB > 49 THEN LED <= LEDB + 30;
  ELSIF LEDB > 39 THEN LED <= LEDB + 24;
  ELSIF LEDB > 29 THEN LED <= LEDB + 18;
  ELSIF LEDB > 19 THEN LED <= LEDB + 12;
  ELSIF LEDB > 9 THEN LED <= LEDB + 6;
  ELSE LED <= LEDB;
  END IF;
END PROCESS CountDown;

Output : BLOCK
BEGIN
  WITH State SELECT
   DataOut <= "100001" WHEN mgcr,
         "010001" WHEN mycr,
         "001100" WHEN mrcg,
         "001010" WHEN mrcy;
  WITH State SELECT
   SetCount <= "111100" WHEN mgcr,
         "000100" WHEN mycr,
         "010100" WHEN mrcg,
         "000100" WHEN mrcy;
  Mg <= DataOut(5);My <= DataOut(4);Mr <= DataOut(3);
  Cg <= DataOut(2);Cy <= DataOut(1);Cr <= DataOut(0);
  LEDB <= SetCount - ("00" & Count);
END BLOCK Output;

END ARCHITECTURE rtl;

评分

1

查看全部评分

ccs 发表于 2010-5-18 15:57:11 | 显示全部楼层
交通灯控制器方案下载
http://www.fpgaw.com/viewthread.php?tid=219&highlight=%BD%BB%CD%A8%B5%C6
Sunlife 发表于 2015-5-20 09:57:21 | 显示全部楼层
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-7 05:22 , Processed in 0.058867 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表