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

Subversion Repositories xgate

[/] [xgate/] [trunk/] [rtl/] [verilog/] [xgate_regs.v] - Diff between revs 53 and 67

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

Rev 53 Rev 67
Line 60... Line 60...
  output reg                  clear_xgif_1,    // Strobe for decode to clear interrupt flag bank 1
  output reg                  clear_xgif_1,    // Strobe for decode to clear interrupt flag bank 1
  output reg                  clear_xgif_0,    // Strobe for decode to clear interrupt flag bank 0
  output reg                  clear_xgif_0,    // Strobe for decode to clear interrupt flag bank 0
  output reg           [15:0] clear_xgif_data, // Data for decode to clear interrupt flag
  output reg           [15:0] clear_xgif_data, // Data for decode to clear interrupt flag
  output                      semaph_stat,     // Return Status of Semaphore bit
  output                      semaph_stat,     // Return Status of Semaphore bit
  output reg                  brk_irq_ena,     // Enable BRK instruction to generate interrupt
  output reg                  brk_irq_ena,     // Enable BRK instruction to generate interrupt
 
  output      [MAX_CHANNEL:0] chan_bypass,     // XGATE Interrupt enable or bypass
 
  output reg          [127:0] irq_bypass,      // Register to hold irq bypass control state
 
 
  input                       bus_clk,       // Control register bus clock
  input                       bus_clk,       // Control register bus clock
  input                       async_rst_b,   // Async reset signal
  input                       async_rst_b,   // Async reset signal
  input                       sync_reset,    // Syncronous reset signal
  input                       sync_reset,    // Syncronous reset signal
  input                [15:0] write_bus,     // Write Data Bus
  input                [15:0] write_bus,     // Write Data Bus
Line 75... Line 77...
  input                [ 1:0] write_xgif_4,  // Write Strobe for Interrupt Flag Register 4
  input                [ 1:0] write_xgif_4,  // Write Strobe for Interrupt Flag Register 4
  input                [ 1:0] write_xgif_3,  // Write Strobe for Interrupt Flag Register 3
  input                [ 1:0] write_xgif_3,  // Write Strobe for Interrupt Flag Register 3
  input                [ 1:0] write_xgif_2,  // Write Strobe for Interrupt Flag Register 2
  input                [ 1:0] write_xgif_2,  // Write Strobe for Interrupt Flag Register 2
  input                [ 1:0] write_xgif_1,  // Write Strobe for Interrupt Flag Register 1
  input                [ 1:0] write_xgif_1,  // Write Strobe for Interrupt Flag Register 1
  input                [ 1:0] write_xgif_0,  // Write Strobe for Interrupt Flag Register 0
  input                [ 1:0] write_xgif_0,  // Write Strobe for Interrupt Flag Register 0
 
  input                [ 1:0] write_irw_en_7, // Write Strobe for Interrupt Bypass Control Register 7
 
  input                [ 1:0] write_irw_en_6, // Write Strobe for Interrupt Bypass Control Register 6
 
  input                [ 1:0] write_irw_en_5, // Write Strobe for Interrupt Bypass Control Register 5
 
  input                [ 1:0] write_irw_en_4, // Write Strobe for Interrupt Bypass Control Register 4
 
  input                [ 1:0] write_irw_en_3, // Write Strobe for Interrupt Bypass Control Register 3
 
  input                [ 1:0] write_irw_en_2, // Write Strobe for Interrupt Bypass Control Register 2
 
  input                [ 1:0] write_irw_en_1, // Write Strobe for Interrupt Bypass Control Register 1
 
  input                [ 1:0] write_irw_en_0, // Write Strobe for Interrupt Bypass Control Register 0
  input                       write_xgswt,   // Write Strobe for XGSWT register
  input                       write_xgswt,   // Write Strobe for XGSWT register
  input                       debug_ack      // Clear debug register
  input                       debug_ack      // Clear debug register
  );
  );
 
 
 
 
 
  integer j;     // Loop counter for channel bypass counter assigments
 
  integer k;     // Loop counter for channel bypass counter assigments
 
 
  // registers
  // registers
 
  reg [127:0] irq_bypass_d; // Pseudo regester for routing address and data to irq bypass register
 
 
  // Wires
  // Wires
  wire [ 1:0] write_any_xgif;
  wire [ 1:0] write_any_xgif;
 
 
  //
  //
