AAT 发表于 2010-6-26 01:35:16

状态机的问题vhdl语言编了个程序,其中有一个进程是用复位和状态来触发的

本帖最后由 fpgaw 于 2010-7-11 11:16 编辑

vhdl语言编了个程序,其中有一个进程是用复位和状态来触发的.进程的程序如下
process(state,reset)
begin
if reset='0' then
sout1<=0;
sout2<=0;
counter<=0;
elsif state=lose then
counter<=counter;
sout1<=2;
sout2<=2;
elsif state=win then
counter<=counter;
sout1<=8;
sout2<=8;
else
counter<=counter+1;
end if;
end process;
状态有8个,这个程序的问题是我状态没有变,但是计数器却一直在动(counter是计数器),想问一下是不是我用状态触发进程有问题啊?

ngtim 发表于 2010-6-26 02:58:56

你的状态机有8个状态,但是该进程中只有两个状态。当RESET不等于0时,且状态不在‘lose'和‘win'的状态下,则进程会认为是最后一个条件'else'条件成立,所以状态不变时,计数器也会增加。

interige 发表于 2010-6-26 03:32:08

我的程序总共有两个进程,另一个进程控制状态的转移.另一个进程里的状态没有变,即state没变,那么我帖子里的进程就不会被触发,计数就不应该动啊.<br>
state不变的话,进程应该是不会被触发的对吗?我刚开始学vhdl,还不是很懂.<br>
谢谢你了rabitplayer.

UFP 发表于 2010-6-26 05:23:42

我仿真了一下,我那样写程序确实有问题,counter的输出是不定态.<br>
我想问一下,是不是用状态机触发的话,在进程中应该把所有出现的状态都写全,不能像我上面那样只写两个.

Sunlife 发表于 2015-6-17 10:06:35

我的程序总共有两个进程,另一个进程控制状态的转移.另一个进程里的状态没有变,即state没变,那么我帖子里的进程就不会被触发,计数就不应该动啊.<br>
state不变的话,进程应该是不会被触发的对吗?我刚开始学vhdl,还不是很懂.<br>
谢谢你了rabitplayer.
页: [1]
查看完整版本: 状态机的问题vhdl语言编了个程序,其中有一个进程是用复位和状态来触发的