Altera_Forum
Honored Contributor
8 years agoCommands to modular SGDMA Read Master for a single and burst read ?
Hi,
I'm trying to use the modular SGDMA Read Master to allow my custom IP to read from On-Chip and SDRAM in my QSYS project. However, I'm having trouble figuring out how to interact with this Read Master in order to it have perform a read or burst read. All I have for documentation is the PDF (attached) from the modular SGDMA wiki but it's not complete. Below is my basic state machine for a single read and the simulation results are attached. I can read the correct data (0xFFFFFFFF) but I never see the done strobe while response_source_valid is asserted. Does anyone have any idea what I'm doing wrong ? Also, what would the steps be to perform a burst read ? ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- always @ (posedge clk_in or negedge reset_n_in) begin if (~reset_n_in) master_read_FSM <= s0; else case (master_read_FSM) s0 : begin dma_read_master_0_command_sink_data_out <= 256'h0; dma_read_master_0_command_sink_valid_out <= 1'b0; dma_read_master_0_data_source_ready_out <= 1'b0; dma_read_master_0_response_source_ready_out <= 1'b0; master_read_FSM <= cmd_go_pulse ? s1 : s0; end s1 : begin master_read_FSM <= dma_read_master_0_command_sink_ready_in ? s2 : s1 ; end s2 : begin dma_read_master_0_command_sink_data_out[31:0] <= 32'h08000000; // address 31:0 dma_read_master_0_command_sink_data_out[140:109] <= 32'h0; // address 63:32 dma_read_master_0_command_sink_data_out[63:32] <= 32'h00000004; // length dma_read_master_0_command_sink_valid_out <= 1'b1; master_read_FSM <= s3 ; end s3 : begin dma_read_master_0_command_sink_valid_out <= 1'b0; dma_read_master_0_data_source_ready_out <= 1'b1; dma_read_master_0_response_source_ready_out <= 1'b1; master_read_FSM <= dma_read_master_0_data_source_valid_in ? s4 : s3; end s4 : begin slave_data_0_out <= dma_read_master_0_data_source_data_in; master_read_FSM <= (dma_read_master_0_response_source_valid_in && dma_read_master_0_response_source_data_in[2]) ? s0 : s4; end default : master_read_FSM <= s0; endcase end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Appreciate the help. Arsen