diff --git a/hw/efinix_fpga/debug_profile.wizard.json b/hw/efinix_fpga/debug_profile.wizard.json index 2dd2cd2..62126c0 100644 --- a/hw/efinix_fpga/debug_profile.wizard.json +++ b/hw/efinix_fpga/debug_profile.wizard.json @@ -8,7 +8,7 @@ "trigout_en": false, "auto_inserted": true, "capture_control": false, - "data_depth": 16384, + "data_depth": 8192, "input_pipeline": 1, "probes": [ { @@ -35,6 +35,11 @@ "name": "cpu_rdy", "width": 1, "probe_type": 1 + }, + { + "name": "w_sdram_addr", + "width": 25, + "probe_type": 1 } ] } @@ -299,6 +304,131 @@ "name": "la0_probe4", "net": "cpu_rdy", "path": [] + }, + { + "name": "la0_probe5[0]", + "net": "w_sdram_addr[0]", + "path": [] + }, + { + "name": "la0_probe5[1]", + "net": "w_sdram_addr[1]", + "path": [] + }, + { + "name": "la0_probe5[2]", + "net": "w_sdram_addr[2]", + "path": [] + }, + { + "name": "la0_probe5[3]", + "net": "w_sdram_addr[3]", + "path": [] + }, + { + "name": "la0_probe5[4]", + "net": "w_sdram_addr[4]", + "path": [] + }, + { + "name": "la0_probe5[5]", + "net": "w_sdram_addr[5]", + "path": [] + }, + { + "name": "la0_probe5[6]", + "net": "w_sdram_addr[6]", + "path": [] + }, + { + "name": "la0_probe5[7]", + "net": "w_sdram_addr[7]", + "path": [] + }, + { + "name": "la0_probe5[8]", + "net": "w_sdram_addr[8]", + "path": [] + }, + { + "name": "la0_probe5[9]", + "net": "w_sdram_addr[9]", + "path": [] + }, + { + "name": "la0_probe5[10]", + "net": "w_sdram_addr[10]", + "path": [] + }, + { + "name": "la0_probe5[11]", + "net": "w_sdram_addr[11]", + "path": [] + }, + { + "name": "la0_probe5[12]", + "net": "w_sdram_addr[12]", + "path": [] + }, + { + "name": "la0_probe5[13]", + "net": "w_sdram_addr[13]", + "path": [] + }, + { + "name": "la0_probe5[14]", + "net": "w_sdram_addr[14]", + "path": [] + }, + { + "name": "la0_probe5[15]", + "net": "w_sdram_addr[15]", + "path": [] + }, + { + "name": "la0_probe5[16]", + "net": "w_sdram_addr[16]", + "path": [] + }, + { + "name": "la0_probe5[17]", + "net": "w_sdram_addr[17]", + "path": [] + }, + { + "name": "la0_probe5[18]", + "net": "w_sdram_addr[18]", + "path": [] + }, + { + "name": "la0_probe5[19]", + "net": "w_sdram_addr[19]", + "path": [] + }, + { + "name": "la0_probe5[20]", + "net": "w_sdram_addr[20]", + "path": [] + }, + { + "name": "la0_probe5[21]", + "net": "w_sdram_addr[21]", + "path": [] + }, + { + "name": "la0_probe5[22]", + "net": "w_sdram_addr[22]", + "path": [] + }, + { + "name": "la0_probe5[23]", + "net": "w_sdram_addr[23]", + "path": [] + }, + { + "name": "la0_probe5[24]", + "net": "w_sdram_addr[24]", + "path": [] } ] } @@ -312,7 +442,7 @@ ], "session": { "wizard": { - "data_depth": 16384, + "data_depth": 8192, "capture_control": false, "selected_nets": [ { @@ -358,6 +488,16 @@ "selected_probe_type": "DATA AND TRIGGER", "child": [], "path": [] + }, + { + "name": "w_sdram_addr", + "width": 25, + "clk_domain": "clk_2", + "selected_probe_type": "DATA AND TRIGGER", + "child": [], + "path": [], + "net_idx_left": 24, + "net_idx_right": 0 } ], "top_module": "super6502", diff --git a/hw/efinix_fpga/src/addr_decode.sv b/hw/efinix_fpga/src/addr_decode.sv deleted file mode 100644 index 9a131fb..0000000 --- a/hw/efinix_fpga/src/addr_decode.sv +++ /dev/null @@ -1,28 +0,0 @@ -module addr_decode -( - input logic [15:0] i_addr, - - output logic o_rom_cs, - output logic o_leds_cs, - output logic o_timer_cs, - output logic o_multiplier_cs, - output logic o_divider_cs, - output logic o_uart_cs, - output logic o_spi_cs, - output logic o_sdram_cs -); - -// assign o_rom_cs = '1; -always_comb begin - o_rom_cs = (i_addr >= 16'hf000) ? 1 : 0; -end -assign o_rom_cs = i_addr >= 16'hf000 && i_addr <= 16'hffff; -assign o_timer_cs = i_addr >= 16'heff8 && i_addr <= 16'heffb; -assign o_multiplier_cs = i_addr >= 16'heff0 && i_addr <= 16'heff7; -assign o_divider_cs = i_addr >= 16'hefe8 && i_addr <= 16'hefef; -assign o_uart_cs = i_addr >= 16'hefe6 && i_addr <= 16'hefe7; -assign o_spi_cs = i_addr >= 16'hefd8 && i_addr <= 16'hefdb; -assign o_leds_cs = i_addr == 16'hefff; -assign o_sdram_cs = i_addr < 16'he000; - -endmodule \ No newline at end of file diff --git a/hw/efinix_fpga/src/super6502.sv b/hw/efinix_fpga/src/super6502.sv index 5cdc894..2969a08 100644 --- a/hw/efinix_fpga/src/super6502.sv +++ b/hw/efinix_fpga/src/super6502.sv @@ -1,4 +1,8 @@ module super6502 +#( + parameter CONTROL_REG_START = 16'h0a00, + parameter CONTROL_REG_SIZE = 16'h0600 +) ( input logic i_sysclk, // Controller Clock (100MHz) input logic i_sdrclk, // t_su and t_wd clock (200MHz) @@ -71,6 +75,14 @@ always @(posedge clk_cpu) begin end end +logic w_control_reg_cs; + + +// 0a00 - 0xffff +assign w_control_reg_cs = (cpu_addr >= CONTROL_REG_START && cpu_addr < CONTROL_REG_START + CONTROL_REG_SIZE); + +// The w_control_reg_cs is redundant but whatever +assign o_mapper_cs = (cpu_addr >= 16'h0a00 && cpu_addr <= 25'h0a20) && w_control_reg_cs; logic w_rom_cs; logic w_leds_cs; @@ -79,6 +91,7 @@ logic w_timer_cs; logic w_multiplier_cs; logic w_divider_cs; logic w_uart_cs; +logic w_mapper_cs; logic w_spi_cs; @@ -89,6 +102,7 @@ logic [7:0] w_multiplier_data_out; logic [7:0] w_divider_data_out; logic [7:0] w_uart_data_out; logic [7:0] w_spi_data_out; +logic [7:0] w_mapper_data_out; logic [7:0] w_sdram_data_out; always_comb begin @@ -118,10 +132,15 @@ always_comb begin cpu_data_out = w_spi_data_out; else if (w_sdram_cs) cpu_data_out = w_sdram_data_out; + else if (w_mapper_cs) + cpu_data_out = w_mapper_data_out; else cpu_data_out = 'x; end +logic [24:0] w_sdram_addr; + + rom #(.DATA_WIDTH(8), .ADDR_WIDTH(12)) u_rom( .addr(cpu_addr[11:0]), .clk(clk_cpu), @@ -146,7 +165,7 @@ timer u_timer( .o_data(w_timer_data_out), .cs(w_timer_cs), .rwb(cpu_rwb), - .addr(cpu_addr[1:0]), + .addr(w_sdram_addr[1:0]), .irqb(w_timer_irqb) ); @@ -157,7 +176,7 @@ multiplier u_multiplier( .o_data(w_multiplier_data_out), .cs(w_multiplier_cs), .rwb(cpu_rwb), - .addr(cpu_addr[2:0]) + .addr(w_sdram_addr[2:0]) ); divider_wrapper u_divider( @@ -168,7 +187,7 @@ divider_wrapper u_divider( .o_data(w_divider_data_out), .cs(w_divider_cs), .rwb(cpu_rwb), - .addr(cpu_addr[2:0]) + .addr(w_sdram_addr[2:0]) ); logic w_uart_irqb; @@ -181,7 +200,7 @@ uart_wrapper u_uart( .o_data(w_uart_data_out), .cs(w_uart_cs), .rwb(cpu_rwb), - .addr(cpu_addr[0]), + .addr(w_sdram_addr[0]), .rx_i(uart_rx), .tx_o(uart_tx), .irqb(w_uart_irqb) @@ -192,7 +211,7 @@ spi_controller spi_controller( .i_rst(~cpu_resb), .i_cs(w_spi_cs), .i_rwb(cpu_rwb), - .i_addr(cpu_addr[1:0]), + .i_addr(w_sdram_addr[1:0]), .i_data(cpu_data_in), .o_data(w_spi_data_out), @@ -213,7 +232,7 @@ sdram_adapter u_sdram_adapter( .i_cs(w_sdram_cs), .i_rwb(cpu_rwb), - .i_addr(cpu_addr), + .i_addr(w_sdram_addr), .i_data(cpu_data_in), .o_data(w_sdram_data_out), diff --git a/hw/efinix_fpga/super6502.peri.xml b/hw/efinix_fpga/super6502.peri.xml index d32a564..16b6309 100644 --- a/hw/efinix_fpga/super6502.peri.xml +++ b/hw/efinix_fpga/super6502.peri.xml @@ -1,5 +1,5 @@ - + @@ -336,7 +336,7 @@ - + diff --git a/hw/efinix_fpga/super6502.xml b/hw/efinix_fpga/super6502.xml index 55c88b1..9496adf 100644 --- a/hw/efinix_fpga/super6502.xml +++ b/hw/efinix_fpga/super6502.xml @@ -1,106 +1,104 @@ - - + - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + + - + \ No newline at end of file