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

Subversion Repositories gpio

[/] [gpio/] [tags/] [rel_4/] [rtl/] [verilog/] [gpio_top.v] - Diff between revs 20 and 21

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

Rev 20 Rev 21
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

powered by: WebSVN 2.1.0

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