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

statef.v

ステートマシン

高速版TINYCPUのステートマシン

入出力ポート

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

状態

状態 CPUの動作
IDLEA アイドル状態(動作開始待ち)
IDLEB 実行準備
EXEC 命令実行

全ての命令を1クロックサイクル(EXEC)で実行する.
IDLE状態を2つ(IDLEAとIDLEB)にしているのは念のため.
1状態だけだとシステムリセット直後にrunが1であり,状態EXECに遷移するとメモリの0番地が正しく読み出されず,誤動作する可能性があるため.

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

現在の状態 reset run halt 次の状態  
- 0 - - IDLEA 非同期リセット
IDLEA 1 - - IDLEB 動作開始
IDLEB - - - EXEC 動作開始準備
EXEC 1 - 0 EXEC 動作継続
EXEC 1 - 1 IDLE 動作停止
`include "defsf.v"

module statef(clk,reset,run,halt,cs);
   
  input clk, reset, run, halt;
  output [1:0] cs;
  reg [1:0] cs;

  always @(posedge clk or negedge reset)
    if(!reset) cs <= `IDLEA;
    else
      case(cs)
        `IDLEA: if(run) cs <= `IDLEB;
        `IDLEB: cs <= `EXEC;
        `EXEC: if(halt) cs <= `IDLEA;
                else cs <= `EXEC;
        default: cs <= 2'bxx;
      endcase

endmodule

最終更新時間:2007年08月01日 12時37分16秒