12使用VHDL语言设计交通灯控制器.

合集下载

基于VHDL的交通灯设计(EDA课程设计报告)!!

基于VHDL的交通灯设计(EDA课程设计报告)!!

EDA课程设计实验报告交通信号控制器的VHDL的设计一、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。

要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。

支干道主干道图1 路口交通管理示意图表1 交通信号灯的4种状态设计要求:(1)采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。

(2)编写设计报告,要求包括方案选择、程序清单、调试过程、测试结果及心得体会。

二设计原理1、设计目的:学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。

通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制2’设计说明(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。

因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。

模块说明:系统输入信号:Clk: 由外接信号发生器提供256的时钟信号;系统输出信号:full:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。

模块说明:系统输入:full: 接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:tm:产生显示电路状态转换信号tl:倒计数值秒数个位变化控制信号th:倒计数值秒数十位变化控制信号(3)第三模块:红绿灯状态转换电路本电路负责红绿灯的转换。

模块说明:系统输入信号:full: 接收由clk电路的提供的1hz的时钟脉冲信号;tm: 接收计数秒数选择电路状态转换信号;系统输出信号:comb_out: 负责红绿灯的状态显示。

基于VHDL的交通灯控制器设计

基于VHDL的交通灯控制器设计

基于VHDL 的交通灯控制器设计翟殿棠,方 敏,厉光伟(济南大学控制科学与工程学院 山东济南 250022)摘 要:传统的交通灯控制器多数由单片机或PLC 实现,本文介绍基于EDA 技术设计交通灯控制器的一种方案。

EDA 技术的一个重要特征就是使用硬件描述语言(HDL)来完成系统的设计文件,这在电子设计领域已得到设计者的广泛采用。

给出了交通灯控制器的VH DL 源程序和仿真结果。

仿真结果表明该系统的设计方案正确。

展示了VH DL 语言的强大功能和优秀特性。

关键词:交通灯控制器;电子设计自动化;硬件描述语言;可编程器件中图分类号:T N702 文献标识码:B 文章编号:1004373X(2007)0318702Design of Traffic Light Controller Based on VHDLZH AI Diantang,FANG Min,LI Guangwei(School of Cont rol Sci ence and Engineering,Ji nan Universi t y,Ji c nan,250022,China)A bstra ct :Tr affic light controller is usually developed by micr oprocessor or PLC.This paper introduces the design of t raffic light controller base on EDA,one im portant character istic of the EDA is that the design documents should be complet ed by the HDL,and it is widely used by electr onic designer now.The VH DL source progr ammer and simulating r esults of traffic light cont roller are given.T he simulating r esults show that the design met hod is corr ect,it shows the powerful function and excel 2lent char acter of the VHDL.Keywords :traff ic light controller;EDA;HDL;PLD收稿日期:20060706应用VH DL 语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。

基于VHDL的交通灯控制器设计

基于VHDL的交通灯控制器设计

生物医学工程王春雨基于VHDL的交通灯控制器设计应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。

下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。

1 系统功能与要求实现交通繁忙的主路和偶有车行的小路交会路口的交通管理。

要求:1、交通灯控制器控制主干道和小路交叉路口的交通。

2、小路口来车,主线路口绿灯切换到黄灯5秒钟后变为红灯。

3、红灯燃亮20秒后,自动切换为绿灯。

4、指示左转弯的绿灯亮12 s,绿灯变至红灯时,黄灯亮3 s。

5、主路的交通管制重新切换到绿灯后5分钟内不理睬小路上的车况,即使又有车辆驶入小路路口。

上述主路上的灯光显示,小路口的灯信号与之逻辑配合。

2 程序设计根据交通灯控制器的功能与要求,将其总体电路分为分频器、信号控制器两个模块。

外部脉冲振荡器的频率选为32768 kHz,经分频器分频得1 Hz的信号,1 Hz信号用做信号控制器的计数脉冲,用VHDL设计组成交通灯控制器的分频器、信号控制器两个模块,在M AX+plus Ⅱ平台上,编译VHDL程序,然后用原理图输入法形成总体框图。

实验程序:Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All;Entity Frequency10Hz IsPort(Clk20M: In Std_Logic;Clk10Hz:Out Std_Logic);End;Architecture Count Of Frequency10Hz Is Signal Tout:Integer Range 0 to ;Signal Clk:Std_Logic;BeginProcess(Clk20M)BeginIf rising_edge(Clk20M) thenIf Tout= thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk10Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All; Entity Frequency IsPort(Clk10Hz: In Std_Logic;Clk1Hz:Out Std_Logic);End;Architecture Count Of Frequency Is Signal Tout:Integer Range 0 to 4;Signal Clk:Std_Logic;BeginProcess(Clk10Hz)BeginIf rising_edge(Clk10Hz) thenIf Tout=4 thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk1Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Controller IsPort(Clock:In Std_Logic;Hold:In Std_Logic;CountNum:IN Integer RANgE 0 TO 49;Flash:Out Std_Logic;NumA,NumB:Out Integer Range 0 To 25;RedA,GreenA,YellowA:Out Std_Logic;RedB,GreenB,YellowB:Out Std_Logic);End;ARCHITECTURE Behavior OF Controller IS BEGINPROCESS(CLOCK)BeginIf falling_edge(Clock) thenIf Hold='1' thenRedA<='1';RedB<='1';GreenA<='0';GreenB<='0';YellowA<='0';YellowB<='0';Flash<='1';ElseFlash<='0';If CountNum<=19 thenNumA<=20-CountNum;RedA<='0';GreenA<='1';YellowA<='0';Elsif (CountNum<=24) thenNumA<=25-CountNum;RedA<='0';GreenA<='0';YellowA<='1';ElseNumA<=50-CountNum;RedA<='1';GreenA<='0';YellowA<='0';End If;If CountNum<=24 thenNumB<=25-CountNum;RedB<='1';GreenB<='0';YellowB<='0';Elsif CountNum<=44 thenNumB<=45-CountNum;RedB<='0';GreenB<='1';YellowB<='0';ElseNumB<=50-CountNum;RedB<='0';GreenB<='0';YellowB<='1';End If;End If;End If;End Process;End;LIBRARY IEEE;USE IEEE.Std_logic_1164.all;Use IEEE.Std_Logic_Unsigned.All; ENTITY Counter ISPORT(Clock:IN Std_logic;Reset:IN Std_logic;Hold:IN Std_logic;CountNum:BUFFER Integer RANGE 0 TO 49 );END;ARCHITECTURE Behavior OF Counter IS BEGINPROCESS(Reset,Clock)BEGINIF Reset='1'THENCountNum<=0;ELSIF rising_edge(Clock) THENIF Hold='1'THENCountNum<=CountNum;ELSEIF CountNum=49 THENCountNum<=0;ELSECountNum<=CountNum+1;END IF;END IF;END IF;END PROCESS;END Behavior;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Display IsPort( Clock:In Std_Logic;Flash:In Std_Logic;Qin:In Std_Logic_Vector(3 Downto 0); Display:Out Std_Logic_Vector(0 to 6)); End;Architecture Light Of Display IsSignal Timeout:Integer Range 0 To 11;BeginProcess(Clock)BeginIf rising_edge(Clock) thenIf (Flash='0') thenTimeout<=0;ElseIf (Timeout=11) thenTimeout<=0;ElseTimeout<=Timeout+1;End If;End If;If (Timeout<=6) thenCase Qin IsWhen "0000"=>Display<="";When "0001"=>Display<="";When "0010"=>Display<="";When "0011"=>Display<="";When "0100"=>Display<="";When "0101"=>Display<="";When "0110"=>Display<="";When "0111"=>Display<="";When "1000"=>Display<="";When "1001"=>Display<="";When Others=>Display<="";End Case;ElseDisplay<="";End If;End If;End Process;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All; Entity Fenwei IsPort(Numin:In Integer Range 0 To 25;NumA,NumB:Out Integer Range 0 To 9 );End;Architecture Fen Of Fenwei IsBeginProcess(Numin)BeginIf Numin>=20 thenNumA<=2;NumB<=Numin-20;Elsif Numin>=10 thenNumA<=1;NumB<=Numin-10;ElseNumA<=0;NumB<=Numin;End If;End Process;End;顶层框图:3.仿真结果。

基于VHDL语言的交通灯控制器设计

基于VHDL语言的交通灯控制器设计

基于VHDL语言的交通灯控制器设计2009年06 月18 日星期四20:38设计要求1、显示一个方向的绿、黄、红的指示状态。

2、特殊情况按键能实现特殊的功能,计数器停止计数并保持在原来的状态,显示红灯状态。

特殊后能继续计数.3、复位按键实现总体计数清零功能。

4、实现正常的倒计时功能. 用数码管作为倒计时显示, 显示时间为绿灯17s, 黄灯3s 红灯20s。

| ---------- >|--->| ------------ >|| 绿灯| 黄灯| 红灯|设计思想首先由晶振产生出发信号,由控制器处理成1HZ的时钟,利用此时钟进行计数,通过判断控制交通灯的亮灭。

通过每种灯亮的时间总数与计数值比较得到数码管应该显示的数值,利用分位分成十位和个位。

通过译码电路来实现数码管的显示。

本实验所使用的芯片为EPM7128SLS84-,6 实体逻辑单元为64 点,结构体逻辑单元为128 小型芯片。

软件本实验使用MAX+plus II 10 来进行程序的编写,编译,仿真以及下载。

在实验中发现其用,但仍有地方需要改进,不支持MOD取余运算。

(源程序)* 在MAX+plus II 中,汉字很容易出现乱码,建议大家用英文,这里为了考虑到读者的习惯写论文时都译成中文Library IEEE;Use IEEE.std_logic_1164.all;Entity redgreen isPort(clock_in:in std_logichold_state:instd_logic;reset_state:instd_logic,led_green ,led_yellow:out std_logic;led_redselect_en:buffer std_logic; select_display:out std_logic_vector(0 to 6)); end;Architecture half of redgreen isconstant loop_hz:integer:=800000; -- 一根据晶振实际频率算出来signal count_time:integer range 0 to loop_hz;signal clock_buffer:std_logic;signal clock_out:std_logic;signal count_num:integer range 0 to 40;signal display_num:integer range 0 to 20;signal display_shi:integer range 0 to 9;signal display_ge:integer range 0 to 9;constant loop_time:integer:=40; 个循环周期的时间constant red_time:integer:=20; -- 红灯的时间constant green_time:integer:=17; -- 绿灯的时间constant yellow_time:integer:=3; -- 黄灯的时间beginprocess(clock_in) -- 分频进程beginif rising_edge(clock_in) thenif count_time=loop_hz then count_time<=0; clock_buffer<=notclock_buffer;else count_time<=count_time+1;end if;end if; clock_out<=clock_buffer;-- 输入1HZ 的频率end process;process(reset_state ,clock_out) -- 计数进程beginif reset_state=1 then -- 重启后计数归零count_num<=0;elsif rising_edge(clock_out) thenif hold_state=1 then -- 紧急时计数占停count_num<=count_num;elseif count_num=loop_time-1 then count_num<=0;else count_num<=count_num+1;end if;end if;end if;end process;process(clock_out) -- 交通灯显示count countbeginnumnumif falling_edge(clock_in) thenif hold_state=1 then --led_red<=1;led_green<=0;led_yellow<=0;elseifelsifelseendif;占停时红灯亮display_num<=green_time-count_num;led_red<=0;led_green<=1;led_yellow<=0;display_num<=green_time+yellow_time-led_red<=0;led_green<=0;led_yellow<=1;display_num<=loop_time-count_num;led_red<=1;led_green<=0;led_yellow<=0;endif; end if;end process;process(display_num) -- 分位进程beginif display_num>=20 then display_shi<=2;display_ge<=display_num-20;elsif display_num>=10 thendisplay_shi<=1;display_ge<=display_num-10;elsedisplay_shi<=0;display_ge<=display_num;end if;end process;process(clock_in) -- 数码管显示beginif falling_edge(clock_in) thenselect_en<=1; -- 因为我们的实验箱采用数码管并联方式,所以显示case display_shi iswhen 0=>select_display<=1111110; when1=>select_display<=0110000; when 2=>select_display<=1101101; whenothers=>select_display<=0000000; end case;if select_en=1 then select_en<=0; case display_ge is when0=>select_display<=1111110; when 1=>select_display<=0110000; when2=>select_display<=1101101; when 3=>select_display<=1111001; when4=>select_display<=0110011; when 5=>select_display<=1011011; when6=>select_display<=1011111; when 7=>select_display<=1110000; when8=>select_display<=1111111; when 9=>select_display<=1110011; whenothers=>select_display<=0000000; end case;end if;end if;end process;end;-- 由于时间和硬件限制,这个程序仅仅实现了一路交通灯,用类似的方法可以写出两路交通灯的程library ieee;use ieee.std_logic_1164.all;entity redgreen isPort( clock_in:in std_logic; hold_state:in std_logic;reset_state:in std_logic;led_red,led_green,led_yellow:out std_logic; select_en:buffer std_logic; select_display:out std_logic_vector(0 to 6));end;architecture half of redgreen isbeginsignal count_time:integer range 0 to 800000;signal clock_buffer:std_logic;signal clock_out:std_logic;signal count_num:integer range 0 to 40;signal display_num:integer range 0 to 20; signal display_shi:integer range 0 to 9; signal display_ge:integer range 0 to 9; constantloop_time:integer:=50;constant red_time:integer:=25;constant green_time:integer:=20; constant yellow_time:integer:=5;begin process(clock_in)beginif rising_edge(clock_in)count_time<=0;clock_buffer<=not clock_buffer;count_time<=count_time+1;end if;end if;clock_out<=clock_buffer;end process;process(reset_state,clock_out)beginif reset_state=1then count_num<=0;elsif rising_edge(clock_out)then if hold_state=1then count_num<=count_num;else if count_num=loop_time-1then count_num<=0;else count_num<=count_num+1;end if;end if;thenif count_time=loop_hz then elseend if;end process;process(clock_out)beginif falling_edge(clock_in)then if hold_state=1thenled_red<=1;led_green<=0; led_yellow<=0;elseif count_numdisplay_num<=green_time-count_num;led_red<=0;led_green<=1;led_yellow<=0;elsif count_numdisplay_num<=green_time+yellow_time-count_num; led_red<=0;led_green<=0;led_yellow<=1;elsedisplay_num<=loop_time-count_num;led_red<=1;led_green<=0;led_yellow<=0;end if;end if;end if;end process;process(display_num)beginif display_num>=20then display_shi<=2;display_ge<=display_num-20;elsif display_num>=10then display_shi<=1;display_ge<=display_num-10;else display_shi<=0;display_ge<=display_num;end if;end process;process(clock_in)beginif falling_edge(clock_in)then select_en<=1;case display_shi iswhen 0=>select_display<=1111110;when 1=>select_display<=0110000;when 2=>select_display<=1101101;when others=>select_display<=0000000; end case;if select_en=1then select_en<=0;case display_ge iswhen 0=>select_display<=1111110;when 1=>select_display<=0110000;when 2=>select_display<=1101101;when 3=>select_display<=1111001;when 4=>select_display<=0110011;when 5=>select_display<=1011011;when 6=>select_display<=1011111;when 7=>select_display<=1110000;when 8=>select_display<=1111111;when 9=>select_display<=1110011;when others=>select_display<=0000000;end case; end if; end if;end process; end;end half;。

交通灯控制器VHDL设计

交通灯控制器VHDL设计

情况
LIGHT: OUT STD_LOGIC_VECTOR(5 DOWNTO 0); --
light:G1,R1,Y1,G2,R2,Y2;
Q1,Q2 : OUT INTEGER RANGE 0 TO 55);
END TRAFFIC2 ;
ARCHITECTURE behav OF TRAFFIC2 IS
亮红灯 ELSIF CLK'EVENT AND CLK='1'
THEN CASE STATE IS --states为s0时,南北方向亮绿灯,东西方向亮红灯,50s WHEN S0=> LIGHT<="100010";
T1<=T1-1;T2<=T2-1; Q1<=T1;Q2<=T2; IF T1=0 THEN
END IF;
--states为s3时,南北方向亮红灯,东西方向黄灯,
5s WHEN S3=> LIGHT<="010001";
T1<=T1-1;T2<=T2-1;
Q1<=T1;Q2<=T2;
IF T1=0 THEN
STATE<=S0;T1<=50;T2<=55;
END IF;
WHEN OTHERS=>STATE<=S0;T1<=50;T2<=55;--主
END IF;
--states为s2时,南北方向亮红灯,东西方向绿灯,
30s WHEN S2=> LIGHT<="010100";
T1<=T1-1;T2<=T2-1;
Q1<=T1;Q2<=T2;

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现
(k1=0)
图为k1=0时的输出状态s1,输出恒为011110。即亮灯为R1,y2。保持时间1S。
(k2=0)
上图为k2=0时的输出状态s2,输出恒为101011。即亮灯为G1,R2。保持时间2S。
(k3=0)
上图为k3=0时的输出状态s3,输出恒为110011。即亮灯为R1,G2。保持时间1S。
四、小结及心得体会
else
if counter<5 then
next_state<=s3;
else
next_state<=s0;
end if;
end if;
end if;
end if;
end if;
end case;
end process;
ouput:process(current_state)
begin ——显示程序
begin
u1: jiaotongdeng port map(
clk=>clki,
k0=>k0,
k1=>k1,
k2=>k2,
k3=>k3,
r1=>r1,r2=>r2,g1=>g1,g2=>g2,y1=>y1,y2=>y2
);
u2: div port map(clk=>clk1,clk_out=>clki);
end if;
end if;
end if;
when s3=>
if k0='0' then
next_state<=s0;
else
if k1='0' then
next_state<=s1;

