在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2494|回复: 5

[讨论] 关于状态机的一点疑问

[复制链接]
发表于 2011-10-4 21:45:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
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;
发表于 2011-10-5 01:54:41 | 显示全部楼层
回复 1# wy0619


    两个程序都能运行,前面一个是采用时序逻辑,也就是状态机的状态执行输出都是寄存器输出,后一个采用的组合逻辑的方式,输出都是组合逻辑输出。
采用组合逻辑还是时序逻辑,看设计需要了,这个不一定的.如果状态机执行的输出还要做其它信号的输入,而对速度又有一定要求的话,最好就用时序逻辑的
 楼主| 发表于 2011-10-5 15:09:47 | 显示全部楼层
回复 2# 挂在天边的鱼


    您的意思是,后面一个程序的组合逻辑输出状态不寄存吗?我觉得后一个程序的执行速率为FPGA的系统频率,应该比clk更快呀。
发表于 2011-10-5 21:27:06 | 显示全部楼层
对啊,你可以自己综合一下,后面一个是组合逻辑的输出,并不是说组合逻辑的输出就一定降低系统速度,看在什么情况下.
发表于 2011-10-14 22:14:08 | 显示全部楼层
状态机是通过使用寄存器和触发器实现的。而触发器和寄存器的启动需要时钟上升沿或下降沿来触发。所以舒服一定要加一个时钟信号。
发表于 2011-10-14 22:35:00 | 显示全部楼层
根据需要来吧,这个问题其实和状态机关系不大,主要是时序逻辑和组合逻辑的区别,第二种写法我不知道有没有语法错误,好像没这样写过。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-26 21:59 , Processed in 0.112851 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表