阅读:1580回复:6
问一个很弱的概念问题,大家不要耻笑。
请教有限状态机的问题。
在VHDL中设计有限状态机使用process语句来判断current_state的改变,如果current_state不改变,是不是就不会触发这个进程?如果不触发这个进程,那永远也采集不到输入信号,也就永远不会改变next_state,那么执行current_state<=next_state语句,永远不会改变current_state的值。我想不明白,希望大侠能够帮忙解释一下。谢谢! |
|
沙发#
发布于:2003-11-19 11:01
你可以用CLK作触发,判断CURRENT_STATE的值
PROCESS(CLK) BEGIN IF(CLK\'EVENT AND CLK=\'1\')THEN IF(CURRENT_STATE=。。。。。。 |
|
板凳#
发布于: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; |
|
地板#
发布于: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的状态呢? |
|
地下室#
发布于:2003-11-22 13:54
状态机的是在一个进程里面实现的。
[编辑 - 12/1/03 by link_bridge] |
|
5楼#
发布于:2003-12-01 21:07
我认为教科书的写法并没有错,当然状态机可以在一个进程里面实现,但也可以分为几个进程。
状态机的第3部分在状态不变时并不是没有输出,而是保持输出状态不便。对于状态机的这种描述方式,可以将第一部分理解为时续逻辑,第二三部分理解为组合逻辑。第一部分决定逻辑转换的时刻,第二部分决定逻辑转换的方向,第三部分为当前状态下的输出。 |
|
6楼#
发布于:2003-12-02 15:50
to wcmlk,你好。
第二、第三部分是组合逻辑我明白,但是我不明白porcess(current_state)是怎么工作的。因为如果current_state不改变,是不会触发这两个进程的。而current_state,next_state的改变又全在这两个进程中进行。我写过程序,仿真结果也正确,但就是想不明白。 |
|