中北大学信息商务学院2009届本科毕业设计任务书
也是该程序的考察重点。由于是连接的第3状态为前提,在对第4状态的编程的过程中可以分为2个情况来考虑,这样就降低难度。
整个程序贯穿了时钟模块、彩灯模块、控制模块、扫描电路4大模块的穿插连接,实现了设计要求的功能。但是显示的状态没有考虑周全,在交通突发事件出现这个环节上有待提高。
程序中我设计应用了4个开关来控制并给程序输入信号,小道为一个开关控制大道由3个开关控制。根据实际的情况和具体的要求可以接入传感器来达到完全自动的效果。
第 21 页 共33 页
中北大学信息商务学院2009届本科毕业设计任务书
结束语
交通信号灯在应用于道路交通安全中起到非常重要的作用,但在许多研究中,都未能根据实际情况进行设计。课题中首先根据实际情况详细说明了设计,给出了一些在操作上会出现错误的解决方案;其次,通过仿真,避免了在设计时缺少的灵活性。本设计能灵活地控制各项参数、任意改变参数、改变需要的时间。在实际应用中,道路情况非常复杂,控制时间各不相同。只有用计算机模拟软件,就能控制并运用好芯片及控制各项参数,取得较好的效果。通过模拟实验可以更好地运用知识于实践当中,在交通信号灯自动定时控制系统使用中,小规模数字集成电路实现非常方便,而且便于在EDA内进行仿真实验。在实际应用中,情况不一样,设计也不同。
交通灯是人们日常生活必须接触和认识的交通工具,交通灯的设计方法非常灵活,用VHDL语言来编写具有非常明显的优势,其设计层次较高、用于较复杂的计算时,能尽早发现存在的问题,缩短设计周期。在编写过程中计数器程序的编写是最难的,它要求控制4个时间段,及6、4、25、4秒。在EDA实验箱上进行测试多次不成功,所以我用了2个计数器来化解这个问题我也加入了一个非门把问题简单话。
第 22 页 共33 页
中北大学信息商务学院2009届本科毕业设计任务书
附录A 全程序
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity light is
port (
fosc : in std_logic;
small : in std_logic; big
: in std_logic_vector(2 downto 0);
greenbig : out std_logic; redbig : out std_logic; yellowbig
: out std_logic;
greensmall : out std_logic;
yellowsmall : out std_logic; redsmall : out std_logic; sign
: out std_logic_vector(7 downto 0)
);
end light;
architecture Behavioral of light is signal f_greenbig : std_logic:='0'; signal f_redbig : std_logic:='0'; signal f_yellowbig
: std_logic:='0';
signal
f_greensmall : std_logic:='0';
signal f_yellowsmall : std_logic:='0'; signal f_redsmall : std_logic:='0';
signal count : std_logic_vector(10 downto 0):=\
第 23 页共33 页
中北大学信息商务学院2009届本科毕业设计任务书
signal clk : std_logic:='0';
signal
rb_delay: std_logic_vector(7 downto 0):=\
signal i : integer range 0 to 150:=0; type erd is (erd0,erd1,erd2,erd3,erd4,erd5); signal er_state : erd:=erd0; type ers is (er0,er1,er2,er3,er4,er5); signal e_state : ers:=er0; type erb is (e0,e1,e2,e3);
signal state : erb:=e0;
type memory is array ( 0 to 9) of std_logic_vector(7 downto 0);
signal dataz :memory; begin
dataz(0)<=\
dataz(1)<=\ dataz(2)<=\ dataz(3)<=\
dataz(4)<=\
dataz(5)<=\ dataz(6)<=\ dataz(7)<=\
dataz(8)<=\
dataz(9)<=\
greenbig <= f_greenbig; redbig <= f_redbig;
yellowbig <= f_yellowbig;
greensmall <= f_greensmall;
yellowsmall<= f_yellowsmall;
redsmall <= f_redsmall;
第 24 页共33 页
中北大学信息商务学院2009届本科毕业设计任务书
-----------------------------------------------------------------
p0: process(fosc) begin
if fosc'event and fosc='1' then count<=count+1;
if count=\
clk<=not clk;
count<=\
end if;
end if;
end process p0;
-------------------------------------------------------------------
p1: process(clk,small,big,er_state,e_state,state) begin
if clk'event and clk='1' then if small='0' then f_greenbig<='0'; f_yellowbig<='1'; f_redbig<='1'; f_greensmall<='1'; f_yellowsmall<='1';
f_redsmall<='0';
-----------------------------------------------------------------------
elsif small>'0'and big=\
第 25 页 共33 页