请教关于状态机的执行过程(是一个时钟上升沿执行完所有的状态吗)
请教关于状态机的执行过程(是一个时钟上升沿执行完所有的状态吗) ohmy God!
当然不是,根据状态和时钟或者输入做状态切换
然后根据状态产生不同的功能。 应该是一个状态执行完当前状态下的所有行为,下一个时钟执行下一个状态~,即有5个状态,就用五个时钟来完成 process(rm_clk,reset)
variable sta:integer range 0 to 3;
variable c:integer range 0 to 1023;
begin
if(reset='1')then
sta:=0;
d3<='0';
c:=0;
elsif(rm_clk'event and rm_clk='1')then
case sta is
when 0 => if((d2="01")or(d2="10"))then sta:=1;
end if;
when 1 => if(c=350)then
c:=0;
sta:=2;
else
c:=c+1;
end if;
when 2 => d3<='1';
sta:=3;
when 3 => d3<='0';
sta:=0;
end case;
end if;
end process;
请问执行完上面程序需要3个rm_clk吗,多一个状态是不是多一个延时呀? ? 回复【3楼】torchchinaled
-----------------------------------------------------------------------
when 0: 如果d2满足条件则下一个时钟进入sta=1,否则下一个时钟还是sta = 0,还是来这儿判断d2满不满足条件。
when 1:如果c=350则下个时钟进入sta=2,否则c+1,下一个时钟还是sta=1,判断c等于不等于350。因此在会这里阻塞350个时钟。
when 2:d3 写1,并设置下一个时钟sta=3;
when 3:d3 写0,并设置下一个时钟sta=0,回到0状态。
如果d2永远不满足01或10,这个状态机永远停留在0状态等待组合逻辑触发。触发后一共运行350+1+1个时钟周期。 感谢楼上指点,有点头绪了。
页:
[1]