sd acceleration (FPGA side)
This commit is contained in:
parent
4bc455f12b
commit
97316353c3
@ -41,10 +41,11 @@ module mcu_cmd(
|
||||
output [23:0] rom_mask_out,
|
||||
|
||||
// SPI "DMA" extension
|
||||
input spi_dma_ovr,
|
||||
input spi_dma_nextaddr,
|
||||
input [7:0] spi_dma_sram_data,
|
||||
input spi_dma_sram_we
|
||||
output SD_DMA_EN,
|
||||
input SD_DMA_STATUS,
|
||||
input SD_DMA_NEXTADDR,
|
||||
input [7:0] SD_DMA_SRAM_DATA,
|
||||
input SD_DMA_SRAM_WE
|
||||
);
|
||||
|
||||
reg [3:0] MAPPER_BUF;
|
||||
@ -56,7 +57,10 @@ reg [7:0] MCU_DATA_OUT_BUF;
|
||||
reg [7:0] MCU_DATA_IN_BUF;
|
||||
reg [1:0] mcu_nextaddr_buf;
|
||||
wire mcu_nextaddr;
|
||||
wire spi_dma_nextaddr_trig;
|
||||
|
||||
reg SD_DMA_ENr;
|
||||
assign SD_DMA_EN = SD_DMA_ENr;
|
||||
|
||||
reg [2:0] spi_dma_nextaddr_r;
|
||||
|
||||
reg [1:0] SRAM_MASK_IDX;
|
||||
@ -68,18 +72,23 @@ assign spi_data_out = MCU_DATA_IN_BUF;
|
||||
initial begin
|
||||
ADDR_OUT_BUF = 0;
|
||||
spi_dma_nextaddr_r = 0;
|
||||
SD_DMA_ENr = 0;
|
||||
end
|
||||
|
||||
// command interpretation
|
||||
always @(posedge clk) begin
|
||||
if (cmd_ready) begin
|
||||
case (cmd_data[7:4])
|
||||
4'h3:
|
||||
4'h3: // select mapper
|
||||
MAPPER_BUF <= cmd_data[3:0];
|
||||
4'h4: // SD DMA
|
||||
SD_DMA_ENr <= 1;
|
||||
// 4'hE:
|
||||
// select memory unit
|
||||
endcase
|
||||
end else if (param_ready) begin
|
||||
case (cmd_data[7:4])
|
||||
4'h0:
|
||||
case (cmd_data[7:0])
|
||||
8'h00:
|
||||
case (spi_byte_cnt)
|
||||
32'h2: begin
|
||||
ADDR_OUT_BUF[23:16] <= param_data;
|
||||
@ -90,7 +99,7 @@ always @(posedge clk) begin
|
||||
32'h4:
|
||||
ADDR_OUT_BUF[7:0] <= param_data;
|
||||
endcase
|
||||
4'h1:
|
||||
8'h01:
|
||||
case (spi_byte_cnt)
|
||||
32'h2:
|
||||
ROM_MASK[23:16] <= param_data;
|
||||
@ -99,7 +108,7 @@ always @(posedge clk) begin
|
||||
32'h4:
|
||||
ROM_MASK[7:0] <= param_data;
|
||||
endcase
|
||||
4'h2:
|
||||
8'h02:
|
||||
case (spi_byte_cnt)
|
||||
32'h2:
|
||||
SAVERAM_MASK[23:16] <= param_data;
|
||||
@ -108,11 +117,15 @@ always @(posedge clk) begin
|
||||
32'h4:
|
||||
SAVERAM_MASK[7:0] <= param_data;
|
||||
endcase
|
||||
4'h9:
|
||||
8'h40:
|
||||
SD_DMA_ENr <= 1'b0;
|
||||
8'h90:
|
||||
MCU_DATA_OUT_BUF <= param_data;
|
||||
8'h91:
|
||||
MCU_DATA_OUT_BUF <= param_data;
|
||||
endcase
|
||||
end
|
||||
if (spi_dma_nextaddr_trig | (mcu_nextaddr & (cmd_data[7:5] == 3'h4) && (cmd_data[0]) && (spi_byte_cnt > (32'h1+cmd_data[4]))))
|
||||
if (SD_DMA_NEXTADDR | (mcu_nextaddr & (cmd_data[7:5] == 3'h4) && (cmd_data[0]) && (spi_byte_cnt > (32'h1+cmd_data[4]))))
|
||||
ADDR_OUT_BUF <= ADDR_OUT_BUF + 1;
|
||||
end
|
||||
|
||||
@ -121,6 +134,8 @@ always @(posedge clk) begin
|
||||
if (spi_bit_cnt == 3'h7)
|
||||
if (cmd_data[7:0] == 8'hF0)
|
||||
MCU_DATA_IN_BUF <= 8'hA5;
|
||||
else if (cmd_data[7:0] == 8'hF1)
|
||||
MCU_DATA_IN_BUF <= {SD_DMA_STATUS, 7'b0};
|
||||
else if (cmd_data[7:0] == 8'hFF)
|
||||
MCU_DATA_IN_BUF <= param_data;
|
||||
else
|
||||
@ -135,10 +150,6 @@ always @(posedge clk) begin
|
||||
mcu_nextaddr_buf <= {mcu_nextaddr_buf[0], 1'b0};
|
||||
end
|
||||
|
||||
assign spi_dma_nextaddr_trig = (spi_dma_nextaddr_r[2:1] == 2'b01);
|
||||
always @(posedge clk) begin
|
||||
spi_dma_nextaddr_r <= {spi_dma_nextaddr_r[1:0], spi_dma_nextaddr};
|
||||
end
|
||||
|
||||
// r/w pulse
|
||||
always @(posedge clk) begin
|
||||
@ -159,9 +170,9 @@ end
|
||||
assign mcu_nextaddr = mcu_nextaddr_buf == 2'b01;
|
||||
|
||||
assign mcu_read = MCU_READ_BUF;
|
||||
assign mcu_write = spi_dma_ovr ? spi_dma_sram_we : MCU_WRITE_BUF;
|
||||
assign mcu_write = SD_DMA_STATUS ? SD_DMA_SRAM_WE : MCU_WRITE_BUF;
|
||||
assign addr_out = ADDR_OUT_BUF;
|
||||
assign mcu_data_out = spi_dma_ovr ? spi_dma_sram_data : MCU_DATA_OUT_BUF;
|
||||
assign mcu_data_out = SD_DMA_STATUS ? SD_DMA_SRAM_DATA : MCU_DATA_OUT_BUF;
|
||||
assign mcu_mapper = MAPPER_BUF;
|
||||
assign mcu_sram_size = SRAM_SIZE_BUF;
|
||||
assign rom_mask_out = ROM_MASK;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
NET "CLKIN" TNM_NET = CLKIN;
|
||||
NET "CLKIN" TNM_NET = "CLKIN";
|
||||
TIMESPEC TS_CLKIN = PERIOD "CLKIN" 22.579 MHz HIGH 50 %;
|
||||
NET "SNES_CS" IOSTANDARD = LVCMOS33;
|
||||
NET "SNES_READ" IOSTANDARD = LVCMOS33;
|
||||
@ -11,13 +11,13 @@ NET "CLKIN" IOSTANDARD = LVCMOS33;
|
||||
NET "SPI_SS" PULLUP;
|
||||
//NET "DCM_RST" LOC = P46;
|
||||
//NET "DCM_RST" IOSTANDARD = LVCMOS33;
|
||||
NET "IRQ_DIR" IOSTANDARD = LVCMOS33;
|
||||
NET "SNES_DATABUS_DIR" IOSTANDARD = LVCMOS33;
|
||||
NET "SNES_DATABUS_OE" IOSTANDARD = LVCMOS33;
|
||||
NET "SNES_IRQ" IOSTANDARD = LVCMOS33;
|
||||
NET "SPI_DMA_CTRL" PULLUP;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
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;
|
||||
@ -52,409 +52,316 @@ NET "SNES_DATA[5]" LOC = P106;
|
||||
NET "SNES_DATA[6]" LOC = P101;
|
||||
NET "SNES_DATA[7]" LOC = P97;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "CLKIN" LOC = P80;
|
||||
NET "IRQ_DIR" LOC = P113;
|
||||
// NET "RST" LOC = P113;
|
||||
NET "MCU_OVR" LOC = P92;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "MCU_OVR" IOSTANDARD = LVCMOS33;
|
||||
NET "MCU_OVR" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[0]" LOC = P166;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[0]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[0]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[10]" LOC = P197;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[10]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[10]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[11]" LOC = P196;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[11]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[11]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[12]" LOC = P2;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[12]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[12]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[13]" LOC = P194;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[13]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[13]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[14]" LOC = P200;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[14]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[14]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[15]" LOC = P184;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[15]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[15]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[16]" LOC = P199;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[16]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[16]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[17]" LOC = P11;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[17]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[17]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[18]" LOC = P3;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[18]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[18]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[19]" LOC = P4;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[19]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[19]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[1]" LOC = P168;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[1]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[1]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[20]" LOC = P191;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[20]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[20]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[21]" LOC = P203;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[21]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[21]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[22]" LOC = P198;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[22]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[22]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[2]" LOC = P171;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[2]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[2]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[3]" LOC = P165;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[3]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[3]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[4]" LOC = P169;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[4]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[4]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[5]" LOC = P18;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[5]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[5]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[6]" LOC = P175;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[6]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[6]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[7]" LOC = P167;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[7]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[7]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[8]" LOC = P205;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[8]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[8]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_ADDR[9]" LOC = P204;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_ADDR[9]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_ADDR[9]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_BHE" LOC = P161;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_BHE" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_BHE" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_BLE" LOC = P156;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_BLE" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_BLE" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
NET "IRQ_DIR" LOC = P113;
|
||||
NET "IRQ_DIR" IOSTANDARD = LVCMOS33;
|
||||
NET "IRQ_DIR" DRIVE = 8;
|
||||
|
||||
NET "ROM_CE" LOC = P172;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_CE" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_CE" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[0]" LOC = P176;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[0]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[0]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[10]" LOC = P15;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[10]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[10]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[11]" LOC = P12;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[11]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[11]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[12]" LOC = P10;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[12]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[12]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[13]" LOC = P7;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[13]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[13]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[14]" LOC = P9;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[14]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[14]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[15]" LOC = P5;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[15]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[15]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[1]" LOC = P178;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[1]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[1]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[2]" LOC = P181;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[2]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[2]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[3]" LOC = P182;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[3]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[3]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[4]" LOC = P183;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[4]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[4]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[5]" LOC = P187;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[5]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[5]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[6]" LOC = P185;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[6]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[6]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[7]" LOC = P189;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[7]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[7]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[8]" LOC = P16;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[8]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[8]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_DATA[9]" LOC = P13;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_DATA[9]" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_DATA[9]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_OE" LOC = P162;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_OE" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_OE" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "ROM_WE" LOC = P190;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "ROM_WE" IOSTANDARD = LVCMOS33;
|
||||
NET "ROM_WE" DRIVE = 8;
|
||||
@ -507,14 +414,12 @@ NET "SNES_ADDR[8]" DRIVE = 8;
|
||||
NET "SNES_ADDR[9]" IOSTANDARD = LVCMOS33;
|
||||
NET "SNES_ADDR[9]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "SNES_CPU_CLK" LOC = P94;
|
||||
NET "SNES_CS" LOC = P116;
|
||||
NET "SNES_DATABUS_DIR" LOC = P111;
|
||||
NET "SNES_DATABUS_OE" LOC = P109;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "SNES_DATA[0]" IOSTANDARD = LVCMOS33;
|
||||
NET "SNES_DATA[0]" DRIVE = 8;
|
||||
@ -533,79 +438,75 @@ NET "SNES_DATA[6]" DRIVE = 8;
|
||||
NET "SNES_DATA[7]" IOSTANDARD = LVCMOS33;
|
||||
NET "SNES_DATA[7]" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "SNES_IRQ" LOC = P114;
|
||||
NET "SNES_READ" LOC = P115;
|
||||
NET "SNES_REFRESH" LOC = P155;
|
||||
NET "SNES_WRITE" LOC = P95;
|
||||
NET "SPI_DMA_CTRL" LOC = P83;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "SPI_DMA_CTRL" IOSTANDARD = LVCMOS33;
|
||||
NET "SPI_DMA_CTRL" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "SPI_MISO" LOC = P72;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "SPI_MISO" IOSTANDARD = LVCMOS33;
|
||||
NET "SPI_MISO" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "SPI_MOSI" LOC = P74;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "SPI_MOSI" IOSTANDARD = LVCMOS33;
|
||||
NET "SPI_MOSI" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "SPI_SCK" LOC = P71;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "SPI_SCK" IOSTANDARD = LVCMOS33;
|
||||
NET "SPI_SCK" DRIVE = 8;
|
||||
NET "SPI_SCK" PULLUP;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "SPI_SS" LOC = P68;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "SPI_SS" IOSTANDARD = LVCMOS33;
|
||||
NET "SPI_SS" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "DAC_LRCK" LOC = P77;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "DAC_LRCK" IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_LRCK" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "DAC_MCLK" LOC = P76;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "DAC_MCLK" IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_MCLK" DRIVE = 8;
|
||||
|
||||
# PlanAhead generated physical constraints
|
||||
|
||||
NET "DAC_SDOUT" LOC = P78;
|
||||
|
||||
# PlanAhead generated IO constraints
|
||||
|
||||
NET "DAC_SDOUT" IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_SDOUT" DRIVE = 8;
|
||||
|
||||
# PlanAhead Generated physical constraints
|
||||
|
||||
NET "SD_CLK" LOC = P64;
|
||||
NET "SD_CMD" LOC = P67;
|
||||
NET "SD_DAT[0]" LOC = P65;
|
||||
NET "SD_DAT[1]" LOC = P79;
|
||||
NET "SD_DAT[2]" LOC = P62;
|
||||
NET "SD_DAT[3]" LOC = P63;
|
||||
|
||||
# PlanAhead Generated IO constraints
|
||||
|
||||
NET "SD_CLK" IOSTANDARD = LVCMOS33;
|
||||
NET "SD_CMD" IOSTANDARD = LVCMOS33;
|
||||
NET "SD_DAT[0]" IOSTANDARD = LVCMOS33;
|
||||
NET "SD_DAT[1]" IOSTANDARD = LVCMOS33;
|
||||
NET "SD_DAT[2]" IOSTANDARD = LVCMOS33;
|
||||
NET "SD_DAT[3]" IOSTANDARD = LVCMOS33;
|
||||
|
||||
@ -50,18 +50,16 @@ module main(
|
||||
input SPI_SS,
|
||||
inout SPI_SCK,
|
||||
input MCU_OVR,
|
||||
inout SPI_DMA_CTRL,
|
||||
|
||||
output DAC_MCLK,
|
||||
output DAC_LRCK,
|
||||
output DAC_SDOUT,
|
||||
|
||||
/* SD signals */
|
||||
inout SD_MOSI,
|
||||
input SD_MISO,
|
||||
inout SD_SS,
|
||||
inout SD_SCK
|
||||
|
||||
input [3:0] SD_DAT,
|
||||
inout SD_CMD,
|
||||
inout SD_CLK
|
||||
|
||||
/* debug */
|
||||
//output DCM_IN_STOPPED,
|
||||
//output DCM_FX_STOPPED
|
||||
@ -80,10 +78,19 @@ wire [7:0] MCU_OUT_DATA;
|
||||
wire [3:0] MAPPER;
|
||||
wire [23:0] SAVERAM_MASK;
|
||||
wire [23:0] ROM_MASK;
|
||||
wire [23:0] spi_dma_addr;
|
||||
wire [7:0] spi_dma_sram_data;
|
||||
wire spi_dma_trig = 1'b1; //SPI_DMA_CTRL;
|
||||
wire [7:0] SD_DMA_SRAM_DATA;
|
||||
//wire SD_DMA_EN; //SPI_DMA_CTRL;
|
||||
|
||||
sd_dma snes_sd_dma(.CLK(CLK2),
|
||||
.SD_DAT(SD_DAT),
|
||||
.SD_CLK(SD_CLK),
|
||||
.SD_DMA_EN(SD_DMA_EN),
|
||||
.SD_DMA_STATUS(SD_DMA_STATUS),
|
||||
.SD_DMA_SRAM_WE(SD_DMA_SRAM_WE),
|
||||
.SD_DMA_SRAM_DATA(SD_DMA_SRAM_DATA),
|
||||
.SD_DMA_NEXTADDR(SD_DMA_NEXTADDR)
|
||||
);
|
||||
|
||||
dac_test snes_dac_test(.clkin(CLK2),
|
||||
.mclk(DAC_MCLK),
|
||||
.lrck(DAC_LRCK),
|
||||
@ -103,10 +110,7 @@ spi snes_spi(.clk(CLK2),
|
||||
.startmessage(spi_startmessage),
|
||||
.input_data(spi_input_data),
|
||||
.byte_cnt(spi_byte_cnt),
|
||||
.bit_cnt(spi_bit_cnt),
|
||||
|
||||
.spi_dma_sck(spi_dma_sck),
|
||||
.spi_dma_ovr(spi_dma_ovr)
|
||||
.bit_cnt(spi_bit_cnt)
|
||||
);
|
||||
|
||||
mcu_cmd snes_mcu_cmd(
|
||||
@ -129,27 +133,13 @@ mcu_cmd snes_mcu_cmd(
|
||||
.startmessage(spi_startmessage),
|
||||
.saveram_mask_out(SAVERAM_MASK),
|
||||
.rom_mask_out(ROM_MASK),
|
||||
|
||||
.spi_dma_ovr(spi_dma_ovr),
|
||||
.spi_dma_nextaddr(spi_dma_nextaddr),
|
||||
.spi_dma_sram_data(spi_dma_sram_data),
|
||||
.spi_dma_sram_we(spi_dma_sram_we)
|
||||
.SD_DMA_EN(SD_DMA_EN),
|
||||
.SD_DMA_STATUS(SD_DMA_STATUS),
|
||||
.SD_DMA_NEXTADDR(SD_DMA_NEXTADDR),
|
||||
.SD_DMA_SRAM_DATA(SD_DMA_SRAM_DATA),
|
||||
.SD_DMA_SRAM_WE(SD_DMA_SRAM_WE)
|
||||
);
|
||||
|
||||
spi_dma snes_spi_dma(
|
||||
.clk(CLK2),
|
||||
.spi_dma_ovr(spi_dma_ovr), // to spi, mcu_cmd
|
||||
.spi_dma_miso(SPI_MISO), // to spi
|
||||
.spi_dma_sck(spi_dma_sck), // to spi
|
||||
.spi_dma_trig(spi_dma_trig), // from mcu
|
||||
.spi_dma_nextaddr(spi_dma_nextaddr), // to mcu_cmd?
|
||||
.spi_dma_sram_data(spi_dma_sram_data), // to mcu_cmd?
|
||||
.spi_dma_sram_we(spi_dma_sram_we), // to mcu_cmd?
|
||||
.spi_dma_done(spi_dma_done) // to mcu
|
||||
);
|
||||
|
||||
assign SPI_DMA_CTRL = spi_dma_ovr ? 1'b0 : 1'bZ;
|
||||
|
||||
// dcm1: dfs 4x
|
||||
my_dcm snes_dcm(.CLKIN(CLKIN),
|
||||
.CLKFX(CLK2),
|
||||
|
||||
@ -1,642 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 00:20:33 07/14/2009
|
||||
// Design Name: main
|
||||
// Module Name: /home/ikari/prj/sd2snes/verilog/sd2snes/main_tf2.v
|
||||
// Project Name: sd2snes
|
||||
// Target Device:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Verilog Test Fixture created by ISE for module: main
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
module main_tf2;
|
||||
|
||||
// Inputs
|
||||
reg CLKIN;
|
||||
reg [23:0] SNES_ADDR;
|
||||
reg SNES_READ;
|
||||
reg SNES_WRITE;
|
||||
reg SNES_CS;
|
||||
reg SNES_CPU_CLK;
|
||||
reg SNES_REFRESH;
|
||||
reg SPI_MOSI;
|
||||
reg SPI_SS;
|
||||
reg SPI_SCK;
|
||||
reg AVR_ENA;
|
||||
|
||||
// Outputs
|
||||
wire SNES_DATABUS_OE;
|
||||
wire SNES_DATABUS_DIR;
|
||||
wire [19:0] SRAM_ADDR;
|
||||
wire [3:0] ROM_SEL;
|
||||
wire SRAM_OE;
|
||||
wire SRAM_WE;
|
||||
wire SPI_MISO;
|
||||
wire MODE;
|
||||
wire SRAM_BHE;
|
||||
wire SRAM_BLE;
|
||||
|
||||
// Bidirs
|
||||
wire [7:0] SNES_DATA;
|
||||
wire SNES_IRQ;
|
||||
wire [15:0] SRAM_DATA;
|
||||
|
||||
reg [15:0] SRAM_DATA_BUF;
|
||||
// Instantiate the Unit Under Test (UUT)
|
||||
main uut (
|
||||
.CLKIN(CLKIN),
|
||||
.SNES_ADDR(SNES_ADDR),
|
||||
.SNES_READ(SNES_READ),
|
||||
.SNES_WRITE(SNES_WRITE),
|
||||
.SNES_CS(SNES_CS),
|
||||
.SNES_DATA(SNES_DATA),
|
||||
.SNES_CPU_CLK(SNES_CPU_CLK),
|
||||
.SNES_REFRESH(SNES_REFRESH),
|
||||
.SNES_IRQ(SNES_IRQ),
|
||||
.IRQ_DIR(IRQ_DIR),
|
||||
.SNES_DATABUS_OE(SNES_DATABUS_OE),
|
||||
.SNES_DATABUS_DIR(SNES_DATABUS_DIR),
|
||||
.SRAM_DATA(SRAM_DATA),
|
||||
.SRAM_ADDR(SRAM_ADDR),
|
||||
.SRAM_CE2(ROM_SEL),
|
||||
.SRAM_OE(SRAM_OE),
|
||||
.SRAM_WE(SRAM_WE),
|
||||
.SPI_MOSI(SPI_MOSI),
|
||||
.SPI_MISO(SPI_MISO),
|
||||
.SPI_SS(SPI_SS),
|
||||
.SPI_SCK(SPI_SCK),
|
||||
.AVR_ENA(AVR_ENA),
|
||||
.SRAM_BHE(SRAM_BHE),
|
||||
.SRAM_BLE(SRAM_BLE)
|
||||
);
|
||||
|
||||
initial begin
|
||||
// Initialize Inputs
|
||||
CLKIN = 0;
|
||||
SNES_ADDR = 0;
|
||||
SNES_READ = 1;
|
||||
SNES_WRITE = 1;
|
||||
SNES_CS = 0;
|
||||
SNES_CPU_CLK = 0;
|
||||
SNES_REFRESH = 0;
|
||||
SPI_MOSI = 0;
|
||||
SPI_SS = 1;
|
||||
SPI_SCK = 0;
|
||||
AVR_ENA = 0;
|
||||
|
||||
// Wait 100 ns for global reset to finish
|
||||
#100;
|
||||
// Wait for DCM to stabilize
|
||||
#5000;
|
||||
// Add stimulus here
|
||||
// Add stimulus here
|
||||
SPI_SS = 0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#100 SPI_SS=1;
|
||||
#200;
|
||||
SPI_SS=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_SS=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
#100 SPI_SS=1;
|
||||
#200;
|
||||
SPI_SS=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_SS=1;
|
||||
#200;
|
||||
|
||||
/*
|
||||
* READ TEST
|
||||
*/
|
||||
AVR_ENA=1;
|
||||
SPI_SS=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#100;
|
||||
#100;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_SS=1;
|
||||
#300;
|
||||
SPI_SS=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
SPI_SS=1;
|
||||
AVR_ENA=1;
|
||||
#280;
|
||||
// Initialize Inputs
|
||||
SNES_ADDR = 24'h223456;
|
||||
SNES_READ = 1;
|
||||
SNES_WRITE = 1;
|
||||
SNES_CS = 0;
|
||||
AVR_ENA = 1;
|
||||
SRAM_DATA_BUF = 8'hff;
|
||||
// Wait for global reset to finish
|
||||
#276;
|
||||
SNES_ADDR <= 24'h123456;
|
||||
SNES_READ <= 0;
|
||||
#176;
|
||||
SNES_READ <= 1;
|
||||
#100;
|
||||
SNES_WRITE <= 0;
|
||||
#176;
|
||||
SNES_WRITE <= 1;
|
||||
#100;
|
||||
SNES_READ <= 0;
|
||||
#276;
|
||||
// AVR_READ <= 1;
|
||||
// Add stimulus here
|
||||
SPI_SS = 0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#200;
|
||||
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=0;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
SPI_MOSI=1;
|
||||
#100 SPI_SCK=1;
|
||||
#100 SPI_SCK=0;
|
||||
#100 SPI_SS=1;
|
||||
#200;
|
||||
|
||||
|
||||
end
|
||||
always begin
|
||||
#23 CLKIN = ~CLKIN;
|
||||
end
|
||||
always begin
|
||||
#150 SNES_READ = ~SNES_READ;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
@ -38,56 +38,18 @@
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="Implementation"/>
|
||||
</file>
|
||||
<file xil_pn:name="tf_spi.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="PostMapSimulation"/>
|
||||
<association xil_pn:name="PostRouteSimulation"/>
|
||||
<association xil_pn:name="PostTranslateSimulation"/>
|
||||
</file>
|
||||
<file xil_pn:name="main_tf2.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="PostMapSimulation"/>
|
||||
<association xil_pn:name="PostRouteSimulation"/>
|
||||
<association xil_pn:name="PostTranslateSimulation"/>
|
||||
</file>
|
||||
<file xil_pn:name="avr_cmd.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="Implementation"/>
|
||||
</file>
|
||||
<file xil_pn:name="tf_main.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="PostMapSimulation"/>
|
||||
<association xil_pn:name="PostRouteSimulation"/>
|
||||
<association xil_pn:name="PostTranslateSimulation"/>
|
||||
</file>
|
||||
<file xil_pn:name="dcm2.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="Implementation"/>
|
||||
</file>
|
||||
<file xil_pn:name="dcm_srl16.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="Implementation"/>
|
||||
</file>
|
||||
<file xil_pn:name="spi_dma.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="Implementation"/>
|
||||
</file>
|
||||
<file xil_pn:name="tf_spi_dma.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="PostMapSimulation"/>
|
||||
<association xil_pn:name="PostRouteSimulation"/>
|
||||
<association xil_pn:name="PostTranslateSimulation"/>
|
||||
</file>
|
||||
<file xil_pn:name="tf_main_3.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="PostMapSimulation"/>
|
||||
<association xil_pn:name="PostRouteSimulation"/>
|
||||
<association xil_pn:name="PostTranslateSimulation"/>
|
||||
</file>
|
||||
<file xil_pn:name="dac_test.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="Implementation"/>
|
||||
</file>
|
||||
<file xil_pn:name="sd_dma.v" xil_pn:type="FILE_VERILOG">
|
||||
<association xil_pn:name="BehavioralSimulation"/>
|
||||
<association xil_pn:name="Implementation"/>
|
||||
</file>
|
||||
</files>
|
||||
|
||||
<properties>
|
||||
@ -95,7 +57,7 @@
|
||||
<property xil_pn:name="Add I/O Buffers" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Add I/O Pads" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Advanced FSM Optimization" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Allow Logic Optimization Across Hierarchy" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Allow Logic Optimization Across Hierarchy" xil_pn:value="true" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Allow SelectMAP Pins to Persist" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Allow Unexpanded Blocks" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Allow Unmatched LOC Constraints" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
@ -163,10 +125,11 @@
|
||||
<property xil_pn:name="Done (Output Events)" xil_pn:value="6" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Drive Done Pin High" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="EDIF" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable BitStream Compression" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable BitStream Compression" xil_pn:value="true" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Enable Cyclic Redundancy Checking (CRC)" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable Debugging of Serial Mode BitStream" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable Enhanced Design Summary" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable Hardware Co-Simulation" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable Internal Done Pipe" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable Message Filtering" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Enable Multi-Threading" xil_pn:value="Off" xil_pn:valueState="default"/>
|
||||
@ -289,7 +252,7 @@
|
||||
<property xil_pn:name="Number of Summary Paths" xil_pn:value="10" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Optimization Effort" xil_pn:value="High" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Optimization Goal" xil_pn:value="Area" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Optimization Strategy (Cover Mode)" xil_pn:value="Balanced" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Optimization Strategy (Cover Mode)" xil_pn:value="Area" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Optimize Instantiated Primitives" xil_pn:value="true" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Other Bitgen Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Other Compiler Options" xil_pn:value="" xil_pn:valueState="default"/>
|
||||
@ -319,7 +282,7 @@
|
||||
<property xil_pn:name="Overwrite Compiled Libraries" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Overwrite Existing Symbol" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Pack I/O Registers into IOBs" xil_pn:value="Auto" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Pack I/O Registers/Latches into IOBs" xil_pn:value="Off" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Pack I/O Registers/Latches into IOBs" xil_pn:value="For Inputs Only" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Parallel Case" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Perform Advanced Analysis" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module spi(input clk,
|
||||
inout SCK,
|
||||
input SCK,
|
||||
input MOSI,
|
||||
inout MISO,
|
||||
input SSEL,
|
||||
@ -32,44 +32,21 @@ module spi(input clk,
|
||||
output startmessage,
|
||||
input [7:0] input_data,
|
||||
output [31:0] byte_cnt,
|
||||
output [2:0] bit_cnt,
|
||||
output [2:0] bit_cnt
|
||||
|
||||
// spi "DMA" extension
|
||||
input spi_dma_sck,
|
||||
input spi_dma_ovr);
|
||||
// SD "DMA" extension
|
||||
/*input sd_dma_sck,
|
||||
input sd_dma_ovr*/);
|
||||
|
||||
reg [7:0] cmd_data_r;
|
||||
reg [7:0] param_data_r;
|
||||
|
||||
// sync SCK to the FPGA clock using a 3-bits shift register
|
||||
// SCK is an OUTPUT in "DMA" mode
|
||||
reg [2:0] spi_dma_ovr_r;
|
||||
reg [9:0] spi_dma_leadout_cnt;
|
||||
reg spi_dma_leadout;
|
||||
initial begin
|
||||
spi_dma_ovr_r = 3'b000;
|
||||
spi_dma_leadout_cnt <= 10'b0000000000;
|
||||
end
|
||||
always @(posedge clk) spi_dma_ovr_r <= {spi_dma_ovr_r[1:0], spi_dma_ovr};
|
||||
wire spi_dma_ovr_falling = (spi_dma_ovr_r[1:0] == 2'b10);
|
||||
always @(posedge clk) begin
|
||||
if (spi_dma_ovr_falling) begin
|
||||
spi_dma_leadout <= 1;
|
||||
spi_dma_leadout_cnt <= 0;
|
||||
end else begin
|
||||
if(spi_dma_leadout_cnt == 100)
|
||||
spi_dma_leadout <= 0;
|
||||
if(spi_dma_leadout)
|
||||
spi_dma_leadout_cnt <= spi_dma_leadout_cnt + 1;
|
||||
end
|
||||
end
|
||||
assign SCK = spi_dma_ovr ? spi_dma_sck : spi_dma_leadout ? 1'b0 : 1'bZ;
|
||||
reg [2:0] SCKr; always @(posedge clk) SCKr <= {SCKr[1:0], SCK};
|
||||
wire SCK_risingedge = spi_dma_ovr ? 0 : (SCKr[1:0]==2'b01); // now we can detect SCK rising edges
|
||||
wire SCK_fallingedge = spi_dma_ovr ? 0 : (SCKr[1:0]==2'b10); // and falling edges
|
||||
reg [2:0] SCKr;
|
||||
always @(posedge clk) SCKr <= {SCKr[1:0], SCK};
|
||||
|
||||
// wire SCK_risingedge = spi_dma_ovr ? 0 : ({SCKr[0], SCK}==2'b01); // now we can detect SCK rising edges
|
||||
// wire SCK_fallingedge = spi_dma_ovr ? 0 : ({SCKr[0], SCK}==2'b10); // and falling edges
|
||||
wire SCK_risingedge = (SCKr[1:0]==2'b01); // now we can detect SCK rising edges
|
||||
wire SCK_fallingedge = (SCKr[1:0]==2'b10); // and falling edges
|
||||
|
||||
// same thing for SSEL
|
||||
reg [2:0] SSELr; always @(posedge clk) SSELr <= {SSELr[1:0], SSEL};
|
||||
@ -130,8 +107,7 @@ always @(posedge clk) begin
|
||||
end
|
||||
end
|
||||
|
||||
// Slave out is an INPUT in "DMA" mode
|
||||
assign MISO = spi_dma_ovr ? 1'bZ : SSEL_active ? byte_data_sent[7] : 1'bZ; // send MSB first
|
||||
assign MISO = SSEL_active ? byte_data_sent[7] : 1'bZ; // send MSB first
|
||||
|
||||
reg cmd_ready_r;
|
||||
reg param_ready_r;
|
||||
|
||||
@ -1,147 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 22:18:56 12/20/2009
|
||||
// Design Name:
|
||||
// Module Name: spi_dma
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module spi_dma(
|
||||
input clk,
|
||||
output spi_dma_ovr,
|
||||
input spi_dma_miso,
|
||||
output spi_dma_sck,
|
||||
input spi_dma_trig,
|
||||
output spi_dma_nextaddr,
|
||||
output [7:0] spi_dma_sram_data,
|
||||
output spi_dma_sram_we,
|
||||
output spi_dma_done
|
||||
);
|
||||
|
||||
reg spi_dma_sram_we_r;
|
||||
reg spi_dma_done_r;
|
||||
reg spi_dma_ovr_r;
|
||||
reg spi_dma_nextaddr_r;
|
||||
reg [7:0] spi_dma_sram_data_r;
|
||||
|
||||
reg [3:0] spi_dma_bitcnt; // extra bits
|
||||
reg [9:0] spi_dma_bytecnt;
|
||||
reg [3:0] spi_dma_clkcnt;
|
||||
reg [3:0] spi_dma_sck_int_r;
|
||||
reg [5:0] spi_dma_trig_r;
|
||||
reg [4:0] spi_dma_miso_r;
|
||||
reg spi_dma_sck_out_r;
|
||||
reg spi_dma_sck_out_r2;
|
||||
|
||||
initial begin
|
||||
spi_dma_clkcnt <= 4'b0000;
|
||||
spi_dma_bitcnt <= 4'b1110;
|
||||
spi_dma_bytecnt <= 10'b0000000000;
|
||||
spi_dma_nextaddr_r <= 1'b0;
|
||||
spi_dma_sram_we_r <= 1'b1;
|
||||
spi_dma_done_r <= 1'b1;
|
||||
spi_dma_sck_int_r <= 4'b0000;
|
||||
spi_dma_trig_r <= 6'b000000;
|
||||
spi_dma_ovr_r <= 1'b0;
|
||||
spi_dma_sck_out_r <= 1'b0;
|
||||
spi_dma_sck_out_r2 <= 1'b0;
|
||||
end
|
||||
|
||||
// synthesize clock
|
||||
wire spi_dma_sck_int = spi_dma_clkcnt[1];
|
||||
assign spi_dma_sck = spi_dma_sck_out_r & spi_dma_sck_out_r2;
|
||||
|
||||
always @(posedge clk) begin
|
||||
spi_dma_clkcnt <= spi_dma_clkcnt + 1;
|
||||
spi_dma_sck_int_r <= {spi_dma_sck_int_r[2:0], spi_dma_sck_int};
|
||||
spi_dma_trig_r <= {spi_dma_trig_r[4:0], spi_dma_trig};
|
||||
spi_dma_miso_r <= {spi_dma_miso_r[3:0], spi_dma_miso};
|
||||
end
|
||||
|
||||
wire spi_dma_trig_rising = (spi_dma_trig_r[5:1] == 5'b00011);
|
||||
wire spi_dma_trig_falling = (spi_dma_trig_r[5:1] == 5'b11100);
|
||||
wire spi_dma_sck_rising = (spi_dma_sck_int_r[2:1] == 2'b01);
|
||||
wire spi_dma_sck_falling = (spi_dma_sck_int_r[2:1] == 2'b10);
|
||||
wire spi_dma_sck_rising2 = (spi_dma_sck_int_r[2:1] == 2'b01);
|
||||
wire spi_dma_sck_falling2 = (spi_dma_sck_int_r[2:1] == 2'b10);
|
||||
|
||||
assign spi_dma_nextaddr = spi_dma_nextaddr_r & (spi_dma_bytecnt < 512);
|
||||
assign spi_dma_sram_data = spi_dma_sram_data_r;
|
||||
assign spi_dma_sram_we = spi_dma_sram_we_r | (spi_dma_bytecnt > 511);
|
||||
assign spi_dma_done = spi_dma_done_r;
|
||||
assign spi_dma_ovr = spi_dma_ovr_r;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (spi_dma_trig_falling & !spi_dma_ovr_r) begin
|
||||
spi_dma_done_r <= 0;
|
||||
spi_dma_ovr_r <= 1;
|
||||
end else if (spi_dma_bitcnt == 0 && spi_dma_bytecnt == 514) begin
|
||||
spi_dma_done_r <= 1;
|
||||
spi_dma_ovr_r <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if(spi_dma_sck_falling)
|
||||
spi_dma_sck_out_r2 <= 0;
|
||||
else if(spi_dma_sck_rising)
|
||||
spi_dma_sck_out_r2 <= 1;
|
||||
end
|
||||
|
||||
// fetch a little later
|
||||
//always @(posedge spi_dma_sck) begin
|
||||
// if (/*spi_dma_sck_rising & */spi_dma_ovr_r & spi_dma_bitcnt <= 8)
|
||||
// spi_dma_sram_data_r <= {spi_dma_sram_data_r[6:0], spi_dma_miso_r[0]};
|
||||
//end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if(spi_dma_sck_rising & spi_dma_ovr_r) begin
|
||||
if (spi_dma_bitcnt < 8) begin
|
||||
spi_dma_sck_out_r <= 1;
|
||||
spi_dma_bitcnt <= spi_dma_bitcnt + 1;
|
||||
spi_dma_sram_data_r <= {spi_dma_sram_data_r[6:0], spi_dma_miso_r[0]};
|
||||
end else if (spi_dma_bitcnt == 8) begin
|
||||
spi_dma_sck_out_r <= 0;
|
||||
spi_dma_bitcnt <= spi_dma_bitcnt + 1;
|
||||
spi_dma_sram_data_r <= {spi_dma_sram_data_r[6:0], spi_dma_miso_r[0]};
|
||||
end else if (spi_dma_bitcnt == 9) begin
|
||||
spi_dma_sck_out_r <= 0;
|
||||
spi_dma_sram_we_r <= 0;
|
||||
spi_dma_bitcnt <= 10;
|
||||
end else if (spi_dma_bitcnt == 10) begin
|
||||
spi_dma_sram_we_r <= 1;
|
||||
spi_dma_nextaddr_r <= 1;
|
||||
spi_dma_bitcnt <= spi_dma_bitcnt + 1;
|
||||
end else if (spi_dma_bitcnt == 11) begin
|
||||
spi_dma_nextaddr_r <= 0;
|
||||
spi_dma_bytecnt <= spi_dma_bytecnt + 1;
|
||||
spi_dma_bitcnt <= spi_dma_bitcnt + 1;
|
||||
end else if (spi_dma_bitcnt == 12) begin
|
||||
spi_dma_bitcnt <= 0;
|
||||
end else if (spi_dma_bitcnt == 4'b1101) begin
|
||||
spi_dma_sck_out_r <= 0;
|
||||
spi_dma_bitcnt <= 4'b1110;
|
||||
end else if (spi_dma_bitcnt == 4'b1110) begin
|
||||
spi_dma_bitcnt <= spi_dma_bitcnt + 1;
|
||||
end else if (spi_dma_bitcnt == 4'b1111) begin
|
||||
spi_dma_bitcnt <= 0;
|
||||
end
|
||||
end else if (spi_dma_trig_falling & !spi_dma_ovr_r) begin
|
||||
spi_dma_bitcnt <= 4'b1101;
|
||||
spi_dma_bytecnt <= 10'b0000000000;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
@ -1,180 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 23:11:58 05/13/2009
|
||||
// Design Name: main
|
||||
// Module Name: /home/ikari/prj/sd2snes/verilog/sd2snes/tf_main.v
|
||||
// Project Name: sd2snes
|
||||
// Target Device:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Verilog Test Fixture created by ISE for module: main
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
module tf_main;
|
||||
|
||||
// Inputs
|
||||
reg CLK;
|
||||
reg [2:0] MAPPER;
|
||||
reg [23:0] SNES_ADDR;
|
||||
reg SNES_READ;
|
||||
reg SNES_WRITE;
|
||||
reg SNES_CS;
|
||||
reg AVR_ENA;
|
||||
|
||||
// Outputs
|
||||
wire [20:0] SRAM_ADDR;
|
||||
wire [3:0] ROM_SEL;
|
||||
wire SRAM_OE;
|
||||
wire SRAM_WE;
|
||||
wire SNES_DATABUS_OE;
|
||||
wire SNES_DATABUS_DIR;
|
||||
wire MODE;
|
||||
|
||||
// Bidirs
|
||||
wire [7:0] SNES_DATA;
|
||||
wire [7:0] SRAM_DATA;
|
||||
wire [7:0] AVR_DATA;
|
||||
|
||||
reg [7:0] SRAM_DATA_BUF;
|
||||
reg [7:0] SNES_DATA_BUF;
|
||||
|
||||
SCK = 0;
|
||||
MOSI = 0;
|
||||
SSEL = 1;
|
||||
input_data = 0;
|
||||
|
||||
// Wait 100 ns for global reset to finish
|
||||
#100;
|
||||
|
||||
// Add stimulus here
|
||||
SSEL = 0;
|
||||
MOSI=1;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
MOSI=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
MOSI=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
MOSI=1;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
MOSI=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#200;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#200;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SCK=1;
|
||||
#100 SCK=0;
|
||||
#100 SSEL=1;
|
||||
|
||||
|
||||
end
|
||||
always begin
|
||||
#19 clk = ~clk;
|
||||
end
|
||||
|
||||
// Instantiate the Unit Under Test (UUT)
|
||||
main uut (
|
||||
.CLKIN(CLK),
|
||||
.MAPPER(MAPPER),
|
||||
.SNES_ADDR(SNES_ADDR),
|
||||
.SNES_READ(SNES_READ),
|
||||
.SNES_WRITE(SNES_WRITE),
|
||||
.SNES_CS(SNES_CS),
|
||||
.SNES_DATA(SNES_DATA),
|
||||
.SRAM_DATA(SRAM_DATA),
|
||||
.SRAM_ADDR(SRAM_ADDR),
|
||||
.ROM_SEL(ROM_SEL),
|
||||
.SRAM_OE(SRAM_OE),
|
||||
.SRAM_WE(SRAM_WE),
|
||||
.AVR_ENA(AVR_ENA),
|
||||
.SNES_DATABUS_OE(SNES_DATABUS_OE),
|
||||
.SNES_DATABUS_DIR(SNES_DATABUS_DIR),
|
||||
.MODE(MODE)
|
||||
);
|
||||
|
||||
assign SRAM_DATA = SRAM_DATA_BUF;
|
||||
initial begin
|
||||
// Initialize Inputs
|
||||
CLK = 1;
|
||||
MAPPER = 0;
|
||||
SNES_ADDR = 24'h223456;
|
||||
SNES_READ = 1;
|
||||
SNES_WRITE = 1;
|
||||
SNES_CS = 0;
|
||||
AVR_ENA = 1;
|
||||
SRAM_DATA_BUF = 8'hff;
|
||||
// Wait for global reset to finish
|
||||
#276;
|
||||
SNES_ADDR <= 24'h123456;
|
||||
SNES_READ <= 0;
|
||||
#176;
|
||||
SNES_READ <= 1;
|
||||
#100;
|
||||
SNES_WRITE <= 0;
|
||||
#176;
|
||||
SNES_WRITE <= 1;
|
||||
#100;
|
||||
SNES_READ <= 0;
|
||||
#276;
|
||||
// AVR_READ <= 1;
|
||||
// Add stimulus here
|
||||
end
|
||||
|
||||
always
|
||||
#23 CLK <= ~CLK;
|
||||
// always begin
|
||||
// end
|
||||
|
||||
endmodule
|
||||
|
||||
@ -1,132 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 04:03:25 12/21/2009
|
||||
// Design Name: main
|
||||
// Module Name: /home/ikari/prj/sd2snes/verilog/sd2snes/tf_main_3.v
|
||||
// Project Name: sd2snes
|
||||
// Target Device:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Verilog Test Fixture created by ISE for module: main
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
module tf_main_3;
|
||||
|
||||
// Inputs
|
||||
reg CLKIN;
|
||||
reg [23:0] SNES_ADDR;
|
||||
reg SNES_READ;
|
||||
reg SNES_WRITE;
|
||||
reg SNES_CS;
|
||||
reg SNES_CPU_CLK;
|
||||
reg SNES_REFRESH;
|
||||
reg SPI_MOSI;
|
||||
reg SPI_SS;
|
||||
reg AVR_ENA;
|
||||
|
||||
// Outputs
|
||||
wire SNES_DATABUS_OE;
|
||||
wire SNES_DATABUS_DIR;
|
||||
wire IRQ_DIR;
|
||||
wire [19:0] SRAM_ADDR;
|
||||
wire [3:0] SRAM_CE2;
|
||||
wire SRAM_OE;
|
||||
wire SRAM_WE;
|
||||
wire SRAM_BHE;
|
||||
wire SRAM_BLE;
|
||||
|
||||
// Bidirs
|
||||
wire [7:0] SNES_DATA;
|
||||
wire SNES_IRQ;
|
||||
wire [15:0] SRAM_DATA;
|
||||
wire SPI_MISO;
|
||||
wire SPI_SCK;
|
||||
wire SPI_DMA_CTRL;
|
||||
|
||||
reg SPI_DMA_CTRLdir;
|
||||
reg SPI_DMA_CTRLr;
|
||||
|
||||
reg SPI_MISOdir;
|
||||
reg SPI_MISOr;
|
||||
// Instantiate the Unit Under Test (UUT)
|
||||
main uut (
|
||||
.CLKIN(CLKIN),
|
||||
.SNES_ADDR(SNES_ADDR),
|
||||
.SNES_READ(SNES_READ),
|
||||
.SNES_WRITE(SNES_WRITE),
|
||||
.SNES_CS(SNES_CS),
|
||||
.SNES_DATA(SNES_DATA),
|
||||
.SNES_CPU_CLK(SNES_CPU_CLK),
|
||||
.SNES_REFRESH(SNES_REFRESH),
|
||||
.SNES_IRQ(SNES_IRQ),
|
||||
.SNES_DATABUS_OE(SNES_DATABUS_OE),
|
||||
.SNES_DATABUS_DIR(SNES_DATABUS_DIR),
|
||||
.IRQ_DIR(IRQ_DIR),
|
||||
.SRAM_DATA(SRAM_DATA),
|
||||
.SRAM_ADDR(SRAM_ADDR),
|
||||
.SRAM_CE2(SRAM_CE2),
|
||||
.SRAM_OE(SRAM_OE),
|
||||
.SRAM_WE(SRAM_WE),
|
||||
.SRAM_BHE(SRAM_BHE),
|
||||
.SRAM_BLE(SRAM_BLE),
|
||||
.SPI_MOSI(SPI_MOSI),
|
||||
.SPI_MISO(SPI_MISO),
|
||||
.SPI_SS(SPI_SS),
|
||||
.SPI_SCK(SPI_SCK),
|
||||
.AVR_ENA(AVR_ENA),
|
||||
.SPI_DMA_CTRL(SPI_DMA_CTRL)
|
||||
);
|
||||
|
||||
initial begin
|
||||
// Initialize Inputs
|
||||
CLKIN = 0;
|
||||
SNES_ADDR = 0;
|
||||
SNES_READ = 0;
|
||||
SNES_WRITE = 0;
|
||||
SNES_CS = 0;
|
||||
SNES_CPU_CLK = 0;
|
||||
SNES_REFRESH = 0;
|
||||
SPI_MOSI = 0;
|
||||
SPI_SS = 0;
|
||||
AVR_ENA = 0;
|
||||
SPI_DMA_CTRLr = 1;
|
||||
SPI_DMA_CTRLdir = 0;
|
||||
SPI_MISOr = 0;
|
||||
SPI_MISOdir = 0;
|
||||
// Wait 100 ns for global reset to finish
|
||||
#100;
|
||||
#600; // dcm?
|
||||
// Add stimulus here
|
||||
SPI_DMA_CTRLr = 1;
|
||||
SPI_DMA_CTRLdir = 1;
|
||||
#100 SPI_DMA_CTRLr = 0;
|
||||
#100 SPI_DMA_CTRLr = 1'bZ;
|
||||
SPI_DMA_CTRLdir = 0;
|
||||
SPI_MISOdir = 1;
|
||||
#260 SPI_MISOr = 1;
|
||||
#80 SPI_MISOr = 0;
|
||||
#80 SPI_MISOr = 0;
|
||||
#80 SPI_MISOr = 1;
|
||||
#80 SPI_MISOr = 0;
|
||||
#80 SPI_MISOr = 1;
|
||||
#80 SPI_MISOr = 0;
|
||||
#80 SPI_MISOr = 1;
|
||||
end
|
||||
|
||||
assign SPI_DMA_CTRL = SPI_DMA_CTRLdir ? SPI_DMA_CTRLr : 1'bZ;
|
||||
assign SPI_MISO = SPI_MISOdir ? SPI_MISOr : 1'bZ;
|
||||
always #35 CLKIN = ~CLKIN;
|
||||
endmodule
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user