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