马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 sidianzhuyi 于 2012-10-12 09:20 编辑
我遇到了这样的问题,在以下的状态机中,我有些量在状态0中赋值,在状态一中没有赋值,但是就被自动的拉到零了,直到下次赋值一的时候才会回到一,不知道为什么呢?我也试过了,用信号来代替这个量,然后在最后加一个信号赋值给端口的语句但是还是不行。这个现象只在后仿真中出现,前仿真一点问题没有。请问问什么呢? 谢谢 前仿真图
后仿真图1
后仿真图2 (把中间变量temp输出了)
(这个好像和上面的后仿真图还不一样,不知道为什么,求指导~) 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; |