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

Subversion Repositories oms8051mini

[/] [oms8051mini/] [trunk/] [rtl/] [core/] [digital_core.v] - Diff between revs 25 and 27

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

Rev 25 Rev 27
Line 27... Line 27...
//          1. Bus interface is changed from 32 bit to 8 bit
//          1. Bus interface is changed from 32 bit to 8 bit
//     v0.3 - Dinesh A, 21 Dec 2016
//     v0.3 - Dinesh A, 21 Dec 2016
//          1. Uart Message Handler is integrated 
//          1. Uart Message Handler is integrated 
//          2. Message handler is connected as Register Master to 
//          2. Message handler is connected as Register Master to 
//             Inter-connect
//             Inter-connect
 
//     v0.4 - Dinesh A, 6th Jan 2017
 
//          1. I2C Master Core is integrated
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////                                                              ////
////                                                              ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
////                                                              ////
////                                                              ////
//// This source file may be used and distributed without         ////
//// This source file may be used and distributed without         ////
Line 57... Line 59...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
 
 
`include "top_defines.v"
`include "top_defines.v"
module digital_core  (
module digital_core  (
 
 
             reset_n                ,
             aresetn                ,
             scan_mode              ,
             scan_mode              ,
             scan_enable             ,
             scan_enable             ,
             fastsim_mode           ,
             fastsim_mode           ,
             mastermode             ,
             mastermode             ,
             xtal_clk               ,
             xtal_clk               ,
Line 90... Line 92...
             uart1_rxd              ,
             uart1_rxd              ,
 
 
             spi_sck                ,
             spi_sck                ,
             spi_so                 ,
             spi_so                 ,
             spi_si                 ,
             spi_si                 ,
             spi_cs_n
             spi_cs_n               ,
 
 
 
 
 
 
 
        // i2cm clock line
 
             i2cm_scl_i             ,
 
             i2cm_scl_o             ,
 
             i2cm_scl_oen           ,
 
 
 
        // i2cm data line
 
             i2cm_sda_i             ,
 
             i2cm_sda_o             ,
 
             i2cm_sda_oen
 
 
 
 
        );
        );
 
 
 
 
//----------------------------------------
//----------------------------------------
// Global Clock Defination
// Global Clock Defination
//----------------------------------------
//----------------------------------------
input            reset_n               ; // Active Low Reset           
input            aresetn               ; // Async Active Low Reset           
input            scan_mode             ; // scan mode
input            scan_mode             ; // scan mode
input            scan_enable           ; // scan enable
input            scan_enable           ; // scan enable
input            fastsim_mode          ; // Fast Sim Mode
input            fastsim_mode          ; // Fast Sim Mode
input            mastermode            ; // 1 : Risc master mode
input            mastermode            ; // 1 : Risc master mode
input            ea_in                  ; // input for external access (ea signal)
input            ea_in                  ; // input for external access (ea signal)
Line 148... Line 157...
output           spi_sck                ; // clock
output           spi_sck                ; // clock
output           spi_so                 ; // data out
output           spi_so                 ; // data out
input            spi_si                 ; // data in
input            spi_si                 ; // data in
output  [3:0]    spi_cs_n               ; // chip select
output  [3:0]    spi_cs_n               ; // chip select
 
 
 
//----------------------------------------
 
// i2cm clock line
 
//----------------------------------------
 
input            i2cm_scl_i             ;
 
output           i2cm_scl_o             ;
 
output           i2cm_scl_oen           ;
 
 
 
//----------------------------------------
 
// i2cm data line
 
//----------------------------------------
 
input            i2cm_sda_i             ;
 
output           i2cm_sda_o             ;
 
output           i2cm_sda_oen           ;
 
 
//----------------------------------------
//----------------------------------------
// 8051 core RAM related signals
// 8051 core RAM related signals
//---------------------------------------
//---------------------------------------
wire [15:0]      wb_xram_adr            ; // data-ram address
wire [15:0]      wb_xram_adr            ; // data-ram address
Line 162... Line 184...
wire [7:0]       wb_xram_wdata          ; // ram data input
wire [7:0]       wb_xram_wdata          ; // ram data input
 
 
wire             wb_xram_stb            ; // data-ram strobe
wire             wb_xram_stb            ; // data-ram strobe
wire             wb_xram_cyc            ; // data-ram cycle
wire             wb_xram_cyc            ; // data-ram cycle
 
 
 
//----------------------------------------
 
// i2CM Wishbone I/F
 
//---------------------------------------
 
wire [15:0]      wb_i2cm_addr           ; // data-ram address
 
wire             wb_i2cm_ack            ; // data-ram acknowlage
 
wire             wb_i2cm_err            ; // data-ram error
 
wire             wb_i2cm_we             ; // data-ram error
 
wire [7:0]       wb_i2cm_rdata          ; // ram data input
 
wire [7:0]       wb_i2cm_wdata          ; // ram data input
 
 
 
wire             wb_i2cm_stb            ; // data-ram strobe
 
