トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

state.v

ステートマシン

入出力ポート

  ポート ビット数  
入力 clk 1 グローバルクロック
入力 reset 1 グローバルリセット
入力 run 1 1のときclkの立ち上がりで状態繊維
入力 cont 1 1のときEXECAからEXECBに遷移
入力 halt 1 1のときEXECAからIDLEに遷移
出力 cs 3 現在の状態

状態

状態 CPUの動作
IDLE アイドル状態(動作開始待ち)
FETCHAとFETCHB 命令フェッチ(メモリから命令を取り出し命令レジスタに格納)
EXECAとEXECB 命令実行(命令レジスタの命令コードにしたがって実行)

ステートマシンの遷移規則

現在の状態 reset run cont halt 次の状態  
- 0 - - - IDLE 非同期リセット
IDLE 1 0 - - IDLE 動作開始待ち
IDLE 1 1 - - FETCHA 動作開始
FETCHA 1 - - - FETCHB  
FETCHB 1 - - - EXECA  
EXECA 1 - 0 0 FETCHA 次の命令へ
EXECA 1 - 1 - EXECB 命令実行にさらに1サイクル必要
EXECA 1 - - 1 IDLE 動作停止
EXECB 1 - - - FETCHA  

ソースコード

`include "defs.v"

module state(clk,reset,run,cont,halt,cs);
  
  input clk, reset, run, cont, halt;
  output [2:0] cs;
  reg [2:0]cs;

  always @(posedge clk or negedge reset)
    if(!reset) cs <= `IDLE;
    else
      case(cs)
        `IDLE: if(run) cs <= `FETCHA;
        `FETCHA: cs <= `FETCHB;
        `FETCHB: cs <= `EXECA;
        `EXECA: if(halt) cs <= `IDLE;
                else if(cont) cs <= `EXECB;
                else cs <= `FETCHA;
        `EXECB: cs <= `FETCHA;
        default: cs <= 3'bxxx;
      endcase

endmodule

最終更新時間:2007年07月30日 12時23分12秒