Line 43... |
Line 43... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.5 2001/12/12 20:35:53 lampret
|
|
// Fixing style.
|
|
//
|
// Revision 1.4 2001/12/12 07:12:58 lampret
|
// Revision 1.4 2001/12/12 07:12:58 lampret
|
// Fixed bug when wb_inta_o is registered (GPIO_WB_REGISTERED_OUTPUTS)
|
// Fixed bug when wb_inta_o is registered (GPIO_WB_REGISTERED_OUTPUTS)
|
//
|
//
|
// Revision 1.3 2001/11/15 02:24:37 lampret
|
// Revision 1.3 2001/11/15 02:24:37 lampret
|
// Added GPIO_REGISTERED_WB_OUTPUTS, GPIO_REGISTERED_IO_OUTPUTS and GPIO_NO_NEGEDGE_FLOPS.
|
// Added GPIO_REGISTERED_WB_OUTPUTS, GPIO_REGISTERED_IO_OUTPUTS and GPIO_NO_NEGEDGE_FLOPS.
|
Line 180... |
Line 183... |
`else
|
`else
|
wire [3:0] rgpio_ctrl; // No register
|
wire [3:0] rgpio_ctrl; // No register
|
`endif
|
`endif
|
|
|
//
|
//
|
|
// GPIO Interrupt Status Register (or no register)
|
|
//
|
|
`ifdef GPIO_RGPIO_INTS
|
|
reg [gw-1:0] rgpio_ints; // RGPIO_INTS register
|
|
`else
|
|
wire [gw-1:0] rgpio_ints; // No register
|
|
`endif
|
|
|
|
//
|
// Internal wires & regs
|
// Internal wires & regs
|
//
|
//
|
wire rgpio_out_sel; // RGPIO_OUT select
|
wire rgpio_out_sel; // RGPIO_OUT select
|
wire rgpio_oe_sel; // RGPIO_OE select
|
wire rgpio_oe_sel; // RGPIO_OE select
|
wire rgpio_inte_sel; // RGPIO_INTE select
|
wire rgpio_inte_sel; // RGPIO_INTE select
|
wire rgpio_ptrig_sel;// RGPIO_PTRIG select
|
wire rgpio_ptrig_sel;// RGPIO_PTRIG select
|
wire rgpio_aux_sel; // RGPIO_AUX select
|
wire rgpio_aux_sel; // RGPIO_AUX select
|
wire rgpio_ctrl_sel; // RGPIO_CTRL select
|
wire rgpio_ctrl_sel; // RGPIO_CTRL select
|
|
wire rgpio_ints_sel; // RGPIO_INTS select
|
wire latch_clk; // Latch clock
|
wire latch_clk; // Latch clock
|
wire full_decoding; // Full address decoding qualification
|
wire full_decoding; // Full address decoding qualification
|
wire [gw-1:0] in_muxed; // Muxed inputs
|
wire [gw-1:0] in_muxed; // Muxed inputs
|
wire wb_ack; // WB Acknowledge
|
wire wb_ack; // WB Acknowledge
|
wire wb_err; // WB Error
|
wire wb_err; // WB Error
|
Line 287... |
Line 300... |
assign rgpio_oe_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_OE) & full_decoding;
|
assign rgpio_oe_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_OE) & full_decoding;
|
assign rgpio_inte_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_INTE) & full_decoding;
|
assign rgpio_inte_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_INTE) & full_decoding;
|
assign rgpio_ptrig_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_PTRIG) & full_decoding;
|
assign rgpio_ptrig_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_PTRIG) & full_decoding;
|
assign rgpio_aux_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_AUX) & full_decoding;
|
assign rgpio_aux_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_AUX) & full_decoding;
|
assign rgpio_ctrl_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_CTRL) & full_decoding;
|
assign rgpio_ctrl_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_CTRL) & full_decoding;
|
|
assign rgpio_ints_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_INTS) & full_decoding;
|
|
|
//
|
//
|
// Write to RGPIO_CTRL or update of RGPIO_CTRL[INT] bit
|
// Write to RGPIO_CTRL or update of RGPIO_CTRL[INT] bit
|
//
|
//
|
`ifdef GPIO_RGPIO_CTRL
|
`ifdef GPIO_RGPIO_CTRL
|
Line 298... |
Line 312... |
if (wb_rst_i)
|
if (wb_rst_i)
|
rgpio_ctrl <= #1 4'b0;
|
rgpio_ctrl <= #1 4'b0;
|
else if (rgpio_ctrl_sel && wb_we_i)
|
else if (rgpio_ctrl_sel && wb_we_i)
|
rgpio_ctrl <= #1 wb_dat_i[3:0];
|
rgpio_ctrl <= #1 wb_dat_i[3:0];
|
else if (rgpio_ctrl[`GPIO_RGPIO_CTRL_INTE])
|
else if (rgpio_ctrl[`GPIO_RGPIO_CTRL_INTE])
|
rgpio_ctrl[`GPIO_RGPIO_CTRL_INT] <= #1 rgpio_ctrl[`GPIO_RGPIO_CTRL_INT] | wb_inta_o;
|
rgpio_ctrl[`GPIO_RGPIO_CTRL_INTS] <= #1 rgpio_ctrl[`GPIO_RGPIO_CTRL_INTS] | wb_inta_o;
|
`else
|
`else
|
assign rgpio_ctrl = 4'h01; // RGPIO_CTRL[EN] = 1
|
assign rgpio_ctrl = 4'h01; // RGPIO_CTRL[EN] = 1
|
`endif
|
`endif
|
|
|
//
|
//
|
Line 453... |
Line 467... |
`GPIO_RGPIO_CTRL: begin
|
`GPIO_RGPIO_CTRL: begin
|
wb_dat[3:0] = rgpio_ctrl;
|
wb_dat[3:0] = rgpio_ctrl;
|
wb_dat[dw-1:4] = {dw-4{1'b0}};
|
wb_dat[dw-1:4] = {dw-4{1'b0}};
|
end
|
end
|
`endif
|
`endif
|
|
`GPIO_RGPIO_INTS: begin
|
|
wb_dat[dw-1:0] = {{dw-gw{1'b0}}, rgpio_ints};
|
|
end
|
default: begin
|
default: begin
|
wb_dat[dw-1:0] = {{dw-gw{1'b0}}, rgpio_in};
|
wb_dat[dw-1:0] = {{dw-gw{1'b0}}, rgpio_in};
|
end
|
end
|
endcase
|
endcase
|
|
|
Line 472... |
Line 489... |
`else
|
`else
|
assign wb_dat_o = wb_dat;
|
assign wb_dat_o = wb_dat;
|
`endif
|
`endif
|
|
|
//
|
//
|
|
// RGPIO_INTS
|
|
//
|
|
`ifdef GPIO_RGPIO_INTS
|
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
|
if (wb_rst_i)
|
|
rgpio_ints <= #1 {gw{1'b0}};
|
|
else if (rgpio_ints_sel && wb_we_i)
|
|
rgpio_ints <= #1 wb_dat_i[gw-1:0];
|
|
else if (rgpio_ctrl[`GPIO_RGPIO_CTRL_INTE])
|
|
rgpio_ints <= #1 rgpio_ints | (in_pad_i ^ ~rgpio_ptrig) & rgpio_inte;
|
|
`else
|
|
assign rgpio_ints = (in_pad_i ^ ~rgpio_ptrig) & rgpio_inte;
|
|
`endif
|
|
|
|
//
|
// Generate interrupt request
|
// Generate interrupt request
|
//
|
//
|
assign wb_inta = ((in_pad_i ^ ~rgpio_ptrig) & rgpio_inte) ? rgpio_ctrl[`GPIO_RGPIO_CTRL_INTE] : 1'b0;
|
assign wb_inta = |rgpio_ints ? rgpio_ctrl[`GPIO_RGPIO_CTRL_INTE] : 1'b0;
|
|
|
//
|
//
|
// Optional registration of WB interrupt
|
// Optional registration of WB interrupt
|
//
|
//
|
`ifdef GPIO_REGISTERED_WB_OUTPUTS
|
`ifdef GPIO_REGISTERED_WB_OUTPUTS
|