FPGA: simple SNES address input filtering

This commit is contained in:
Maximilian Rehkopf 2012-07-09 01:37:57 +02:00
parent 3530613349
commit e33b2b2bc7
10 changed files with 296 additions and 259 deletions

View File

@ -194,14 +194,19 @@ assign ROM_ADDR = SRAM_SNES_ADDR;
assign ROM_SEL = 1'b0;
assign msu_enable_w = featurebits[FEAT_MSU1] & (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfff8) == 16'h2000));
reg [5:0] msu_enable_r;
initial msu_enable_r = 6'b000000;
always @(posedge CLK) msu_enable_r <= {msu_enable_r[4:0], msu_enable_w};
assign msu_enable = &msu_enable_r[5:2];
//reg [5:0] msu_enable_r;
//initial msu_enable_r = 6'b000000;
//always @(posedge CLK) msu_enable_r <= {msu_enable_r[4:0], msu_enable_w};
assign msu_enable = msu_enable_w /*&msu_enable_r[5:2]*/;
assign use_bsx = (MAPPER == 3'b011);
assign srtc_enable = featurebits[FEAT_SRTC] & (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfffe) == 16'h2800));
assign srtc_enable_w = (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfffe) == 16'h2800));
//reg [5:0] srtc_enable_r;
//initial srtc_enable_r = 6'b000000;
//always @(posedge CLK) srtc_enable_r <= {srtc_enable_r[4:0], srtc_enable_w};
assign srtc_enable = srtc_enable_w /*&srtc_enable_r[3:0]*/ & featurebits[FEAT_SRTC];
// DSP1 LoROM: DR=30-3f:8000-bfff; SR=30-3f:c000-ffff
// or DR=60-6f:0000-3fff; SR=60-6f:4000-7fff
@ -235,16 +240,16 @@ assign dspx_a0 = featurebits[FEAT_DSPX]
assign dspx_dp_enable = dspx_dp_enable_w;
reg [5:0] dspx_enable_r;
initial dspx_enable_r = 6'b000000;
always @(posedge CLK) dspx_enable_r <= {dspx_enable_r[4:0], dspx_enable_w};
assign dspx_enable = &dspx_enable_r[5:2];
//reg [5:0] dspx_enable_r;
//initial dspx_enable_r = 6'b000000;
//always @(posedge CLK) dspx_enable_r <= {dspx_enable_r[4:0], dspx_enable_w};
assign dspx_enable = dspx_enable_w /*&dspx_enable_r[5:1]*/;
wire r213f_enable_w = (SNES_PA == 8'h3f);
reg [5:0] r213f_enable_r;
initial r213f_enable_r = 6'b000000;
always @(posedge CLK) r213f_enable_r <= {r213f_enable_r[4:0], r213f_enable_w};
assign r213f_enable = &r213f_enable_r[5:2] & featurebits[FEAT_213F];
//reg [5:0] r213f_enable_r;
//initial r213f_enable_r = 6'b000000;
//always @(posedge CLK) r213f_enable_r <= {r213f_enable_r[4:0], r213f_enable_w};
assign r213f_enable = r213f_enable_w /*&r213f_enable_r[5:2]*/ & featurebits[FEAT_213F];
wire snescmd_rd_enable_w = (SNES_PA[7:4] == 4'b1111);
//reg [5:0] snescmd_rd_enable_r;

View File

@ -33,30 +33,30 @@ NET "ROM_CE" LOC = P172;
NET "ROM_CE" IOSTANDARD = LVCMOS33;
NET "ROM_CE" DRIVE = 8;
NET "SNES_ADDR[0]" LOC = P119;
NET "SNES_ADDR[10]" LOC = P146;
NET "SNES_ADDR[11]" LOC = P148;
NET "SNES_ADDR[12]" LOC = P147;
NET "SNES_ADDR[13]" LOC = P144;
NET "SNES_ADDR[14]" LOC = P141;
NET "SNES_ADDR[15]" LOC = P139;
NET "SNES_ADDR[16]" LOC = P137;
NET "SNES_ADDR[17]" LOC = P133;
NET "SNES_ADDR[18]" LOC = P131;
NET "SNES_ADDR[19]" LOC = P128;
NET "SNES_ADDR[1]" LOC = P122;
NET "SNES_ADDR[20]" LOC = P125;
NET "SNES_ADDR[21]" LOC = P123;
NET "SNES_ADDR[22]" LOC = P120;
NET "SNES_ADDR[23]" LOC = P117;
NET "SNES_ADDR[2]" LOC = P124;
NET "SNES_ADDR[3]" LOC = P126;
NET "SNES_ADDR[4]" LOC = P130;
NET "SNES_ADDR[5]" LOC = P132;
NET "SNES_ADDR[6]" LOC = P135;
NET "SNES_ADDR[7]" LOC = P138;
NET "SNES_ADDR[8]" LOC = P140;
NET "SNES_ADDR[9]" LOC = P143;
NET "SNES_ADDR_IN[0]" LOC = P119;
NET "SNES_ADDR_IN[10]" LOC = P146;
NET "SNES_ADDR_IN[11]" LOC = P148;
NET "SNES_ADDR_IN[12]" LOC = P147;
NET "SNES_ADDR_IN[13]" LOC = P144;
NET "SNES_ADDR_IN[14]" LOC = P141;
NET "SNES_ADDR_IN[15]" LOC = P139;
NET "SNES_ADDR_IN[16]" LOC = P137;
NET "SNES_ADDR_IN[17]" LOC = P133;
NET "SNES_ADDR_IN[18]" LOC = P131;
NET "SNES_ADDR_IN[19]" LOC = P128;
NET "SNES_ADDR_IN[1]" LOC = P122;
NET "SNES_ADDR_IN[20]" LOC = P125;
NET "SNES_ADDR_IN[21]" LOC = P123;
NET "SNES_ADDR_IN[22]" LOC = P120;
NET "SNES_ADDR_IN[23]" LOC = P117;
NET "SNES_ADDR_IN[2]" LOC = P124;
NET "SNES_ADDR_IN[3]" LOC = P126;
NET "SNES_ADDR_IN[4]" LOC = P130;
NET "SNES_ADDR_IN[5]" LOC = P132;
NET "SNES_ADDR_IN[6]" LOC = P135;
NET "SNES_ADDR_IN[7]" LOC = P138;
NET "SNES_ADDR_IN[8]" LOC = P140;
NET "SNES_ADDR_IN[9]" LOC = P143;
NET "SNES_DATA[0]" LOC = P107;
NET "SNES_DATA[1]" LOC = P102;
NET "SNES_DATA[2]" LOC = P100;
@ -379,54 +379,54 @@ NET "ROM_WE" LOC = P190;
NET "ROM_WE" IOSTANDARD = LVCMOS33;
NET "ROM_WE" DRIVE = 8;
NET "SNES_ADDR[0]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[0]" DRIVE = 8;
NET "SNES_ADDR[10]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[10]" DRIVE = 8;
NET "SNES_ADDR[11]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[11]" DRIVE = 8;
NET "SNES_ADDR[12]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[12]" DRIVE = 8;
NET "SNES_ADDR[13]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[13]" DRIVE = 8;
NET "SNES_ADDR[14]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[14]" DRIVE = 8;
NET "SNES_ADDR[15]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[15]" DRIVE = 8;
NET "SNES_ADDR[16]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[16]" DRIVE = 8;
NET "SNES_ADDR[17]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[17]" DRIVE = 8;
NET "SNES_ADDR[18]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[18]" DRIVE = 8;
NET "SNES_ADDR[19]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[19]" DRIVE = 8;
NET "SNES_ADDR[1]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[1]" DRIVE = 8;
NET "SNES_ADDR[20]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[20]" DRIVE = 8;
NET "SNES_ADDR[21]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[21]" DRIVE = 8;
NET "SNES_ADDR[22]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[22]" DRIVE = 8;
NET "SNES_ADDR[23]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[23]" DRIVE = 8;
NET "SNES_ADDR[2]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[2]" DRIVE = 8;
NET "SNES_ADDR[3]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[3]" DRIVE = 8;
NET "SNES_ADDR[4]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[4]" DRIVE = 8;
NET "SNES_ADDR[5]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[5]" DRIVE = 8;
NET "SNES_ADDR[6]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[6]" DRIVE = 8;
NET "SNES_ADDR[7]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[7]" DRIVE = 8;
NET "SNES_ADDR[8]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[8]" DRIVE = 8;
NET "SNES_ADDR[9]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[9]" DRIVE = 8;
NET "SNES_ADDR_IN[0]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[0]" DRIVE = 8;
NET "SNES_ADDR_IN[10]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[10]" DRIVE = 8;
NET "SNES_ADDR_IN[11]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[11]" DRIVE = 8;
NET "SNES_ADDR_IN[12]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[12]" DRIVE = 8;
NET "SNES_ADDR_IN[13]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[13]" DRIVE = 8;
NET "SNES_ADDR_IN[14]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[14]" DRIVE = 8;
NET "SNES_ADDR_IN[15]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[15]" DRIVE = 8;
NET "SNES_ADDR_IN[16]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[16]" DRIVE = 8;
NET "SNES_ADDR_IN[17]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[17]" DRIVE = 8;
NET "SNES_ADDR_IN[18]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[18]" DRIVE = 8;
NET "SNES_ADDR_IN[19]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[19]" DRIVE = 8;
NET "SNES_ADDR_IN[1]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[1]" DRIVE = 8;
NET "SNES_ADDR_IN[20]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[20]" DRIVE = 8;
NET "SNES_ADDR_IN[21]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[21]" DRIVE = 8;
NET "SNES_ADDR_IN[22]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[22]" DRIVE = 8;
NET "SNES_ADDR_IN[23]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[23]" DRIVE = 8;
NET "SNES_ADDR_IN[2]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[2]" DRIVE = 8;
NET "SNES_ADDR_IN[3]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[3]" DRIVE = 8;
NET "SNES_ADDR_IN[4]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[4]" DRIVE = 8;
NET "SNES_ADDR_IN[5]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[5]" DRIVE = 8;
NET "SNES_ADDR_IN[6]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[6]" DRIVE = 8;
NET "SNES_ADDR_IN[7]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[7]" DRIVE = 8;
NET "SNES_ADDR_IN[8]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[8]" DRIVE = 8;
NET "SNES_ADDR_IN[9]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[9]" DRIVE = 8;
NET "SNES_CPU_CLK" LOC = P95;

View File

@ -23,7 +23,7 @@ module main(
input CLKIN,
/* SNES signals */
input [23:0] SNES_ADDR,
input [23:0] SNES_ADDR_IN,
input SNES_READ,
input SNES_WRITE,
input SNES_CS,
@ -76,6 +76,17 @@ module main(
/* debug */
output p113_out
);
wire CLK2;
reg [23:0] SNES_ADDR_r [2:0];
always @(posedge CLK2) begin
SNES_ADDR_r[2] <= SNES_ADDR_r[1];
SNES_ADDR_r[1] <= SNES_ADDR_r[0];
SNES_ADDR_r[0] <= SNES_ADDR_IN;
end
wire [23:0] SNES_ADDR = SNES_ADDR_r[2] & SNES_ADDR_r[1];
wire dspx_dp_enable;
wire [7:0] spi_cmd_data;
@ -639,28 +650,38 @@ always @(posedge CLK2) begin
end
end
reg ROM_WE_1;
reg MCU_WRITE_1;
always @(posedge CLK2) begin
ROM_WE_1 <= ROM_WE;
MCU_WRITE_1<= MCU_WRITE;
end
assign ROM_DATA[7:0] = ROM_ADDR0
?(SD_DMA_TO_ROM ? (!MCU_WRITE ? MCU_DOUT : 8'bZ)
: (!ROM_WE ? ROM_DOUTr : 8'bZ)
?(SD_DMA_TO_ROM ? (!MCU_WRITE_1 ? MCU_DOUT : 8'bZ)
/*: ((~SNES_WRITE & (IS_WRITABLE | IS_FLASHWR)) ? SNES_DATA */
: (ROM_DOUT_ENr ? ROM_DOUTr : 8'bZ) //)
)
:8'bZ;
assign ROM_DATA[15:8] = ROM_ADDR0 ? 8'bZ
:(SD_DMA_TO_ROM ? (!MCU_WRITE ? MCU_DOUT : 8'bZ)
: (!ROM_WE ? ROM_DOUTr : 8'bZ)
:(SD_DMA_TO_ROM ? (!MCU_WRITE_1 ? MCU_DOUT : 8'bZ)
/*: ((~SNES_WRITE & (IS_WRITABLE | IS_FLASHWR)) ? SNES_DATA */
: (ROM_DOUT_ENr ? ROM_DOUTr : 8'bZ) //)
);
assign ROM_WE = SD_DMA_TO_ROM
?MCU_WRITE
:ROM_WEr | (ASSERT_SNES_ADDR & ~snes_wr_cycle);
:/*(SNES_FAKE_CLK & (IS_WRITABLE | IS_FLASHWR)) ? SNES_WRITE :*/ ROM_WEr;
// OE always active. Overridden by WE when needed.
assign ROM_OE = 1'b0;
assign ROM_CE = 1'b0;
assign ROM_BHE = !ROM_WE ? ROM_ADDR0 : 1'b0;
assign ROM_BLE = !ROM_WE ? !ROM_ADDR0 : 1'b0;
assign ROM_BHE = /*(~SD_DMA_TO_ROM & ~ROM_WE & ~ROM_SA) ?*/ ROM_ADDR0 /*: 1'b0*/;
assign ROM_BLE = /*(~SD_DMA_TO_ROM & ~ROM_WE & ~ROM_SA) ?*/ !ROM_ADDR0 /*: 1'b0*/;
assign SNES_DATABUS_OE = (dspx_enable | dspx_dp_enable) ? 1'b0 :
msu_enable ? 1'b0 :

View File

@ -124,8 +124,8 @@ reg [7:0] data_out_r;
assign reg_data_out = data_out_r;
always @(posedge clkin) begin
case(reg_addr_r[3])
3'h0: data_out_r <= {data_busy_r, audio_busy_r, audio_status_r, 4'b0001};
case(reg_addr_r[1])
3'h0: data_out_r <= {data_busy_r, audio_busy_r, audio_status_r, audio_error_r, 3'b001};
3'h1: data_out_r <= msu_data;
3'h2: data_out_r <= 8'h53;
3'h3: data_out_r <= 8'h2d;
@ -138,7 +138,7 @@ end
always @(posedge clkin) begin
if(reg_we_rising) begin
case(reg_addr_r[3])
case(reg_addr_r[1])
3'h0: addr_out_r[7:0] <= reg_data_in;
3'h1: addr_out_r[15:8] <= reg_data_in;
3'h2: addr_out_r[23:16] <= reg_data_in;

View File

@ -56,16 +56,10 @@ assign ROM_ADDR = SRAM_SNES_ADDR;
assign ROM_SEL = 1'b0;
wire msu_enable_w = use_msu1 & (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfff8) == 16'h2000));
reg [5:0] msu_enable_r;
initial msu_enable_r = 6'b000000;
always @(posedge CLK) msu_enable_r <= {msu_enable_r[4:0], msu_enable_w};
assign msu_enable = &msu_enable_r[5:2];
assign msu_enable = msu_enable_w;
wire cx4_enable_w = (!SNES_ADDR[22] && (SNES_ADDR[15:13] == 3'b011));
reg [5:0] cx4_enable_r;
initial cx4_enable_r = 6'b000000;
always @(posedge CLK) cx4_enable_r <= {cx4_enable_r[4:0], cx4_enable_w};
assign cx4_enable = &cx4_enable_r[5:2];
assign cx4_enable = cx4_enable_w;
assign cx4_vect_enable = &SNES_ADDR[15:5];

View File

@ -35,30 +35,30 @@ NET "ROM_CE" LOC = P172;
NET "ROM_CE" IOSTANDARD = LVCMOS33;
NET "ROM_CE" DRIVE = 8;
NET "SNES_ADDR[0]" LOC = P119;
NET "SNES_ADDR[10]" LOC = P146;
NET "SNES_ADDR[11]" LOC = P148;
NET "SNES_ADDR[12]" LOC = P147;
NET "SNES_ADDR[13]" LOC = P144;
NET "SNES_ADDR[14]" LOC = P141;
NET "SNES_ADDR[15]" LOC = P139;
NET "SNES_ADDR[16]" LOC = P137;
NET "SNES_ADDR[17]" LOC = P133;
NET "SNES_ADDR[18]" LOC = P131;
NET "SNES_ADDR[19]" LOC = P128;
NET "SNES_ADDR[1]" LOC = P122;
NET "SNES_ADDR[20]" LOC = P125;
NET "SNES_ADDR[21]" LOC = P123;
NET "SNES_ADDR[22]" LOC = P120;
NET "SNES_ADDR[23]" LOC = P117;
NET "SNES_ADDR[2]" LOC = P124;
NET "SNES_ADDR[3]" LOC = P126;
NET "SNES_ADDR[4]" LOC = P130;
NET "SNES_ADDR[5]" LOC = P132;
NET "SNES_ADDR[6]" LOC = P135;
NET "SNES_ADDR[7]" LOC = P138;
NET "SNES_ADDR[8]" LOC = P140;
NET "SNES_ADDR[9]" LOC = P143;
NET "SNES_ADDR_IN[0]" LOC = P119;
NET "SNES_ADDR_IN[10]" LOC = P146;
NET "SNES_ADDR_IN[11]" LOC = P148;
NET "SNES_ADDR_IN[12]" LOC = P147;
NET "SNES_ADDR_IN[13]" LOC = P144;
NET "SNES_ADDR_IN[14]" LOC = P141;
NET "SNES_ADDR_IN[15]" LOC = P139;
NET "SNES_ADDR_IN[16]" LOC = P137;
NET "SNES_ADDR_IN[17]" LOC = P133;
NET "SNES_ADDR_IN[18]" LOC = P131;
NET "SNES_ADDR_IN[19]" LOC = P128;
NET "SNES_ADDR_IN[1]" LOC = P122;
NET "SNES_ADDR_IN[20]" LOC = P125;
NET "SNES_ADDR_IN[21]" LOC = P123;
NET "SNES_ADDR_IN[22]" LOC = P120;
NET "SNES_ADDR_IN[23]" LOC = P117;
NET "SNES_ADDR_IN[2]" LOC = P124;
NET "SNES_ADDR_IN[3]" LOC = P126;
NET "SNES_ADDR_IN[4]" LOC = P130;
NET "SNES_ADDR_IN[5]" LOC = P132;
NET "SNES_ADDR_IN[6]" LOC = P135;
NET "SNES_ADDR_IN[7]" LOC = P138;
NET "SNES_ADDR_IN[8]" LOC = P140;
NET "SNES_ADDR_IN[9]" LOC = P143;
NET "SNES_DATA[0]" LOC = P107;
NET "SNES_DATA[1]" LOC = P102;
NET "SNES_DATA[2]" LOC = P100;
@ -381,54 +381,54 @@ NET "ROM_WE" LOC = P190;
NET "ROM_WE" IOSTANDARD = LVCMOS33;
NET "ROM_WE" DRIVE = 8;
NET "SNES_ADDR[0]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[0]" DRIVE = 8;
NET "SNES_ADDR[10]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[10]" DRIVE = 8;
NET "SNES_ADDR[11]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[11]" DRIVE = 8;
NET "SNES_ADDR[12]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[12]" DRIVE = 8;
NET "SNES_ADDR[13]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[13]" DRIVE = 8;
NET "SNES_ADDR[14]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[14]" DRIVE = 8;
NET "SNES_ADDR[15]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[15]" DRIVE = 8;
NET "SNES_ADDR[16]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[16]" DRIVE = 8;
NET "SNES_ADDR[17]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[17]" DRIVE = 8;
NET "SNES_ADDR[18]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[18]" DRIVE = 8;
NET "SNES_ADDR[19]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[19]" DRIVE = 8;
NET "SNES_ADDR[1]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[1]" DRIVE = 8;
NET "SNES_ADDR[20]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[20]" DRIVE = 8;
NET "SNES_ADDR[21]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[21]" DRIVE = 8;
NET "SNES_ADDR[22]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[22]" DRIVE = 8;
NET "SNES_ADDR[23]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[23]" DRIVE = 8;
NET "SNES_ADDR[2]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[2]" DRIVE = 8;
NET "SNES_ADDR[3]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[3]" DRIVE = 8;
NET "SNES_ADDR[4]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[4]" DRIVE = 8;
NET "SNES_ADDR[5]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[5]" DRIVE = 8;
NET "SNES_ADDR[6]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[6]" DRIVE = 8;
NET "SNES_ADDR[7]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[7]" DRIVE = 8;
NET "SNES_ADDR[8]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[8]" DRIVE = 8;
NET "SNES_ADDR[9]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[9]" DRIVE = 8;
NET "SNES_ADDR_IN[0]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[0]" DRIVE = 8;
NET "SNES_ADDR_IN[10]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[10]" DRIVE = 8;
NET "SNES_ADDR_IN[11]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[11]" DRIVE = 8;
NET "SNES_ADDR_IN[12]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[12]" DRIVE = 8;
NET "SNES_ADDR_IN[13]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[13]" DRIVE = 8;
NET "SNES_ADDR_IN[14]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[14]" DRIVE = 8;
NET "SNES_ADDR_IN[15]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[15]" DRIVE = 8;
NET "SNES_ADDR_IN[16]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[16]" DRIVE = 8;
NET "SNES_ADDR_IN[17]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[17]" DRIVE = 8;
NET "SNES_ADDR_IN[18]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[18]" DRIVE = 8;
NET "SNES_ADDR_IN[19]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[19]" DRIVE = 8;
NET "SNES_ADDR_IN[1]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[1]" DRIVE = 8;
NET "SNES_ADDR_IN[20]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[20]" DRIVE = 8;
NET "SNES_ADDR_IN[21]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[21]" DRIVE = 8;
NET "SNES_ADDR_IN[22]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[22]" DRIVE = 8;
NET "SNES_ADDR_IN[23]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[23]" DRIVE = 8;
NET "SNES_ADDR_IN[2]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[2]" DRIVE = 8;
NET "SNES_ADDR_IN[3]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[3]" DRIVE = 8;
NET "SNES_ADDR_IN[4]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[4]" DRIVE = 8;
NET "SNES_ADDR_IN[5]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[5]" DRIVE = 8;
NET "SNES_ADDR_IN[6]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[6]" DRIVE = 8;
NET "SNES_ADDR_IN[7]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[7]" DRIVE = 8;
NET "SNES_ADDR_IN[8]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[8]" DRIVE = 8;
NET "SNES_ADDR_IN[9]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[9]" DRIVE = 8;
NET "SNES_CPU_CLK" LOC = P95;
@ -546,8 +546,8 @@ NET "SNES_SYSCLK" LOC = P180;
NET "SNES_SYSCLK" IOSTANDARD = LVCMOS33;
#Created by Constraints Editor (xc3s400-pq208-4) - 2011/10/28
TIMEGRP "msu_track_out_r" = FFS("snes_msu/track_out_r<0>") FFS("snes_msu/track_out_r<1>") FFS("snes_msu/track_out_r<2>") FFS("snes_msu/track_out_r<3>") FFS("snes_msu/track_out_r<4>") FFS("snes_msu/track_out_r<5>") FFS("snes_msu/track_out_r<6>") FFS("snes_msu/track_out_r<7>") FFS("snes_msu/track_out_r<8>") FFS("snes_msu/track_out_r<9>") FFS("snes_msu/track_out_r<10>") FFS("snes_msu/track_out_r<11>") FFS("snes_msu/track_out_r<12>") FFS("snes_msu/track_out_r<13>") FFS("snes_msu/track_out_r<14>") FFS("snes_msu/track_out_r<15>");
TIMEGRP "msu_addr_r" = FFS("snes_msu/addr_out_r<0>") FFS("snes_msu/addr_out_r<1>") FFS("snes_msu/addr_out_r<2>") FFS("snes_msu/addr_out_r<3>") FFS("snes_msu/addr_out_r<4>") FFS("snes_msu/addr_out_r<5>") FFS("snes_msu/addr_out_r<6>") FFS("snes_msu/addr_out_r<7>") FFS("snes_msu/addr_out_r<8>") FFS("snes_msu/addr_out_r<9>") FFS("snes_msu/addr_out_r<10>") FFS("snes_msu/addr_out_r<11>") FFS("snes_msu/addr_out_r<12>") FFS("snes_msu/addr_out_r<13>") FFS("snes_msu/addr_out_r<14>") FFS("snes_msu/addr_out_r<15>") FFS("snes_msu/addr_out_r<16>") FFS("snes_msu/addr_out_r<17>") FFS("snes_msu/addr_out_r<18>") FFS("snes_msu/addr_out_r<19>") FFS("snes_msu/addr_out_r<20>") FFS("snes_msu/addr_out_r<21>") FFS("snes_msu/addr_out_r<22>") FFS("snes_msu/addr_out_r<23>") FFS("snes_msu/addr_out_r<24>") FFS("snes_msu/addr_out_r<25>") FFS("snes_msu/addr_out_r<26>") FFS("snes_msu/addr_out_r<27>") FFS("snes_msu/addr_out_r<28>") FFS("snes_msu/addr_out_r<29>") FFS("snes_msu/addr_out_r<30>") FFS("snes_msu/addr_out_r<31>");
TIMEGRP "mcu_cmd_msu_addr_out" = FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<0>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<1>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<2>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<3>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<4>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<5>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<6>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<7>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<8>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<9>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<10>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<11>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<12>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<13>");
# TIMEGRP "msu_addr_r" = FFS("snes_msu/addr_out_r<0>") FFS("snes_msu/addr_out_r<1>") FFS("snes_msu/addr_out_r<2>") FFS("snes_msu/addr_out_r<3>") FFS("snes_msu/addr_out_r<4>") FFS("snes_msu/addr_out_r<5>") FFS("snes_msu/addr_out_r<6>") FFS("snes_msu/addr_out_r<7>") FFS("snes_msu/addr_out_r<8>") FFS("snes_msu/addr_out_r<9>") FFS("snes_msu/addr_out_r<10>") FFS("snes_msu/addr_out_r<11>") FFS("snes_msu/addr_out_r<12>") FFS("snes_msu/addr_out_r<13>") FFS("snes_msu/addr_out_r<14>") FFS("snes_msu/addr_out_r<15>") FFS("snes_msu/addr_out_r<16>") FFS("snes_msu/addr_out_r<17>") FFS("snes_msu/addr_out_r<18>") FFS("snes_msu/addr_out_r<19>") FFS("snes_msu/addr_out_r<20>") FFS("snes_msu/addr_out_r<21>") FFS("snes_msu/addr_out_r<22>") FFS("snes_msu/addr_out_r<23>") FFS("snes_msu/addr_out_r<24>") FFS("snes_msu/addr_out_r<25>") FFS("snes_msu/addr_out_r<26>") FFS("snes_msu/addr_out_r<27>") FFS("snes_msu/addr_out_r<28>") FFS("snes_msu/addr_out_r<29>") FFS("snes_msu/addr_out_r<30>") FFS("snes_msu/addr_out_r<31>");
# TIMEGRP "mcu_cmd_msu_addr_out" = FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<0>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<1>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<2>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<3>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<4>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<5>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<6>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<7>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<8>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<9>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<10>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<11>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<12>") FFS("snes_mcu_cmd/MSU_ADDR_OUT_BUF<13>");
TIMEGRP "cx4_cache_src_addr" = FFS("snes_cx4/CACHE_SRC_ADDRr<0>") FFS("snes_cx4/CACHE_SRC_ADDRr<1>") FFS("snes_cx4/CACHE_SRC_ADDRr<2>") FFS("snes_cx4/CACHE_SRC_ADDRr<3>") FFS("snes_cx4/CACHE_SRC_ADDRr<4>") FFS("snes_cx4/CACHE_SRC_ADDRr<5>") FFS("snes_cx4/CACHE_SRC_ADDRr<6>") FFS("snes_cx4/CACHE_SRC_ADDRr<7>") FFS("snes_cx4/CACHE_SRC_ADDRr<8>") FFS("snes_cx4/CACHE_SRC_ADDRr<9>") FFS("snes_cx4/CACHE_SRC_ADDRr<10>") FFS("snes_cx4/CACHE_SRC_ADDRr<11>") FFS("snes_cx4/CACHE_SRC_ADDRr<12>") FFS("snes_cx4/CACHE_SRC_ADDRr<13>") FFS("snes_cx4/CACHE_SRC_ADDRr<14>") FFS("snes_cx4/CACHE_SRC_ADDRr<15>") FFS("snes_cx4/CACHE_SRC_ADDRr<16>") FFS("snes_cx4/CACHE_SRC_ADDRr<17>") FFS("snes_cx4/CACHE_SRC_ADDRr<18>") FFS("snes_cx4/CACHE_SRC_ADDRr<19>") FFS("snes_cx4/CACHE_SRC_ADDRr<20>") FFS("snes_cx4/CACHE_SRC_ADDRr<21>") FFS("snes_cx4/CACHE_SRC_ADDRr<22>") FFS("snes_cx4/CACHE_SRC_ADDRr<23>");
TIMEGRP "cx4_cpu_busaddr" = FFS("snes_cx4/cpu_busaddr<0>") FFS("snes_cx4/cpu_busaddr<1>") FFS("snes_cx4/cpu_busaddr<2>") FFS("snes_cx4/cpu_busaddr<3>") FFS("snes_cx4/cpu_busaddr<4>") FFS("snes_cx4/cpu_busaddr<5>") FFS("snes_cx4/cpu_busaddr<6>") FFS("snes_cx4/cpu_busaddr<7>") FFS("snes_cx4/cpu_busaddr<8>") FFS("snes_cx4/cpu_busaddr<9>") FFS("snes_cx4/cpu_busaddr<10>") FFS("snes_cx4/cpu_busaddr<11>") FFS("snes_cx4/cpu_busaddr<12>") FFS("snes_cx4/cpu_busaddr<13>") FFS("snes_cx4/cpu_busaddr<14>") FFS("snes_cx4/cpu_busaddr<15>") FFS("snes_cx4/cpu_busaddr<16>") FFS("snes_cx4/cpu_busaddr<17>") FFS("snes_cx4/cpu_busaddr<18>") FFS("snes_cx4/cpu_busaddr<19>") FFS("snes_cx4/cpu_busaddr<20>") FFS("snes_cx4/cpu_busaddr<21>") FFS("snes_cx4/cpu_busaddr<22>") FFS("snes_cx4/cpu_busaddr<23>");
TIMEGRP "cx4_cpu_ramaddr" = FFS("snes_cx4/cpu_ramaddr<0>") FFS("snes_cx4/cpu_ramaddr<1>") FFS("snes_cx4/cpu_ramaddr<2>") FFS("snes_cx4/cpu_ramaddr<3>") FFS("snes_cx4/cpu_ramaddr<4>") FFS("snes_cx4/cpu_ramaddr<5>") FFS("snes_cx4/cpu_ramaddr<6>") FFS("snes_cx4/cpu_ramaddr<7>") FFS("snes_cx4/cpu_ramaddr<8>") FFS("snes_cx4/cpu_ramaddr<9>") FFS("snes_cx4/cpu_ramaddr<10>") FFS("snes_cx4/cpu_ramaddr<11>") FFS("snes_cx4/cpu_ramaddr<12>") FFS("snes_cx4/cpu_ramaddr<13>") FFS("snes_cx4/cpu_ramaddr<14>") FFS("snes_cx4/cpu_ramaddr<15>") FFS("snes_cx4/cpu_ramaddr<16>") FFS("snes_cx4/cpu_ramaddr<17>") FFS("snes_cx4/cpu_ramaddr<18>") FFS("snes_cx4/cpu_ramaddr<19>") FFS("snes_cx4/cpu_ramaddr<20>") FFS("snes_cx4/cpu_ramaddr<21>") FFS("snes_cx4/cpu_ramaddr<22>") FFS("snes_cx4/cpu_ramaddr<23>");

View File

@ -23,7 +23,7 @@ module main(
input CLKIN,
/* SNES signals */
input [23:0] SNES_ADDR,
input [23:0] SNES_ADDR_IN,
input SNES_READ,
input SNES_WRITE,
input SNES_CS,
@ -38,7 +38,7 @@ module main(
input [7:0] SNES_PA,
input SNES_PARD,
input SNES_PAWR,
/* SRAM signals */
/* Bus 1: PSRAM, 128Mbit, 16bit, 70ns */
inout [15:0] ROM_DATA,
@ -77,6 +77,16 @@ module main(
output p113_out
);
wire CLK2;
reg [23:0] SNES_ADDR_r [2:0];
always @(posedge CLK2) begin
SNES_ADDR_r[2] <= SNES_ADDR_r[1];
SNES_ADDR_r[1] <= SNES_ADDR_r[0];
SNES_ADDR_r[0] <= SNES_ADDR_IN;
end
wire [23:0] SNES_ADDR = SNES_ADDR_r[2] & SNES_ADDR_r[1];
wire [7:0] spi_cmd_data;
wire [7:0] spi_param_data;
wire [7:0] spi_input_data;

View File

@ -138,7 +138,7 @@ end
always @(posedge clkin) begin
if(reg_we_rising) begin
case(reg_addr_r[3])
case(reg_addr_r[1])
3'h0: addr_out_r[7:0] <= reg_data_in;
3'h1: addr_out_r[15:8] <= reg_data_in;
3'h2: addr_out_r[23:16] <= reg_data_in;

View File

@ -34,30 +34,30 @@ NET "ROM_CE" LOC = P172;
NET "ROM_CE" IOSTANDARD = LVCMOS33;
NET "ROM_CE" DRIVE = 8;
NET "SNES_ADDR[0]" LOC = P119;
NET "SNES_ADDR[10]" LOC = P146;
NET "SNES_ADDR[11]" LOC = P148;
NET "SNES_ADDR[12]" LOC = P147;
NET "SNES_ADDR[13]" LOC = P144;
NET "SNES_ADDR[14]" LOC = P141;
NET "SNES_ADDR[15]" LOC = P139;
NET "SNES_ADDR[16]" LOC = P137;
NET "SNES_ADDR[17]" LOC = P133;
NET "SNES_ADDR[18]" LOC = P131;
NET "SNES_ADDR[19]" LOC = P128;
NET "SNES_ADDR[1]" LOC = P122;
NET "SNES_ADDR[20]" LOC = P125;
NET "SNES_ADDR[21]" LOC = P123;
NET "SNES_ADDR[22]" LOC = P120;
NET "SNES_ADDR[23]" LOC = P117;
NET "SNES_ADDR[2]" LOC = P124;
NET "SNES_ADDR[3]" LOC = P126;
NET "SNES_ADDR[4]" LOC = P130;
NET "SNES_ADDR[5]" LOC = P132;
NET "SNES_ADDR[6]" LOC = P135;
NET "SNES_ADDR[7]" LOC = P138;
NET "SNES_ADDR[8]" LOC = P140;
NET "SNES_ADDR[9]" LOC = P143;
NET "SNES_ADDR_IN[0]" LOC = P119;
NET "SNES_ADDR_IN[10]" LOC = P146;
NET "SNES_ADDR_IN[11]" LOC = P148;
NET "SNES_ADDR_IN[12]" LOC = P147;
NET "SNES_ADDR_IN[13]" LOC = P144;
NET "SNES_ADDR_IN[14]" LOC = P141;
NET "SNES_ADDR_IN[15]" LOC = P139;
NET "SNES_ADDR_IN[16]" LOC = P137;
NET "SNES_ADDR_IN[17]" LOC = P133;
NET "SNES_ADDR_IN[18]" LOC = P131;
NET "SNES_ADDR_IN[19]" LOC = P128;
NET "SNES_ADDR_IN[1]" LOC = P122;
NET "SNES_ADDR_IN[20]" LOC = P125;
NET "SNES_ADDR_IN[21]" LOC = P123;
NET "SNES_ADDR_IN[22]" LOC = P120;
NET "SNES_ADDR_IN[23]" LOC = P117;
NET "SNES_ADDR_IN[2]" LOC = P124;
NET "SNES_ADDR_IN[3]" LOC = P126;
NET "SNES_ADDR_IN[4]" LOC = P130;
NET "SNES_ADDR_IN[5]" LOC = P132;
NET "SNES_ADDR_IN[6]" LOC = P135;
NET "SNES_ADDR_IN[7]" LOC = P138;
NET "SNES_ADDR_IN[8]" LOC = P140;
NET "SNES_ADDR_IN[9]" LOC = P143;
NET "SNES_DATA[0]" LOC = P107;
NET "SNES_DATA[1]" LOC = P102;
NET "SNES_DATA[2]" LOC = P100;
@ -380,54 +380,54 @@ NET "ROM_WE" LOC = P190;
NET "ROM_WE" IOSTANDARD = LVCMOS33;
NET "ROM_WE" DRIVE = 8;
NET "SNES_ADDR[0]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[0]" DRIVE = 8;
NET "SNES_ADDR[10]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[10]" DRIVE = 8;
NET "SNES_ADDR[11]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[11]" DRIVE = 8;
NET "SNES_ADDR[12]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[12]" DRIVE = 8;
NET "SNES_ADDR[13]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[13]" DRIVE = 8;
NET "SNES_ADDR[14]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[14]" DRIVE = 8;
NET "SNES_ADDR[15]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[15]" DRIVE = 8;
NET "SNES_ADDR[16]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[16]" DRIVE = 8;
NET "SNES_ADDR[17]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[17]" DRIVE = 8;
NET "SNES_ADDR[18]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[18]" DRIVE = 8;
NET "SNES_ADDR[19]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[19]" DRIVE = 8;
NET "SNES_ADDR[1]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[1]" DRIVE = 8;
NET "SNES_ADDR[20]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[20]" DRIVE = 8;
NET "SNES_ADDR[21]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[21]" DRIVE = 8;
NET "SNES_ADDR[22]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[22]" DRIVE = 8;
NET "SNES_ADDR[23]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[23]" DRIVE = 8;
NET "SNES_ADDR[2]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[2]" DRIVE = 8;
NET "SNES_ADDR[3]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[3]" DRIVE = 8;
NET "SNES_ADDR[4]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[4]" DRIVE = 8;
NET "SNES_ADDR[5]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[5]" DRIVE = 8;
NET "SNES_ADDR[6]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[6]" DRIVE = 8;
NET "SNES_ADDR[7]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[7]" DRIVE = 8;
NET "SNES_ADDR[8]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[8]" DRIVE = 8;
NET "SNES_ADDR[9]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR[9]" DRIVE = 8;
NET "SNES_ADDR_IN[0]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[0]" DRIVE = 8;
NET "SNES_ADDR_IN[10]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[10]" DRIVE = 8;
NET "SNES_ADDR_IN[11]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[11]" DRIVE = 8;
NET "SNES_ADDR_IN[12]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[12]" DRIVE = 8;
NET "SNES_ADDR_IN[13]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[13]" DRIVE = 8;
NET "SNES_ADDR_IN[14]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[14]" DRIVE = 8;
NET "SNES_ADDR_IN[15]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[15]" DRIVE = 8;
NET "SNES_ADDR_IN[16]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[16]" DRIVE = 8;
NET "SNES_ADDR_IN[17]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[17]" DRIVE = 8;
NET "SNES_ADDR_IN[18]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[18]" DRIVE = 8;
NET "SNES_ADDR_IN[19]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[19]" DRIVE = 8;
NET "SNES_ADDR_IN[1]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[1]" DRIVE = 8;
NET "SNES_ADDR_IN[20]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[20]" DRIVE = 8;
NET "SNES_ADDR_IN[21]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[21]" DRIVE = 8;
NET "SNES_ADDR_IN[22]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[22]" DRIVE = 8;
NET "SNES_ADDR_IN[23]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[23]" DRIVE = 8;
NET "SNES_ADDR_IN[2]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[2]" DRIVE = 8;
NET "SNES_ADDR_IN[3]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[3]" DRIVE = 8;
NET "SNES_ADDR_IN[4]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[4]" DRIVE = 8;
NET "SNES_ADDR_IN[5]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[5]" DRIVE = 8;
NET "SNES_ADDR_IN[6]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[6]" DRIVE = 8;
NET "SNES_ADDR_IN[7]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[7]" DRIVE = 8;
NET "SNES_ADDR_IN[8]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[8]" DRIVE = 8;
NET "SNES_ADDR_IN[9]" IOSTANDARD = LVCMOS33;
NET "SNES_ADDR_IN[9]" DRIVE = 8;
NET "SNES_CPU_CLK" LOC = P95;

View File

@ -23,7 +23,7 @@ module main(
input CLKIN,
/* SNES signals */
input [23:0] SNES_ADDR,
input [23:0] SNES_ADDR_IN,
input SNES_READ,
input SNES_WRITE,
input SNES_CS,
@ -73,12 +73,19 @@ module main(
output p113_out
);
assign DAC_MCLK = 1'b0;
assign DAC_LRCK = 1'b0;
assign DAC_SDOUT = 1'b0;
assign DAC_MCLK = 0;
assign DAC_LRCK = 0;
assign DAC_SDOUT = 0;
assign SD_CMD = 1'bZ;
assign SD_CLK = 1'bZ;
wire CLK2;
reg [23:0] SNES_ADDR_r [2:0];
always @(posedge CLK2) begin
SNES_ADDR_r[2] <= SNES_ADDR_r[1];
SNES_ADDR_r[1] <= SNES_ADDR_r[0];
SNES_ADDR_r[0] <= SNES_ADDR_IN;
end
wire [23:0] SNES_ADDR = SNES_ADDR_r[2] & SNES_ADDR_r[1];
wire [7:0] spi_cmd_data;
wire [7:0] spi_param_data;