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

Subversion Repositories xgate

[/] [xgate/] [trunk/] [rtl/] [verilog/] [xgate_risc.v] - Diff between revs 40 and 41

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

Rev 40 Rev 41
Line 67... Line 67...
  input      [15:0] perif_data,
  input      [15:0] perif_data,
  input             risc_clk,
  input             risc_clk,
  input             async_rst_b,
  input             async_rst_b,
  input             mem_req_ack,    // Memory Bus available - data good
  input             mem_req_ack,    // Memory Bus available - data good
  input             xge,            // XGATE Module Enable
  input             xge,            // XGATE Module Enable
  input             xgfrz,          // Stop XGATE in Freeze Mode
 
  input             debug_mode_i,   // Force RISC core into debug mode
  input             debug_mode_i,   // Force RISC core into debug mode
  input             xgdbg_set,      // Enter XGATE Debug Mode
  input             xgdbg_set,      // Enter XGATE Debug Mode
  input             xgdbg_clear,    // Leave XGATE Debug Mode
  input             xgdbg_clear,    // Leave XGATE Debug Mode
  input             xgss,           // XGATE Single Step
  input             xgss,           // XGATE Single Step
  input      [15:1] xgvbr,          // XGATE vector Base Address Register
  input      [15:1] xgvbr,          // XGATE vector Base Address Register
Line 79... Line 78...
  input             xgie,           // XGATE Interrupt Enable
  input             xgie,           // XGATE Interrupt Enable
  input             brk_irq_ena,    // Enable BRK instruction to generate interrupt
  input             brk_irq_ena,    // Enable BRK instruction to generate interrupt
  input             write_xgchid,   // Write Strobe for XGCHID register
  input             write_xgchid,   // Write Strobe for XGCHID register
  input             write_xgsem,    // Write Strobe for XGSEM register
  input             write_xgsem,    // Write Strobe for XGSEM register
  input             write_xgccr,    // Write Strobe for XGATE Condition Code Register
  input             write_xgccr,    // Write Strobe for XGATE Condition Code Register
  input             write_xgpc,     // Write Strobe for XGATE Program Counter
  input      [ 1:0] write_xgpc,     // Write Strobe for XGATE Program Counter
  input             write_xgr7,     // Write Strobe for XGATE Data Register R7
  input      [ 1:0] write_xgr7,     // Write Strobe for XGATE Data Register R7
  input             write_xgr6,     // Write Strobe for XGATE Data Register R6
  input      [ 1:0] write_xgr6,     // Write Strobe for XGATE Data Register R6
  input             write_xgr5,     // Write Strobe for XGATE Data Register R5
  input      [ 1:0] write_xgr5,     // Write Strobe for XGATE Data Register R5
  input             write_xgr4,     // Write Strobe for XGATE Data Register R4
  input      [ 1:0] write_xgr4,     // Write Strobe for XGATE Data Register R4
  input             write_xgr3,     // Write Strobe for XGATE Data Register R3
  input      [ 1:0] write_xgr3,     // Write Strobe for XGATE Data Register R3
  input             write_xgr2,     // Write Strobe for XGATE Data Register R2
  input      [ 1:0] write_xgr2,     // Write Strobe for XGATE Data Register R2
  input             write_xgr1,     // Write Strobe for XGATE Data Register R1
  input      [ 1:0] write_xgr1,     // Write Strobe for XGATE Data Register R1
  input             xgsweif_c,      // Clear Software Flag
  input             xgsweif_c,      // Clear Software Flag
  input             clear_xgif_7,   // Strobe for decode to clear interrupt flag bank 7
  input             clear_xgif_7,   // Strobe for decode to clear interrupt flag bank 7
  input             clear_xgif_6,   // Strobe for decode to clear interrupt flag bank 6
  input             clear_xgif_6,   // Strobe for decode to clear interrupt flag bank 6
  input             clear_xgif_5,   // Strobe for decode to clear interrupt flag bank 5
  input             clear_xgif_5,   // Strobe for decode to clear interrupt flag bank 5
  input             clear_xgif_4,   // Strobe for decode to clear interrupt flag bank 4
  input             clear_xgif_4,   // Strobe for decode to clear interrupt flag bank 4
