|   | 
ポート | 
ビット数 | 
  | 
| 入力 | 
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秒