微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于状态机的一点疑问

关于状态机的一点疑问

时间:10-02 整理:3721RD 点击:
process(clk,state,flag1,flag2,...)
begin
   if clk'event and clk='1' then
      case state is
         when 00 =>
            if flag1='0' then
                ...
            else
                ...
            end if;
         when 01 =>
            ...
         when 10 =>
            ...
         when others
            ...
       end case;
   end if;
end process;
为何此状态机的运行一定要有时钟clk的约束?而如下的程序则不能运行?
process(state,flag1,flag2,...)
begin
      case state is
         when 00 =>
            if flag1='0' then
                ...
            else
                ...
            end if;
         when 01 =>
            ...
         when 10 =>
            ...
         when others
            ...
       end case;
end process;



    两个程序都能运行,前面一个是采用时序逻辑,也就是状态机的状态执行输出都是寄存器输出,后一个采用的组合逻辑的方式,输出都是组合逻辑输出。
采用组合逻辑还是时序逻辑,看设计需要了,这个不一定的.如果状态机执行的输出还要做其它信号的输入,而对速度又有一定要求的话,最好就用时序逻辑的



    您的意思是,后面一个程序的组合逻辑输出状态不寄存吗?我觉得后一个程序的执行速率为FPGA的系统频率,应该比clk更快呀。

对啊,你可以自己综合一下,后面一个是组合逻辑的输出,并不是说组合逻辑的输出就一定降低系统速度,看在什么情况下.

状态机是通过使用寄存器和触发器实现的。而触发器和寄存器的启动需要时钟上升沿或下降沿来触发。所以舒服一定要加一个时钟信号。

根据需要来吧,这个问题其实和状态机关系不大,主要是时序逻辑和组合逻辑的区别,第二种写法我不知道有没有语法错误,好像没这样写过。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top