小弟刚学VHDL不久,昨天写了一个状态机,在仿真的时候,发现状态的转换跟我预期的不<br /><br />一样,是两个周期才转换一次。实在找不出问题,就慢慢的删程序,最后把程序删到了只<br /><br />有状态转换部分,但是仿真出来还是两个周期才切换一次状态。<br /><br />我感觉应该是一个周期转换一次状态才对。<br />不知道是我的理解有问题,还是程序有问题。<br />我把代码贴在下面了,麻烦各位帮我看看。<br /><br />谢谢了!!!<br /><br />library IEEE;<br />use IEEE.STD_LOGIC_1164.ALL;<br />use IEEE.STD_LOGIC_ARITH.ALL;<br />use IEEE.STD_LOGIC_UNSIGNED.ALL;<br /><br /><br />entity NonStopWrite is<br /> port(<br /> clk:in std_logic;<br /> rst:in std_logic<br /> ) ;<br />end NonStopWrite;<br /><br />architecture Behavioral of NonStopWrite is<br />type NonStopState is (IDLE,WR1,WR2,WR3,WR4,WR5);<br />signal pre_state,next_state: NonStopState;<br />begin<br /> <br /> process(clk,rst)<br /> begin<br /> if(rst='1')then<br /> next_state <= IDLE;<br /> elsif(rising_edge(clk))then<br /> case pre_state is<br /> when IDLE =><br /> next_state <= WR1;<br /> when WR1 =><br /> next_state <= WR2;<br /> when WR2 => <br /> next_state <= WR3;<br /> when WR3 =><br /> next_state <= WR4;<br /> when WR4 =><br /> next_state <= WR5;<br /> when WR5 =><br /> next_state <= WR1;<br /> when others=><br /> next_state <= IDLE;<br /> end case;<br /> end if;<br /> end process;<br /> <br /> process(clk,rst)<br /> begin<br /> if(rst='1')then<br /> pre_state <= IDLE;<br /> elsif(rising_edge(clk))then<br /> pre_state <= next_state;<br /> end if;<br /> end process;<br /><br />end Behavioral;<br /> |
|