verilog HDL中Moore 有限状态机 的初始状态。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog HDL中Moore 有限状态机 的初始状态。相关的知识,希望对你有一定的参考价值。

module MooreFSM (A ,ClkM, Z);
input A, ClkM;
output Z;
reg Z;

parameter s0=0, s1=1, s2=2, s3=3;
reg [0:1] MooreState;

always @ (posedge ClkM)
case (MooreState) 、、这里最初的Moorestate 是怎么确定的?
s0:
begin
Z<=1;
MooreState<=(!A) ? s0:s2;
end
s1:
begin
Z<=0;
MooreState<=(!A) ? s0:s2;
end
s2:
begin
Z<=0;
MooreState<=(!A) ? s2:s3;
end
s3:
begin
Z<=1;
MooreState<=(!A) ? s1:s3;
end
endcase
endmodule
新手,哪位帮忙解答下。
谢谢大家的回答,但我现在纠结,如果不加复位信号,仿真为什么能跑呢?是仿真工具自己选择的初始状态?

参考技术A 课本里的程序只是说明下有限状态机的基本结构,从工程实践来说,肯定有复位信号。你给的模块里面没有复位信号。复位很关键,它是程序跳转的初始状态,可以根据需求来设置复位时的状态,所以这里你应该根据题意来确定复位时给什么状态,不一定是第一个状态。
对于本题添加一个异步复位即可,参考如下
always@(posedge clk or negedge rst_n)
if (!rst_n)
begin
Moorestate<=s0 ;//这个根据题目来做相应改动
z<=1;
end本回答被提问者采纳
参考技术B 实际用的话基本都有复位信号,不然程序容易乱掉,没复位仿真是没问题的追问

请问,如果没有复位信号,仿真起始是如何确定的呢?

参考技术C module MooreFSM (A ,ClkM, Z);
input A, ClkM;
output reg Z;

parameter s0=0, s1=1, s2=2, s3=3;
reg [0:1] MooreState;

initial//这里最初的Moorestate 是怎么确定的?
begin
MooreState <= 0;
end

always @ (posedge ClkM)
case (MooreState)
s0: begin
Z<=1;
MooreState<=(!A) ? s0:s2;
end
s1: begin
Z<=0;
MooreState<=(!A) ? s0:s2;
end
s2: begin
Z<=0;
MooreState<=(!A) ? s2:s3;
end
s3: begin
Z<=1;
MooreState<=(!A) ? s1:s3;
end
endcase
endmodule追问

也就是说,状态机最好还是要用复位给个初始状态是吧,我看了2本书上的例子都没有写复位,这样话,是不是仿真时默认从0状态初始?

追答

仿真貌似用initial初始化一下就OK了 应该是X而不是0
另外就是你说的reset一般都是有的.可能书上为了讲状态机这里就没加 否则又给读者增加麻烦

以上是关于verilog HDL中Moore 有限状态机 的初始状态。的主要内容,如果未能解决你的问题,请参考以下文章

三段式有限状态机Verilog代码

有限状态机

基于Verilog HDL的状态机描述方法

verilog HDL状态机 赋初值问题

FPGA 状态机????

HDL4SE:软件工程师学习Verilog语言