diff --git a/verilog/sd2sneslite/clk_test.v b/verilog/sd2sneslite/clk_test.v deleted file mode 100644 index 10b54cf..0000000 --- a/verilog/sd2sneslite/clk_test.v +++ /dev/null @@ -1,52 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// -// Company: -// Engineer: -// -// Create Date: 22:40:46 12/20/2010 -// Design Name: -// Module Name: clk_test -// Project Name: -// Target Devices: -// Tool versions: -// Description: -// -// Dependencies: -// -// Revision: -// Revision 0.01 - File Created -// Additional Comments: -// -////////////////////////////////////////////////////////////////////////////////// -module clk_test( - input clk, - input sysclk, - output [31:0] snes_sysclk_freq - ); - -reg [31:0] snes_sysclk_freq_r; -assign snes_sysclk_freq = snes_sysclk_freq_r; - -reg [31:0] sysclk_counter; -reg [31:0] sysclk_value; - -initial snes_sysclk_freq_r = 32'hFFFFFFFF; -initial sysclk_counter = 0; -initial sysclk_value = 0; - -reg [1:0] sysclk_sreg; -always @(posedge clk) sysclk_sreg <= {sysclk_sreg[0], sysclk}; -wire sysclk_rising = (sysclk_sreg == 2'b01); - -always @(posedge clk) begin - if(sysclk_counter < 90315789) begin - sysclk_counter <= sysclk_counter + 1; - if(sysclk_rising) sysclk_value <= sysclk_value + 1; - end else begin - snes_sysclk_freq_r <= sysclk_value; - sysclk_counter <= 0; - sysclk_value <= 0; - end -end - -endmodule diff --git a/verilog/sd2sneslite/dac_dcm.v b/verilog/sd2sneslite/dac_dcm.v deleted file mode 100644 index 3c88ed6..0000000 --- a/verilog/sd2sneslite/dac_dcm.v +++ /dev/null @@ -1,106 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// -// Company: -// Engineer: -// -// Create Date: 11:00:52 12/29/2010 -// Design Name: -// Module Name: dac_dcm -// Project Name: -// Target Devices: -// Tool versions: -// Description: -// -// Dependencies: -// -// Revision: -// Revision 0.01 - File Created -// Additional Comments: -// -////////////////////////////////////////////////////////////////////////////////// -module dac_dcm( - input CLKIN, - output CLKFX - ); - - // DCM: Digital Clock Manager Circuit - // Spartan-3 - // Xilinx HDL Language Template, version 11.1 - - DCM #( - .SIM_MODE("SAFE"), // Simulation: "SAFE" vs. "FAST", see "Synthesis and Simulation Design Guide" for details - .CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 - // 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 - .CLKFX_DIVIDE(2), // Can be any integer from 1 to 32 - .CLKFX_MULTIPLY(19), // Can be any integer from 2 to 32 - .CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature - .CLKIN_PERIOD(46.560), // Specify period of input clock - .CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift of NONE, FIXED or VARIABLE - .CLK_FEEDBACK("NONE"), // Specify clock feedback of NONE, 1X or 2X - .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or - // an integer from 0 to 15 - .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis - .DLL_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for DLL - .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE - .FACTORY_JF(16'hFFFF), // FACTORY JF values -// .LOC("DCM_X0Y0"), - .PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 255 - .STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE - ) DCM_inst1 ( - .CLKFX(CLKFX1), // DCM CLK synthesis out (M/D) - .CLKIN(CLKIN), // Clock input (from IBUFG, BUFG or DCM) - .RST(1'b0) // DCM asynchronous reset input - ); - - - DCM #( - .SIM_MODE("SAFE"), // Simulation: "SAFE" vs. "FAST", see "Synthesis and Simulation Design Guide" for details - .CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 - // 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 - .CLKFX_DIVIDE(29), // Can be any integer from 1 to 32 - .CLKFX_MULTIPLY(19), // Can be any integer from 2 to 32 - .CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature - .CLKIN_PERIOD(4.901), // Specify period of input clock - .CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift of NONE, FIXED or VARIABLE - .CLK_FEEDBACK("NONE"), // Specify clock feedback of NONE, 1X or 2X - .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or - // an integer from 0 to 15 - .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis - .DLL_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for DLL - .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE - .FACTORY_JF(16'hFFFF), // FACTORY JF values -// .LOC("DCM_X0Y0"), - .PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 255 - .STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE - ) DCM_inst2 ( - .CLKFX(CLKFX2), // DCM CLK synthesis out (M/D) - .CLKIN(CLKFX1), // Clock input (from IBUFG, BUFG or DCM) - .RST(1'b0) // DCM asynchronous reset input - ); - - DCM #( - .SIM_MODE("SAFE"), // Simulation: "SAFE" vs. "FAST", see "Synthesis and Simulation Design Guide" for details - .CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 - // 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 - .CLKFX_DIVIDE(31), // Can be any integer from 1 to 32 - .CLKFX_MULTIPLY(21), // Can be any integer from 2 to 32 - .CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature - .CLKIN_PERIOD(7.480), // Specify period of input clock - .CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift of NONE, FIXED or VARIABLE - .CLK_FEEDBACK("NONE"), // Specify clock feedback of NONE, 1X or 2X - .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or - // an integer from 0 to 15 - .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis - .DLL_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for DLL - .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE - .FACTORY_JF(16'hFFFF), // FACTORY JF values -// .LOC("DCM_X0Y0"), - .PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 255 - .STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE - ) DCM_inst3 ( - .CLKFX(CLKFX), // DCM CLK synthesis out (M/D) - .CLKIN(CLKFX2), // Clock input (from IBUFG, BUFG or DCM) - .RST(1'b0) // DCM asynchronous reset input - ); - -endmodule diff --git a/verilog/sd2sneslite/dac_test.v b/verilog/sd2sneslite/dac_test.v deleted file mode 100644 index 982c7a9..0000000 --- a/verilog/sd2sneslite/dac_test.v +++ /dev/null @@ -1,168 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// -// Company: -// Engineer: -// -// Create Date: 19:26:11 07/23/2010 -// Design Name: -// Module Name: dac_test -// Project Name: -// Target Devices: -// Tool versions: -// Description: -// -// Dependencies: -// -// Revision: -// Revision 0.01 - File Created -// Additional Comments: -// -////////////////////////////////////////////////////////////////////////////////// -module dac_test( - input clkin, - input sysclk, - input we, - input[10:0] pgm_address, - input[7:0] pgm_data, - input[7:0] volume, - input vol_latch, - input play, - input reset, - output sdout, - output lrck, - output mclk, - output DAC_STATUS - ); - -reg[8:0] dac_address_r; -wire[8:0] dac_address = dac_address_r; -reg dac_nextaddr_r; - -wire[31:0] dac_data; -assign DAC_STATUS = dac_address_r[8]; -reg[7:0] vol_reg; -reg[7:0] vol_target_reg; -reg[1:0] vol_latch_reg; -reg vol_valid; -reg[2:0] sysclk_sreg; -wire sysclk_rising = (sysclk_sreg[2:1] == 2'b01); - -reg [25:0] interpol_count; -reg interpol_overflow; - -always @(posedge clkin) begin - sysclk_sreg <= {sysclk_sreg[1:0], sysclk}; -end - -dac_buf snes_dac_buf ( - .clka(clkin), - .wea(~we), // Bus [0 : 0] - .addra(pgm_address), // Bus [10 : 0] - .dina(pgm_data), // Bus [7 : 0] - .clkb(clkin), - .addrb(dac_address), // Bus [9 : 0] - .doutb(dac_data)); // Bus [15 : 0] - -reg [15:0] cnt; -reg [15:0] smpcnt; -reg [15:0] samples; -wire [15:0] sample = {smpcnt[10] ? ~smpcnt[9:0] : smpcnt[9:0], 6'b0}; -wire [15:0] sample2 = {smpcnt[9] ? ~smpcnt[8:0] : smpcnt[8:0], 7'b0}; -reg [15:0] smpshift; -reg [15:0] smpdata; - -assign mclk = cnt[2]; // mclk = clk/8 -assign lrck = cnt[10]; // lrck = mclk/256 -wire sclk = cnt[5]; // sclk = lrck*32 - -reg [2:0] lrck_sreg; -reg [2:0] sclk_sreg; -wire lrck_rising = ({lrck_sreg[2:1]} == 2'b01); -wire lrck_falling = ({lrck_sreg[2:1]} == 2'b10); - -wire sclk_rising = ({sclk_sreg[2:1]} == 2'b01); - -wire vol_latch_rising = (vol_latch_reg[1:0] == 2'b01); -reg sdout_reg; -assign sdout = sdout_reg; - -reg [1:0] reset_sreg; -wire reset_rising = (reset_sreg[1:0] == 2'b01); - -reg play_r; - -initial begin - cnt = 16'hff00; - smpcnt = 16'b0; - lrck_sreg = 2'b11; - sclk_sreg = 1'b0; - dac_address_r = 11'b0; - vol_valid = 1'b0; - vol_latch_reg = 1'b0; - vol_reg = 8'h0; - vol_target_reg = 8'hff; - samples <= 16'h0; -end - -always @(posedge clkin) begin - if(reset_rising) begin - dac_address_r <= 0; - interpol_overflow <= 0; - interpol_count <= 0; - end else if(sysclk_rising) begin - if(interpol_count > 59378938) begin - interpol_count <= interpol_count + 122500 - 59501439; - dac_address_r <= dac_address_r + play_r; - interpol_overflow <= 1; - end else begin - interpol_count <= interpol_count + 122500; - interpol_overflow <= 0; - end - end -end - -always @(posedge clkin) begin - cnt <= cnt + 1; - lrck_sreg <= {lrck_sreg[1:0], lrck}; - sclk_sreg <= {sclk_sreg[1:0], sclk}; - vol_latch_reg <= {vol_latch_reg[0], vol_latch}; - play_r <= play; - reset_sreg <= {reset_sreg[0], reset}; -end - -always @(posedge clkin) begin - if (vol_latch_rising) begin - vol_valid <= 1'b1; - end - else if(vol_valid) begin - vol_target_reg <= volume; - vol_valid <= 1'b0; - end -end - -// ramp volume only every 4 samples -always @(posedge clkin) begin - if (lrck_rising && &samples[1:0]) begin - if(vol_reg > vol_target_reg) - vol_reg <= vol_reg - 1; - else if(vol_reg < vol_target_reg) - vol_reg <= vol_reg + 1; - end -end - -always @(posedge clkin) begin - if (lrck_rising) begin // right channel - smpshift <= (({16'h0, dac_data[31:16]^16'h8000} * vol_reg) >> 8) ^ 16'h8000; - samples <= samples + 1; - end else if (lrck_falling) begin // left channel - smpshift <= (({16'h0, dac_data[15:0]^16'h8000} * vol_reg) >> 8) ^ 16'h8000; - end else begin - if (sclk_rising) begin - smpcnt <= smpcnt + 1; - sdout_reg <= smpshift[15]; - smpshift <= {smpshift[14:0], 1'b0}; - end - end -end - -endmodule diff --git a/verilog/sd2sneslite/msu.v b/verilog/sd2sneslite/msu.v deleted file mode 100644 index cbaeef9..0000000 --- a/verilog/sd2sneslite/msu.v +++ /dev/null @@ -1,182 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// -// Company: -// Engineer: -// -// Create Date: 14:55:04 12/14/2010 -// Design Name: -// Module Name: msu -// Project Name: -// Target Devices: -// Tool versions: -// Description: -// -// Dependencies: -// -// Revision: -// Revision 0.01 - File Created -// Additional Comments: -// -////////////////////////////////////////////////////////////////////////////////// -module msu( - input clkin, - input enable, - input [13:0] pgm_address, - input [7:0] pgm_data, - input pgm_we, - input [2:0] reg_addr, - input [7:0] reg_data_in, - output [7:0] reg_data_out, - input reg_oe, - input reg_we, - output [6:0] status_out, - output [7:0] volume_out, - output volume_latch_out, - output [31:0] addr_out, - output [15:0] track_out, - input [5:0] status_reset_bits, - input [5:0] status_set_bits, - input status_reset_we, - input [13:0] msu_address_ext, - input msu_address_ext_write - ); - -reg [1:0] status_reset_we_r; -always @(posedge clkin) status_reset_we_r = {status_reset_we_r[0], status_reset_we}; -wire status_reset_en = (status_reset_we_r == 2'b01); - -reg [13:0] msu_address_r; -wire [13:0] msu_address = msu_address_r; - -wire [7:0] msu_data; -reg [7:0] msu_data_r; - -reg [1:0] msu_address_ext_write_sreg; -always @(posedge clkin) msu_address_ext_write_sreg <= {msu_address_ext_write_sreg[0], msu_address_ext_write}; -wire msu_address_ext_write_rising = (msu_address_ext_write_sreg[1:0] == 2'b01); - -reg [5:0] reg_oe_sreg; -always @(posedge clkin) reg_oe_sreg <= {reg_oe_sreg[4:0], reg_oe}; -wire reg_oe_falling = (reg_oe_sreg[5:0] == 6'b100000); -wire reg_oe_rising = (reg_oe_sreg[5:0] == 6'b000001); - -reg [1:0] reg_we_sreg; -always @(posedge clkin) reg_we_sreg <= {reg_we_sreg[0], reg_we}; -wire reg_we_rising = (reg_we_sreg[1:0] == 2'b01); - -reg [31:0] addr_out_r; -assign addr_out = addr_out_r; - -reg [15:0] track_out_r; -assign track_out = track_out_r; - -reg [7:0] volume_r; -assign volume_out = volume_r; - -reg volume_start_r; -assign volume_latch_out = volume_start_r; - -reg audio_start_r; -reg audio_busy_r; -reg data_start_r; -reg data_busy_r; -reg ctrl_start_r; -reg [1:0] audio_ctrl_r; -reg [1:0] audio_status_r; - -initial begin - audio_busy_r <= 1'b1; - data_busy_r <= 1'b1; -end - -assign status_out = {msu_address_r[13], - audio_start_r, data_start_r, volume_start_r, audio_ctrl_r, ctrl_start_r}; - -initial msu_address_r = 14'h1234; - -msu_databuf snes_msu_databuf ( - .clka(clkin), - .wea(~pgm_we), // Bus [0 : 0] - .addra(pgm_address), // Bus [13 : 0] - .dina(pgm_data), // Bus [7 : 0] - .clkb(clkin), - .addrb(msu_address), // Bus [13 : 0] - .doutb(msu_data)); // Bus [7 : 0] - -reg [7:0] msu_regs [7:0]; - -reg [7:0] data_out_r; -reg [7:0] data_in_r; -assign reg_data_out = data_out_r; -always @(posedge clkin) data_in_r <= reg_data_in; - -always @(posedge clkin) begin - case(reg_addr) - 3'h0: data_out_r <= {data_busy_r, audio_busy_r, audio_status_r, 4'b0001}; - 3'h1: data_out_r <= msu_data_r; - 3'h2: data_out_r <= 8'h53; - 3'h3: data_out_r <= 8'h2d; - 3'h4: data_out_r <= 8'h4d; - 3'h5: data_out_r <= 8'h53; - 3'h6: data_out_r <= 8'h55; - 3'h7: data_out_r <= 8'h31; - endcase -end - -always @(posedge clkin) begin - if(reg_we_rising && enable) begin - case(reg_addr) - 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; - 3'h3: begin - addr_out_r[31:24] <= reg_data_in; - data_start_r <= 1'b1; - data_busy_r <= 1'b1; - end - 3'h4: begin - track_out_r[7:0] <= reg_data_in; - end - 3'h5: begin - track_out_r[15:8] <= reg_data_in; - audio_start_r <= 1'b1; - audio_busy_r <= 1'b1; - end - 3'h6: begin - volume_r <= reg_data_in; - volume_start_r <= 1'b1; - end - 3'h7: begin - if(!audio_busy_r) begin - audio_ctrl_r <= reg_data_in[1:0]; - ctrl_start_r <= 1'b1; - end - end - endcase - end else if (status_reset_en) begin - audio_busy_r <= (audio_busy_r | status_set_bits[5]) & ~status_reset_bits[5]; - if(status_reset_bits[5]) audio_start_r <= 1'b0; - - data_busy_r <= (data_busy_r | status_set_bits[4]) & ~status_reset_bits[4]; - if(status_reset_bits[4]) data_start_r <= 1'b0; - -// volume_start_r <= (volume_start_r | status_set_bits[3]) & ~status_reset_bits[3]; - - audio_status_r <= (audio_status_r | status_set_bits[2:1]) & ~status_reset_bits[2:1]; - - ctrl_start_r <= (ctrl_start_r | status_set_bits[0]) & ~status_reset_bits[0]; - end else begin - volume_start_r <= 1'b0; - end -end - -always @(posedge clkin) begin - if(msu_address_ext_write_rising) - msu_address_r <= msu_address_ext; - else if(enable && reg_addr == 3'h1 && reg_oe_falling) begin - msu_address_r <= msu_address_r + 1; - msu_data_r <= msu_data; - end -end - -endmodule diff --git a/verilog/sd2sneslite/sd2sneslite.xise b/verilog/sd2sneslite/sd2sneslite.xise index 8572964..17571b7 100644 --- a/verilog/sd2sneslite/sd2sneslite.xise +++ b/verilog/sd2sneslite/sd2sneslite.xise @@ -35,10 +35,6 @@ - - - - diff --git a/verilog/sd2sneslite/sd_dma.v b/verilog/sd2sneslite/sd_dma.v deleted file mode 100644 index 1a0b3d0..0000000 --- a/verilog/sd2sneslite/sd_dma.v +++ /dev/null @@ -1,132 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// -// Company: -// Engineer: -// -// Create Date: 19:19:08 12/01/2010 -// Design Name: -// Module Name: sd_dma -// Project Name: -// Target Devices: -// Tool versions: -// Description: -// -// Dependencies: -// -// Revision: -// Revision 0.01 - File Created -// Additional Comments: -// -////////////////////////////////////////////////////////////////////////////////// -module sd_dma( - input [3:0] SD_DAT, - inout SD_CLK, - input CLK, - input SD_DMA_EN, - input SD_DMA_TGT, - output SD_DMA_STATUS, - output SD_DMA_SRAM_WE, - output SD_DMA_NEXTADDR, - output [7:0] SD_DMA_SRAM_DATA, - input SD_DMA_PARTIAL, - input [10:0] SD_DMA_PARTIAL_START, - input [10:0] SD_DMA_PARTIAL_END - ); - -reg [10:0] SD_DMA_STARTr; -reg [10:0] SD_DMA_ENDr; -reg SD_DMA_PARTIALr; -always @(posedge CLK) SD_DMA_PARTIALr <= SD_DMA_PARTIAL; - -reg SD_DMA_DONEr; -reg[2:0] SD_DMA_DONEr2; -initial begin - SD_DMA_DONEr2 = 3'b000; - SD_DMA_DONEr = 1'b0; -end -always @(posedge CLK) SD_DMA_DONEr2 <= {SD_DMA_DONEr2[1:0], SD_DMA_DONEr}; -wire SD_DMA_DONE_rising = (SD_DMA_DONEr2[1:0] == 2'b01); - -reg [2:0] SD_DMA_ENr; -initial SD_DMA_ENr = 3'b000; -always @(posedge CLK) SD_DMA_ENr <= {SD_DMA_ENr[1:0], SD_DMA_EN}; -wire SD_DMA_EN_rising = (SD_DMA_ENr [1:0] == 2'b01); - -reg SD_DMA_STATUSr; -assign SD_DMA_STATUS = SD_DMA_STATUSr; - -// we need 1042 cycles (startbit + 1024 nibbles + 16 crc + stopbit) -reg [10:0] cyclecnt; -initial cyclecnt = 11'd0; - -reg SD_DMA_SRAM_WEr; -assign SD_DMA_SRAM_WE = (cyclecnt < 1025 && SD_DMA_STATUSr) ? SD_DMA_SRAM_WEr : 1'b1; - -reg SD_DMA_NEXTADDRr; -assign SD_DMA_NEXTADDR = (cyclecnt < 1025 && SD_DMA_STATUSr) ? SD_DMA_NEXTADDRr : 1'b0; - -reg[7:0] SD_DMA_SRAM_DATAr; -assign SD_DMA_SRAM_DATA = SD_DMA_SRAM_DATAr; - -// we have 4 internal cycles per SD clock -reg [12:0] clkcnt; -initial clkcnt = 13'd0; -reg SD_CLKr; -always @(posedge CLK) SD_CLKr <= clkcnt[1]; -assign SD_CLK = SD_DMA_STATUSr ? SD_CLKr : 1'bZ; - -always @(posedge CLK) begin - if(SD_DMA_EN_rising) begin - SD_DMA_STATUSr <= 1'b1; - SD_DMA_STARTr <= (SD_DMA_PARTIALr ? SD_DMA_PARTIAL_START : 11'h0); - SD_DMA_ENDr <= (SD_DMA_PARTIALr ? SD_DMA_PARTIAL_END : 11'd1024); - end - else if (SD_DMA_DONE_rising) SD_DMA_STATUSr <= 1'b0; -end - -always @(posedge CLK) begin - if(cyclecnt == 1042) SD_DMA_DONEr <= 1; - else SD_DMA_DONEr <= 0; -end - -always @(posedge CLK) begin - if(SD_DMA_EN_rising || !SD_DMA_STATUSr) begin - clkcnt <= 0; - end else begin - if(SD_DMA_STATUSr) begin - clkcnt <= clkcnt + 1; - end - end -end - -always @(posedge CLK) begin - if(SD_DMA_EN_rising || !SD_DMA_STATUSr) cyclecnt <= 0; - else if(clkcnt[1:0] == 2'b11) cyclecnt <= cyclecnt + 1; -end - -// we have 8 clk cycles to complete one RAM write -// (4 clk cycles per SD_CLK; 2 SD_CLK cycles per byte) -always @(posedge CLK) begin - if(SD_DMA_STATUSr) begin - case(clkcnt[2:0]) - 3'h0: begin - SD_DMA_SRAM_WEr <= 1'b1; - SD_DMA_SRAM_DATAr[7:4] <= SD_DAT; - if(cyclecnt>SD_DMA_STARTr && cyclecnt <= SD_DMA_ENDr) SD_DMA_NEXTADDRr <= 1'b1; - end - 3'h1: - SD_DMA_NEXTADDRr <= 1'b0; -// 3'h2: - 3'h3: - if(cyclecnt>=SD_DMA_STARTr && cyclecnt < SD_DMA_ENDr) SD_DMA_SRAM_WEr <= 1'b0; - 3'h4: - SD_DMA_SRAM_DATAr[3:0] <= SD_DAT; -// 3'h5: -// 3'h6: -// 3'h7: - endcase - end -end - -endmodule -