yayacemu/chip8.sv
2024-04-15 09:32:48 -05:00

86 lines
1.4 KiB
Systemverilog

module chip8 (
input wire fpga_clk,
input wire rst_in,
output logic lcd_clk,
output logic lcd_data,
output logic [5:0] led,
input wire [3:0] row,
output logic [3:0] col
);
logic debug_overlay;
logic slow_clk;
`ifdef FAST_CLK
assign slow_clk = fpga_clk;
`endif
`ifndef FAST_CLK
downclocker #(12) dc (
fpga_clk,
slow_clk
);
`endif
logic key_clk;
`ifdef FAST_CLK
downclocker #(1) dck (
`endif
`ifndef FAST_CLK
downclocker #(12) dck (
`endif
fpga_clk,
key_clk
);
logic [7:0] rd_memory_data;
logic [11:0] rd_memory_address;
logic [11:0] wr_memory_address;
logic [7:0] wr_memory_data;
logic wr_go;
memory #(4096) mem (
slow_clk,
wr_go,
wr_memory_address,
wr_memory_data,
rd_memory_address,
rd_memory_data
);
logic [15:0] keymap;
keypad keypad (
`ifndef DUMMY_KEYPAD
key_clk,
`endif
`ifdef DUMMY_KEYPAD
slow_clk,
`endif
row,
col,
keymap
);
assign led = { key_clk, 1'b0, slow_clk, 1'b0, fpga_clk, 1'b0};
int cycle_counter;
logic [5:0] nc;
cpu cpu (
slow_clk,
fpga_clk,
rd_memory_data,
keymap,
cycle_counter,
rd_memory_address,
wr_memory_address,
wr_memory_data,
wr_go,
lcd_clk,
lcd_data,
nc,
row,
col,
debug_overlay
);
endmodule