OpenCores
URL https://opencores.org/ocsvn/gpio/gpio/trunk

Subversion Repositories gpio

[/] [gpio/] [trunk/] [rtl/] [verilog/] [gpio_top.v] - Diff between revs 56 and 60

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 56 Rev 60
Line 43... Line 43...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.16  2003/12/17 13:00:52  gorand
 
// added ECLK and NEC registers, all tests passed.
 
//
// Revision 1.15  2003/11/10 23:21:22  gorand
// Revision 1.15  2003/11/10 23:21:22  gorand
// bug fixed. all tests passed.
// bug fixed. all tests passed.
//
//
// Revision 1.14  2003/11/06 13:59:07  gorand
// Revision 1.14  2003/11/06 13:59:07  gorand
// added support for 8-bit access to registers.
// added support for 8-bit access to registers.
Line 113... Line 116...
 
 
        // Auxiliary inputs interface
        // Auxiliary inputs interface
        aux_i,
        aux_i,
 
 
        // External GPIO Interface
        // External GPIO Interface
        ext_pad_i, clk_pad_i, ext_pad_o, ext_padoen_o
        ext_pad_i, clk_pad_i, ext_pad_o, ext_padoe_o
);
);
 
 
parameter dw = 32;
parameter dw = 32;
parameter aw = `GPIO_ADDRHH+1;
parameter aw = `GPIO_ADDRHH+1;
parameter gw = `GPIO_IOS;
parameter gw = `GPIO_IOS;
Line 144... Line 147...
// External GPIO Interface
// External GPIO Interface
//
//
input   [gw-1:0] ext_pad_i;      // GPIO Inputs
input   [gw-1:0] ext_pad_i;      // GPIO Inputs
input                   clk_pad_i;      // GPIO Eclk
input                   clk_pad_i;      // GPIO Eclk
output  [gw-1:0] ext_pad_o;      // GPIO Outputs
output  [gw-1:0] ext_pad_o;      // GPIO Outputs
output  [gw-1:0] ext_padoen_o;   // GPIO output drivers enables
output  [gw-1:0] ext_padoe_o;    // GPIO output drivers enables
 
 
`ifdef GPIO_IMPLEMENTED
`ifdef GPIO_IMPLEMENTED
 
 
//
//
// GPIO Input Register (or no register)
// GPIO Input Register (or no register)
Line 343... Line 346...
`endif
`endif
 
 
//
//
// GPIO registers address decoder
// GPIO registers address decoder
//
//
 
`ifdef GPIO_RGPIO_OUT
assign rgpio_out_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_OUT) & full_decoding;
assign rgpio_out_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_OUT) & full_decoding;
 
`endif
 
`ifdef GPIO_RGPIO_OE
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;
 
`endif
 
`ifdef GPIO_RGPIO_INTE
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;
 
`endif
 
`ifdef GPIO_RGPIO_PTRIG
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;
 
`endif
 
`ifdef GPIO_RGPIO_AUX
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;
 
`endif
 
`ifdef GPIO_RGPIO_CTRL
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;
 
`endif
 
`ifdef GPIO_RGPIO_INTS
assign rgpio_ints_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_INTS) & full_decoding;
assign rgpio_ints_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_INTS) & full_decoding;
 
`endif
 
`ifdef GPIO_RGPIO_ECLK
assign rgpio_eclk_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_ECLK) & full_decoding;
assign rgpio_eclk_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_ECLK) & full_decoding;
 
`endif
 
`ifdef GPIO_RGPIO_NEC
assign rgpio_nec_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_NEC) & full_decoding;
assign rgpio_nec_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`GPIO_OFS_BITS] == `GPIO_RGPIO_NEC) & full_decoding;
 
`endif
 
 
 
 
//
//
// Write to RGPIO_CTRL or update of RGPIO_CTRL[INT] bit
// Write to RGPIO_CTRL or update of RGPIO_CTRL[INT] bit
//
//
Line 419... Line 438...
`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.
//
//
`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
  begin