Line 206... Line 220...
    if (!async_rst_b)
    if (!async_rst_b)
      xgswt <= 8'h00;
      xgswt <= 8'h00;
    else if (sync_reset)
    else if (sync_reset)
      xgswt <= 8'h00;
      xgswt <= 8'h00;
    else if (write_xgswt)
    else if (write_xgswt)
 
      xgswt <= (write_bus[15:8] & write_bus[7:0]) | (~write_bus[15:8] & xgswt[7:0]);
 
 
 
 
 
  // Channel Bypass Register input bits
 
  always @*
      begin
      begin
        xgswt[7] <= write_bus[15] ? write_bus[7] : xgswt[7];
      k = 0;
        xgswt[6] <= write_bus[14] ? write_bus[6] : xgswt[6];
      for (j = 0; j <= 127; j = j + 1)
        xgswt[5] <= write_bus[13] ? write_bus[5] : xgswt[5];
        begin
        xgswt[4] <= write_bus[11] ? write_bus[4] : xgswt[4];
          if (j <= MAX_CHANNEL)
        xgswt[3] <= write_bus[12] ? write_bus[3] : xgswt[3];
            begin
        xgswt[2] <= write_bus[10] ? write_bus[2] : xgswt[2];
              if ((j >= 0) && (j < 8))
        xgswt[1] <= write_bus[ 9] ? write_bus[1] : xgswt[1];
                irq_bypass_d[j] = write_irw_en_0[0] ? write_bus[k] : irq_bypass[j];
        xgswt[0] <= write_bus[ 8] ? write_bus[0] : xgswt[0];
              if ((j >= 8) && (j < 16))
 
                irq_bypass_d[j] = write_irw_en_0[1] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 16) && (j < 24))
 
                irq_bypass_d[j] = write_irw_en_1[0] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 24) && (j < 32))
 
                irq_bypass_d[j] = write_irw_en_1[1] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 32) && (j < 40))
 
                irq_bypass_d[j] = write_irw_en_2[0] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 40) && (j < 48))
 
                irq_bypass_d[j] = write_irw_en_2[1] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 48) && (j < 56))
 
                irq_bypass_d[j] = write_irw_en_3[0] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 56) && (j < 64))
 
                irq_bypass_d[j] = write_irw_en_3[1] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 64) && (j < 72))
 
                irq_bypass_d[j] = write_irw_en_4[0] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 72) && (j < 80))
 
                irq_bypass_d[j] = write_irw_en_4[1] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 80) && (j < 88))
 
                irq_bypass_d[j] = write_irw_en_5[0] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 88) && (j < 96))
 
                irq_bypass_d[j] = write_irw_en_5[1] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 96) && (j < 104))
 
                irq_bypass_d[j] = write_irw_en_6[0] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 104) && (j < 112))
 
                irq_bypass_d[j] = write_irw_en_6[1] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 112) && (j < 120))
 
                irq_bypass_d[j] = write_irw_en_7[0] ? write_bus[k] : irq_bypass[j];
 
              if ((j >= 120) && (j < 128))
 
                irq_bypass_d[j] = write_irw_en_7[1] ? write_bus[k] : irq_bypass[j];
 
            end
 
            else
 
              irq_bypass_d[j]  = 1'b0;
 
            k = k + 1;
 
            if (k > 15)
 
              k = 0;
      end
      end
 
    end
 
 
 
  //  Channel Bypass Registers
 
  //   Synthesys should eliminate bits that with D input tied to zero
 
  always @(posedge bus_clk or negedge async_rst_b)
 
    if ( !async_rst_b )
 
      irq_bypass  <= {128{1'b1}};
 
    else
 
      irq_bypass  <= irq_bypass_d;
 
 
 
  // Alias the register name to the output pin name so only the used bit are carried out
 
  // assign chan_bypass = {(MAX_CHANNEL+1){1'b1}}; 
 
  assign chan_bypass = irq_bypass[MAX_CHANNEL:0];
 
 
endmodule  // xgate_regs
endmodule  // xgate_regs
 
 
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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