Не удается изменить входы в начальном блоке тестового стенда - PullRequest
0 голосов
/ 17 апреля 2019

Я новичок в verilog и пытаюсь написать простую тестовую среду для FSM.Но я не могу изменить входы в начальном блоке.

Сброс должен быть сначала 0, затем 1 после 30 нс.Но сброс всегда равен 1. Для левого и правого значения одинаковы, значения зависят только от последнего оператора, который применяет к ним значения, а не изменяется со временем.Я не знаю, в чем проблема, кто-нибудь может мне помочь?

module FSM_TB;
reg clk,left, right, reset;
wire LA,LB,LC,RA,RB,RC;

FSM dut(clk, reset, left, right, LA, LB, LC, RA, RB, RC);

//apply inputs
initial begin
  reset = 0; left = 1; right = 0; #30;
  reset = 1;#30;
end

//generate clock
always begin
  clk = 0; #5;
  clk = 1; #5;
end

endmodule
module FSM(
    input clk,
    input reset,
    input left,
    input right,
    output LA,
    output LB,
    output LC,
    output RA,
    output RB,
    output RC
    );

    reg[2:0] state = 3'b000; 
    reg [2:0] nextstate;
    reg r ;

    parameter S0 = 3'b000;
    parameter S1 = 3'b100;
    parameter S2 = 3'b110;
    parameter S3 = 3'b111;

    //state register
    always @ (posedge clk, posedge reset)
        if(reset) 
        begin 
            state <= S0;
            r = 0;
        end else begin    // if !reset
            if(left) r = 0;
            if(right) r = 1;
            state <= nextstate;
        end



    //next state logic
    always @ (*)
        case(state)
            S0: if(left^right)    //if left xor right is 1, state is going to change
                   nextstate = S1;
                else  nextstate = S0;
            S1: nextstate = S2;
            S2: nextstate = S3;
            S3: nextstate = S0;
            default: nextstate = S0;
         endcase

     //output logic
     assign LC = (r== 0) & (state==S3);
     assign LB = (r== 0) & ((state==S3)|(state == S2));
     assign LA = (r== 0) & ((state==S3)|(state == S2)|(state == S1));

     assign RC = (r == 1) &(state==S3);
     assign RB = (r == 1) &((state==S3)|(state == S2));
     assign RA = (r == 1) &((state==S3)|(state == S2)|(state == S1));


endmodule
...