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

Subversion Repositories xgate

[/] [xgate/] [trunk/] [rtl/] [verilog/] [xgate_top.v] - Diff between revs 63 and 67

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

Rev 63 Rev 67
Line 39... Line 39...
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
 
 
module xgate_top #(parameter ARST_LVL = 1'b0,      // asynchronous reset level
module xgate_top #(parameter ARST_LVL = 1'b0,      // asynchronous reset level
                   parameter SINGLE_CYCLE = 1'b0,  // 
                   parameter SINGLE_CYCLE = 1'b0,  // 
                   parameter MAX_CHANNEL = 127,    // Max XGATE Interrupt Channel Number
                   parameter MAX_CHANNEL = 127,    // Max XGATE Interrupt Channel Number
                   parameter DWIDTH = 16)          // Data bus width
                   parameter WB_RD_DEFAULT = 0)    // WISHBONE Read Bus default state
  (
  (
  // Wishbone Slave Signals
  // Wishbone Slave Signals
  output    [DWIDTH-1:0] wbs_dat_o,     // databus output
  output    [DWIDTH-1:0] wbs_dat_o,     // databus output
  output                 wbs_ack_o,     // bus cycle acknowledge output
  output                 wbs_ack_o,     // bus cycle acknowledge output
  output                 wbs_err_o,     // bus error, lost module select durning wait state
  output                 wbs_err_o,     // bus error, lost module select durning wait state
  input                  wbs_clk_i,     // master clock input
  input                  wbs_clk_i,     // master clock input
  input                  wbs_rst_i,     // synchronous active high reset
  input                  wbs_rst_i,     // synchronous active high reset
  input                  arst_i,        // asynchronous reset
  input                  arst_i,        // asynchronous reset
  input            [5:1] wbs_adr_i,     // lower address bits
  input            [6:1] wbs_adr_i,     // lower address bits
  input     [DWIDTH-1:0] wbs_dat_i,     // databus input
  input     [DWIDTH-1:0] wbs_dat_i,     // databus input
  input                  wbs_we_i,      // write enable input
  input                  wbs_we_i,      // write enable input
  input                  wbs_stb_i,     // stobe/core select signal
  input                  wbs_stb_i,     // stobe/core select signal
  input                  wbs_cyc_i,     // valid bus cycle input
  input                  wbs_cyc_i,     // valid bus cycle input
  input            [1:0] wbs_sel_i,     // Select byte in word bus transaction
  input            [1:0] wbs_sel_i,     // Select byte in word bus transaction
Line 66... Line 66...
  input     [DWIDTH-1:0] wbm_dat_i,     // databus input
  input     [DWIDTH-1:0] wbm_dat_i,     // databus input
  input                  wbm_ack_i,     // bus cycle acknowledge input
  input                  wbm_ack_i,     // bus cycle acknowledge input
  // XGATE IO Signals
  // XGATE IO Signals
  output          [ 7:0] xgswt,         // XGATE Software Trigger Register
  output          [ 7:0] xgswt,         // XGATE Software Trigger Register
  output                 xg_sw_irq,        // Xgate Software interrupt
  output                 xg_sw_irq,        // Xgate Software interrupt
  output [MAX_CHANNEL:0] xgif,             // XGATE Interrupt Flag
  output [MAX_CHANNEL:0] xgif,             // XGATE Interrupt Flag to Host
  input  [MAX_CHANNEL:0] chan_req_i,       // XGATE Interrupt request
  input  [MAX_CHANNEL:0] chan_req_i,       // XGATE Interrupt request
  input                  risc_clk,         // Clock for RISC core
  input                  risc_clk,         // Clock for RISC core
  input                  debug_mode_i,     // Force RISC core into debug mode
  input                  debug_mode_i,     // Force RISC core into debug mode
  input                  secure_mode_i,    // Limit host asscess to Xgate RISC registers
  input                  secure_mode_i,    // Limit host asscess to Xgate RISC registers
  input                  scantestmode      // Chip in in scan test mode
  input                  scantestmode      // Chip in in scan test mode
  );
  );
 
 
 
  parameter DWIDTH = 16;     // Data bus width
 
 
  wire        zero_flag;
  wire        zero_flag;
  wire        negative_flag;
  wire        negative_flag;
  wire        carry_flag;
  wire        carry_flag;
  wire        overflow_flag;
  wire        overflow_flag;
  wire [15:0] xgr1;          // XGATE Register #1
  wire [15:0] xgr1;          // XGATE Register #1
