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的交通灯控制器的设计

基于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课程设计交通信号灯控制器

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语言的交通灯控制器设计

基于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设计

十字路口交通灯控制器的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 半整数分频器管脚三.课程设计总结本次试验采用了程序与原理图相结合的设计方法,主要编写计数器的程序实现分频。

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

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

基于VHDL语言的交通灯控制器设计与实现1引言在交通发达的当代,交通灯控制器无疑是最实用的的工具。

为了使交通行驶有一个很高的效率,人工指挥交通已经显得效率不高,所以一个高智能的交通灯控制器是十分的必要的。

交通灯的控制方式,是根据时间来改变状态,产生不同的控制信号以控制红、绿、黄三盏灯的开关,达到控制交通的目的。

目前VHDL语言已成为EDA领域首选的硬件设计语言,越来越多的数字系统设计使用VHDL语言来完成。

原因是通过VHDL描述的硬件系统“软核”便于存档,程序模块的移植和ASC设计源程序的交付更为方便。

因此,他在IP核的应用等方面担任着不可或缺的角色。

在某扩频通信系统中,我们使用VHDL语言设计了交通灯控制器,并经过了在FPGA芯片上的验证实验。

2课题背景及相关技术2.1 Max+plusII简介Max+plusII(或写成Maxplus2或MP2) 是Altera公司推出的的第三代PLD开发系统(Altera第四代PLD开发系统被称为:Quartus,主要用于设计6万-100万门的大规模CPLD/FPGA)。

使用MaX+PLUSII的设计者不需精通器件内部的复杂结构。

设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MaX+PLUSII把这些设计转自动换成最终所需的格式。

其设计速度非常快。

对于一般几千门的电路设计,使用MaX+PLUSII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。

设计处理一般在数分钟内内完成。

特别是在原理图输入等方面,Maxplus2被公认为是最易使用,人机界面最友善的PLD开发软件,特别适合初学者使用。

通常可将Maxplus2设计流程归纳为以下7个步骤:(1)使用文本编辑器输入设计源文件。

在传统设计中,设计人员是应用传统的原理图输入方法来开始设计的。

自90年代初,Verilog、VHDL、AHDL等硬件描述语言的输入方法在大规模设计中得到了广泛应用。

VHDL交通灯控制器-实验报告

VHDL交通灯控制器-实验报告

可编程逻辑器件应用项目报告书项目名称:交通灯控制器指导老师:姓名:学号:班级:(以后写报告要包含以下一些内容:)一、设计要求--------------------------------------------------------------------------------二、设计目的--------------------------------------------------------------------------------三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作的总结与展-------------------------------------------一、设计要求:①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。

②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。

③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。

当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。

基于VHDL语言的交通信号灯设计

基于VHDL语言的交通信号灯设计

基于VHDL语言的交通信号灯设计交通信号灯的设计是交通管理中非常重要的一环,通过合理的交通信号灯设计,可以提高道路交通的效率,并保证交通的安全性。

在本文中,将基于VHDL语言设计一个简单的交通信号灯系统,对信号灯进行控制。

首先,我们需要了解交通信号灯的基本原理。

一般情况下,交通信号灯通常分为红灯、黄灯和绿灯三个状态。

每个状态的时间长度可以根据实际情况进行调整。

在设计中,我们将考虑两个十字路口,每个十字路口设置一个交通信号灯。

接下来,我们将使用VHDL语言进行交通信号灯的设计。

首先定义一个信号类型,表示交通灯的三种状态:```vhdltype traffic_light_state is (red, yellow, green);```然后,定义信号灯实体,包括输入信号和输出信号:```vhdlentity traffic_light isportclk: in std_logic;reset: in std_logic;north_south_light: out traffic_light_state;east_west_light: out traffic_light_stateend traffic_light;```在实体中,我们使用了时钟clk和复位信号reset,以确保交通灯的状态按照预期进行转换。

north_south_light和east_west_light是输出信号,表示两个十字路口的交通信号灯状态。

接下来,我们定义信号灯行为。

在时钟上升沿或复位信号为高时,交通灯的状态会发生变化。

我们可以使用一个计数器和状态机来实现交通灯的控制。

当计数器达到一定值时,状态机将更新信号灯的状态。

