mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1580回复:6

问一个很弱的概念问题,大家不要耻笑。

楼主#
更多 发布于:2003-11-19 10:33
请教有限状态机的问题。
在VHDL中设计有限状态机使用process语句来判断current_state的改变,如果current_state不改变,是不是就不会触发这个进程?如果不触发这个进程,那永远也采集不到输入信号,也就永远不会改变next_state,那么执行current_state<=next_state语句,永远不会改变current_state的值。我想不明白,希望大侠能够帮忙解释一下。谢谢!
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-11-19 11:01
你可以用CLK作触发,判断CURRENT_STATE的值
PROCESS(CLK)
 BEGIN
  IF(CLK\'EVENT AND CLK=\'1\')THEN
     IF(CURRENT_STATE=。。。。。。
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-19 12:33
case state  is
  when current_state =>
    --这里采集数据
   if ....then
   current_state<=next_state;
   end if;

  when next_state=>

  --这里采集数据
   if ....then
   next_state<=current_state;
   end if;
 
  when ....


end case;
        
mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-19 12:40
教科书上写的,有限状态机的描述按照功能划分可分为3部分:
1,次态逻辑。process(clk),功能是current_state<=next_state;
2,状态寄存器。process(current_state),功能是在不同的current_state下,通过对input的判断来决定next_state;
3,输出逻辑。process(current_state),功能是在不同的current_state下产生输出。

我的疑问出在2、3上。假如处于某一个状态很长时间,进程语句就不会触发,那么这种状态下不就即接收不到输入信号也不会产生输出信号了吗?接受不到输入信号,如何判断next_state的状态呢?
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-22 13:54
状态机的是在一个进程里面实现的。

[编辑 -  12/1/03 by  link_bridge]
wcmlk
驱动牛犊
驱动牛犊
  • 注册日期2002-03-01
  • 最后登录2006-04-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-01 21:07
我认为教科书的写法并没有错,当然状态机可以在一个进程里面实现,但也可以分为几个进程。
状态机的第3部分在状态不变时并不是没有输出,而是保持输出状态不便。对于状态机的这种描述方式,可以将第一部分理解为时续逻辑,第二三部分理解为组合逻辑。第一部分决定逻辑转换的时刻,第二部分决定逻辑转换的方向,第三部分为当前状态下的输出。
mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-02 15:50
to wcmlk,你好。
第二、第三部分是组合逻辑我明白,但是我不明白porcess(current_state)是怎么工作的。因为如果current_state不改变,是不会触发这两个进程的。而current_state,next_state的改变又全在这两个进程中进行。我写过程序,仿真结果也正确,但就是想不明白。
游客

返回顶部