This controller just block copies: may need to keep src and/or dest constant for device access.
| // State for 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;
|
| 43: (C) 2008-18, DJ Greaves, University of Cambridge, Computer Laboratory. |