Line 97... Line 99...
  wire  [1:0] write_xgif_4;  // Write Strobe for Interrupt Flag Register 4
  wire  [1:0] write_xgif_4;  // Write Strobe for Interrupt Flag Register 4
  wire  [1:0] write_xgif_3;  // Write Strobe for Interrupt Flag Register 3
  wire  [1:0] write_xgif_3;  // Write Strobe for Interrupt Flag Register 3
  wire  [1:0] write_xgif_2;  // Write Strobe for Interrupt Flag Register 2
  wire  [1:0] write_xgif_2;  // Write Strobe for Interrupt Flag Register 2
  wire  [1:0] write_xgif_1;  // Write Strobe for Interrupt Flag Register 1
  wire  [1:0] write_xgif_1;  // Write Strobe for Interrupt Flag Register 1
  wire  [1:0] write_xgif_0;  // Write Strobe for Interrupt Flag Register 0
  wire  [1:0] write_xgif_0;  // Write Strobe for Interrupt Flag Register 0
 
  wire  [1:0] write_irw_en_7; // Write Strobe for Interrupt Bypass Control Register 7
 
  wire  [1:0] write_irw_en_6; // Write Strobe for Interrupt Bypass Control Register 6
 
  wire  [1:0] write_irw_en_5; // Write Strobe for Interrupt Bypass Control Register 5
 
  wire  [1:0] write_irw_en_4; // Write Strobe for Interrupt Bypass Control Register 4
 
  wire  [1:0] write_irw_en_3; // Write Strobe for Interrupt Bypass Control Register 3
 
  wire  [1:0] write_irw_en_2; // Write Strobe for Interrupt Bypass Control Register 2
 
  wire  [1:0] write_irw_en_1; // Write Strobe for Interrupt Bypass Control Register 1
 
  wire  [1:0] write_irw_en_0; // Write Strobe for Interrupt Bypass Control Register 0
  wire        write_xgswt;   // Write Strobe for XGSWT register
  wire        write_xgswt;   // Write Strobe for XGSWT register
  wire        write_xgsem;   // Write Strobe for XGSEM register
  wire        write_xgsem;   // Write Strobe for XGSEM register
  wire        write_xgccr;   // Write Strobe for XGATE Condition Code Register
  wire        write_xgccr;   // Write Strobe for XGATE Condition Code Register
  wire  [1:0] write_xgpc;    // Write Strobe for XGATE Program Counter
  wire  [1:0] write_xgpc;    // Write Strobe for XGATE Program Counter
  wire  [1:0] write_xgr7;    // Write Strobe for XGATE Data Register R7
  wire  [1:0] write_xgr7;    // Write Strobe for XGATE Data Register R7
Line 118... Line 128...
  wire        clear_xgif_3;    // Strobe for decode to clear interrupt flag bank 3
  wire        clear_xgif_3;    // Strobe for decode to clear interrupt flag bank 3
  wire        clear_xgif_2;    // Strobe for decode to clear interrupt flag bank 2
  wire        clear_xgif_2;    // Strobe for decode to clear interrupt flag bank 2
  wire        clear_xgif_1;    // Strobe for decode to clear interrupt flag bank 1
  wire        clear_xgif_1;    // Strobe for decode to clear interrupt flag bank 1
  wire        clear_xgif_0;    // Strobe for decode to clear interrupt flag bank 0
  wire        clear_xgif_0;    // Strobe for decode to clear interrupt flag bank 0
  wire [15:0] clear_xgif_data; // Data for decode to clear interrupt flag
  wire [15:0] clear_xgif_data; // Data for decode to clear interrupt flag
 
  wire [MAX_CHANNEL:0] chan_bypass; // XGATE Interrupt enable or bypass
 
 
  wire        xge;           // XGATE Module Enable
  wire        xge;           // XGATE Module Enable
  wire        xgfrz;         // Stop XGATE in Freeze Mode
  wire        xgfrz;         // Stop XGATE in Freeze Mode
  wire        xgdbg_set;     // Enter XGATE Debug Mode
  wire        xgdbg_set;     // Enter XGATE Debug Mode
  wire        xgdbg_clear;   // Leave XGATE Debug Mode
  wire        xgdbg_clear;   // Leave XGATE Debug Mode
