2895|7

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于EDA交通灯控制器程序 [复制链接]

状态机kzq程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY kzq IS
    PORT( X: IN STD_LOGIC;
          MR,MY,MG,CR,CY,CG: OUT STD_LOGIC;
          C60,C20,C4:OUT STD_LOGIC);
END kzq;

ARCHITECTURE behv OF kzq IS
TYPE SET IS (MGCR,MYCR,MRCG,MRCY);  
SIGNAL current_state, next_state,last_state: SET;
BEGIN
REG:PROCESS(X)             --X为上升沿,状态跳转   
BEGIN
    IF X='1' AND X'EVENT THEN
last_state <= current_state;
current_state <= next_state;
  END IF;
END PROCESS;
COM:PROCESS(current_state)
BEGIN
   CASE current_state IS
WHEN MGCR =>  next_state <= MYCR;
MY<='1';CR<='1';MG<='0';MR<='0';CG<='0';CY<='0'; --主黄乡红
C4 <='1';C20<='0';C60<='0';--倒计时4秒
WHEN MYCR =>  next_state <=MRCG;
MR <='1';CG<='1';MY<='0';MG<='0';CR<='0';CY<='0'; --主红乡绿
C20<='1';C4 <='0';C60<='0';--倒计时20秒
WHEN MRCG =>  next_state <=MRCY;
MR <='1';CY<='1'; MG<='0';MY<='0';CG<='0';CR<='0';--主红乡黄
C4<='1';C60<='0';C20<='0';--倒计时4秒
WHEN MRCY=>  next_state <=MGCR;
MG <='1';CR<='1';MR <='0';MY<='0';CY<='0'; CG<='0';--主绿乡红
C60<='1';C4 <='0';C20<='0';--倒计时60秒
END CASE;
   END PROCESS;
END behv;


控制状态机时序信号的程序XH:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY  XH  IS
    PORT( S: IN STD_LOGIC;
          C20_1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
          C20_2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
          C4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
MR,MY,MG,CR,CY,CG: IN STD_LOGIC;
CO:OUT STD_LOGIC);
END  XH;

ARCHITECTURE behav OF XH IS
BEGIN
PROCESS(S,C20_1,C20_2,C4,MR,MY,MG,CR,CY,CG)
BEGIN

IF (MG='1')AND(CR='1')AND(MR='0')AND(MY='0')AND(CY='0')AND(CG='0')AND(S='1')
THEN CO <='1';
ELSE CO <='0';
END IF;

IF (MY='1')AND(CR='1')AND(MR='0')AND(MG='0')AND(CY='0')AND(CG='0')AND(C4="0000")
THEN CO <='1';
ELSE CO <='0';
END IF;

IF (MR='1')AND(CG='1')AND(MY='0')AND(MG='0')AND(CR='0')AND(CY='0')AND(S='0')
THEN CO <='1';
ELSE CO <='0';
END IF;

IF (MR='1')AND(CG='1')AND(MY='0')AND(MG='0')AND(CR='0')AND(CY='0')AND(C20_1="0000")AND(C20_2="0000")
THEN CO<='1';
ELSE CO <='0';
END IF;

IF (MR='1')AND(CY='1')AND(MY='0')AND(MG='0')AND(CR='0')AND(CG='0')AND(C4="0000")
THEN CO <='1';
ELSE CO <='0';
END IF;


END PROCESS;
END behav;

倒计时4的程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity countdown4 is
port(clk,en:in std_logic;
     cq:out std_logic_vector(3 downto 0)
     );
end countdown4;
architecture behav of countdown4 is
signal cql:std_logic_vector(3 downto 0);
begin
   cq<=cql;
process(clk)
begin
   if  clk'event and clk='1' then
       if en='1' then  cql<=cql-1;
                  end if;
                  if cql=0 then cql<="0011";
                  end if;
       end if;
end process;
end behav;

倒计时20的程序:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity countdown20 is
port(clk,en:in std_logic;
     cq1:out std_logic_vector(3 downto 0);
     cq2:out std_logic_vector(3 downto 0)
     );
end countdown20;
architecture behav of countdown20 is
signal cql:std_logic_vector(3 downto 0);
signal cqh:std_logic_vector(3 downto 0);
begin
  cq2<=cqh;
  cq1<=cql;
process(clk)
begin
   if  clk'event and clk='1' then
       if en='1' then
       if cql=0 then cql<="1001";cqh<=cqh-1;
                  else cql<=cql-1;
                  end if;
                  if cqh=0 and cql=0 then cqh<="0001";cql<="1001";
                  end if;
       end if;
   end if;

end process;
end behav;


倒计时60程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity countdown60 is
port(clk,en:in std_logic;
     cq3:out std_logic_vector(3 downto 0);
     cq4:out std_logic_vector(3 downto 0)
     );
end countdown60;
architecture behav of countdown60 is
signal cql:std_logic_vector(3 downto 0);
signal cqh:std_logic_vector(3 downto 0);
begin
  cq4<=cqh;
  cq3<=cql;
process(clk)
begin
   if  clk'event and clk='1' then
       if en='1' then
       if cql=0 then cql<="1001";cqh<=cqh-1;
                  else cql<=cql-1;
                  end if;
                  if cqh=0 and cql=0 then cqh<="0101";cql<="1001";
                  end if;
       end if;
   end if;

end process;
end behav;

最后的问题是出的波形不对 只有一个计数器技术 状态不会跳转
请问错在哪里???急...求高手解答


最新回复

EDA我现在忘的一干二净了,当年考试全靠兄弟姐妹们帮忙  详情 回复 发表于 2010-3-15 22:15
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
看下你的仿真图,和仿真设置
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个不难,用状态机合适
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
发错版了吧
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
这个理清下逻辑和状态机制,就应该没问题。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
理清下逻辑和状态机制
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
理清下逻辑和状态机制,应该就可以了.
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
EDA我现在忘的一干二净了,当年考试全靠兄弟姐妹们帮忙
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表