状态机中变量自动归零
我遇到了这样的问题,在以下的状态机中,我有些量在状态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;
为什么我的插图不见了。