2177|0

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于PROCESS中的SIGNAL [复制链接]

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY light IS
        PORT
        (
                clk,reset,sensor                : IN        STD_LOGIC;
                green_1,green_2,red_1,red_2,yellow_1,yellow_2        : OUT        STD_LOGIC
        );
END ENTITY light;

ARCHITECTURE a OF light IS
        TYPE state IS (s0,s1,s2);
        SIGNAL current_state:state;
        SIGNAL next_state:state;
        SIGNAL c0,c1,c2:STD_LOGIC_VECTOR (1 DOWNTO 0);
        SIGNAL from:state;
BEGIN

currents:PROCESS (current_state)

BEGIN      
        IF reset='1' THEN
           next_state<=s0;
        ELSE
           CASE current_state IS
                  WHEN s0 =>
                    green_1<='1';green_2<='0';red_1<='0';red_2<='1';yellow_1<='0';yellow_2<='0';
                        IF c0="11" AND sensor='1' THEN
                            next_state<=s1;
                            from<=s0; -----------------------------------------------------
                        ELSE next_state<=s0;
                        END IF;
               
                  WHEN s1 =>
                    green_1<='0';green_2<='0';red_1<='0';red_2<='0';yellow_1<='1';yellow_2<='1';
                        IF c1="01" THEN
                           IF sensor='1' AND from=s0 THEN
                              next_state<=s2;
                           ELSE next_state<=s0;
                                   END IF;
                        ELSE next_state<=s1;
                        END IF;
               
                  WHEN s2 =>
                    green_1<='0';green_2<='1';red_1<='1';red_2<='0';yellow_1<='0';yellow_2<='0';
                        IF c2="11" THEN
                           next_state<=s1;
                           from<=s2;
                        ELSE next_state<=s2;
                        END IF;
                     END CASE;
                END IF;

END PROCESS currents;

PROCESS (clk)
BEGIN
IF clk'event AND clk='1' THEN
   current_state<=next_state;
END IF;
END PROCESS;

count:PROCESS (clk)

BEGIN
IF clk'event AND clk='1' THEN
IF reset='1' THEN
    c0<="00";
    c1<="00";
    c2<="00";
ELSE
CASE current_state IS
        WHEN s0 =>
                c0<=c0+1;
        WHEN s1 =>
                IF c1="01" THEN
                   c1<="00";
                ELSE c1<=c1+1;
                END IF;
        WHEN s2 =>
                c2<=c2+1;
END CASE;
END IF;
END IF;
END PROCESS count;




END a;


----------------这里,我把STATE中的一种放在from中,可是等到下一个上升沿这个值就不见了,这是为什么?
点赞 关注

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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