Line 393... Line 392...
  //  Program Counter Register
  //  Program Counter Register
  always @(posedge risc_clk or negedge async_rst_b)
  always @(posedge risc_clk or negedge async_rst_b)
    if ( !async_rst_b )
    if ( !async_rst_b )
      program_counter  <= 16'h0000;
      program_counter  <= 16'h0000;
    else
    else
      program_counter  <= (write_xgpc && perif_wrt_ena) ? perif_data : (mem_req_ack ? next_pc : program_counter);
      program_counter  <= (|write_xgpc && perif_wrt_ena) ?
 
      {(write_xgpc[1] ? perif_data[15:8]: program_counter[15:8]),
 
       (write_xgpc[0] ? perif_data[ 7:0]: program_counter[ 7:0])} :
 
      (mem_req_ack ? next_pc : program_counter);
 
 
  //  Debug Change Program Counter Register
  //  Debug Change Program Counter Register
  always @(posedge risc_clk or negedge async_rst_b)
  always @(posedge risc_clk or negedge async_rst_b)
    if ( !async_rst_b )
    if ( !async_rst_b )
      cmd_change_pc  <= 1'b0;
      cmd_change_pc  <= 1'b0;
    else
    else
      cmd_change_pc  <= write_xgpc && perif_wrt_ena;
      cmd_change_pc  <= |write_xgpc && perif_wrt_ena;
 
 
  //  ALU Flag Bits
  //  ALU Flag Bits
  always @(posedge risc_clk or negedge async_rst_b)
  always @(posedge risc_clk or negedge async_rst_b)
    if ( !async_rst_b )
    if ( !async_rst_b )
      begin
      begin