wire             wb_i2cm_cyc            ; // data-ram cycle
 
 
//----------------------------------------
//----------------------------------------
// Message Controller Reg Master
// Message Controller Reg Master
//---------------------------------------
//---------------------------------------
wire             mh_reg_cs              ;
wire             mh_reg_cs              ;
Line 221... Line 255...
 
 
//-------------------------------------------
//-------------------------------------------
// clock-gen  instantiation
// clock-gen  instantiation
//-------------------------------------------
//-------------------------------------------
clkgen u_clkgen (
clkgen u_clkgen (
               . reset_n                (reset_n               ),
               . aresetn                (aresetn               ),
               . fastsim_mode           (fastsim_mode          ),
               . fastsim_mode           (fastsim_mode          ),
               . mastermode             (mastermode            ),
               . mastermode             (mastermode            ),
               . xtal_clk               (xtal_clk              ),
               . xtal_clk               (xtal_clk              ),
               . clkout                 (clkout                ),
               . clkout                 (clkout                ),
               . gen_resetn             (gen_resetn            ),
               . gen_resetn             (gen_resetn            ),
Line 236... Line 270...
              );
              );
 
 
/************* Message Handler **********/
/************* Message Handler **********/
 
 
msg_handler_top u_msg_hand_top (
msg_handler_top u_msg_hand_top (
              . line_reset_n            (reset_n               ),
              . line_reset_n            (aresetn               ),
              . line_clk                (app_clk               ),
              . line_clk                (app_clk               ),
 
 
      // Towards Register Interface
      // Towards Register Interface
              . reg_addr                (mh_reg_addr           ),
              . reg_addr                (mh_reg_addr           ),
              . reg_wr                  (mh_reg_wr             ),
              . reg_wr                  (mh_reg_wr             ),
Line 272... Line 306...
//------------------------------
//------------------------------
// 8051 Data Memory Map
// 8051 Data Memory Map
// 0x0000 to 0x7FFFF  - Data Memory
// 0x0000 to 0x7FFFF  - Data Memory
// 0x8000 to 0x8FFF   - SPI 
// 0x8000 to 0x8FFF   - SPI 
// 0x9000 to 0x9FFF   - UART
// 0x9000 to 0x9FFF   - UART
 
// 0xA000 to 0xAFFF   - I2CM
//--------------------------------------------------------------
//--------------------------------------------------------------
// Target ID Mapping
// Target ID Mapping
 
// 4'b0011 -- I2CM
// 4'b0010 -- UART
// 4'b0010 -- UART
// 4'b0001 -- SPI core
// 4'b0001 -- SPI core
// 4'b0000 -- External RAM
// 4'b0000 -- External RAM
//--------------------------------------------------------------
//--------------------------------------------------------------
// 
// 
wire [3:0] wbd_tar_id     = (wbd_risc_adr[15]    == 1'b0 ) ? 4'b0000 :
wire [3:0] wbd_tar_id     = (wbd_risc_adr[15]    == 1'b0 ) ? 4'b0000 :
                            (wbd_risc_adr[15:12] == 4'b1000 ) ? 4'b0001 :
                            (wbd_risc_adr[15:12] == 4'b1000 ) ? 4'b0001 :
                            (wbd_risc_adr[15:12] == 4'b1001 ) ? 4'b0010 : 4'b0000;
                            (wbd_risc_adr[15:12] == 4'b1001 ) ? 4'b0010 :
 
                            (wbd_risc_adr[15:12] == 4'b1010 ) ? 4'b0011 : 4'b0000;
 
 
wire [3:0] mh_tar_id     = (mh_reg_addr[15]    == 1'b0 ) ? 4'b0000 :
wire [3:0] mh_tar_id     = (mh_reg_addr[15]    == 1'b0 ) ? 4'b0000 :
                           (mh_reg_addr[15:12] == 4'b1000 ) ? 4'b0001 :
                           (mh_reg_addr[15:12] == 4'b1000 ) ? 4'b0001 :
                           (mh_reg_addr[15:12] == 4'b1001 ) ? 4'b0010 : 4'b0000;
                           (mh_reg_addr[15:12] == 4'b1001 ) ? 4'b0010 :
 
                           (mh_reg_addr[15:12] == 4'b1010 ) ? 4'b0011 : 4'b0000;
 
 
wb_crossbar #(.WB_MASTER(3),
wb_crossbar #(.WB_MASTER(3),
              .WB_SLAVE(3),
              .WB_SLAVE(4),
              .D_WD(8),
              .D_WD(8),
              .BE_WD(1),
              .BE_WD(1),
              .ADR_WD(15),
              .ADR_WD(15),
              .TAR_WD(4))
              .TAR_WD(4))
              u_wb_crossbar (
              u_wb_crossbar (
Line 339... Line 377...
 
 
              .wbd_err_master           (),
              .wbd_err_master           (),
              .wbd_rty_master           (),
              .wbd_rty_master           (),
 
 
    // Slave Interface Signal
    // Slave Interface Signal
              .wbd_din_slave            ({reg_uart_wdata,
              .wbd_din_slave            ({wb_i2cm_wdata,
 
                                          reg_uart_wdata,
                                          reg_spi_wdata,
                                          reg_spi_wdata,
                                          wb_xram_wdata
                                          wb_xram_wdata
                                          }),
                                          }),
 
 
              .wbd_dout_slave           ({reg_uart_rdata,
              .wbd_dout_slave           ({wb_i2cm_rdata,
 
                                          reg_uart_rdata,
                                          reg_spi_rdata,
                                          reg_spi_rdata,
                                          wb_xram_rdata
                                          wb_xram_rdata
                                         }),
                                         }),
 
 
              .wbd_adr_slave            ({reg_uart_addr[14:0],
              .wbd_adr_slave            ({wb_i2cm_addr[14:0],
 
                                          reg_uart_addr[14:0],
                                          reg_spi_addr[14:0],
                                          reg_spi_addr[14:0],
                                          wb_xram_adr[14:0]}
                                          wb_xram_adr[14:0]
 
                                          }
                                        ),
                                        ),
 
 
              .wbd_be_slave             (),
              .wbd_be_slave             (),
 
 
              .wbd_we_slave             ({reg_uart_wr,
              .wbd_we_slave             ({wb_i2cm_we,
 
                                          reg_uart_wr,
                                          reg_spi_wr,
                                          reg_spi_wr,
                                          wb_xram_wr
                                          wb_xram_wr
                                          }),
                                          }),
 
 
              .wbd_ack_slave            ({reg_uart_ack,
              .wbd_ack_slave            ({wb_i2cm_ack,
 
                                          reg_uart_ack,
                                          reg_spi_ack,
                                          reg_spi_ack,
                                          wb_xram_ack
                                          wb_xram_ack
                                         }),
                                         }),
              .wbd_stb_slave            ({reg_uart_cs,
              .wbd_stb_slave            ({wb_i2cm_stb,
 
                                          reg_uart_cs,
                                          reg_spi_cs,
                                          reg_spi_cs,
                                          wb_xram_stb
                                          wb_xram_stb
 
 
                                         }),
                                         }),
 
 
              .wbd_cyc_slave            (),
              .wbd_cyc_slave            ({wb_i2cm_cyc,
 
                                          wb_uart_cyc,
 
                                          wb_spi_cyc,
 
                                          wb_xram_cyc
 
                                          }),
              .wbd_err_slave            (),
              .wbd_err_slave            (),
              .wbd_rty_slave            ()
              .wbd_rty_slave            ()
         );
         );
 
 
 
 
Line 437... Line 487...
          . si                          (spi_si                ),
          . si                          (spi_si                ),
          . cs_n                        (spi_cs_n              )
          . cs_n                        (spi_cs_n              )
 
 
           );
           );
 
 
 
/******************************************************
 
*   I2C Master Core
 
*   ***************************************************/
 
i2cm_top  i_i2cm (
 
        // wishbone signals
 
                .wb_clk_i                (app_clk              ),
 
                .sresetn                 (gen_resetn           ),
 
                .aresetn                 (aresetn              ),
 
                .wb_adr_i                (wb_i2cm_addr[2:0]    ),
 
                .wb_dat_i                (wb_i2cm_wdata        ),
 
                .wb_dat_o                (wb_i2cm_rdata        ),
 
                .wb_we_i                 (wb_i2cm_we           ),
 
                .wb_stb_i                (wb_i2cm_stb          ),
 
                .wb_cyc_i                (wb_i2cm_cyc          ),
 
                .wb_ack_o                (wb_i2cm_ack          ),
 
                .wb_inta_o               (i2cm_inta            ),
 
 
 
        // I2C signals
 
        // i2c clock line
 
                .scl_pad_i              (i2cm_scl_i            ),
 
                .scl_pad_o              (i2cm_scl_o            ),
 
                .scl_padoen_o           (i2cm_scl_oen          ),
 
 
 
        // i2c data line
 
                .sda_pad_i              (i2cm_sda_i            ),
 
                .sda_pad_o              (i2cm_sda_o            ),
 
                .sda_padoen_o           (i2cm_sda_oen          )
 
 
 
         );
 
 
 
 
 
 
 
/******************************************************
 
*   8051 Core
 
*******************************************************/
 
 
oc8051_top u_8051_core (
oc8051_top u_8051_core (
          . resetn                      (risc_resetn           ),
          . resetn                      (risc_resetn           ),
          . wb_clk_i                    (app_clk               ),
          . wb_clk_i                    (app_clk               ),
 
 
Line 515... Line 599...
//
//
// external data ram
// external data ram
//
//
oc8051_xram oc8051_xram1 (
oc8051_xram oc8051_xram1 (
          .clk               (app_clk       ),
          .clk               (app_clk       ),
          .rst               (!reset_n      ),
          .rst               (!aresetn      ),
          .wr                (wb_xram_wr    ),
          .wr                (wb_xram_wr    ),
          .addr              (wb_xram_adr   ),
          .addr              (wb_xram_adr   ),
          .data_in           (wb_xram_wdata ),
          .data_in           (wb_xram_wdata ),
          .data_out          (wb_xram_rdata ),
          .data_out          (wb_xram_rdata ),
          .ack               (wb_xram_ack   ),
          .ack               (wb_xram_ack   ),

powered by: WebSVN 2.1.0

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