基于VHDL的交通灯控制器的设计

基于VHDL的交通灯控制器的设计一、设计目的1、掌握计数器、分频器、译码器的工作原理和设计方法;2、掌握数码管的动态扫描译码显示的工作原理和设计方法;3、掌握交通灯控制器的设计方法;4、掌握在EDA开发软件QuartusII环境下基于FPGA/CPLD的数字系统设计方法,掌握该环境下系统的功能仿真、时序仿真、管脚锁定和芯片下载的方法。

二、概述在城市的的十字路口处都设置有交通信号灯控制系统,这个系统由绿、黄、红信号灯指挥十字路口车辆和行人的正常通行。

其示意图如下所示:要支道主要干道S主要干道次要支道三、设计任务与要求设计一个主要干道和次要支道交叉路口处的交通信号灯控制器,其技术要求如下:1、要求主要干道和次要支道上各具有绿、黄、红三色信号灯,用来指示车辆的允许通行或禁止通行,同时设有计时、译码及显示电路,显示定时器的定时状态。

2、如果只有一个方向有车时,则保持该方向畅通;当两个方向都有车时,主要干道和次要支道交替通行,但主要干道通行的时间要比次要支道长一些。

设主要干道每次通行的时间为60秒,即主要干道每次绿灯亮的时间为60秒;次要支道上每次通行时间为30秒,即次要支道上绿灯亮的时间为30秒。

