有限状态机verilog4num序列

有限状态机verilog4num序列,verilog,hdl,fsm,state-machine,Verilog,Hdl,Fsm,State Machine,好的,我知道我的代码适用于3个数字的序列,但对于有限状态机模型,这应该是正确的,但它不适用于4个数字的序列。它只检测前3个。我需要检测序列011001111中的重叠“0110”。它应该有3个“0110”序列和2个重叠序列,但当我运行我的Verilog时,它检测到4个“0110”序列,这告诉我它只抓取了“011”,有人能看看我的代码,看看我做错了什么吗?我可以简单地添加另一个状态,但我认为这不是正确的方法,因为我的图表中没有其他状态 module moore_seq ( input

好的,我知道我的代码适用于3个数字的序列,但对于有限状态机模型,这应该是正确的,但它不适用于4个数字的序列。它只检测前3个。我需要检测序列011001111中的重叠“0110”。它应该有3个“0110”序列和2个重叠序列,但当我运行我的Verilog时,它检测到4个“0110”序列,这告诉我它只抓取了“011”,有人能看看我的代码,看看我做错了什么吗?我可以简单地添加另一个状态,但我认为这不是正确的方法,因为我的图表中没有其他状态

module moore_seq
(
        input clock, reset, x,
        output reg z
);

//assign binary encoded codes to the states A through D
parameter       A = 2'b00,
                B = 2'b01,
                C = 2'b10,
                D = 2'b11;

reg [1:0] current_state, next_state;

//Section 1: Next state generator (NSG)
always@(*)
begin
        casex(current_state) //ignore unknown and Hi-Z inputs
        A:      if (x == 1)
                        next_state = A;
                else
                        next_state = B;
        B:      if (x == 1)
                        next_state = C;
                else
                        next_state = B;
        C:      if (x == 1)
                        next_state = D;
                else
                        next_state = B;
        D:      if (x == 1)
                        next_state = A;
                else
                        next_state = B;
        endcase
end
//Section 2: Output Generator (OG)
always@(*)
begin
        if(current_state == D)
                z = 1;
        else
                z = 0;
end

//Section 3: The Flip Flops
always@(posedge clock, posedge reset)
begin
        if(reset == 1)
                current_state <= A;
        else
                current_state <= next_state;
end
endmodule

我想,四个州就足够了。换衣服

//Section 2: Output Generator (OG)
always@(*)
begin
    if(current_state == D)


你必须需要更多的状态,因为你在3次输入后到达
D
(导致
A->B
B->C
,和
C->D
)。虽然如此,我的图表没有其他状态,所以我没有把它放进去。我不知道如何在参数下添加另一个状态。它会像E=2'b111?您的状态变量(代码中未显示的声明)中需要更多位,并且您的状态常量也必须为3位宽(即
3'b..
)。更新了我的代码,但现在它无法检测到任何z=1的“0110”。您的状态变量中需要更多位:3位不适合
reg[1:0]
//Section 2: Output Generator (OG)
always@(*)
begin
    if(current_state == D)
//Section 2: Output Generator (OG)
always@(*)
begin
    if(current_state == D && x == 0 )