关于状态图的问题

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

包体定义7段数码管错了

-&nbsp;-包体定义七段数码管的表错了。。。鬼使神差了,谁知道怎么写个他,可是更改了之后程序还是不跳转s3哎。晕了
 楼主| worrior_1 发表于 2009-4-4 11:38 | 显示全部楼层

问题已经解决

if(...)里如果有&lt=是比较,不是赋值符号。概念没弄清。现在的状态图就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

49

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部