OpenCores
URL https://opencores.org/ocsvn/1g_ethernet_dpi/1g_ethernet_dpi/trunk

Subversion Repositories 1g_ethernet_dpi

[/] [1g_ethernet_dpi/] [tags/] [vmblite_base/] [hw/] [src/] [rtl/] [wb_pio/] [hdl/] [wb_pio_top.sv] - Rev 7

Compare with Previous | Blame | View Log

//////////////////////////////////////////////////////////////////////////////////
// Company:         
// Engineer:        IK
// 
// Create Date:     11:35:01 03/21/2013 
// Design Name:     
// Module Name:     wb_pio_top
// Project Name:    
// Target Devices:  
// Tool versions:   
// Description:     
//                  simple pio-in/out, with DW-read/write
//                  
//                  WBS mem-map:
//                      0:     [in]
//                      4:     [out]
//                  
//                  
// Revision: 
// Revision 0.01 - File Created, 
//
//////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps

module wb_pio_top #(parameter p_DW = 0)
(
    // SYS_CON
    input   i_clk,
    input   i_srst,
    // PIO
    input       [p_DW-1:0]  iv_pio,
    output  reg [p_DW-1:0]  ov_pio,
    // WBS
    input       [ 3:0]  iv_wbs_adr, // byte-addr
    input       [31:0]  iv_wbs_dat,
    input               i_wbs_we,
    input               i_wbs_stb,
    input       [ 3:0]  iv_wbs_sel, // NC, for now
    input               i_wbs_cyc,
    output  reg [31:0]  ov_wbs_dat,
    output  reg         o_wbs_ack
);
//////////////////////////////////////////////////////////////////////////////////
// mem-map def
localparam  lp_IN_ADDR  =   0*4; // byte-addr
localparam  lp_OUT_ADDR =   1*4; // ..

//////////////////////////////////////////////////////////////////////////////////
    // chip-select
    wire    s_wbs_ce;
    // ireg
    reg     [p_DW-1:0]  sv_pio_i;
    
//////////////////////////////////////////////////////////////////////////////////
    // chip-select flag
    assign  s_wbs_ce    =   i_wbs_stb & i_wbs_cyc;
    
//////////////////////////////////////////////////////////////////////////////////
//
// WB-Slase
//
always @(posedge i_clk)
begin   :   WBS_LOGIC
    if (i_srst)
        begin   :   RST
            ov_wbs_dat <= 0;
            o_wbs_ack  <= 0;
            
            ov_pio <= 0;
        end
    else
        begin   :   WRK
            // wb-write
            if (s_wbs_ce & i_wbs_we & (iv_wbs_adr == lp_OUT_ADDR))
                ov_pio <= iv_wbs_dat;
            // wb-read
            case(iv_wbs_adr)
                lp_IN_ADDR  :   ov_wbs_dat <= sv_pio_i;
                lp_OUT_ADDR :   ov_wbs_dat <= ov_pio;
                default     :   ov_wbs_dat <= 0;
            endcase
            // wb-ask
            o_wbs_ack <=    (s_wbs_ce)? !o_wbs_ack :
                                        1'b0       ;
        end
end
//////////////////////////////////////////////////////////////////////////////////
//
// In-REG
//
always @(posedge i_clk)
begin   :   IREG_LOGIC
    sv_pio_i <= iv_pio;
end
//////////////////////////////////////////////////////////////////////////////////
endmodule

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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