3、要求主要干道或是次要支道上绿灯亮足规定的时间后,要求黄灯先亮5秒钟后红灯才能亮,然后才能交换通行车道。

四、系统框图及组成系统主要由控制器和处理器两部分组成,控制器接受外部系统时钟信号。

处理器由定时器和译码显示器组成。

定时器能向控制器发出5秒、30秒和60秒的定时信号,译码器在控制器的控制下,改变交通灯的信号。

根据上述要求画出系统框图如下:图中:R:主要干道传感器来的信号,高电平表示有车,低电平表示设车。

S:次要支道传感器来的信号,高电平表示有车,低电平表示设车。

T L:主要干道绿灯亮的时间间隔为60秒,即主要干道车辆通行的时间为60秒,定时时间到时,T L=1,否则,T L=0。

T S:次要支道绿灯亮的时间间隔为30秒,即次要支道车辆通行的时间为30秒,定时时间到时,Ts=1,否则,T S=0。

VHDL课程设计交通信号灯控制器

交通信号灯控制器1.课程设计目的通过理论课的学习,学生已经掌握了不少理论知识。

对于一个未来的工程技术人员来说,如何运用所学知识去分析和解决实际问题是至关重要的。

本课程设计的目的也正是如此。

2.课程设计内容基本要求:1、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色机动车辆信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

