基于EDA技术的交通信号灯定时控制系统

发布网友 发布时间:2022-04-23 05:14

我来回答

4个回答

热心网友 时间:2023-08-25 04:22

首先最简单的方法是列出真值表。写出逻辑表达式。然后根据逻辑表达式来写出vhdl程序。在编译=》仿真=》功能分析=》输出延时=》下载程序 1.设计原理
在这个实例中,我们设计一个简单的十字路*通灯。交通灯分东西和南北两个方向,均通过数码管和指示灯指示当前的状态。设两个方向的流量相当,红灯时间45s,绿灯时间40s,黄灯时间5s.
从交通灯的工作机理来看,无论是东西方向还是南北方向,都是一个减法计数器。只不过计数时还要判断红绿灯情况,再设置计数器的模值。
下表所示为一个初始状态和4个跳变状态。交通灯工作时状态将在4个状态间循环跳变,整个交通灯则完全按照减计数器原理进行设计。
状态 当前计数值 下一个CLOCK到来时新模值
东西方向指示 南北方向指示 东西-南北方向指示 东西方向指示 南北方向指示 东西-南北方向指示
初始 0 0 45 40 红-绿
1 6 1 红-绿 5 5 红-黄
2 1 1 红-黄 40 45 绿-红
3 1 6 绿-红 5 5 黄-红
4 1 1 45 40 红-绿
2.部分程序
library ieee;
use ieee.std_logic_11.all;
use ieee.std_logic_unsigned.all;

entity traffic is
port(clk, urgency: in std_logic;
east_west:buffer std_logic_vector(7 downto 0);--东西方向时钟计数
south_north: buffer std_logic_vector(7 downto 0); --南北方向的时钟计数
led:buffer std_logic_vector(5 downto 0)); --交通指示灯
end traffic;

architecture arch of traffic is
。。。。。。。
end arch;

3.具体设计步骤
1) 建立一个新的工程完成上面的电路设计
2) 编译电路并使用功能仿真来验证设计
3) 引脚配置,如Part I中讨论的,这些配置是确保VHDL代码中输出端口能使用PFGA芯片上连接到LEDR和LEDG的引脚。重新编译项目,并下载到FPGA芯片上。
4) 测试电路的正确性。

热心网友 时间:2023-08-25 04:23

交通信号灯控制系统的VHDL 文件。图2 系统结构框图
其中clk, rst 是时钟和复位信号; t1, t2, t3 是通行的设定时间; enb1, enb2 是减法器使能信号; data1,
data2 是减法器的预置信号; q 是交通灯的控制信号。
lib rary ieee;
ese ieee. std logic 11. all;
u se ieee. std logic un signed. all;
en t ity jiao tongdeng is
po rt (clk, rst: in std logic; ——时钟和复位信号
t1, t2, t3 : in std logic vecto r (7 dow n to 0) ; ——通得时间的设定
enb1, enb2 : in std logic; ——减法器使能信号
data1, data2 : ou t std logic vecto r (7 dow n to 0) ; ——减法器的预置信号
q: ou t std logic vecto r (5 dow n to 0) ) ; ——交通灯的控制信号
end;
arch itectu re behav of jiao tongdeng is
type states is ( st0, st1, st2, st3) ;
signal cu rren t state, nex t state: states: = st0;
begin
com 1: p rocess (cu rren t state) ——主控组合进程
variab le data3, data4: std logic vecto r (7 dow n to 0) ;
begin
case cu rren t state is
w hen st0= > nex t state < = st1; q< =“100001”;
enb1 < = ’1’; enb2 < = ’1’; data1 < = t1;
datd3: = t1 (3 dow n to 0) + t3 (3 dow n to 0) ;
data 4: = t1 (7 dow n to 4) + t3 (7 dow n to 4) + data3 (4) ;
data2 < = data4 & data3;
w hen st1= > nex t state < = st2; q< =“100010”;
enb1 < = ’0’; enb2 < = ’1’;
w hen st2= > nex t state < = st3; q< =“001100”;
enb1 < = ’1’; enb2 < = ’1’; data2 < = t2;
datd3 : = t2 (3 dow n to 0) + t3 (3 dow n to 0) ;
data4 : = t2 (7 dow n to 4) + t3 (7 dow n to 4) + data3 (4) ;
data1 < = data4 & data3;
w hen st3= > nex t state < = st0; q< =“010100”;
enb1 < = ’1’; enb2 < = ’0’;
w hen o thers = > nex t state < = st0; q< =“100001”;
enb1 < = ’1’; enb2 < = ’1’; data1 < = t1;
datd3 : = t1 (3 dow n to 0) + t3 (3 dow n to 0) ;
data4 : = t1 (7 dow n to 4) + t3 (7 dow n to 4) + data3 (4) ;
data2 < = data4 & data3;
end case;
end p rocess;
reg: p rocess (clk) ——主控时序进程
begin
if (clk’even t and clk= ’1’) then cu rren t state < = nex t state;
end if;
end p rocess;
end;

热心网友 时间:2023-08-25 04:23

我以前写的一个交通灯 你可以参考下
建议你写成状态机形式

library ieee;
use ieee.std_logic_11.all;
entity lude is
port(clk:in bit;
z1,c1,z2,c2,z3,c3:out bit);
end entity;
architecture one of lude is
begin
process(clk)
VARIABLE TEMP1: NATURAL;
begin
if(clk'event and clk='1') then
temp1:=temp1+1;
if temp1<=20 then
z1<='1';z2<='0';z3<='0';c1<='0';c2<='0';c3<='1';
elsif temp1<=25 then
z1<='0';z2<='1';z3<='0';c1<='0';c2<='0';c3<='1';
elsif temp1<=65 then
z1<='0';z2<='0';z3<='1';c1<='1';c2<='0';c3<='0';
elsif temp1<=70 then
z1<='0';z2<='0';z3<='1';c1<='0';c2<='1';c3<='0';
elsif temp1>70 then
temp1:=0;
end if;
end if;
end process;
end

热心网友 时间:2023-08-25 04:24

沙发 路过 这个真没学过 我看着看着眼睛都花了 没这天赋 见谅!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com