Line 469... Line 471...
        xgr6 <= 16'b0;
        xgr6 <= 16'b0;
        xgr7 <= 16'b0;
        xgr7 <= 16'b0;
      end
      end
    else
    else
      begin
      begin
        xgr1 <= (write_xgr1 && perif_wrt_ena) ? perif_data :
        xgr1 <= (|write_xgr1 && perif_wrt_ena) ?
 
                {(write_xgr1[1] ? perif_data[15:8]: xgr1[15:8]),
 
                 (write_xgr1[0] ? perif_data[ 7:0]: xgr1[ 7:0])} :
                {((wrt_sel_xgr1 && ena_rd_high_byte) ? alu_result[15:8] : xgr1[15:8]),
                {((wrt_sel_xgr1 && ena_rd_high_byte) ? alu_result[15:8] : xgr1[15:8]),
                 ((wrt_sel_xgr1 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr1[ 7:0])};
                 ((wrt_sel_xgr1 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr1[ 7:0])};
        xgr2 <= (write_xgr2 && perif_wrt_ena) ? perif_data :
        xgr2 <= (|write_xgr2 && perif_wrt_ena) ?
 
                {(write_xgr2[1] ? perif_data[15:8]: xgr2[15:8]),
 
                 (write_xgr2[0] ? perif_data[ 7:0]: xgr2[ 7:0])} :
                {((wrt_sel_xgr2 && ena_rd_high_byte) ? alu_result[15:8] : xgr2[15:8]),
                {((wrt_sel_xgr2 && ena_rd_high_byte) ? alu_result[15:8] : xgr2[15:8]),
                 ((wrt_sel_xgr2 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr2[ 7:0])};
                 ((wrt_sel_xgr2 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr2[ 7:0])};
        xgr3 <= (write_xgr3 && perif_wrt_ena) ? perif_data :
        xgr3 <= (|write_xgr3 && perif_wrt_ena) ?
 
                {(write_xgr3[1] ? perif_data[15:8]: xgr3[15:8]),
 
                 (write_xgr3[0] ? perif_data[ 7:0]: xgr3[ 7:0])} :
                {((wrt_sel_xgr3 && ena_rd_high_byte) ? alu_result[15:8] : xgr3[15:8]),
                {((wrt_sel_xgr3 && ena_rd_high_byte) ? alu_result[15:8] : xgr3[15:8]),
                 ((wrt_sel_xgr3 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr3[ 7:0])};
                 ((wrt_sel_xgr3 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr3[ 7:0])};
        xgr4 <= (write_xgr4 && perif_wrt_ena) ? perif_data :
        xgr4 <= (|write_xgr4 && perif_wrt_ena) ?
 
                {(write_xgr4[1] ? perif_data[15:8]: xgr4[15:8]),
 
                 (write_xgr4[0] ? perif_data[ 7:0]: xgr4[ 7:0])} :
                {((wrt_sel_xgr4 && ena_rd_high_byte) ? alu_result[15:8] : xgr4[15:8]),
                {((wrt_sel_xgr4 && ena_rd_high_byte) ? alu_result[15:8] : xgr4[15:8]),
                 ((wrt_sel_xgr4 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr4[ 7:0])};
                 ((wrt_sel_xgr4 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr4[ 7:0])};
        xgr5 <= (write_xgr5 && perif_wrt_ena) ? perif_data :
        xgr5 <= (|write_xgr5 && perif_wrt_ena) ?
 
                {(write_xgr5[1] ? perif_data[15:8]: xgr5[15:8]),
 
                 (write_xgr5[0] ? perif_data[ 7:0]: xgr5[ 7:0])} :
                {((wrt_sel_xgr5 && ena_rd_high_byte) ? alu_result[15:8] : xgr5[15:8]),
                {((wrt_sel_xgr5 && ena_rd_high_byte) ? alu_result[15:8] : xgr5[15:8]),
                 ((wrt_sel_xgr5 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr5[ 7:0])};
                 ((wrt_sel_xgr5 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr5[ 7:0])};
        xgr6 <= (write_xgr6 && perif_wrt_ena) ? perif_data :
        xgr6 <= (|write_xgr6 && perif_wrt_ena) ?
 
                {(write_xgr6[1] ? perif_data[15:8]: xgr6[15:8]),
 
                 (write_xgr6[0] ? perif_data[ 7:0]: xgr6[ 7:0])} :
                {((wrt_sel_xgr6 && ena_rd_high_byte) ? alu_result[15:8] : xgr6[15:8]),
                {((wrt_sel_xgr6 && ena_rd_high_byte) ? alu_result[15:8] : xgr6[15:8]),
                 ((wrt_sel_xgr6 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr6[ 7:0])};
                 ((wrt_sel_xgr6 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr6[ 7:0])};
        xgr7 <= (write_xgr7 && perif_wrt_ena) ? perif_data :
        xgr7 <= (|write_xgr7 && perif_wrt_ena) ?
 
                {(write_xgr7[1] ? perif_data[15:8]: xgr7[15:8]),
 
                 (write_xgr7[0] ? perif_data[ 7:0]: xgr7[ 7:0])} :
                {((wrt_sel_xgr7 && ena_rd_high_byte) ? alu_result[15:8] : xgr7[15:8]),
                {((wrt_sel_xgr7 && ena_rd_high_byte) ? alu_result[15:8] : xgr7[15:8]),
                 ((wrt_sel_xgr7 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr7[ 7:0])};
                 ((wrt_sel_xgr7 && ena_rd_low_byte)  ? alu_result[ 7:0] : xgr7[ 7:0])};
      end
      end
 
 
  // V Ñ Vector fetch: always an aligned word read, lasts for at least one RISC core cycle
  // V Ñ Vector fetch: always an aligned word read, lasts for at least one RISC core cycle

powered by: WebSVN 2.1.0

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