`ifdef GPIO_STRICT_32BIT_ACCESS
`ifdef GPIO_STRICT_32BIT_ACCESS
                rgpio_oe <= #1 ~wb_dat_i[gw-1:0];
                rgpio_oe <= #1 wb_dat_i[gw-1:0];
`endif
`endif
 
 
`ifdef GPIO_WB_BYTES4
`ifdef GPIO_WB_BYTES4
     if ( wb_sel_i [3] == 1'b1 )
     if ( wb_sel_i [3] == 1'b1 )
       rgpio_oe [gw-1:24] <= #1 ~wb_dat_i [gw-1:24] ;
       rgpio_oe [gw-1:24] <= #1 wb_dat_i [gw-1:24] ;
     if ( wb_sel_i [2] == 1'b1 )
     if ( wb_sel_i [2] == 1'b1 )
       rgpio_oe [23:16] <= #1 ~wb_dat_i [23:16] ;
       rgpio_oe [23:16] <= #1 wb_dat_i [23:16] ;
     if ( wb_sel_i [1] == 1'b1 )
     if ( wb_sel_i [1] == 1'b1 )
       rgpio_oe [15:8] <= #1 ~wb_dat_i [15:8] ;
       rgpio_oe [15:8] <= #1 wb_dat_i [15:8] ;
     if ( wb_sel_i [0] == 1'b1 )
     if ( wb_sel_i [0] == 1'b1 )
       rgpio_oe [7:0] <= #1 ~wb_dat_i [7:0] ;
       rgpio_oe [7:0] <= #1 wb_dat_i [7:0] ;
`endif
`endif
`ifdef GPIO_WB_BYTES3
`ifdef GPIO_WB_BYTES3
     if ( wb_sel_i [2] == 1'b1 )
     if ( wb_sel_i [2] == 1'b1 )
       rgpio_oe [gw-1:16] <= #1 ~wb_dat_i [gw-1:16] ;
       rgpio_oe [gw-1:16] <= #1 wb_dat_i [gw-1:16] ;
     if ( wb_sel_i [1] == 1'b1 )
     if ( wb_sel_i [1] == 1'b1 )
       rgpio_oe [15:8] <= #1 ~wb_dat_i [15:8] ;
       rgpio_oe [15:8] <= #1 wb_dat_i [15:8] ;
     if ( wb_sel_i [0] == 1'b1 )
     if ( wb_sel_i [0] == 1'b1 )
       rgpio_oe [7:0] <= #1 ~wb_dat_i [7:0] ;
       rgpio_oe [7:0] <= #1 wb_dat_i [7:0] ;
`endif
`endif
`ifdef GPIO_WB_BYTES2
`ifdef GPIO_WB_BYTES2
     if ( wb_sel_i [1] == 1'b1 )
     if ( wb_sel_i [1] == 1'b1 )
       rgpio_oe [gw-1:8] <= #1 ~wb_dat_i [gw-1:8] ;
       rgpio_oe [gw-1:8] <= #1 wb_dat_i [gw-1:8] ;
     if ( wb_sel_i [0] == 1'b1 )
     if ( wb_sel_i [0] == 1'b1 )
       rgpio_oe [7:0] <= #1 ~wb_dat_i [7:0] ;
       rgpio_oe [7:0] <= #1 wb_dat_i [7:0] ;
`endif
`endif
`ifdef GPIO_WB_BYTES1
`ifdef GPIO_WB_BYTES1
     if ( wb_sel_i [0] == 1'b1 )
     if ( wb_sel_i [0] == 1'b1 )
       rgpio_oe [gw-1:0] <= #1 ~wb_dat_i [gw-1:0] ;
       rgpio_oe [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
`endif
`endif
   end
   end
 
 
`else
`else
assign rgpio_oe = `GPIO_DEF_RPGIO_OE;   // RGPIO_OE = 0x0
assign rgpio_oe = `GPIO_DEF_RGPIO_OE;   // RGPIO_OE = 0x0
`endif
`endif
 
 
//
//
// Write to RGPIO_INTE
// Write to RGPIO_INTE
//
//
Line 510... Line 529...
`endif
`endif
   end
   end
 
 
 
 
`else
`else
assign rgpio_inte = `GPIO_DEF_RPGIO_INTE;       // RGPIO_INTE = 0x0
assign rgpio_inte = `GPIO_DEF_RGPIO_INTE;       // RGPIO_INTE = 0x0
`endif
`endif
 
 
//
//
// Write to RGPIO_PTRIG
// Write to RGPIO_PTRIG
//
//
Line 557... Line 576...
       rgpio_ptrig [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
       rgpio_ptrig [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
`endif
`endif
   end
   end
 
 
`else
`else
assign rgpio_ptrig = `GPIO_DEF_RPGIO_PTRIG;     // RGPIO_PTRIG = 0x0
assign rgpio_ptrig = `GPIO_DEF_RGPIO_PTRIG;     // RGPIO_PTRIG = 0x0
`endif
`endif
 
 
//
//
// Write to RGPIO_AUX
// Write to RGPIO_AUX
//
//
Line 604... Line 623...
       rgpio_aux [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
       rgpio_aux [gw-1:0] <= #1 wb_dat_i [gw-1:0] ;
`endif
`endif
   end
   end
 
 
`else
`else
assign rgpio_aux = `GPIO_DEF_RPGIO_AUX; // RGPIO_AUX = 0x0
assign rgpio_aux = `GPIO_DEF_RGPIO_AUX; // RGPIO_AUX = 0x0
`endif
`endif
 
 
 
 
//
//
// Write to RGPIO_ECLK
// Write to RGPIO_ECLK
Line 653... Line 672...
`endif
`endif
   end
   end
 
 
 
 
`else
`else
assign rgpio_eclk = `GPIO_DEF_RPGIO_ECLK;       // RGPIO_ECLK = 0x0
assign rgpio_eclk = `GPIO_DEF_RGPIO_ECLK;       // RGPIO_ECLK = 0x0
`endif
`endif
 
 
 
 
 
 
//
//
Line 703... Line 722...
`endif
`endif
   end
   end
 
 
 
 
`else
`else
assign rgpio_nec = `GPIO_DEF_RPGIO_NEC; // RGPIO_NEC = 0x0
assign rgpio_nec = `GPIO_DEF_RGPIO_NEC; // RGPIO_NEC = 0x0
`endif
`endif
 
 
 
 
//
//
// Latch into RGPIO_IN
// Latch into RGPIO_IN
Line 1419... Line 1438...
//
//
always @(wb_adr_i or rgpio_in or rgpio_out or rgpio_oe or rgpio_inte or
always @(wb_adr_i or rgpio_in or rgpio_out or rgpio_oe or rgpio_inte or
                rgpio_ptrig or rgpio_aux or rgpio_ctrl or rgpio_ints or rgpio_eclk or rgpio_nec)
                rgpio_ptrig or rgpio_aux or rgpio_ctrl or rgpio_ints or rgpio_eclk or rgpio_nec)
        case (wb_adr_i[`GPIO_OFS_BITS]) // synopsys full_case parallel_case
        case (wb_adr_i[`GPIO_OFS_BITS]) // synopsys full_case parallel_case
`ifdef GPIO_READREGS
`ifdef GPIO_READREGS
 
  `ifdef GPIO_RGPIO_OUT
                `GPIO_RGPIO_OUT: begin
                `GPIO_RGPIO_OUT: begin
                        wb_dat[dw-1:0] = rgpio_out;
                        wb_dat[dw-1:0] = rgpio_out;
                end
                end
 
  `endif
 
  `ifdef GPIO_RGPIO_OE
                `GPIO_RGPIO_OE: begin
                `GPIO_RGPIO_OE: begin
                        wb_dat[dw-1:0] = ~rgpio_oe;
                        wb_dat[dw-1:0] = rgpio_oe;
                end
                end
 
  `endif
 
  `ifdef GPIO_RGPIO_INTE
                `GPIO_RGPIO_INTE: begin
                `GPIO_RGPIO_INTE: begin
                        wb_dat[dw-1:0] = rgpio_inte;
                        wb_dat[dw-1:0] = rgpio_inte;
                end
                end
 
  `endif
 
  `ifdef GPIO_RGPIO_PTRIG
                `GPIO_RGPIO_PTRIG: begin
                `GPIO_RGPIO_PTRIG: begin
                        wb_dat[dw-1:0] = rgpio_ptrig;
                        wb_dat[dw-1:0] = rgpio_ptrig;
                end
                end
 
  `endif
 
  `ifdef GPIO_RGPIO_NEC
                `GPIO_RGPIO_NEC: begin
                `GPIO_RGPIO_NEC: begin
                        wb_dat[dw-1:0] = rgpio_nec;
                        wb_dat[dw-1:0] = rgpio_nec;
                end
                end
 
  `endif
 
  `ifdef GPIO_RGPIO_ECLK
                `GPIO_RGPIO_ECLK: begin
                `GPIO_RGPIO_ECLK: begin
                        wb_dat[dw-1:0] = rgpio_eclk;
                        wb_dat[dw-1:0] = rgpio_eclk;
                end
                end
 
  `endif
 
  `ifdef GPIO_RGPIO_AUX
                `GPIO_RGPIO_AUX: begin
                `GPIO_RGPIO_AUX: begin
                        wb_dat[dw-1:0] = rgpio_aux;
                        wb_dat[dw-1:0] = rgpio_aux;
                end
                end
 
  `endif
 
  `ifdef GPIO_RGPIO_CTRL
                `GPIO_RGPIO_CTRL: begin
                `GPIO_RGPIO_CTRL: begin
                        wb_dat[1:0] = rgpio_ctrl;
                        wb_dat[1:0] = rgpio_ctrl;
                        wb_dat[dw-1:2] = {dw-2{1'b0}};
                        wb_dat[dw-1:2] = {dw-2{1'b0}};
                end
                end
`endif
`endif
 
`endif
 
  `ifdef GPIO_RGPIO_INTS
                `GPIO_RGPIO_INTS: begin
                `GPIO_RGPIO_INTS: begin
                        wb_dat[dw-1:0] = rgpio_ints;
                        wb_dat[dw-1:0] = rgpio_ints;
                end
                end
 
  `endif
                default: begin
                default: begin
                        wb_dat[dw-1:0] = rgpio_in;
                        wb_dat[dw-1:0] = rgpio_in;
                end
                end
        endcase
        endcase
 
 
Line 1502... Line 1539...
`endif
`endif
 
 
//
//
// Output enables are RGPIO_OE bits
// Output enables are RGPIO_OE bits
//
//
assign ext_padoen_o = rgpio_oe;
assign ext_padoe_o = rgpio_oe;
 
 
//
//
// Generate GPIO outputs
// Generate GPIO outputs
//
//
assign out_pad = rgpio_out & ~rgpio_aux | aux_i & rgpio_aux;
assign out_pad = rgpio_out & ~rgpio_aux | aux_i & rgpio_aux;
Line 1531... Line 1568...
// is cleared and WISHBONE transfers complete with errors
// is cleared and WISHBONE transfers complete with errors
//
//
assign wb_inta_o = 1'b0;
assign wb_inta_o = 1'b0;
assign wb_ack_o = 1'b0;
assign wb_ack_o = 1'b0;
assign wb_err_o = wb_cyc_i & wb_stb_i;
assign wb_err_o = wb_cyc_i & wb_stb_i;
assign ext_padoen_o = {gw{1'b1}};
assign ext_padoe_o = {gw{1'b1}};
assign ext_pad_o = {gw{1'b0}};
assign ext_pad_o = {gw{1'b0}};
 
 
//
//
// Read GPIO registers
// Read GPIO registers
//
//

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.