2、主、支干道两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,用二位七段LED显示45秒、25秒倒计时。

3、在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外。

较高要求:1、能设置主干道和支干道每次放行的时间2、在每个路口增加红、绿人行道信号灯(即:每个路口共有五盏信号灯),能实现现实交通灯控制器的全部功能3.设计条件软件:本实验使用到Altera公司的Max+plus 2软件。

硬件:4.设计思路4.1题意的理解依题意可知过程图如下在仔细画图判断可知当支路绿灯亮到暗再黄灯从亮到暗这个时间刚好为主干道的红灯亮的时间,同理支路红灯亮的时间也刚好等于主干路绿灯和黄灯亮的时间和。

由此可以将两个红灯的控制计数器有理地省略。

同时还可以知道支路的红灯亮时支路的人行道的绿灯亮,人行道绿灯暗时红灯亮;同理主干道的人行道绿灯也和主干道的红灯同时亮暗,红灯相反。

因此也可省略人行道的红绿灯控制器。

主要的控制就可由主干和支路的黄绿灯的控制器控制,为4个控制器,大大省略了设计时间和成本,也是设计更加简便。

如下图为改进后的过程图:4.2设计过程设想(1)在开始设计时是设想能否由一个总的计数器来计数,再分段把要的时间通过赋值的形式导出,这个输出也就是黄绿灯的控制点同时也设计一个倒计时计数器显示倒数时间,但通过实验可知这些都可以实现。

