2016-04-12 20 views
0

私はコンピュータエンジニアリングクラスのラボ割り当てに取り組んでいます。私は任務を納得しています。私は教授のために数日前まで待ってから助けを求めることができます。だから私は彼女を助けることができるかどうか見ている。ハミング(7,4)コード - 有限状態マシン

私の問題は、私の有限状態機械がラボの割り当てからどのように求められるべきかを研究していないことです。ステートマシンは3つの状態を想定しています。アイドル、s1、s2。 Idleは波形のすべてのゼロを表示すると仮定し、状態1はLFSRからランダムに生成された4ビット数を示し、状態2はハミング(7,4)が行われた後の4ビット数からの結果を示す。クロックは1HZクロックに変更され、CLK分周が使用されます。次のように

コードは:ハミング

CLOCK_1HZ

module clock_1hz (clk, reset, clk2); 
    input clk, reset; 
    output clk2; 

    reg temp; 
    reg [25:0] cnt; 

always @(posedge clk or posedge reset) 
    begin 
     if (reset) 
      begin 
       cnt = {25{1'b0}}; 
      end 
     else 
      begin 
       if (cnt == 26'b10111110101111000001111111) 
        begin 
         cnt = {25{1'b0}}; 
         temp = 1'b1; 
        end 
       else if (cnt < 26'b01011111010111100000111111) 
        begin 
         cnt = cnt + 1; 
         temp = 1'b1; 
        end 
       else 
        begin 
         cnt = cnt + 1; 
         temp = 1'b0; 
        end 
      end 
    end 

    assign clk2 = temp; 

endmodule 

LFSR

module lfsr (out, clk, rst); 

    output [4:1] out; 
    input clk, rst; 

    reg [4:1] w; 

always @(posedge clk or posedge rst) 

    begin 

    if (rst) 
     begin 
      w = 4'b1011; 
     end 

    else 
     w = {w[3],w[2],w[1]^w[4], w[4]}; 
    end 

assign out=w; 

endmodule 

module hamming(din, dout); 
    output [6:0] dout; 
    input [3:0] din; 

    assign dout[6] = din[3]; 
    assign dout[5] = din[2]; 
    assign dout[4] = din[1]; 
    assign dout[3] = din[1]^din[2]^din[3]; 
    assign dout[2] = din[0];  
    assign dout[1] = din[0]^din[2]^din[3]; 
    assign dout[0] = din[0]^din[1]^din[3]; 

endmodule 

このコードはすべて正しく動作し、正しいHAMMINGを計算し、クロック分周はLFSRとうまく機能し、階層設計として結合されているときに機能します。

このコードでFSMを作成すると、ハミング番号を計算するまで機能しますが、指示されていると状態は変わりません。

  • スイッチ1セット:状態2、
7ビットハミング結果を示す:状態IDLE
  • スイッチ2設定した場合:スイッチ2セットは時の状態1は、
  • 4ビットLFSR数を示し

    次は有限ステートマシンための私のコードであり、それは、波形出力ある以下。有限状態マシンの

    module fsm (clk , reset , sw1 , sw2 , sw3 , lights); 
    
        input clk, reset, sw1, sw2, sw3; 
        output reg [6:0] lights; 
    
        reg[2:0] state; 
    
        wire clkhz; 
        wire [3:0] lfsr_out; 
        wire [6:0] hout; 
    
        parameter S0 = 3'b000, S1 =3'b001, S2 = 3'b010; // states 
    
        clock_1hz u1(.clk(clk), 
            .reset(reset), 
            .clk2(clkhz)); 
        lfsr u2(.rst(reset), 
           .clk(clkhz), 
           .out(lfsr_out)); 
        hamming u3(.din(lfsr_out), 
            .dout(hout)); 
    
    always @(posedge clk or posedge reset) 
        begin 
         if (reset == 1) 
          begin 
           state <= S0; 
          end 
         else 
          case(state) 
           S0: if(sw1 == 1) 
             begin 
              state <= S0; 
             end 
           S1: if(sw2 == 1) 
             begin 
              state <= S1; 
             end 
           S2: if(sw3 == 1) 
             begin 
              state <= S2; 
             end 
           default state <= S0; 
        endcase 
    end 
    
    always @(*) 
        begin 
         case(state) 
           S0: lights = 7'b0000000; //led are all off 
           S1: lights = lfsr_out; //4bit lfsr shown on led 
           S2: lights = hout; // display hamming code result 
           default lights = 7'b0000000; //led are all off 
         endcase 
        end 
    endmodule 
    

    WAVEFORM:

    Snapshot

  • +0

    、あなたは '決して変わらないことができます状態。 Verilogのcase文では、C/C++やJavaのような 'break;は必要ありません。 – Greg

    答えて

    0

    私はそれはあなたがここで必要ステートマシンではないと思います。要件の説明から、おそらく現在押されているスイッチを覚えておく必要がありますか?

    always @(posedge clk or posedge reset) 
        if (reset == 1) 
        state <= S0; 
        else 
        if (sw1) 
         state <= S0; 
        else if (sw2) 
         state <= S1; 
        else if (sw3) 
         state <= S2; 
    

    今すぐstateが押された電流スイッチを思い出している。そのような場合は、の線に沿って何かを行うことができます。要件の説明から、これを行うのはスイッチがどのスイッチに押されているかに依存しないため、状態マシンが必要なようには見えません - この動作は状態に依存しません。与えられたコードで

    (あなたはどちらか、これらすべてのbegin sおよびend秒を必要としません。ブランチに一つだけのステートメントがある場合は、それらを必要としません。)

    +0

    それは私を助け、それは今の魅力のように動作します。ありがとうございました – punjabi4life

    関連する問題