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