但当要设计成可设置通行时间时就出现问题了,在设计总的计数器的过程中发现此时将非常复杂,容易出错且仿真过程需要非常多时间,这就不太符合本设计。

基于VHDL语言的交通灯控制器设计

基于VHDL 语言的交通灯控制器设计邱 磊 肖 兵(华南理工大学,广东广州510640)=摘 要> 本文通过交通灯控制器的设计,阐明了利用VH DL 硬件描述语言进行CPLD /FPGA 开发的一般思路和方法。

作出了针对现代公路要求,采用语言描述实现交通灯控制器功能的一种新的尝试,并对其普通功能作了进一步完善。

=关键词> VH DL ;FPGA /CPL D ;A SM 图;EDA1 引言自1987年VHDL (V ery High Integr ated Circuit Hardw are Description Lang uage)即超高速集成电路硬件描述语言,被定为IEEE 标准(IEEE-ST D-1076)以来,VHDL 已被工业界广泛认可,并取得了巨大成功,成为数字系统设计和存档的重要工具,极大的提高了数字系统的设计水平和效率[1]。

而八十年代中期诞生的复杂可编程逻辑器件(CPL D)和现场可编程逻辑门阵列(FPGA )以其大大提高了处理速度,可重复编程,功能灵活,降低了初始设计费用等优点,使得它的应用越来越广泛,特别是在产品生产前期和小批量生产中由于成本比使用专用集成电路(ASIC)便宜,因而有着非常广泛的市场潜力[2]。

