cpu_top.v
TINYCPUのトップ回路
入出力ポート
| ポート名 | ビット数 | FPGAボード上の接続デバイス | ||
|---|---|---|---|---|
| 入力 | CLK50MHZ | 1 | 50MHzのクロック | |
| 入力 | BTN_NORTH | 1 | 上側のスライドスイッチ | tinycpuのinに接続 |
| 入力 | BTN_EAST | 1 | 右側のスライドスイッチ | tinycpuのinに接続 |
| 入力 | BTN_WEST | 1 | 左側のスライドスイッチ | tinycpuのinに接続 |
| 入力 | BTN_SOUTH | 1 | 下側のスライドスイッチ | tinycpuのresetに接続 |
| 入力 | SW | 4 | 4つのスライドスイッチ | tinycpuのinに接続 |
| 入力 | ROT_A | 1 | ロータリプッシュスイッチの軸エンコーダ | tinycpuのclkに接続 |
| 入力 | ROT_CENTER | 1 | ロータリプッシュスイッチのプッシュスイッチ | tinycpuのrunに接続 |
| 出力 | LED | 5 | 5個のLEDに接続 | |
| 出力 | LCD_E | 1 | LED制御用 | |
| 出力 | LCD_RS | 1 | LED制御用 | |
| 出力 | LCD_RW | 1 | LED制御用 | |
| 出力 | SF_D | 4 | LED制御用 |
ソースコード
module cpu_top(CLK50MHZ, ROT_A, ROT_CENTER, BTN_SOUTH, BTN_EAST, BTN_NORTH,
BTN_WEST, SW, LED, LCD_E, LCD_RS, LCD_RW, SF_D);
input CLK50MHZ, ROT_A, ROT_CENTER, BTN_SOUTH, BTN_EAST, BTN_NORTH, BTN_WEST;
input [3:0] SW;
output [4:0] LED;
output LCD_RS, LCD_E, LCD_RW;
output [11:8] SF_D;
wire clk, reset;
wire [2:0] cs;
wire [6:0] in;
wire [15:0] data0, data1, data2, data3, data4, data5;
chattering #(8) chattering0(.clk(CLK50MHZ), .reset(reset),
.in({BTN_WEST, BTN_NORTH, BTN_EAST, SW, ~ROT_A}), .out({in,clk}));
lcdctrl lcdctrl0(.clk(CLK50MHZ), .reset(reset), .lcd_e(LCD_E),
.lcd_rs(LCD_RS), .lcd_rw(LCD_RW), .sf_d(SF_D), .data0(data0),
.data1(data1), .data2(data2), .data3(data3), .data4(data4),
.data5(data5));
tinycpu tinycpu0(.clk(clk), .reset(reset), .run(ROT_CENTER),
.in({9'h000,in}), .cs(cs), .pcout(data0), .irout(data1),
.qtop(data2), .abus(data3), .dbus(data4), .out(data5));
assign reset = ~BTN_SOUTH;
assign LED[4] = (cs==`IDLE);
assign LED[3] = (cs==`FETCHA);
assign LED[2] = (cs==`FETCHB);
assign LED[1] = (cs==`EXECA);
assign LED[0] = (cs==`EXECB);
endmodule
注
クロックがうまく入力されないとき,「~ROT_A」を「ROT_A」に変更してください.
最終更新時間:2007年06月15日 12時36分20秒