HOME       UP       PREV       FURTHER NOTES       NEXT (Network Device)  

DMA Controller

This controller just block copies: may need to keep src and/or dest constant for device access.
Typically, a multi-channel DMA controller is provided.
A more flexible DMA controller that follows linked lists is as complex as a simple CPU: ultimately little difference. DMA controllers may be built into devices: SoC bus master ports needed.

  reg [31:0] count, src, dest, datareg; 
  reg int_enable, active, intt, rwbar;

  always @(posedge clk) begin
     if (hwen && addr==0) begin
         { int_enable, active } <= wdata[1:0];
         int  <= 0; rwbar <= 1;
         end
  
     if (hwen && addr==4) count <= wdata;
     if (hwen && addr==8) src <= wdata;
     if (hwen && addr==12) dest <= wdata;

     if (active && rwbar && m_ack) begin
           datareg <= m_rdata;
           rwbar <= 0;
           src <= src + 4;
           end
     if (active && !rwbar && m_ack) begin
           rwbar <= 1;
           dest <= dest + 4;
           count <= count - 1;
           end
     if (count==1 && active && !rwbar) begin
           active <= 0;
           intt <= 1;
           end 
     end
  assign m_wdata = datareg;
  assign m_ren = active && rwbar;
  assign m_wen = active && !rwbar;
  assign m_addr = (rwbar) ? src:dest;
  assign interrupt = intt && int_enable;


33: (C) 2008-11, DJ Greaves, University of Cambridge, Computer Laboratory.