rename sdram_* into bus_*; use assign instead of always block; optional SDRAM at $4000
This commit is contained in:
parent
5dfe5a041c
commit
aa6042cabd
|
@ -81,6 +81,7 @@ localparam CONF_STR = {
|
||||||
"O2,TMS9918 output,Off,On;",
|
"O2,TMS9918 output,Off,On;",
|
||||||
`endif
|
`endif
|
||||||
"O3,Audio monitor,tape in,tape out;",
|
"O3,Audio monitor,tape in,tape out;",
|
||||||
|
"O4,SDRAM at $4000,off,on;",
|
||||||
"T6,Reset;",
|
"T6,Reset;",
|
||||||
"V,",`BUILD_DATE
|
"V,",`BUILD_DATE
|
||||||
`ifdef USE_SID
|
`ifdef USE_SID
|
||||||
|
@ -91,6 +92,12 @@ localparam CONF_STR = {
|
||||||
`endif
|
`endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
`ifdef USE_TMS
|
||||||
|
localparam BLOCKRAM_SIZE = 'hA000;
|
||||||
|
`else
|
||||||
|
localparam BLOCKRAM_SIZE = 'hC000;
|
||||||
|
`endif
|
||||||
|
|
||||||
localparam conf_str_len = $size(CONF_STR)>>3;
|
localparam conf_str_len = $size(CONF_STR)>>3;
|
||||||
|
|
||||||
wire st_reset_switch = buttons[1];
|
wire st_reset_switch = buttons[1];
|
||||||
|
@ -102,6 +109,7 @@ wire [1:0] switches;
|
||||||
wire st_tms9918_output = status[2];
|
wire st_tms9918_output = status[2];
|
||||||
wire st_audio_mon_tape_in = ~status[3];
|
wire st_audio_mon_tape_in = ~status[3];
|
||||||
wire st_menu_reset = status[6];
|
wire st_menu_reset = status[6];
|
||||||
|
wire st_sdram_expansion = status[4];
|
||||||
|
|
||||||
wire scandoubler_disable;
|
wire scandoubler_disable;
|
||||||
wire ypbpr;
|
wire ypbpr;
|
||||||
|
@ -123,7 +131,13 @@ wire fpga_reset = ~pll_locked;
|
||||||
|
|
||||||
wire sys_clock; // cpu x 7 x 8 system clock (sdram.v)
|
wire sys_clock; // cpu x 7 x 8 system clock (sdram.v)
|
||||||
wire osd_clock; // cpu x 7 x 2 for the OSD menu
|
wire osd_clock; // cpu x 7 x 2 for the OSD menu
|
||||||
|
//wire F7M_clock; // cpu x 7 (SDRAM/8) for downloader
|
||||||
|
|
||||||
|
`ifdef USE_TMS
|
||||||
wire vdp_clock; // tms9918 x 2 for osd menu
|
wire vdp_clock; // tms9918 x 2 for osd menu
|
||||||
|
`endif
|
||||||
|
|
||||||
|
assign SDRAM_CLK = sys_clock;
|
||||||
|
|
||||||
pll pll
|
pll pll
|
||||||
(
|
(
|
||||||
|
@ -131,9 +145,12 @@ pll pll
|
||||||
.locked(pll_locked),
|
.locked(pll_locked),
|
||||||
|
|
||||||
.c0( osd_clock ), // cpu x 7 x 2 video clock for OSD menu
|
.c0( osd_clock ), // cpu x 7 x 2 video clock for OSD menu
|
||||||
|
//.c1( F7M_clock ), // cpu x 7 (SDRAM/8) for downloader
|
||||||
.c2( sys_clock ), // cpu x 7 x 8 system clock (sdram.v)
|
.c2( sys_clock ), // cpu x 7 x 8 system clock (sdram.v)
|
||||||
.c3( SDRAM_CLK ), // cpu x 7 x 8 phase shifted -2.5 ns
|
// .c3( SDRAM_CLK ), // cpu x 7 x 8 phase shifted -2.5 ns
|
||||||
|
`ifdef USE_TMS
|
||||||
.c4( vdp_clock ) // tms9918 x 2 for osd menu (10.738635 x 2 = 21.47727)
|
.c4( vdp_clock ) // tms9918 x 2 for osd menu (10.738635 x 2 = 21.47727)
|
||||||
|
`endif
|
||||||
);
|
);
|
||||||
|
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
|
@ -186,12 +203,12 @@ downloader
|
||||||
|
|
||||||
wire [7:0] ram_dout;
|
wire [7:0] ram_dout;
|
||||||
|
|
||||||
// low system RAM
|
// low system RAM
|
||||||
ram #(.SIZE(16384)) ram(
|
ram #(.SIZE(BLOCKRAM_SIZE)) ram(
|
||||||
.clk (sys_clock ),
|
.clk (sys_clock ),
|
||||||
.address(sdram_addr[15:0]),
|
.address(bus_addr[15:0]),
|
||||||
.w_en (sdram_wr & ram_cs),
|
.w_en (bus_wr & ram_cs),
|
||||||
.din (sdram_din ),
|
.din (bus_din ),
|
||||||
.dout (ram_dout )
|
.dout (ram_dout )
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -208,9 +225,9 @@ rom_wozmon rom_wozmon(
|
||||||
wire [7:0] basic_dout;
|
wire [7:0] basic_dout;
|
||||||
ram #(.SIZE(4096)) rom_basic(
|
ram #(.SIZE(4096)) rom_basic(
|
||||||
.clk(sys_clock),
|
.clk(sys_clock),
|
||||||
.address({4'b000, sdram_addr[11:0]}),
|
.address({4'b000, bus_addr[11:0]}),
|
||||||
.w_en (sdram_wr & basic_cs),
|
.w_en (bus_wr & basic_cs),
|
||||||
.din (sdram_din ),
|
.din (bus_din ),
|
||||||
.dout (basic_dout)
|
.dout (basic_dout)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -225,7 +242,7 @@ wire CASOUT;
|
||||||
ACI ACI(
|
ACI ACI(
|
||||||
.clk(sys_clock),
|
.clk(sys_clock),
|
||||||
.cpu_clken(cpu_clken),
|
.cpu_clken(cpu_clken),
|
||||||
.addr(sdram_addr[15:0]),
|
.addr(bus_addr[15:0]),
|
||||||
.dout(aci_dout),
|
.dout(aci_dout),
|
||||||
.tape_in(CASIN),
|
.tape_in(CASIN),
|
||||||
.tape_out(CASOUT)
|
.tape_out(CASOUT)
|
||||||
|
@ -266,51 +283,31 @@ end
|
||||||
|
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
/***************************************** @apple1 ****************************************/
|
/***************************************** @bus *******************************************/
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
|
|
||||||
// SDRAM control signals
|
// bus control signals
|
||||||
|
|
||||||
wire [24:0] sdram_addr;
|
wire [24:0] bus_addr;
|
||||||
wire [7:0] sdram_din;
|
wire [7:0] bus_din;
|
||||||
wire sdram_wr;
|
wire bus_wr;
|
||||||
wire sdram_rd;
|
wire bus_rd;
|
||||||
wire [7:0] sdram_dout;
|
|
||||||
|
|
||||||
always @(posedge sys_clock) begin
|
assign bus_addr = (is_downloading && download_wr) ? download_addr : { 9'b0, cpu_addr[15:0] };
|
||||||
if(is_downloading && download_wr) begin
|
assign bus_din = (is_downloading && download_wr) ? download_data : cpu_dout;
|
||||||
sdram_addr <= download_addr;
|
assign bus_wr = (is_downloading && download_wr) ? download_wr : cpu_wr;
|
||||||
sdram_din <= download_data;
|
assign bus_rd = (is_downloading && download_wr) ? 1'b1 : 1'b1; // TODO provare !wr ??
|
||||||
sdram_wr <= download_wr;
|
|
||||||
sdram_rd <= 1'b1;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
sdram_addr <= { 9'b0, cpu_addr[15:0] };
|
|
||||||
sdram_din <= cpu_dout;
|
|
||||||
sdram_wr <= cpu_wr;
|
|
||||||
sdram_rd <= 1'b1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
wire dummy = is_downloading && download_wr;
|
wire ram_cs = bus_addr <= st_sdram_expansion ? 'h3FFF : 'hBFFF ;
|
||||||
assign LED = ~dummy;
|
wire sdram_cs = st_sdram_expansion ? bus_addr >= 'h4000 && bus_addr <= 'hBFFF : 0;
|
||||||
|
wire aci_cs = bus_addr >= 'hC000 && bus_addr <= 'hC1FF;
|
||||||
// ram interface
|
wire basic_cs = bus_addr >= 'hE000 && bus_addr <= 'hEFFF;
|
||||||
wire [15:0] cpu_addr;
|
wire rom_cs = bus_addr >= 'hFF00;
|
||||||
wire [7:0] cpu_dout;
|
|
||||||
wire cpu_rd;
|
|
||||||
wire cpu_wr;
|
|
||||||
|
|
||||||
wire ram_cs = sdram_addr < 'h4000; // 0x0000 -> 0x3FFF
|
|
||||||
wire sdram_cs = sdram_addr >= 'h4000 && sdram_addr <= 'hBFFF; // 0x4000 -> 0xBFFF
|
|
||||||
wire aci_cs = sdram_addr >= 'hC000 && sdram_addr <= 'hC1FF; // 0xC000 -> 0xC1FF
|
|
||||||
wire basic_cs = sdram_addr >= 'hE000 && sdram_addr <= 'hEFFF; // 0xE000 -> 0xEFFF
|
|
||||||
wire rom_cs = sdram_addr >= 'hFF00; // 0xFF00 -> 0xFFFF
|
|
||||||
|
|
||||||
// experimental SID 6561
|
// experimental SID 6561
|
||||||
`ifdef USE_SID
|
`ifdef USE_SID
|
||||||
wire sid_cs = sdram_addr >= 'hC800 && sdram_addr <= 'hC8FF; // 0xC800 -> 0xC8FF
|
wire sid_cs = bus_addr >= 'hC800 && bus_addr <= 'hC8FF; // 0xC800 -> 0xC8FF
|
||||||
`else
|
`else
|
||||||
wire sid_cs = 0;
|
wire sid_cs = 0;
|
||||||
wire sid_dout = 0;
|
wire sid_dout = 0;
|
||||||
|
@ -318,7 +315,7 @@ wire rom_cs = sdram_addr >= 'hFF00; // 0xFF00 -> 0xFFF
|
||||||
|
|
||||||
// experimental TMS9918
|
// experimental TMS9918
|
||||||
`ifdef USE_TMS
|
`ifdef USE_TMS
|
||||||
wire tms_cs = sdram_addr >= 'hCC00 && sdram_addr <= 'hCC01; // 0xCC00 -> 0xCC01
|
wire tms_cs = bus_addr >= 'hCC00 && bus_addr <= 'hCC01; // 0xCC00 -> 0xCC01
|
||||||
`else
|
`else
|
||||||
wire tms_cs = 0;
|
wire tms_cs = 0;
|
||||||
wire vdp_dout = 0;
|
wire vdp_dout = 0;
|
||||||
|
@ -332,6 +329,12 @@ wire [7:0] bus_dout = rom_cs ? rom_dout :
|
||||||
sdram_cs ? sdram_dout :
|
sdram_cs ? sdram_dout :
|
||||||
ram_cs ? ram_dout :
|
ram_cs ? ram_dout :
|
||||||
8'b0;
|
8'b0;
|
||||||
|
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/***************************************** @apple1 ****************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
|
||||||
wire reset_key;
|
wire reset_key;
|
||||||
wire poweroff_key;
|
wire poweroff_key;
|
||||||
|
@ -348,7 +351,12 @@ reg reset_key_old = 0;
|
||||||
always @(posedge sys_clock) begin
|
always @(posedge sys_clock) begin
|
||||||
reset_key_old <= reset_key;
|
reset_key_old <= reset_key;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
wire [15:0] cpu_addr;
|
||||||
|
wire [7:0] cpu_dout;
|
||||||
|
wire cpu_rd;
|
||||||
|
wire cpu_wr;
|
||||||
|
|
||||||
apple1 apple1
|
apple1 apple1
|
||||||
(
|
(
|
||||||
.reset(reset_button),
|
.reset(reset_button),
|
||||||
|
@ -547,6 +555,8 @@ user_io (
|
||||||
/***************************************** @sdram *****************************************/
|
/***************************************** @sdram *****************************************/
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
|
|
||||||
|
wire [7:0] sdram_dout;
|
||||||
|
|
||||||
// SDRAM control signals
|
// SDRAM control signals
|
||||||
assign SDRAM_CKE = 1'b1;
|
assign SDRAM_CKE = 1'b1;
|
||||||
|
@ -568,11 +578,11 @@ sdram sdram (
|
||||||
.init ( !pll_locked ),
|
.init ( !pll_locked ),
|
||||||
|
|
||||||
// cpu interface
|
// cpu interface
|
||||||
.din ( sdram_din ),
|
.din ( bus_din ),
|
||||||
.addr ( sdram_addr ),
|
.addr ( bus_addr ),
|
||||||
.we ( sdram_wr ),
|
.we ( bus_wr ),
|
||||||
.oe ( sdram_rd ),
|
.oe ( bus_rd ),
|
||||||
.dout ( sdram_dout )
|
.dout ( sdram_dout )
|
||||||
);
|
);
|
||||||
|
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
|
@ -596,6 +606,17 @@ clock clock(
|
||||||
.pixel_clken ( pixel_clken ) // output: pixel clock enable
|
.pixel_clken ( pixel_clken ) // output: pixel clock enable
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/***************************************** @led *******************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
|
||||||
|
wire dummy = is_downloading && download_wr;
|
||||||
|
assign LED = ~dummy;
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
/***************************************** @vdp *******************************************/
|
/***************************************** @vdp *******************************************/
|
||||||
|
@ -626,8 +647,8 @@ always @(posedge vdp_clock) begin
|
||||||
vdp_ena <= ~vdp_ena;
|
vdp_ena <= ~vdp_ena;
|
||||||
end
|
end
|
||||||
|
|
||||||
wire csr = tms_cs & sdram_rd;
|
wire csr = tms_cs & bus_rd;
|
||||||
wire csw = tms_cs & sdram_wr;
|
wire csw = tms_cs & bus_wr;
|
||||||
|
|
||||||
wire tms_HS;
|
wire tms_HS;
|
||||||
wire tms_VS;
|
wire tms_VS;
|
||||||
|
@ -655,11 +676,11 @@ tms9918
|
||||||
// control signals
|
// control signals
|
||||||
.csr_n ( ~csr ),
|
.csr_n ( ~csr ),
|
||||||
.csw_n ( ~csw ),
|
.csw_n ( ~csw ),
|
||||||
.mode ( sdram_addr[0] ),
|
.mode ( bus_addr[0] ),
|
||||||
.int_n ( VDP_INT_n ),
|
.int_n ( VDP_INT_n ),
|
||||||
|
|
||||||
// cpu I/O
|
// cpu I/O
|
||||||
.cd_i ( sdram_din ),
|
.cd_i ( bus_din ),
|
||||||
.cd_o ( vdp_dout ),
|
.cd_o ( vdp_dout ),
|
||||||
|
|
||||||
// vram
|
// vram
|
||||||
|
@ -694,9 +715,9 @@ sid_top sid_top
|
||||||
.clock(sys_clock),
|
.clock(sys_clock),
|
||||||
.reset(reset_button),
|
.reset(reset_button),
|
||||||
|
|
||||||
.addr(sdram_addr[7:0]),
|
.addr(bus_addr[7:0]),
|
||||||
.wren(cpu_wr & sid_cs),
|
.wren(cpu_wr & sid_cs),
|
||||||
.wdata(sdram_din),
|
.wdata(bus_din),
|
||||||
.rdata(sid_dout),
|
.rdata(sid_dout),
|
||||||
|
|
||||||
.potx(0),
|
.potx(0),
|
||||||
|
|
Loading…
Reference in New Issue