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_uart/] [hdl/] [wb_uart_slv.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_uart_slv
// Project Name:    
// Target Devices:  
// Tool versions:   
// Description:     
//                  
//                  
//                  
//                  
// Revision: 
// Revision 0.01 - File Created, 
//
//////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps

module wb_uart_slv
(
    // SYS_CON
    input   i_clk,
    input   i_srst,
    // 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,
    // out-ctrl
    output          o_ctrl_utx_start,
    output  [ 7:0]  o_ctrl_utx_data,
    output          o_ctrl_rfifo_rd,
    // in-sts
    input           i_sts_utx_busy,
    input           i_sts_rfifo_ef,
    input   [ 7:0]  iv_sts_rfifo_data
);
//////////////////////////////////////////////////////////////////////////////////
// mem-map:
localparam  lp_RXD_ADDR     =   0*4; // byte-addr
localparam  lp_TXD_ADDR     =   1*4;
localparam  lp_STS_ADDR     =   2*4;

//////////////////////////////////////////////////////////////////////////////////
    // csr
    logic   [31:0]  sv_reg_sts;
    // wb chip-select
    wire    s_wbs_ce;
    
//////////////////////////////////////////////////////////////////////////////////
    // chip-select flag
    assign  s_wbs_ce    =   i_wbs_stb & i_wbs_cyc;
    //
    // 
    assign  o_ctrl_utx_start    =   o_wbs_ack & (iv_wbs_adr == lp_TXD_ADDR);
    assign  o_ctrl_utx_data     =   iv_wbs_dat[7:0];
    assign  o_ctrl_rfifo_rd     =   o_wbs_ack & (iv_wbs_adr == lp_RXD_ADDR);
    
//////////////////////////////////////////////////////////////////////////////////
//
// WB-Slase
//
always @(posedge i_clk)
begin   :   WBS_LOGIC
    if (i_srst)
        begin   :   RST
            ov_wbs_dat <= 0;
            o_wbs_ack  <= 0;
        end
    else
        begin   :   WRK
            // wb-write
            
            // wb-read
            case(iv_wbs_adr)
                lp_RXD_ADDR     :   ov_wbs_dat <= iv_sts_rfifo_data;
                lp_STS_ADDR     :   ov_wbs_dat <= sv_reg_sts;
                default         :   ov_wbs_dat <= 0;
            endcase
            // wb-ask
            o_wbs_ack <=    (s_wbs_ce)? !o_wbs_ack :
                                        1'b0       ;
        end
end

always @(*)
begin   :   STATUS_LOGIC
    // status
    sv_reg_sts      <= 0;
    sv_reg_sts[0]   <= i_sts_utx_busy;
    sv_reg_sts[1]   <= i_sts_rfifo_ef;
    
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.