在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2264|回复: 1

[求助] 状态机中变量自动归零

[复制链接]
发表于 2012-10-12 09:17:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 sidianzhuyi 于 2012-10-12 09:20 编辑

我遇到了这样的问题,在以下的状态机中,我有些量在状态0中赋值,在状态一中没有赋值,但是就被自动的拉到零了,直到下次赋值一的时候才会回到一,不知道为什么呢?我也试过了,用信号来代替这个量,然后在最后加一个信号赋值给端口的语句但是还是不行。这个现象只在后仿真中出现,前仿真一点问题没有。请问问什么呢? 谢谢

前仿真图 ad测试前仿图2加入了tempi.bmp

后仿真图1 ad测试后仿图2.bmp

后仿真图2 (把中间变量temp输出了) ad测试前仿图1.bmp (这个好像和上面的后仿真图还不一样,不知道为什么,求指导~)

PROCESS (rst_in , clk)

BEGIN

         IF( rst_in ='0') THEN

         pr_state<= state0;

         ELSIF(clk'EVENT AND clk='1') THEN

pr_state <= nx_state;

         ENDIF;

END PROCESS;


PROCESS (pr_state,busy_in,frstdata_in)

BEGIN

         CASEpr_state IS

                   WHENstate0 =>                             -- all reset

                            rst_out  <= '1';                               --initialize 0

--                         cs_out<= '1';   

                            csbf<= '1';

--                         convst_out<= '1';                       

                            convstbf<= '1';   

                            nx_state<= state1;

                            i<= "0000";

                            temp1<="0000";                         --临时测试量。

                   WHENstate1 =>                              --start

                            rst_out  <= '0';

--                         convst_out<= '0';

--                         cs_out<= '1';

                            csbf<= '1';

                            convstbf<= '0';   

                            nx_state<= state2;

                            i<= "0001";

                   whenstate2 =>

                            rst_out  <= '0';

--                         convst_out<= '1';                        --出一个小脉冲

                            convstbf<= '1';   

--                         cs_out<= '1';

                            nx_state<= state3;

                            i<= "0010";

                   whenstate3 =>

                            rst_out  <= '0';

--                         convst_out<= '1';                        -- 这个算是接着打了一拍。

                            convstbf<= '1';   

--                         cs_out<= '1';

                            i<= "0011";

        nx_state <= state4;


                   WHENstate4 =>

                            IF(busy_in = '0') THEN                 

--                         cs_out<= '0';

                            csbf<= '0';

                            nx_state<= state5;

                            ELSE

--                         cs_out<= '1';

                            csbf<= '1';

                            nx_state<= state4;                       

                            ENDIF;

                            i<= "0100";

                   whenstate5 =>

                            if(frstdata_in= '1') then

--                                   cs_out<='0';

                                     csbf<= '0';

                                     nx_state<= state6;

                            else

--                                   cs_out<='0';

                                     csbf<= '0';

                                     nx_state<= state5;

                            endif;

                            i<= "0101";

                   whenstate6 =>

--              cs_out <= '0';

                  csbf <= '0';        

                                     if(temp<8) then

                                               db_168((temp+1)*16-1 downto temp*16 )<= db_16;          --save 记住读数据的时候cs一定是为低的。

                                               temp<=temp+1;

                                               temp1<= temp1+ "0001";

                                               nx_state<= state7;

                                     else        

                                               nx_state<= state9;                  --表示数据采集完成。

--                                            temp<= 0;

                                     endif;                                                                          

                      i <= "0110";

                   whenstate7 =>

                                     csbf<= '1';                                 --回一

--            cs_out <= '1';

                                     nx_state<= state6;

                               i <= "0111";

                   whenstate9=>                                 ---                   cs_out <='1';

                            csbf<= '1';

        temp <= 0;

                            temp1<= "0000";         

                            nx_state<= state9;

                            i<= "1001";

                   whenothers =>

                      nx_state <= state0;

                            i<= "1111";

         ENDCASE;

END PROCESS;


  tempi <= temp1;

         cs_out<=csbf ;

  convst_out <= convstbf;

END BEHAVIOUR;

 楼主| 发表于 2012-10-12 09:18:13 | 显示全部楼层
为什么我的插图不见了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 15:33 , Processed in 0.018280 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表