```vhdlarchitecture behav of traffic_light issignal state: traffic_light_state := red;beginprocess(clk, reset)beginif reset = '1' thencounter <= 0;state <= red;elsif rising_edge(clk) thencounter <= counter + 1;case state iswhen red =>state <= green;counter <= 0;end if;when green =>state <= yellow;counter <= 0;end if;when yellow =>state <= red;counter <= 0;end if;end case;end if;end process;north_south_light <= state; east_west_light <= state; end behav;```最后,我们需要在顶层模块中实例化交通信号灯实体,并提供时钟和复位信号。

交通灯控制器的vhdl程序设计

交通灯控制器的vhdl程序设计

交通灯控制器一、实验目的:1、学会使用VHDL语言编程解决实际问题;2、实现高速公路与乡间小路的交叉路口红绿灯的控制;3、熟悉MAX-plusⅡ的使用。

二、实验设备:PC 机一台三、实验原理与内容:实现高速公路与乡间小路的交叉路口红绿灯的控制。

功能如下要求:1.只有在小路上发现汽车时,高速公路上的交通灯才可能变为红灯。

2.当汽车行驶在小路上时、小路的交通灯保持为绿灯,但不能超过给定的延迟时间。

〔注;这段时间定义为20S时间)。

3.高速公路灯转为绿灯后,即使小路上有汽车出现,而高速公路上并无汽车,也将在给定的时间内保持高速公路绿灯。

(注:这段时间定义为60S)。

程序流程图:高速公路通车小路有车T>60S5S黄灯小路通车T>20S 5S黄灯小路有车YYYN NN N Y四、实验步骤:1、在C 盘以后的盘上建一个文件夹,后缀名不能有中文。

2、打开MAX-plus Ⅱ,单击file ,在new 中选择text editorfile ,单击ok 打开文本编辑框。

3、保存到新建的文件夹中,名称与实体一致,类型为 .vhd 。

4、在编辑框中输入程序,保存,置顶(file->project->setproject current file );5、编译MAX-plusⅡ->compiler->star,如果有错误,可根据错误提示修改源程序,直到编译没有错误。

6、波形编辑MAX-plusⅡ->Wavefrom editor->Enter Nodes from Snf->list-> => ->ok;7、设置仿真信号(时钟信号,输入信号),保存。

8、仿真simulator,保存,改变输入信号仿真。