本设计正是基于VHDL 语言全文本输入进行底层CPL D 开发。

2 具体设计应用以前普通的交通灯控制器只能根据事先给定时间进行通道的通禁控制,但由于如今车辆的迅速增多,给城市交通增加了严重的负担,而交通灯在其中正扮演着越来越重要的角色。

因此,要求寻找一种可以随时针对通道上车辆的密集度来控制和调节此通道的通禁时间,以期达到自动控制的目的,从而减少不合理的堵车现象的发生。

下面的设计中我们融入了这种思想,并将针对V HDL 语言描述作具体介绍。

VH DL 语言是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构描述、数据流描述以及行为描述三种描述形式的混和描述,可完成自顶向下的电路设计过程[3]。

十字路口交通灯控制器的VHDL设计

基于FPGA的半整数分频器设计一.系统设计任务及功能概述1.系统设计任务基于FPGA的半整数分频器设计任务要求:设有一个5MHz(或7、9、11、13、15、17、19、21、23 、25MHz)的时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5(或3.5、4.5、5.5、6.5、7.5、8.5、9.5、10.5、11.5、12.5),因此采用小数分频。

2.小数分频的基本原理小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。

如设计一个分频系数为10.1的分频器时,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:F=(9×10+1×11)/(9+1)=10.13.系统功能概述本系统是一个基于FPGA的半整数分频器,具有以下功能:有一个5MHz的时钟源,通过半整数分频器后电路中可以产生的是一个2MHz的时钟信号二.系统设计方案和程序设计1.系统设计方案下图给出再利用模PORT(CLR,ENA,CLK:IN STD_LOGIC;QA,QB,QC,QD:OUT STD_LOGIC);END ENTITY JSHQ11;ARCHITECTURE ART OF JSHQ11 IS --定义了结构体SIGNAL CQI: STD_LOGIC_VECTOR(0 TO 3);BEGINPROCESS(CLK,CLR,ENA)IS --进程开始,CLK,CLR,ENA为敏感信号BEGINIF CLR='1' THEN CQI<="0000";ELSEIF CLK'EVENT AND CLK='1'THENIF ENA='1'THENIF CQI=10THEN CQI<="0000";ELSECQI<=CQI+1;END IF;END IF;END IF;END IF;END PROCESS;QA<=CQI(0); -- 信号赋值QB<=CQI(1);QC<=CQI(2);QD<=CQI(3);END ARCHITECTURE ART;三、仿真结果及原理图1.模11计数器仿真波形图图1计数器仿真波形图2.模11计数器元件图图2计数器元件图3.半整数分频器原理图图3 分频器原理图4.半整数分频器仿真波形图图4分频器仿真波形图5.半整数分频器元件图图5分频器元件图6 输入输出管脚说明表1 半整数分频器管脚三.课程设计总结本次试验采用了程序与原理图相结合的设计方法,主要编写计数器的程序实现分频。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