Line 130... Line 141...
  wire        xgsweif_c;     // Clear XGATE Software Error Interrupt FLag
  wire        xgsweif_c;     // Clear XGATE Software Error Interrupt FLag
  wire        xgie;          // XGATE Interrupt Enable
  wire        xgie;          // XGATE Interrupt Enable
  wire [ 6:0] int_req;       // Encoded interrupt request
  wire [ 6:0] int_req;       // Encoded interrupt request
  wire [ 6:0] xgchid;        // Channel actively being processed
  wire [ 6:0] xgchid;        // Channel actively being processed
  wire [127:0] xgif_status;   // Status bits of interrupt output flags that have been set
  wire [127:0] xgif_status;   // Status bits of interrupt output flags that have been set
 
  wire [127:0] irq_bypass;   // IRQ status bits WISHBONE Read bus
 
 
  wire [15:1] xgvbr;         // XGATE vector Base Address Register
  wire [15:1] xgvbr;         // XGATE vector Base Address Register
  wire        brk_irq_ena;   // Enable BRK instruction to generate interrupt
  wire        brk_irq_ena;   // Enable BRK instruction to generate interrupt
 
 
  wire [15:0] xgate_address;   //
  wire [15:0] xgate_address;   //
  wire [15:0] write_mem_data;  //
  wire [15:0] write_mem_data;  //
Line 148... Line 161...
 
 
  wire [ 7:0] host_semap;       // Semaphore status for host
  wire [ 7:0] host_semap;       // Semaphore status for host
  wire        write_mem_strb_l; // Strobe for writing low data byte
  wire        write_mem_strb_l; // Strobe for writing low data byte
  wire        write_mem_strb_h; // Strobe for writing high data bye
  wire        write_mem_strb_h; // Strobe for writing high data bye
 
 
  assign xgif = xgif_status[MAX_CHANNEL:0];
 
  // ---------------------------------------------------------------------------
  // ---------------------------------------------------------------------------
  // Wishbone Slave Bus interface
  // Wishbone Slave Bus interface
  xgate_wbs_bus #(.ARST_LVL(ARST_LVL),
  xgate_wbs_bus #(.ARST_LVL(ARST_LVL),
                  .SINGLE_CYCLE(SINGLE_CYCLE))
                  .SINGLE_CYCLE(SINGLE_CYCLE),
 
                  .WB_RD_DEFAULT(WB_RD_DEFAULT))
    wishbone_s(
    wishbone_s(
    .wbs_dat_o( wbs_dat_o ),
    .wbs_dat_o( wbs_dat_o ),
    .wbs_ack_o( wbs_ack_o ),
    .wbs_ack_o( wbs_ack_o ),
    .wbs_err_o( wbs_err_o ),
    .wbs_err_o( wbs_err_o ),
    .wbs_clk_i( wbs_clk_i ),
    .wbs_clk_i( wbs_clk_i ),
Line 191... Line 204...
    .write_xgr5( write_xgr5 ),
    .write_xgr5( write_xgr5 ),
    .write_xgr4( write_xgr4 ),
    .write_xgr4( write_xgr4 ),
    .write_xgr3( write_xgr3 ),
    .write_xgr3( write_xgr3 ),
    .write_xgr2( write_xgr2 ),
    .write_xgr2( write_xgr2 ),
    .write_xgr1( write_xgr1 ),
    .write_xgr1( write_xgr1 ),
 
    .write_irw_en_7( write_irw_en_7 ),
 
    .write_irw_en_6( write_irw_en_6 ),
 
    .write_irw_en_5( write_irw_en_5 ),
 
    .write_irw_en_4( write_irw_en_4 ),
 
    .write_irw_en_3( write_irw_en_3 ),
 
    .write_irw_en_2( write_irw_en_2 ),
 
    .write_irw_en_1( write_irw_en_1 ),
 
    .write_irw_en_0( write_irw_en_0 ),
    // inputs    
    // inputs    
    .async_rst_b  ( async_rst_b ),
    .async_rst_b  ( async_rst_b ),
    .read_regs    (               // in  -- read register bits
    .read_risc_regs(               // in  -- read register bits
                   { xgr7,             // XGR7
                   { xgr7,             // XGR7
                     xgr6,             // XGR6
                     xgr6,             // XGR6
                     xgr5,             // XGR5
                     xgr5,             // XGR5
                     xgr4,             // XGR4
                     xgr4,             // XGR4
                     xgr3,             // XGR3
                     xgr3,             // XGR3
Line 221... Line 242...
                     16'b0,                // Reserved
                     16'b0,                // Reserved
                     16'b0,                // Reserved
                     16'b0,                // Reserved
                     {8'b0, 1'b0, xgchid}, // XGCHID
                     {8'b0, 1'b0, xgchid}, // XGCHID
                     {8'b0, xge, xgfrz, debug_active, 1'b0, xgfact, brk_irq_ena, xg_sw_irq, xgie}  // XGMCTL
                     {8'b0, xge, xgfrz, debug_active, 1'b0, xgfact, brk_irq_ena, xg_sw_irq, xgie}  // XGMCTL
                   }
                   }
                  )
                  ),
 
    .irq_bypass( irq_bypass )
 
 
  );
  );
 
 
  // ---------------------------------------------------------------------------
  // ---------------------------------------------------------------------------
  xgate_regs #(.ARST_LVL(ARST_LVL),
  xgate_regs #(.ARST_LVL(ARST_LVL),
               .MAX_CHANNEL(MAX_CHANNEL))
               .MAX_CHANNEL(MAX_CHANNEL))
