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

Subversion Repositories xgate

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

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

Rev 41 Rev 47
Line 241... Line 241...
        3'b111 : rd_data = xgr7;
        3'b111 : rd_data = xgr7;
        default : rd_data = 16'h0;  // XGR0 is always Zero
        default : rd_data = 16'h0;  // XGR0 is always Zero
      endcase
      endcase
    end
    end
 
 
  assign wrt_reg_sel = sel_rd_field ? op_code[10:8] : op_code[4:2];
  assign wrt_reg_sel = (cpu_state == BOOT_3) ? 3'b001 :
 
                       (sel_rd_field ? op_code[10:8] : op_code[4:2]);
 
 
  // Decode register write select for eather RD or RI/RS2
  // Decode register write select for eather RD or RI/RS2
  always @*
  always @*
    begin
    begin
      wrt_sel_xgr1 = (cpu_state == BOOT_3);
      wrt_sel_xgr1 = (wrt_reg_sel == 3'b001) && mem_req_ack;
      wrt_sel_xgr2 = 1'b0;
      wrt_sel_xgr2 = (wrt_reg_sel == 3'b010) && mem_req_ack;
      wrt_sel_xgr3 = 1'b0;
      wrt_sel_xgr3 = (wrt_reg_sel == 3'b011) && mem_req_ack;
      wrt_sel_xgr4 = 1'b0;
      wrt_sel_xgr4 = (wrt_reg_sel == 3'b100) && mem_req_ack;
      wrt_sel_xgr5 = 1'b0;
      wrt_sel_xgr5 = (wrt_reg_sel == 3'b101) && mem_req_ack;
      wrt_sel_xgr6 = 1'b0;
      wrt_sel_xgr6 = (wrt_reg_sel == 3'b110) && mem_req_ack;
      wrt_sel_xgr7 = 1'b0;
      wrt_sel_xgr7 = (wrt_reg_sel == 3'b111) && mem_req_ack;
      case (wrt_reg_sel)   // synopsys parallel_case
 
        3'b001 : wrt_sel_xgr1 = mem_req_ack;
 
        3'b010 : wrt_sel_xgr2 = mem_req_ack;
 
        3'b011 : wrt_sel_xgr3 = mem_req_ack;
 
        3'b100 : wrt_sel_xgr4 = mem_req_ack;
 
        3'b101 : wrt_sel_xgr5 = mem_req_ack;
 
        3'b110 : wrt_sel_xgr6 = mem_req_ack;
 
        3'b111 : wrt_sel_xgr7 = mem_req_ack;
 
      endcase
 
    end
    end
 
 
  // Decode register select for RS1 and RB
  // Decode register select for RS1 and RB
  always @*
  always @*
    case (op_code[7:5])  // synopsys parallel_case
    case (op_code[7:5])  // synopsys parallel_case
Line 1240... Line 1232...
         begin
         begin
           ena_rd_low_byte  = 1'b1;
           ena_rd_low_byte  = 1'b1;
           ena_rd_high_byte = 1'b1;
           ena_rd_high_byte = 1'b1;
 
 
           {next_carry, alu_result}    = rs1_data - rs2_data - {15'b0, carry_flag};
           {next_carry, alu_result}    = rs1_data - rs2_data - {15'b0, carry_flag};
           next_zero     = !(|alu_result);
           next_zero     = !(|alu_result) && zero_flag;
           next_negative = alu_result[15];
           next_negative = alu_result[15];
           next_overflow = (rs1_data[15] && !rs2_data[15] && !alu_result[15]) || (!rs1_data[15] && rs2_data[15] && alu_result[15]);
           next_overflow = (rs1_data[15] && !rs2_data[15] && !alu_result[15]) || (!rs1_data[15] && rs2_data[15] && alu_result[15]);
         end
         end
 
 
      // Instruction = ADD RD, RS1, RS2, Op Code =  0 0 0 1 1 RD RS1 RS2 1 0
      // Instruction = ADD RD, RS1, RS2, Op Code =  0 0 0 1 1 RD RS1 RS2 1 0
Line 1270... Line 1262...
         begin
         begin
           ena_rd_low_byte  = 1'b1;
           ena_rd_low_byte  = 1'b1;
           ena_rd_high_byte = 1'b1;
           ena_rd_high_byte = 1'b1;
 
 
           {next_carry, alu_result}    = rs1_data + rs2_data + {15'b0, carry_flag};
           {next_carry, alu_result}    = rs1_data + rs2_data + {15'b0, carry_flag};
           next_zero     = !(|alu_result);
           next_zero     = !(|alu_result) && zero_flag;
           next_negative = alu_result[15];
           next_negative = alu_result[15];
           next_overflow = (rs1_data[15] && rs2_data[15] && !alu_result[15]) || (!rs1_data[15] && !rs2_data[15] && alu_result[15]);
           next_overflow = (rs1_data[15] && rs2_data[15] && !alu_result[15]) || (!rs1_data[15] && !rs2_data[15] && alu_result[15]);
         end
         end
 
 
      // -----------------------------------------------------------------------
      // -----------------------------------------------------------------------

powered by: WebSVN 2.1.0

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