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/] [mblite_soc.sv] - Rev 7

Compare with Previous | Blame | View Log

//////////////////////////////////////////////////////////////////////////////////
// Company:         
// Engineer:        IK
// 
// Create Date:     11:35:01 03/21/2013 
// Design Name:     
// Module Name:     mblite_soc
// Project Name:    
// Target Devices:  
// Tool versions:   
// Description:     
//                  
//                  SoC mem-map:
//                      pu-internal: below 64KB 
//                      pu-external: above 64KB 
//                  
//                  pu-external details:
//                      0x010000 - PIO / 4KB
//                      0x010FFF
//                      
//                      0x011000 - UART / 4KB
//                      0x011FFF
//                      
//                  
// Revision: 
// Revision 0.01 - File Created, 
//
//////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps

module mblite_soc
(
    // SYS_CON
    input   i_clk_50, // 50MHz 
    input   i_arst,
    // UART     [async]
    input           i_uart_rxd,
    output          o_uart_txd,
    // GPIO     [async]
    input   [ 7:0]  iv_gpio,    // BUTTON
    output  [ 7:0]  ov_gpio     // LED
);
//////////////////////////////////////////////////////////////////////////////////
// qnty of wbs
localparam  lp_NWBS =   2;

//////////////////////////////////////////////////////////////////////////////////
    // SYS_CON
    wire    s_sys_rst;
    // U_MBLITE.WBM
    wire    [31:0]  sv_wbm_adr_o;
    wire    [31:0]  sv_wbm_dat_o;
    wire            s_wbm_we_o;
    wire            s_wbm_stb_o;
    wire    [ 3:0]  sv_wbm_sel_o;
    wire            s_wbm_cyc_o;
    wire    [ 3:0]  s_mwb_sel_o;
    
    wire    [31:0]  sv_wbm_dat_i;
    wire            s_wbm_ack_i;
    // WB-Slaves
    wire    [16:0]          sv_wbs_iadr[lp_NWBS];
    wire    [31:0]          sv_wbs_idat[lp_NWBS];
    wire    [lp_NWBS-1:0]   sv_wbs_iwe;
    wire    [lp_NWBS-1:0]   sv_wbs_istb;
    wire    [ 3:0]          sv_wbs_isel[lp_NWBS];
    wire    [lp_NWBS-1:0]   sv_wbs_icyc;
    wire    [31:0]          sv_wbs_odat[lp_NWBS];
    wire    [lp_NWBS-1:0]   sv_wbs_oack;
    // WB-Cross
    wire    [lp_NWBS-1:0]   sv_wbc_cs;
    
//////////////////////////////////////////////////////////////////////////////////
//
// RST_SYNC
//
rst_sync    U_SRST
(
// SYS_CON
.i_clk      (i_clk_50),
// iRST
.i_arst     (i_arst),
// oRST
.o_srst     (s_sys_rst)
);
//////////////////////////////////////////////////////////////////////////////////
//
// WBS[0]: PIO
//
wb_pio_top  #(8) // p_DW
            U_PIO
(
// SYS_CON
.i_clk      (i_clk_50),
.i_srst     (s_sys_rst),
// PIO
.iv_pio     (iv_gpio),
.ov_pio     (ov_gpio),
// WBS
.iv_wbs_adr (sv_wbs_iadr[0][3:0]), // byte-addr
.iv_wbs_dat (sv_wbs_idat[0]),
.i_wbs_we   (sv_wbs_iwe[0]),
.i_wbs_stb  (sv_wbs_istb[0]),
.iv_wbs_sel (sv_wbs_isel[0]),
.i_wbs_cyc  (sv_wbs_icyc[0]),
.ov_wbs_dat (sv_wbs_odat[0]),
.o_wbs_ack  (sv_wbs_oack[0])
);
//////////////////////////////////////////////////////////////////////////////////
//
// WBS[1]: UART
//
wb_uart_top #(64, 50_000_000, 115_200) // p_FDEPTH, p_FREQ, p_BAUD
            U_UART
(
// SYS_CON
.i_clk      (i_clk_50),
.i_srst     (s_sys_rst),
// WBS      [i_clk]
.iv_wbs_adr (sv_wbs_iadr[1][3:0]), // byte-addr
.iv_wbs_dat (sv_wbs_idat[1]),
.i_wbs_we   (sv_wbs_iwe[1]),
.i_wbs_stb  (sv_wbs_istb[1]),
.i_wbs_cyc  (sv_wbs_icyc[1]),
.iv_wbs_sel (sv_wbs_isel[1]),
.ov_wbs_dat (sv_wbs_odat[1]),
.o_wbs_ack  (sv_wbs_oack[1]),
// UART     [async]
.i_uart_rxd (i_uart_rxd),
.o_uart_txd (o_uart_txd)
);
//////////////////////////////////////////////////////////////////////////////////
//
// WBM: MB-Lite unit
//  => pu + imem + dmem
//
mblite_unit U_MBLITE
(
// SYS_CON
.sys_clk_i  (i_clk_50),
.sys_rst_i  (s_sys_rst),
// IRQ
.sys_int_i  (1'b0),         // interrupt input
// WB-master inputs from the wb-slaves
.wbm_dat_i  (sv_wbm_dat_i), // databus input
.wbm_ack_i  (s_wbm_ack_i),  // buscycle acknowledge input
// WB-master outputs to the wb-slaves
.wbm_adr_o  (sv_wbm_adr_o), // address bits
.wbm_dat_o  (sv_wbm_dat_o), // databus output
.wbm_we_o   (s_wbm_we_o),   // write enable output
.wbm_stb_o  (s_wbm_stb_o),  // strobe signals
.wbm_sel_o  (sv_wbm_sel_o), // select output array
.wbm_cyc_o  (s_wbm_cyc_o)   // valid BUS cycle output
);
//////////////////////////////////////////////////////////////////////////////////
//
// WB-Cross
//  simple: {1 WB-Master} + {N WB-Slave}
//
assign sv_wbc_cs[0] = sv_wbm_adr_o[16:12] == 5'h10; // 0x010000
assign sv_wbc_cs[1] = sv_wbm_adr_o[16:12] == 5'h11; // 0x011000

assign  sv_wbs_iwe[0]   =   s_wbm_we_o;
assign  sv_wbs_iadr[0]  =   sv_wbm_adr_o;
assign  sv_wbs_idat[0]  =   sv_wbm_dat_o;
assign  sv_wbs_istb[0]  =   s_wbm_stb_o;
assign  sv_wbs_isel[0]  =   sv_wbm_sel_o;
assign  sv_wbs_icyc[0]  =   s_wbm_cyc_o & sv_wbc_cs[0];

assign  sv_wbs_iwe[1]   =   s_wbm_we_o;
assign  sv_wbs_iadr[1]  =   sv_wbm_adr_o;
assign  sv_wbs_idat[1]  =   sv_wbm_dat_o;
assign  sv_wbs_istb[1]  =   s_wbm_stb_o;
assign  sv_wbs_isel[1]  =   sv_wbm_sel_o;
assign  sv_wbs_icyc[1]  =   s_wbm_cyc_o & sv_wbc_cs[1];


assign  sv_wbm_dat_i    =   (sv_wbc_cs[0])? sv_wbs_odat[0] : 
                                            sv_wbs_odat[1] ; 
assign  s_wbm_ack_i     =   (sv_wbc_cs[0])? sv_wbs_oack[0] : 
                                            sv_wbs_oack[1] ;
//////////////////////////////////////////////////////////////////////////////////
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.