2

8つのLEDで4つの異なるパターンを生成し、LEDがティックパルスごとに変化するVerilogでLEDパターンfsmをコーディングする方法について誰かが光を当てることができるかどうか疑問に思っていました.4つの異なるモードをトリガーする4つのボタンがあり、各モード8 個の LED をパターンで、つまり左から右、右から左に移動させます。

シーケンシャル ロジックを作成しましたが、LED のパターンを各状態に挿入する方法がわかりません。私のコードは次のとおりです。

`timescale 1ns / 1ps
module pattern_fsm(
input [3:0] mode,
input tick,
input clk,
input reset,
output reg [7:0] Led
);

 reg [3:0] state, nextstate;

 parameter s0 = 4'b0001;
 parameter s1 = 4'b0010;
 parameter s2 = 4'b0100;
 parameter s3 = 4'b1000;

 always @(posedge clk, posedge reset)
    if(reset) 
        state <= s0;
    else
        state <= nextstate;

always @(*)
    begin
        case(state)
            s0: if(mode == 4'b0001) nextstate = s0;
                    else nextstate = s3;
            s1: if(mode == 4'b0010) nextstate = s1;
                    else nextstate = s0;
            s2: if(mode == 4'b0100) nextstate = s2;
                    else nextstate = s1;
            s3: if(mode == 4'b1000) nextstate = s3;
                    else nextstate = s2;
            default: nextstate = s0;
        endcase
    end

always @(state)
    begin
        case(state)
            s0: Led = 8'b00000001;
            s1: Led = 8'b00000010;
            s2: Led = 8'b00000011;
            s3: Led = 8'b00000100;
        endcase
    end

endmodule
4

1 に答える 1

1

たぶん、シフト操作を使用できますか?

always @(posedge clk or posedge reset )
    if(reset) begin
        Led <= 8'h00;
    end
    else begin
        case(state)
            s0: Led <= 8'h01;              // a single Led lit 
            s1: Led <= {Led[0], Led[7:1]}; // rotate right
            s2: Led <= {Led[6:0], Led[7]}; // rotate left
            s3: Led <= ~Led;               // flip?
            default: Led <= Led;           // do nothing
        endcase
    end

これが光っていることを願っています。私はこのコードをテストしていないので、注意してください...

于 2012-10-12T16:34:57.753 に答える