1 `include "sdram_master_defines.v"
8 // signals to connect to an Avalon clock source interface
12 // signals to connect to an Avalon-MM slave interface
22 // read master port interface
25 //avm_read_byteenable,
29 // write master port interface
32 //avm_write_byteenable,
40 input avs_s1_chipselect
;
41 input [2:0] avs_s1_address
;
43 output reg [31:0] avs_s1_readdata
;
45 input [31:0] avs_s1_writedata
;
46 input [3:0] avs_s1_byteenable
;
47 output avs_s1_waitrequest
;
49 // read master port interface
50 output reg [31:0] avm_read_address
;
51 output reg avm_read_read
;
52 //output reg [3:0] avm_read_byteenable;
53 //input [31:0] avm_read_readdata;
54 input [15:0] avm_read_readdata
;
55 input avm_read_waitrequest
;
57 // write master port interface
58 output reg [31:0] avm_write_address
;
59 output reg avm_write_write
;
60 //output reg [3:0] avm_write_byteenable;
61 //output reg [31:0] avm_write_writedata;
62 output reg [15:0] avm_write_writedata
;
63 input avm_write_waitrequest
;
65 reg [31:0] S_addr
;//source address
66 reg [31:0] D_addr
;//destination address
71 //reg [31:0] DMA_DATA;
79 avs_s1_read_last
<= avs_s1_read
;
82 wire avs_s1_waitrequest
;
83 assign avs_s1_waitrequest
= ~(avs_s1_read_last | avs_s1_write
);
86 always@(posedge clk
or posedge reset
)
94 if((avs_s1_chipselect
==1'b1) && (avs_s1_write
==1'b1)) begin
96 `S_ADDR: S_addr <= avs_s1_writedata;
97 `D_ADDR: D_addr <= avs_s1_writedata;
98 `LONGTH: Longth <= avs_s1_writedata;
102 if((avs_s1_chipselect
==1'b1) && (avs_s1_read
==1'b1)) begin
104 `S_ADDR: avs_s1_readdata <= S_addr;
105 `D_ADDR: avs_s1_readdata <= D_addr;
106 `LONGTH: avs_s1_readdata <= Longth;
107 `STATUS_ADDR: avs_s1_readdata <= {31'h0,Status};
108 default: avs_s1_readdata
<= 32'h0
;
118 always@(posedge clk
or posedge reset
)
122 else if((avs_s1_chipselect
==1'b1) & (avs_s1_write
==1'b1) & (avs_s1_address
== `START_ADDR))
132 if(reset
) done_last
<= 1'b0;
133 else done_last
<= done
;
143 else if((avs_s1_chipselect
==1'b1) & (avs_s1_write
==1'b1) & (avs_s1_address
== `START_ADDR) )
147 else if( (done_last
== 1'b0 )&( done
== 1'b1) )
157 parameter DMA_IDLE
= 0;
159 parameter WAIT_READ
= 2;
161 parameter WAIT_WRITE
= 4;
162 parameter CALC_NEXT
= 5;
163 parameter DMA_DONE
= 6;
168 DMA_state
<= DMA_IDLE
;
180 avm_read_address
<= S_addr
+ DMA_Cont
;
181 //avm_read_byteenable <= 4'b0001;
182 avm_read_read
<= 1'b1;
183 DMA_state
<= WAIT_READ
;
186 if(avm_read_waitrequest
== 1'b0 )
188 avm_read_read
<= 1'b0;
189 DMA_DATA
<= avm_read_readdata
;
194 avm_write_address
<= D_addr
+ DMA_Cont
;
195 //avm_write_byteenable <= 4'b0001;
196 avm_write_write
<= 1'b1;
197 avm_write_writedata
<= DMA_DATA
;
198 //avm_write_writedata <= DMA_Cont;//temp test
199 DMA_state
<= WAIT_WRITE
;
202 if(avm_write_waitrequest
== 1'b0 )
204 DMA_Cont
<= DMA_Cont
+ 32'h2
;
205 //avm_write_address <= 0;
206 avm_write_write
<= 1'b0;
207 if(DMA_Cont
< Longth
)
210 DMA_state
<= DMA_DONE
;
216 DMA_state
<= DMA_IDLE
;
219 DMA_state
<= DMA_IDLE
;