五、程序:LIBRARY IEEE; --库和程序包USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTDKZ IS --实体JTDKZ的说明PORT(CLK:IN STD_LOGIC; --时钟信号SB:IN STD_LOGIC; --小路有无车信号(SB=1:小路有车)MR,MY,MG,BR,BY,BG:OUT STD_LOGIC);--交通灯信号END ENTITY JTDKZ;ARCHITECTURE ART OF JTDKZ IS--JTDKZ的结构体说明TYPE STATE_TYPE IS(A,B,C,D);--定义信号SIGNAL STATE:STATE_TYPE;BEGINCNT:PROCESS(CLK) ISV ARIABLE CLR:BIT;--在进程中定义变量CLR(CLR=0:计时清零)V ARIABLE S:STD_LOGIC_VECTOR(0 TO 5);--在进程中定义变量S(S为时钟计时器)BEGINIF(CLK'EVENT AND CLK='1')THEN--判断时钟信号上升沿IF CLR='0'THEN--当CLR=0时计时变量清零S:="000000";ELSES:=S+1;END IF;CASE STATE IS--状态A为大路通车(绿灯),小路禁止通车(红灯)WHEN A=>MR<='0';MY<='0';MG<='1';BR<='1';BY<='0';BG<='0';IF(SB='1') THEN--判断小路是否有车IF(S="111011") THEN--判断大路通行是否满60秒STATE<=B;CLR:='0';--大路满60秒,计时清零,转到状态BELSESTATE<=A;CLR:='1';--大路不满60秒,继续状态AEND IF;ELSESTATE<=A;CLR:='1';--小路没车,大路一直通车END IF;--状态B为大路禁止通车(黄灯),小路禁止通车(红灯)WHEN B=>MR<='0';MY<='1';MG<='0';BR<='1';BY<='0';BG<='0';IF S="000100" THEN--判断大路黄灯是否满5秒STATE<=C;CLR:='0';--满5秒,计时清零,跳转到C状态ELSESTATE<=B;CLR:='1';--不满5秒继续状态B。

交通灯控制器VHDL设计

交通灯控制器VHDL设计

EDA课程设计.题目:交通灯控制器VHDL设计&专业:通信工程班级:通信082姓名:XXX学号:XXXXXXXX【$设计要求;乐曲硬件演奏电路的VHDL设计要求:1、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

2、红、绿、黄发光二极管作信号灯,。

3、主干道处于常允许通行的状态,支干道有车来时才允许通行。

主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。

4、主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。

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

:教学提示:1、选择1HZ时钟脉冲作为系统时钟。

2、 45秒、25秒、5秒定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,即向主控电路输出“时间到”信号,并使计数器清零,由主控电路启、闭三色信号灯或启动另一计时电路。

显示结果:设计一个十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿灯的指示状态。

用两组红、黄、绿三种颜色的灯分别作为东西、南北两个方向的红、黄、绿灯,变化规律为:东西绿灯亮,南北红灯亮→东西黄灯亮,南北红灯亮→东西红灯亮、南北绿灯亮→东西红灯亮,南北黄灯亮→东西绿灯亮,南北红灯亮….,这样依次循环。

南北方向是主干道车道,东西方向是支干道车道,要求两条交叉道路上的车辆交替运行,主干道每次通行时间都设为45秒,支干道每次通行时间都设为25秒,时间可设置修改。

在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。

要求交通灯控制器有复位功能,在复位信号使能的情况下能够实现交通灯的自动复位,并且要求所有交通灯的状态变化,包括复位信号引起的均发生时钟脉冲的上升沿处。

(完整word版)基于VHDL状态机的交通灯控制器设计

(完整word版)基于VHDL状态机的交通灯控制器设计

基于VHDL状态机的交通灯控制器设计0 引言交通灯是城市交通监管系统的重要组成部分,对于保证机动车辆的安全运行,维持城市道路的顺畅起到了重要作用。

本文在VHDL状态机的基础上,利用FPGA的相关知识设计了交通灯控制系统。

可以根据实际情况对灯亮时间进行自由调整,整个设计系统通过QuartusII软件平台进行了模拟仿真,并下载到FPGA器件中进行硬件的调试,验证了设计的交通信号灯控制电路完全可以实现预定的功能,具有一定的实用性。

1 设计要求有一条主干道和一条支干道的汇合点形成的十字路口,为确保车辆安全,迅速通行,在干道和支道的入口设置了红、绿(包括直行和左拐)、黄3色信号灯(如图1所示)。

图1 十字路口交通灯示意图设计要求:(1)A方向和B方向各设红(R)、黄(Y)、绿(G)、和左拐(L)四盏指示灯;(2)四种灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的形式显示出来;(3)主、支干道交替通行,假设B方向是主干道,车流量大,因此B方向通行的时间应比A方向长一些。

B方向每次放行40秒,A方向每次放行30秒,在每次亮绿灯、左拐灯与红灯的转换过程中,亮5秒的黄灯作为过渡;(4)两个方向各种灯亮的时间应该能够进行非常方便的设计和修改;(5)上电复位后,主干道先通行。

2 VHDL设计实现2.1 系统整体设计该系统主要由控制模块、分频模块以及显示电路构成。

其中分频模块主要将系统输入的基准时钟信号转换为1 HZ的激励信号,驱动控制模块工作。

控制模块根据计数情况对交通灯的亮灭及持续时间进行控制,并将灯亮时间以倒计时的形式通过数码管显示出来。

其中Reset是复位信号,高电平有效。

2.2 分频模块设计在红绿灯交通信号系统中,电路必须给一个稳定的时钟源才能够使系统正常运行。

用晶振电路提供4 MHz的稳定时钟信号,把其分频为1 HZ脉冲信号,原理是用VHDL语言if——elsif的并行运行关系,把分频频数的前半部分进行计数并置高电平“1”,把分频频数的后半部分进行计数并置低电平“0”,最后输出即为1 Hz时钟信号。

VHDL交通灯信号控制器的设计

VHDL交通灯信号控制器的设计

交通灯信号控制器的设计1.实验目的(1)熟悉MAX+plusⅡ软件的基本使用方法。

(2)熟悉GW48—CK EDA实验开发系统的基本使用发放。

(3)学习VHDL基本逻辑电路和状态机电路的综合设计应用。

2.实验内容设计并调试好一个十字交叉路口的交通灯控制器,具体要求如下:(1)东西、南北方向有红、黄、绿指示灯,两个显示数码管。

(2)当南北方向允许通行亮绿灯时,东西方向亮红灯,而东西方向允许通行亮绿灯时,南北方向亮红灯。

(3)工作顺序为东西方向红灯亮45秒,前40秒南北方向绿灯亮,后5秒黄灯亮。

然后南北方向红灯亮45秒,前40秒东西方向绿灯亮,后5秒黄灯亮。

整个设计包括计时信号发生器、交通灯控制器以及译码显示电路的设计。

用GW48—CK EDA实验开发系统进行硬件验证。

3.实验条件(1)开发软件:MAX+plusⅡ。

(2)实验设备:GW48—CK EDA实验开发系统。

(3)拟用芯片:EPF10K10-OLCC84。

4.实验设计(1)系统的原理框图(2)V HDL源程序LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY nclight ISPort( clk : in std_logic;--xsh1 : out std_logic_vector(5 downto 0);--xsh2 : out std_logic_vector(5 downto 0);ra,rb,ya,yb,ga,gb : out std_logic );END nclight;Architecture a of nclight istype state is (S0,S1,S2,S3);signal presentstate,nextstate : state;--signal tmp40 : integer range 0 to 40 :=0;--signal tmp5 : integer range 0 to 5 :=0;signal tmp40 : std_logic_vector(5 downto 0) :="101000";signal tmp5 : std_logic_vector(2 downto 0):="101";signal timeout40,timeout5 : std_logic;signal rst40,rst5 : std_logic :='0';signal en40,en5 : std_logic :='0';signal q : std_logic_vector(1 downto 0);signal sec : std_logic;Begin----get 1 hz clock pulsehz1: process(clk)beginif clk'event and clk='1' then q<=q+1; end if;sec<=q(1); --get 1 hz clock pulseend process;---reg: process(sec)beginif sec'event and sec='1' then presentstate<=nextstate; end if; end process reg;---------------------------changestate: process(presentstate)Begincase presentstate iswhen S0 => ra<='0'; ya<='0'; ga<='1';rb<='1'; yb<='0'; gb<='0';when S1 => ra<='0'; ya<='1'; ga<='0';rb<='1'; yb<='0'; gb<='0';when S2 => ra<='1'; ya<='0'; ga<='0';rb<='0'; yb<='0'; gb<='1';when S3 => ra<='1'; ya<='0'; ga<='0';rb<='0'; yb<='1'; gb<='0';when others => ra<='1';ya<='0';ga<='0';rb<='1'; yb<='0';gb<='0';end case;end process;--------------------------timing: process(presentstate,timeout40,timeout5)begincase presentstate iswhenS0=>rst40<='0';en40<='1';rst5<='1';en5<='0';iftimeout40='1' then nextstate<=s1;else nextstate<=s0; end if;when S1 =>rst5<='0';en5<='1'; rst40<='1';en40<='0'; if timeout5='1' then nextstate<=s2;else nextstate<=s1; end if;when S2 =>rst40<='0';en40<='1'; rst5<='1';en5<='0'; if timeout40='1' then nextstate<=s3;else nextstate<=s2; end if;when S3 =>rst5<='0';en5<='1';rst40<='1';en40<='0';if timeout5='1' then nextstate<=s0;else nextstate<=s3;end if;when others => nextstate<=s0; rst40<='0';en40<='0'; rst5<='0';en5<='0';end case;end process;-----------------------cnt40 : process(sec,rst40,en40)beginif rst40='1' then tmp40<="101000";elsif sec'event and sec='1' thenif en40='1' thenif tmp40="000001" then tmp40<="101000";else tmp40<=tmp40-1;end if;--end if;end if;iftmp40="000001"thentimeout40<='1';elsetimeout40<='0'; end if;end process;------------ ------------cnt5 : process(sec,rst5,en5)beginif rst5='1' then tmp5<="101";elsif sec'event and sec='1' thenif en5='1' thenif tmp5="001" then tmp5<="101";else tmp5<=tmp5-1;end if;--end if;end if;if tmp5="001" then timeout5<='1';else timeout5<='0'; end if;--end process;---------------end a;(3)管脚锁定文件5. 实验结果及总结(1)系统仿真情况从系统仿真结果(本仿真结果可通过同时按下“ALT+PrtSc ”键抓取当前屏幕信息放入剪贴板中,再在WORD 文档中通过粘贴的方法获得)可以看出,本系统完全符合设计要求。

  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)控制 与同步信号处理。
相关文档
最新文档