Line 249... Line 272...
    .clear_xgif_3( clear_xgif_3 ),
    .clear_xgif_3( clear_xgif_3 ),
    .clear_xgif_2( clear_xgif_2 ),
    .clear_xgif_2( clear_xgif_2 ),
    .clear_xgif_1( clear_xgif_1 ),
    .clear_xgif_1( clear_xgif_1 ),
    .clear_xgif_0( clear_xgif_0 ),
    .clear_xgif_0( clear_xgif_0 ),
    .clear_xgif_data( clear_xgif_data ),
    .clear_xgif_data( clear_xgif_data ),
 
    .irq_bypass( irq_bypass ),
 
    .chan_bypass( chan_bypass ),
 
 
    // inputs
    // inputs
    .async_rst_b( async_rst_b ),
    .async_rst_b( async_rst_b ),
    .sync_reset( sync_reset ),
    .sync_reset( sync_reset ),
    .bus_clk( wbs_clk_i ),
    .bus_clk( wbs_clk_i ),
Line 265... Line 290...
    .write_xgif_4( write_xgif_4 ),
    .write_xgif_4( write_xgif_4 ),
    .write_xgif_3( write_xgif_3 ),
    .write_xgif_3( write_xgif_3 ),
    .write_xgif_2( write_xgif_2 ),
    .write_xgif_2( write_xgif_2 ),
    .write_xgif_1( write_xgif_1 ),
    .write_xgif_1( write_xgif_1 ),
    .write_xgif_0( write_xgif_0 ),
    .write_xgif_0( write_xgif_0 ),
 
    .write_irw_en_7( write_irw_en_7 ),
 
    .write_irw_en_6( write_irw_en_6 ),
 
    .write_irw_en_5( write_irw_en_5 ),
 
    .write_irw_en_4( write_irw_en_4 ),
 
    .write_irw_en_3( write_irw_en_3 ),
 
    .write_irw_en_2( write_irw_en_2 ),
 
    .write_irw_en_1( write_irw_en_1 ),
 
    .write_irw_en_0( write_irw_en_0 ),
    .write_xgswt( write_xgswt ),
    .write_xgswt( write_xgswt ),
    .debug_ack( debug_ack )
    .debug_ack( debug_ack )
  );
  );
 
 
  // ---------------------------------------------------------------------------
  // ---------------------------------------------------------------------------
Line 339... Line 372...
  );
  );
 
 
  xgate_irq_encode #(.MAX_CHANNEL(MAX_CHANNEL))
  xgate_irq_encode #(.MAX_CHANNEL(MAX_CHANNEL))
    irq_encode(
    irq_encode(
    // outputs
    // outputs
 
    .xgif( xgif ),
    .int_req( int_req ),
    .int_req( int_req ),
    // inputs
    // inputs
    .chan_req_i( chan_req_i )
    .chan_req_i( chan_req_i ),
 
    .chan_bypass( chan_bypass ),
 
    .xgif_status( xgif_status )
  );
  );
 
 
  // ---------------------------------------------------------------------------
  // ---------------------------------------------------------------------------
  // Wishbone Master Bus interface
  // Wishbone Master Bus interface
  xgate_wbm_bus #(.ARST_LVL(ARST_LVL))
  xgate_wbm_bus #(.ARST_LVL(ARST_LVL))

powered by: WebSVN 2.1.0

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