Line 63... |
Line 63... |
|
|
// Peripheral bus
|
// Peripheral bus
|
addr_i,
|
addr_i,
|
data_o,
|
data_o,
|
data_i,
|
data_i,
|
wr_i,
|
we_i,
|
rd_i
|
stb_i
|
);
|
);
|
|
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
// Params
|
// Params
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
Line 92... |
Line 92... |
input intr7_i /*verilator public*/;
|
input intr7_i /*verilator public*/;
|
input [(EXTERNAL_INTERRUPTS - 1):0] intr_ext_i /*verilator public*/;
|
input [(EXTERNAL_INTERRUPTS - 1):0] intr_ext_i /*verilator public*/;
|
input [7:0] addr_i /*verilator public*/;
|
input [7:0] addr_i /*verilator public*/;
|
output [31:0] data_o /*verilator public*/;
|
output [31:0] data_o /*verilator public*/;
|
input [31:0] data_i /*verilator public*/;
|
input [31:0] data_i /*verilator public*/;
|
input [3:0] wr_i /*verilator public*/;
|
input we_i /*verilator public*/;
|
input rd_i /*verilator public*/;
|
input stb_i /*verilator public*/;
|
|
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
// Registers / Wires
|
// Registers / Wires
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
reg [31:0] data_o;
|
reg [31:0] data_o;
|
Line 173... |
Line 173... |
|
|
// Generate interrupt based on masked status
|
// Generate interrupt based on masked status
|
intr_o <= ((v_irq_status & irq_mask) != {(INTERRUPT_COUNT){1'b0}}) ? 1'b1 : 1'b0;
|
intr_o <= ((v_irq_status & irq_mask) != {(INTERRUPT_COUNT){1'b0}}) ? 1'b1 : 1'b0;
|
|
|
// Write Cycle
|
// Write Cycle
|
if (wr_i != 4'b0000)
|
if (we_i & stb_i)
|
begin
|
begin
|
case (addr_i)
|
case (addr_i)
|
|
|
`IRQ_MASK_SET :
|
`IRQ_MASK_SET :
|
irq_mask <= (irq_mask | data_i[INTERRUPT_COUNT-1:0]);
|
irq_mask <= (irq_mask | data_i[INTERRUPT_COUNT-1:0]);
|
Line 196... |
Line 196... |
end
|
end
|
|
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
// Peripheral Register Read
|
// Peripheral Register Read
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
always @ (posedge rst_i or posedge clk_i )
|
always @ *
|
begin
|
|
if (rst_i == 1'b1)
|
|
begin
|
|
data_o <= 32'h00000000;
|
|
end
|
|
else
|
|
begin
|
|
// Read cycle?
|
|
if (rd_i == 1'b1)
|
|
begin
|
begin
|
case (addr_i[7:0])
|
case (addr_i[7:0])
|
|
|
`IRQ_MASK_SET :
|
`IRQ_MASK_SET :
|
data_o <= {{(32-INTERRUPT_COUNT){1'b0}}, irq_mask};
|
data_o = {{(32-INTERRUPT_COUNT){1'b0}}, irq_mask};
|
|
|
`IRQ_MASK_CLR :
|
`IRQ_MASK_CLR :
|
data_o <= {{(32-INTERRUPT_COUNT){1'b0}}, irq_mask};
|
data_o = {{(32-INTERRUPT_COUNT){1'b0}}, irq_mask};
|
|
|
`IRQ_STATUS :
|
`IRQ_STATUS :
|
data_o <= {{(32-INTERRUPT_COUNT){1'b0}}, irq_status};
|
data_o = {{(32-INTERRUPT_COUNT){1'b0}}, irq_status};
|
|
|
default :
|
default :
|
data_o <= 32'h00000000;
|
data_o = 32'h00000000;
|
endcase
|
endcase
|
end
|
end
|
end
|
|
end
|
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|