嵌套 状态机

请教高手,如图所述波形如何用嵌套状态机实现(VHDL)
要求:1. Signal1 用主状态机产生,Signal2用从状态机产生
2. 采用扁平式代码结构,即主从状态机分别处于不同的Process语块中。
PS: 嵌套状态机的编码风格 扁平式是否要比内嵌式(主从状态机处在同一个Process语块中)用得更频繁
根据时钟计数,然后以计数值作为状态划分的依据。用一个状态机与用两个状态机原理上是没有区别的,只是如果只用一个状态机时,其状态划分要复杂一点点的。
我觉得用一个状态机反而好一些。一个是7分频,一个是4分频。用一个计数器分出来省资源
2# qlengyu
这是我写的一段内嵌式的代码:
------------------------- Main Part ------------------------------------
process (clk, rst)
begin
if (rst = '0') then
main_state <= MST0;
sub_state <= SST0;
cnt_clk <= 0;
flag <= 0;
elsif (rising_edge(clk)) then
case main_state is
when MST0 =>
if (cnt_clk < 2) then
main_state <= MST0;
cnt_clk <= cnt_clk + 1;
else
main_state <= MST1;
cnt_clk <= 0;
end if;
when MST1 =>
if (cnt_clk < 2) then
main_state <= MST1;
cnt_clk <= cnt_clk + 1;
else
main_state <= MST2;
cnt_clk <= 0;
end if;
when MST2 =>
case sub_state is
when SST0 =>
sub_state <= SST1;
when SST1 =>
sub_state <= SST2;
when SST2 =>
if (flag < 1) then
sub_state <= SST1;
flag <= flag + 1;
else
sub_state <= SST0;
main_state <= MST1;
flag <= 0;
end if;
end case;
end case;
end if;
end process;
process (rst, main_state, sub_state)
begin
if (rst = '0') then
sig1 <= '0';
sig2 <= '0';
else
case main_state is
when MST0 =>
sig1 <= '0';
sig2 <= '0';
when MST1 =>
sig1 <= '1';
sig2 <= '0';
when MST2 =>
sig1 <= '0';
case sub_state is
when SST0 =>
sig2 <= '0';
when SST1 =>
sig2 <= '1';
when SST2 =>
sig2 <= '0';
end case;
end case;
end if;
end process;
--------------------------------------------------------------------------
如果我想把 "case sub_state is" 单独拎出来,写在另外一个Process语块中,这样阅读就比较清晰。
请问如何实现?谢谢!
信号给复杂化了 用不着这么多状态机
signal1 完全可以作为一个复位信号给到 产生signal2 的模块
你这时面试题吧,要不这个用状态机嵌套来实现,也夸张了
5# zhang2000
我只是举了一个简单例子,实际波形很复杂,宜用嵌套状态机。
不要只关注这个例子本身,我希望能得到有关嵌套状态机的正解,谢谢
