EDA 交通控制器的设计

EDA
设计要求:

设计一个由一条支干道和一条主干道的汇合点形成的十字交叉路口的交通灯控制器,主要要求如下:
1.主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
2.主干道处于常允许状态,两支干道有车来才允许通行。
3.当主、支干道有车时,两者交替通行,主干道每次放行45s,支干道每次放行25s,在每次由亮绿灯变成亮红灯转换过程中,要亮5s黄灯作为过渡,并
进行减计时显示。

最好有仿真图的,可以做成WORD文档形式的提供下载,希望能得到各个模块详细的程序。大家帮忙找下吧,能做的话当然更好。

缺的是---倒计时传输、控制模块,其他的话都有了,总共就这么几个模块:
1、红、绿、黄灯控制模块,模块名JTDKZ;
2、倒计时传输、控制模块XSKZ;
3、倒计时45s——CNT45s;
4、倒计时25s——CNT25s;
5、倒计时5s——CNT05s。
6、输入、输出。

如有需要可以提供其他模块的程序,只缺第二个。

大恩不言谢,但还是多谢了!

一、JTDKZ
假设4种状态分别为:A、B、C、D,在CLK上升沿来时,根据SB、SM状态判断交通处于何种状态,该状态输出什么信号。
设计的原理图模块:

设计源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY JTDKZ IS
PORT(CLK,SM,SB:IN STD_LOGIC;

MR,MY0,MG0,BR,BY0,BG0:OUT STD_LOGIC);
END ENTITY JTDKZ;
ARCHITECTURE ART OF JTDKZ IS
TYPE STATE_TYPE IS(A,B,C,D);
SIGNAL STATE:STATE_TYPE;
BEGIN
CNT:PROCESS(CLK)IS
VARIABLE S:INTEGER RANGE 0 TO 45;
VARIABLE CLR,EN:BIT;
BEGIN
IF(CLK'EVENT AND CLK='1')THEN

IF CLR='0'THEN S:=0;

ELSIF EN='0'THEN S:=S;

ELSE S:=S+1;

END IF;

CASE STATE IS

WHEN A=>MR<='0';MY0<='0';MG0<='1';BR<='1';BY0<='0';BG0<='0';

IF(SB AND SM)='1' THEN

IF S=45 THEN STATE<=B;CLR:='0';EN:='0';

ELSE STATE<=A;CLR:='1';EN:='1';

END IF;

ELSIF(SB AND(NOT SM))='1'THEN STATE<=B;CLR:='0';EN:='0';

ELSE STATE<=A;CLR:='1';EN:='1';

END IF;

WHEN B=>MR<='0';MY0<='1';MG0<='0';BR<='1';BY0<='0';BG0<='0';

IF S=5 THEN STATE<=C;CLR:='0';EN:='0';

ELSE STATE<=B;CLR:='1';EN:='1';

END IF;

WHEN C=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='0';BG0<='1';

IF(SM AND SB)='1'THEN

IF S=25 THEN STATE<=D;CLR:='0';EN:='0';

ELSE STATE<=C;CLR:='1';EN:='1';

END IF;

ELSIF SB='0' THEN STATE<=D;CLR:='0';EN:='0';

ELSE STATE<=C;CLR:='1';EN:='1';

END IF;

WHEN D=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='1';BG0<='0';

IF S=5 THEN STATE<=A;CLR:='0';EN:='0';

ELSE STATE<=D;CLR:='1';EN:='1';

END IF;

END CASE;
END IF;
END PROCESS CNT;
END ARCHITECTURE ART;
设计仿真的截图:

二、XSKZ
根据EN45、EN25、EN05M、EN05B的信号以及3个倒计时计数器的计数状态决定输出3个倒计时计数器中某个的状态输出。
原理图模块:

设计源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY XSKZ IS
PORT(EN45,EN25,EN05M,EN05B: IN STD_LOGIC;

AIN45M,AIN45B,AIN25M,AIN25B,AIN05: IN STD_LOGIC_VECTOR(7 downto 0);
DOUTB,DOUTM: OUT STD_LOGIC_VECTOR(7 downto 0));
END ENTITY XSKZ;
ARCHITECTURE ART OF XSKZ IS
SIGNAL A :STD_LOGIC_VECTOR (3 DOWNTO 0);
begin
A<= EN45&EN25&EN05M&EN05B;
PROCESS(A) IS
BEGIN
CASE A IS
WHEN"1000"=>DOUTM<=AIN45M;DOUTB<=AIN45B;
WHEN"1010"=>DOUTM<=AIN05;DOUTB<=AIN05;
WHEN"0100"=>DOUTM<=AIN25M;DOUTB<=AIN25B;
WHEN"0101"=>DOUTM<=AIN05;DOUTB<=AIN05;
WHEN OTHERS=>DOUTM<="00000000";DOUTB<="00000000";
END CASE ;
END PROCESS;
END ARCHITECTURE ART;设计仿真的截图:

三、CNT45S

CLK上升沿到来时,若到计时使能信号和SB信号有效,CNT45S开始计数,并将输入状态通过DOUT45M、DOUT45B分别输出到主、支干道显示。

设计的原理图模块:

设计源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT45S IS
PORT(SB,CLK,EN45:IN STD_LOGIC;

DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END CNT45S;
ARCHITECTURE ART OF CNT45S IS
SIGNAL CNT6B:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
PROCESS(SB,CLK,EN45) IS
BEGIN
IF SB='0' THEN CNT6B<=CNT6B-CNT6B-1;
ELSIF(CLK'EVENT AND CLK='1')THEN

IF EN45='1'THEN CNT6B<=CNT6B+1;

ELSIF EN45='0'THEN CNT6B<=CNT6B-CNT6B-1;
END IF;
END IF;
END PROCESS;
PROCESS(CNT6B)IS
BEGIN
CASE CNT6B IS
W
温馨提示:答案为网友推荐,仅供参考