我的源文件<br />library IEEE;<br />use IEEE.std_logic_1164.all;<br />package P_alarm is<br /> subtype t_digital is integer range 0 to 9;<br /> subtype t_short is integer range 0 to 65535;<br /> type t_clock_time is array(3 downto 0) of T_digital;<br /> type t_display is array(3 downto 0) of Std_logic_vector(9 downto 0);<br /> type seg7 is array(0 to 9) of Std_logic_vector(9 downto 0);<br /> constant Seven_seg:seg7:=("0000000001",--0<br /> "0000000010",--1<br /> "0000000100",--2<br /> "0000001000",--3<br /> "0000010000",--4<br /> "0000100000",--5<br /> "0001000000",--6<br /> "0010000000",--7<br /> "0100000000",--8<br /> "1000000000");--9<br />end package;<br /><br /><br /><br /><br />library IEEE;<br />use IEEE.std_logic_1164.all;<br />use WORK.P_alarm.all;<br />ENTITY Alarm_controller is<br /> port(Key,Alarm_botton,Time_botton,clk,reset:in std_logic;<br /> Load_new_a,Load_new_c,Show_new_time,Show_a:out std_logic);<br />end Alarm_controller;<br />ARCHITECTURE art of Alarm_controller is<br /> type t_state is(s0,s1,s2,s3,s4);--lie zhuang tai<br /> constant key_timeout:t_short:=900;--jian pan yan shi 900ns<br /> constant show_alarm_timeout:t_short:=900;--alarm jian yan shi 900ns <br /> signal curr_state:t_state;--zhuang tai ji dang qian zhuang tai wei <br /> signal next_state:t_state;--zhuang tai ji xia yi gong zuo wei <br /> signal counter_k:t_short;--jian pan dong zuo shi jian<br /> signal enable_count_k:std_logic;--jian pan chao shi yun xu<br /> signal count_k_end:std_logic;--jian pan chao shi jie shu <br /> signal counter_a:t_short;--alarm jian dong zuo shi jian<br /> signal enable_count_a:std_logic;--alarm jian chao shi yun xu<br /> signal count_a_end:std_logic;--alarm jian chao shi jie shu<br /> begin<br /> p0:process(clk,reset)<br /> begin<br /> if reset='1'then <br /> curr_state<=s0;<br /> elsif rising_edge(clk)then<br /> curr_state<=next_state;<br /> end if;<br /> end process;<br /> process(key,alarm_botton,time_botton,curr_state,count_a_end,count_k_end)is<br /> begin<br /> next_state<=curr_state;<br /> load_new_a<='0';<br /> load_new_c<='0';<br /> show_a<='0';<br /> show_new_time<='0';<br /> enable_count_k<='0';<br /> enable_count_a<='0';<br /> case curr_state is<br /> when s0=><br /> if(Key='1')then<br /> next_state<=s1;<br /> Show_new_time<='1';<br /> elsif(Alarm_botton<='1')then<br /> next_state<=s4;<br /> Show_a<='1';<br /> else<br /> next_state<=s0;<br /> null;<br /> end if;<br /> when s1=><br /> if(key='1')then<br /> next_state<=s1;<br /> Show_new_time<='1';<br /> elsif(Alarm_botton<='1')then<br /> next_state<=s2;<br /> Load_new_a<='1';<br /> elsif(Time_botton<='1')then<br /> next_state<=s3;<br /> Load_new_c<='1';<br /> else<br /> if(count_k_end='1')then<br /> next_state<=s0;<br /> null;<br /> else<br /> next_state<=s1;<br /> Show_new_time<='1';<br /> end if;<br /> enable_count_k<='1';--yun xu jian pan chao shi<br /> end if;<br /> when s2=><br /> if(Alarm_botton<='1')then<br /> next_state<=s2;<br /> Load_new_a<='1';<br /> else <br /> next_state<=s0;<br /> null;<br /> end if;<br /> when s3=><br /> if(Time_botton<='1')then<br /> next_state<=s3;<br /> Load_new_c<='1';<br /> else <br /> next_state<=s0;<br /> null;<br /> end if;<br /> when s4=><br /> if(Alarm_botton<='1')then<br /> next_state<=s4;<br /> else<br /> if(count_a_end='1')then<br /> next_state<=s0;<br /> null;<br /> else <br /> next_state<=s4;<br /> Show_a<='1';<br /> end if;<br /> enable_count_a<='1';--yun xu alarm chao shi<br /> end if;<br /> when others=><br /> null;<br /> end case;<br /> end process ; <br /> Count_key:process(Enable_count_k,clk)<br /> begin<br /> if (Enable_count_k<='0')then<br /> Counter_k<=0;<br /> count_k_end<='0';<br /> elsif (rising_edge(clk))then <br /> if(counter_k>=key_timeout)then<br /> count_k_end<='1';<br /> else<br /> counter_k<=Counter_k+1;<br /> end if;<br /> end if;<br /> end process Count_key;<br /> Count_alarm:process(Enable_count_a,clk)--alarm yan shi jin cheng<br /> begin<br /> if(enable_count_a<='1')then--qing 0 <br /> counter_a<=0;<br /> count_a_end<='0';<br /> elsif (rising_edge(clk))then<br /> if (counter_a>=show_alarm_timeout)then--xun huan ci shu<br /> count_a_end<='1';<br /> else <br /> counter_a<=counter_a+1;<br /> end if;<br /> end if;<br /> end process Count_alarm;<br />end art;<br />这是一个状态机,可是s3状态我经过编译之后生成了状态图,怎么s3的状态跳不过去啊?谁帮我看看? |
|