Line 43... |
Line 43... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.13 2002/11/18 22:35:18 lampret
|
|
// Bug fix. Interrupts were also asserted when condition was not met.
|
|
//
|
// Revision 1.12 2002/11/11 21:36:28 lampret
|
// Revision 1.12 2002/11/11 21:36:28 lampret
|
// Added ifdef to remove mux from clk_pad_i if mux is not allowed. This also removes RGPIO_CTRL[NEC].
|
// Added ifdef to remove mux from clk_pad_i if mux is not allowed. This also removes RGPIO_CTRL[NEC].
|
//
|
//
|
// Revision 1.11 2002/03/13 20:56:28 lampret
|
// Revision 1.11 2002/03/13 20:56:28 lampret
|
// Removed zero padding as per Avi Shamli suggestion.
|
// Removed zero padding as per Avi Shamli suggestion.
|
Line 110... |
Line 113... |
);
|
);
|
|
|
parameter dw = 32;
|
parameter dw = 32;
|
parameter aw = `GPIO_ADDRHH+1;
|
parameter aw = `GPIO_ADDRHH+1;
|
parameter gw = `GPIO_IOS;
|
parameter gw = `GPIO_IOS;
|
|
|
//
|
//
|
// WISHBONE Interface
|
// WISHBONE Interface
|
//
|
//
|
input wb_clk_i; // Clock
|
input wb_clk_i; // Clock
|
input wb_rst_i; // Reset
|
input wb_rst_i; // Reset
|
Line 267... |
Line 269... |
`ifdef GPIO_REGISTERED_WB_OUTPUTS
|
`ifdef GPIO_REGISTERED_WB_OUTPUTS
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
if (wb_rst_i)
|
if (wb_rst_i)
|
wb_ack_o <= #1 1'b0;
|
wb_ack_o <= #1 1'b0;
|
else
|
else
|
wb_ack_o <= #1 wb_ack & ~wb_ack_o;
|
wb_ack_o <= #1 wb_ack & ~wb_ack_o & (!wb_err) ;
|
`else
|
`else
|
assign wb_ack_o = wb_ack;
|
assign wb_ack_o = wb_ack;
|
`endif
|
`endif
|
|
|
//
|
//
|
Line 346... |
Line 348... |
`ifdef GPIO_RGPIO_OUT
|
`ifdef GPIO_RGPIO_OUT
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
if (wb_rst_i)
|
if (wb_rst_i)
|
rgpio_out <= #1 {gw{1'b0}};
|
rgpio_out <= #1 {gw{1'b0}};
|
else if (rgpio_out_sel && wb_we_i)
|
else if (rgpio_out_sel && wb_we_i)
|
|
begin
|
|
`ifdef GPIO_STRICT_32BIT_ACCESS
|
rgpio_out <= #1 wb_dat_i[gw-1:0];
|
rgpio_out <= #1 wb_dat_i[gw-1:0];
|
|
`endif
|
|
|
|
`ifdef GPIO_WB_BYTES4
|
|
if ( wb_sel_i [3] == 1'b1 )
|
|
rgpio_out [gw-1:24] <= #1 wb_dat_i [gw-1:24] ;
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_out [23:16] <= #1 wb_dat_i [23:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_out [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_out [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES3
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_out [gw-1:16] <= #1 wb_dat_i [gw-1:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_out [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_out [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES2
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_out [gw-1:8] <= #1 wb_dat_i [gw-1:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_out [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES1
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_out [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
|
|
`endif
|
|
end
|
|
|
`else
|
`else
|
assign rgpio_out = `GPIO_DEF_RGPIO_OUT; // RGPIO_OUT = 0x0
|
assign rgpio_out = `GPIO_DEF_RGPIO_OUT; // RGPIO_OUT = 0x0
|
`endif
|
`endif
|
|
|
//
|
//
|
// Write to RGPIO_OE. Bits in RGPIO_OE are stored inverted.
|
// Write to RGPIO_OE. Bits in RGPIO_OE are stored inverted.
|
//
|
//
|
`ifdef GPIO_RGPIO_OE
|
`ifdef GPIO_RGPIO_OE
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
always @(posedge ~wb_clk_i or posedge ~wb_rst_i)
|
if (wb_rst_i)
|
if (~wb_rst_i)
|
rgpio_oe <= #1 {gw{1'b0}};
|
rgpio_oe <= #1 {gw{1'b0}};
|
else if (rgpio_oe_sel && wb_we_i)
|
else if (rgpio_oe_sel && ~wb_we_i)
|
|
begin
|
|
`ifdef GPIO_STRICT_32BIT_ACCESS
|
rgpio_oe <= #1 ~wb_dat_i[gw-1:0];
|
rgpio_oe <= #1 ~wb_dat_i[gw-1:0];
|
|
`endif
|
|
|
|
`ifdef GPIO_WB_BYTES4
|
|
if ( ~wb_sel_i [3] == 1'b1 )
|
|
rgpio_oe [gw-1:24] <= #1 ~wb_dat_i [gw-1:24] ;
|
|
if ( ~wb_sel_i [2] == 1'b1 )
|
|
rgpio_oe [23:16] <= #1 ~wb_dat_i [23:16] ;
|
|
if ( ~wb_sel_i [1] == 1'b1 )
|
|
rgpio_oe [15:8] <= #1 ~wb_dat_i [15:8] ;
|
|
if ( ~wb_sel_i [0] == 1'b1 )
|
|
rgpio_oe [7:0] <= #1 ~wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES3
|
|
if ( ~wb_sel_i [2] == 1'b1 )
|
|
rgpio_oe [gw-1:16] <= #1 ~wb_dat_i [gw-1:16] ;
|
|
if ( ~wb_sel_i [1] == 1'b1 )
|
|
rgpio_oe [15:8] <= #1 ~wb_dat_i [15:8] ;
|
|
if ( ~wb_sel_i [0] == 1'b1 )
|
|
rgpio_oe [7:0] <= #1 ~wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES2
|
|
if ( ~wb_sel_i [1] == 1'b1 )
|
|
rgpio_oe [gw-1:8] <= #1 ~wb_dat_i [gw-1:8] ;
|
|
if ( ~wb_sel_i [0] == 1'b1 )
|
|
rgpio_oe [7:0] <= #1 ~wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES1
|
|
if ( ~wb_sel_i [0] == 1'b1 )
|
|
rgpio_oe [gw-1:0] <= #1 ~wb_dat_i [gw-1:0] ;
|
|
`endif
|
|
end
|
|
|
`else
|
`else
|
assign rgpio_oe = `GPIO_DEF_RPGIO_OE; // RGPIO_OE = 0x0
|
assign rgpio_oe = `GPIO_DEF_RPGIO_OE; // RGPIO_OE = 0x0
|
`endif
|
`endif
|
|
|
//
|
//
|
Line 372... |
Line 442... |
`ifdef GPIO_RGPIO_INTE
|
`ifdef GPIO_RGPIO_INTE
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
if (wb_rst_i)
|
if (wb_rst_i)
|
rgpio_inte <= #1 {gw{1'b0}};
|
rgpio_inte <= #1 {gw{1'b0}};
|
else if (rgpio_inte_sel && wb_we_i)
|
else if (rgpio_inte_sel && wb_we_i)
|
|
begin
|
|
`ifdef GPIO_STRICT_32BIT_ACCESS
|
rgpio_inte <= #1 wb_dat_i[gw-1:0];
|
rgpio_inte <= #1 wb_dat_i[gw-1:0];
|
|
`endif
|
|
|
|
`ifdef GPIO_WB_BYTES4
|
|
if ( wb_sel_i [3] == 1'b1 )
|
|
rgpio_inte [gw-1:24] <= #1 wb_dat_i [gw-1:24] ;
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_inte [23:16] <= #1 wb_dat_i [23:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_inte [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_inte [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES3
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_inte [gw-1:16] <= #1 wb_dat_i [gw-1:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_inte [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_inte [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES2
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_inte [gw-1:8] <= #1 wb_dat_i [gw-1:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_inte [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES1
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_inte [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
|
|
`endif
|
|
end
|
|
|
|
|
`else
|
`else
|
assign rgpio_inte = `GPIO_DEF_RPGIO_INTE; // RGPIO_INTE = 0x0
|
assign rgpio_inte = `GPIO_DEF_RPGIO_INTE; // RGPIO_INTE = 0x0
|
`endif
|
`endif
|
|
|
//
|
//
|
Line 385... |
Line 490... |
`ifdef GPIO_RGPIO_PTRIG
|
`ifdef GPIO_RGPIO_PTRIG
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
if (wb_rst_i)
|
if (wb_rst_i)
|
rgpio_ptrig <= #1 {gw{1'b0}};
|
rgpio_ptrig <= #1 {gw{1'b0}};
|
else if (rgpio_ptrig_sel && wb_we_i)
|
else if (rgpio_ptrig_sel && wb_we_i)
|
|
begin
|
|
`ifdef GPIO_STRICT_32BIT_ACCESS
|
rgpio_ptrig <= #1 wb_dat_i[gw-1:0];
|
rgpio_ptrig <= #1 wb_dat_i[gw-1:0];
|
|
`endif
|
|
|
|
`ifdef GPIO_WB_BYTES4
|
|
if ( wb_sel_i [3] == 1'b1 )
|
|
rgpio_ptrig [gw-1:24] <= #1 wb_dat_i [gw-1:24] ;
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_ptrig [23:16] <= #1 wb_dat_i [23:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_ptrig [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_ptrig [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES3
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_ptrig [gw-1:16] <= #1 wb_dat_i [gw-1:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_ptrig [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_ptrig [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES2
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_ptrig [gw-1:8] <= #1 wb_dat_i [gw-1:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_ptrig [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES1
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_ptrig [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
|
|
`endif
|
|
end
|
|
|
`else
|
`else
|
assign rgpio_ptrig = `GPIO_DEF_RPGIO_PTRIG; // RGPIO_PTRIG = 0x0
|
assign rgpio_ptrig = `GPIO_DEF_RPGIO_PTRIG; // RGPIO_PTRIG = 0x0
|
`endif
|
`endif
|
|
|
//
|
//
|
Line 398... |
Line 537... |
`ifdef GPIO_RGPIO_AUX
|
`ifdef GPIO_RGPIO_AUX
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
always @(posedge wb_clk_i or posedge wb_rst_i)
|
if (wb_rst_i)
|
if (wb_rst_i)
|
rgpio_aux <= #1 {gw{1'b0}};
|
rgpio_aux <= #1 {gw{1'b0}};
|
else if (rgpio_aux_sel && wb_we_i)
|
else if (rgpio_aux_sel && wb_we_i)
|
|
begin
|
|
`ifdef GPIO_STRICT_32BIT_ACCESS
|
rgpio_aux <= #1 wb_dat_i[gw-1:0];
|
rgpio_aux <= #1 wb_dat_i[gw-1:0];
|
|
`endif
|
|
|
|
`ifdef GPIO_WB_BYTES4
|
|
if ( wb_sel_i [3] == 1'b1 )
|
|
rgpio_aux [gw-1:24] <= #1 wb_dat_i [gw-1:24] ;
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_aux [23:16] <= #1 wb_dat_i [23:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_aux [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_aux [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES3
|
|
if ( wb_sel_i [2] == 1'b1 )
|
|
rgpio_aux [gw-1:16] <= #1 wb_dat_i [gw-1:16] ;
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_aux [15:8] <= #1 wb_dat_i [15:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_aux [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES2
|
|
if ( wb_sel_i [1] == 1'b1 )
|
|
rgpio_aux [gw-1:8] <= #1 wb_dat_i [gw-1:8] ;
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_aux [7:0] <= #1 wb_dat_i [7:0] ;
|
|
`endif
|
|
`ifdef GPIO_WB_BYTES1
|
|
if ( wb_sel_i [0] == 1'b1 )
|
|
rgpio_aux [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
|
|
`endif
|
|
end
|
|
|
`else
|
`else
|
assign rgpio_aux = `GPIO_DEF_RPGIO_AUX; // RGPIO_AUX = 0x0
|
assign rgpio_aux = `GPIO_DEF_RPGIO_AUX; // RGPIO_AUX = 0x0
|
`endif
|
`endif
|
|
|
//
|
//
|