![]()
This controller just block copies: may need to keep src and/or dest constant for device access.
| // Programmers' Model reg [31:0] count, src, dest; reg int_enable, active; // Other local state reg [31:0] datareg; reg intt, rwbar; always @(posedge clk) begin // Target if (hwen && addr==0) begin { int_enable, active } <= wdata[1:0]; intt <= 0; rwbar <= 1; end if (hwen && addr==4) count <= wdata; if (hwen && addr==8) src <= wdata; if (hwen && addr==12) dest <= wdata; end assign rdata = ...// Target readbacks always @(posedge clk) begin // Initiator 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; |
31: (C) 2008-13, DJ Greaves, University of Cambridge, Computer Laboratory. |