2. 红绿灯计数时间选择模块:traffic_mux


负责输出显示器需要的值(即倒数的秒数),作为计 时显示控制电路的计数秒数。 traffic_mux仿真波形 该电路的核心部分就是数据选择电路,利用选择语句 case_when(单输入,多输出)实现4选1,其选择输 入信号sign_state是红绿灯信号译码电路产生的4种状 态信号,状态转换输出如下表所示。


选用自顶向下的设计方法,整个系统可分为4个模块:

系统时序发生电路
提供为红绿灯信号译码电路提供的频率39kHz的扫描信号 提供为定时控制电路提供的使能(enable)控制信号 提供红绿灯信号译码电路提供的占空比为50%的秒闪烁信号;

红绿灯计数时间选择模块
负责输出显示器需要的值(即倒数的秒数值),作为定时控制
项目培训教程

培训目标:

1.通过具体项目,掌握可编程逻辑器件的概念与应用 2.掌握VHDL语言编程基本语法,有一定的编程能力

知识能力要求: 1.组合逻辑电路和时序逻辑电路的基本原理 2.C语言基础 3.初步掌握Quartus II软件,熟练应用原理图输 入以及波形仿真等功能

30
5 20 5

3. 计时显示控制电路:count_down

该电路的核心部分是可置数的减法计数器电路和七段 译码输出显示电路。可置数的减法计数器电路是利用 if_then_else语句完成,两位七段译码输出显示电路则 利用case_when语句通过查表的方式构成。
Count_down仿真波形

