Lemmings2 HDLbits

题目:
Lemmings2 HDLbits

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    output walk_left,
    output walk_right,
    output aaah ); 

    parameter LEFT = 0, RIGHT = 1, AAAH = 3;
    reg [1:0] state, next_state,state_before_fall;
   
    wire [2:0] sel;
    assign sel = {ground,bump_left,bump_right};
    always@(*) begin
        casex(sel)
            3'b0xx: next_state <= AAAH;
            3'b111: begin
                case(state)
                    LEFT: next_state <= RIGHT;
                    RIGHT: next_state <= LEFT;
                    AAAH: next_state <= state_before_fall;
                endcase
            end
            3'b110: begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= RIGHT;
                endcase
            end
            3'b101: begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= LEFT;
                endcase
            end
            3'b100:  begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= state;
                endcase
            end
        endcase
        /*if(!ground&&(state != AAAH))
            state_before_fall <= state;*/
        if(!ground&&(state == LEFT))
            state_before_fall <= LEFT;
        else if(!ground&&(state == RIGHT))
            state_before_fall <= RIGHT;
    end
    
    always@(posedge clk or posedge areset) begin
        if(areset)
            state <= LEFT;
        else
            state <= next_state;
    end
    
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign aaah = (state == AAAH);
endmodule

Lemmings2 HDLbits
但写成如下在网页运行则有问题,搬移到vivado没问题:

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    output walk_left,
    output walk_right,
    output aaah ); 

    parameter LEFT = 0, RIGHT = 1, AAAH = 3;
    reg [1:0] state, next_state,state_before_fall;
   
    wire [2:0] sel;
    assign sel = {ground,bump_left,bump_right};
    always@(*) begin
        casex(sel)
            3'b0xx: next_state <= AAAH;
            3'b111: begin
                case(state)
                    LEFT: next_state <= RIGHT;
                    RIGHT: next_state <= LEFT;
                    AAAH: next_state <= state_before_fall;
                endcase
            end
            3'b110: begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= RIGHT;
                endcase
            end
            3'b101: begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= LEFT;
                endcase
            end
            3'b100:  begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= state;
                endcase
            end
        endcase
        if(!ground&&(state != AAAH))
            state_before_fall <= state;
    end
    
    always@(posedge clk or posedge areset) begin
        if(areset)
            state <= LEFT;
        else
            state <= next_state;
    end
    
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign aaah = (state == AAAH);
endmodule

Lemmings2 HDLbits
vivado程序:(仅仅变了reg [1:0] state = LEFT)

module Lemmings2(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    output walk_left,
    output walk_right,
    output aaah ); 

    parameter LEFT = 0, RIGHT = 1, AAAH = 3;
    reg [1:0] state = LEFT, next_state,state_before_fall;
   
    wire [2:0] sel;
    assign sel = {ground,bump_left,bump_right};
    always@(*) begin
        casex(sel)
            3'b0xx: next_state <= AAAH;
            3'b111: begin
                case(state)
                    LEFT: next_state <= RIGHT;
                    RIGHT: next_state <= LEFT;
                    AAAH: next_state <= state_before_fall;
                endcase
            end
            3'b110: begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= RIGHT;
                endcase
            end
            3'b101: begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= LEFT;
                endcase
            end
            3'b100:  begin
                case(state)
                    AAAH: next_state <= state_before_fall;
                    default:next_state <= state;
                endcase
            end
        endcase
        if(!ground&&(state != AAAH))
            state_before_fall <= state;
    end
    
    always@(posedge clk or posedge areset) begin
        if(areset)
            state <= LEFT;
        else
            state <= next_state;
    end
    
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign aaah = (state == AAAH);
endmodule

tb文件

module tb_Lemmings2();

reg clk;
reg areset;
reg bump_left,bump_right,ground;

wire walk_left,walk_right,aaah;
Lemmings2 Lemmings2_1(
    .clk(clk),
    .areset(areset),    // Freshly brainwashed Lemmings walk left.
    .bump_left(bump_left),
    .bump_right(bump_right),
    .ground(ground),
    .walk_left(walk_left),
    .walk_right(walk_right),
    .aaah(aaah) ); 

initial begin
clk = 0;
areset = 0;
bump_left = 0;
bump_right = 0;
ground = 1;
#35;
ground = 0;
#30;
bump_left = 1;
ground = 1;
#20;
bump_left = 0;
ground = 0;
#30;
ground = 1;
#20;
$stop;
end

always #5 clk = !clk;
endmodule

两处运行结果对比:
Lemmings2 HDLbits

Lemmings2 HDLbits
有没有了解的人指导一下?

上一篇:关于232,422接口


下一篇:Teacher Forcing