一个状态机的问题
本帖最后由 fpgaw 于 2010-11-18 16:23 编辑我设计一个状态机
状态机是用两个按键来进行状态的转变的
可是综合有错误,查了一些资料,说状态机的转变只能用同一信号的触发沿来进行
是不是这样呢?
那如果要设计一个 靠按键的触发沿来实现状态转变的状态机怎么实现呢?
大虾们能不能指点一下,先谢谢了! 你说的"查了一些资料,说状态机的转变只能用同一信号的触发沿来进行" 我想是时钟驱动状态机运转的意思,跟控制状态具体怎么转没关系的!<br>
我理解的是"这个唯一的时钟驱动状态机不停的望前走,但具体走到哪个状态.还是保持还来的状态就由控制信号决定了.<br>
例如在VHDL中状态机除开说明部分外,还有"主控时序进程" ,"主控组合进程","辅助进程"-----<br>
我写状态机还不很熟,敬供参考个人意见 下面的是我写的用按键1和按键2来控制状态状态转移的程序<br>
不知道大家有没有去skywolf 大虾的网站上看见过 多功能时钟的设计 ,这就是我针对其中跑表那段设计的 <br>
大家帮我看看这个错误吧. <br>
error:<br>
Always Construct error: more than one register in the Event Control of an Always Construct is not used in the rest of the Always Construct<br>
_____________________________________________________________<br>
`timescale 1ns/1ns<br>
module stopwatch10(display_value,key2,key1,clk);<br>
output display_value;<br>
input key1,key2,clk;<br>
reg counter,holding_time;<br>
reg present_state,next_state;<br>
parameter stopping = 2'b00,running=2'b11,holding=2'b01;<br>
always @(posedge key2 or posedge key1) //报错行<br>
begin<br>
present_state<=next_state;<br>
case(present_state)<br>
stopping:<br>
begin<br>
if(key2)<br>
next_state<=running;<br>
else <br>
holding_time<=8'b0;<br>
end<br>
running:<br>
begin<br>
if(key2)<br>
next_state <= stopping;<br>
if(key1)<br>
next_state<=holding;<br>
holding_time <= counter;<br>
end<br>
holding:<br>
begin<br>
if(key2)<br>
//refresh<br>
holding_time<=counter;<br>
if(key1)<br>
next_state<=running;<br>
end<br>
default: begin<br>
next_state <= stopping;<br>
holding_time <= 8'b0;<br>
end<br>
endcase<br>
end<br>
always @(posedge clk)<br>
begin<br>
if(present_state)<br>
begin<br>
counter <= counter+1;<br>
end<br>
else<br>
begin<br>
counter <= 8'b0;<br>
end<br>
end<br>
assign display_value = present_state?counter:holding_time;<br>
endmodule<br> 是不是程序太长,大家没耐性看下去了?<br>
就帮我分析一下这个错误就行了<br>
不明白为什么 always @(posedge key2 or posedge key1) <br>
会有错那? 这是触发器的描述方式<br>
如果进程中有 if key1 ... 那么就把key2当成时钟,key1当成异步信号<br>
否则 仿真器认为你要在一个触发器上加两个时钟 这个实际中是没有的<br>
改成 always @ (key1 or key2) 吧 zigzag说得极是,但是本人认为还是用同步的电路比组合电路要稳定些,就用一个时钟不可以吗??比如always @ (posedge key1),另外一个作为使能判断不行吗?? 说说你always @(posedge key2 or posedge key1)的错误提示是什么 两个是按键,而不是时钟 你说的"查了一些资料,说状态机的转变只能用同一信号的触发沿来进行" 我想是时钟驱动状态机运转的意思,跟控制状态具体怎么转没关系的!<br>
我理解的是"这个唯一的时钟驱动状态机不停的望前走,但具体走到哪个状态.还是保持还来的状态就由控制信号决定了.<br>
例如在VHDL中状态机除开说明部分外,还有"主控时序进程" ,"主控组合进程","辅助进程"-----<br>
我写状态机还不很熟,敬供参考个人意见
页:
[1]