state2 state3 state4 state5
0 1 1 r0g1->roy1 01 1 011000 设南北路口红黄绿 3色灯为 r0、y0、g0,东西路口的红黄
1、y1、g1 0 ,自动操作模式和手动操作模式信 r0g1 00 0 010010 绿30 色灯为r1 0 1 1 2所示。 r0y1->g0r1 10 1 100001 号灯显示的真值表如表 0 1 0 r0y1 01 0 011000 表中定义了一些进程间的内部传递信号,以整合所有功能。 0 1信号(设定红绿灯电路的状态,在该程序里定义 1 g0r1->y0r1 11 1 100100 包括: state 8种状态)、 0 1 st_transfer 0 (在手动模式下判断是否转态的控制 g0r1 10 0 100001 信号)、 light[5:0] (在自动模式下该信号为是否转态的控制 0 1 1 y0r1->r0g1 00 1 010010 信号,其位数从高到低分别表示red1、red0、yellow1、 0 1 0 y0r1 11 0 100100 yellow0、green1、green0)。
4. 红绿灯信号译码电路:traffic_CON
CLK
recount 1 light 010010
负责监控路口红绿灯之外 reset ena_1hz next_stage state状态 sign_stage state1 1 traffic_CON X X r0g1 00 提供切换手动模式与自动模式的开关。 仿真波形
state6
0
1
1
others
00
0
110000

5. 红绿灯交通控制器顶层电路

红绿灯交通灯控制器顶层电路分为4个模块,它们是系 统时序发生电路clk_gen,红绿灯计数时间选择模块 traffic_mux,计时显示控制电路count_down,红绿 灯信号译码电路traffic_CON。 本节所要做的工作就 是将所有的子电路全部连接起来,进行时序验证。
顶层原理图

控制器输入信号有以下几种。

①CLK:由外界信号发生器提供1Hz的时钟脉冲信号。 ②RE:系统内部自复位信号。 ③K1:手动、自动切换钮(1:自动,0:手动)。 ④K2:红绿灯状态切换键(每按一次就切换一个状态)(使用在手动模 式下)。
①NEXT_S:当计数器计时完毕时,产生一个脉冲信号,作为转态触发 信号。 ②R[1..0]:负责显示红灯的亮灭(共2位,4种状态)。 ③G[1..0]:负责显示绿灯的亮灭(共2位,4种状态)。 ④Y[1..0]:负责显示黄灯的亮灭(共2位,4种状态)。 ⑤S[15..0]:负责将十位的计数数值转换成BCD码,并利用七段数码管显 示。 ⑥S[7..0]:负责将个位的计数数值转换成BCD码,并利用七段数码管显 示。
时间(s)
状态sign_state 东西路口 南北路口 东西路口为通行状态,此时东西 00(状态0) 南北路口红灯亮 路口绿灯亮 东西路口为过渡状态,此时东西 01(状态1) 南北路口红灯亮 路口黄灯亮 南北路口为通行状态,此时南北路 10(状态2) 东西路口红灯亮 口绿灯亮 南北路口为过渡状态,此时南北路 11(状态3) 东西路口红灯亮 口黄灯亮
要求设计一个交通灯控制器,假设此控制器安装 在由一条主干道和一条次干道汇合而成的十字路 口。

在自动控制模式时,主干道(东西)每次放行时间为 30s,次干道(南北)每次放行时间为20s,次干道黄 灯、主干道黄灯持续时间为5s。 要求交通灯控制器有复位功能,并要求所有交通灯的 状态变化在时钟脉冲上升沿处。


该电路的核心部分就是分频电路,通过对外接信号发 生器提供1Hz的时钟信号进行1000分频,得到一个周 期1s的输出使能信号ena_1Hz(占空比1:1000)和 flash_Hz(占空比1:1);1024分频后得到红绿灯信 号译码电路所需要的频率为39kHz的显示使能信号 ena_scan。 系统时序发生电路CLK_gen的仿真输出波形
电路的倒计时秒数 在该模块中可设置东西路口河南北路口的信号灯维持秒数;

计时显示控制电路
将即倒数的秒数值转换成BCD码,利用七段显示器显示出来
红绿灯信号译码电路
负责控制路口红绿灯 利用开关切换手动与自动的模式

1. 系统时序发生电路:CLK_gen

CLK_gen电路最主要的功能就是产生一些时序输出信 号,并将其用作后续几个电路的使用(enable)控制 与同步信号处理。
相关文档
最新文档