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

Subversion Repositories raptor64

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 41 to Rev 42
    Reverse comparison

Rev 41 → Rev 42

/raptor64/trunk/rtl/verilog/Raptor64_EvaluateBranch.v
0,0 → 1,147
`include "Raptor64_opcodes.v"
`timescale 1ns / 1ps
//=============================================================================
// __
// \\__/ o\ (C) 2011,2012 Robert Finch
// \ __ / All rights reserved.
// \/_// robfinch<remove>@opencores.org
// ||
//
// Raptor64_EvaluateBranch.v
// - Evaluate branch conditions.
//
//
// This source file is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This source file is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
//
//=============================================================================
 
module Raptor64_EvaluateBranch(ir, a, b, imm, rsf, takb);
input [31:0] ir;
input [63:0] a;
input [63:0] b;
input [63:0] imm;
input rsf; // reservation flag
output takb;
reg takb;
 
wire [6:0] opcode = ir[31:25];
wire [4:0] func5 = ir[4:0];
wire [3:0] func4 = ir[3:0];
wire [3:0] cond4 = ir[18:15];
wire [3:0] cond4t = ir[14:11];
 
wire aeqz = a==64'd0;
wire beqz = b==64'd0;
wire immeqz = imm==64'd0;
 
wire eq = a==b;
wire eqi = a==imm;
wire lt = $signed(a) < $signed(b);
wire lti = $signed(a) < $signed(imm);
wire ltu = a < b;
wire ltui = a < imm;
 
always @(opcode or func5 or func4 or cond4 or cond4t or a or eq or eqi or lt or lti or ltu or ltui or aeqz or beqz or rsf)
case (opcode)
`BTRR:
case(func5)
`BRA: takb = 1'b1;
`BRN: takb = 1'b0;
`BEQ: takb = eq;
`BNE: takb = !eq;
`BLT: takb = lt;
`BLE: takb = lt|eq;
`BGT: takb = !(lt|eq);
`BGE: takb = !lt;
`BLTU: takb = ltu;
`BLEU: takb = ltu|eq;
`BGTU: takb = !(ltu|eq);
`BGEU: takb = !ltu;
`BOR: takb = !aeqz || !beqz;
`BAND: takb = !aeqz && !beqz;
`BNR: takb = !rsf;
`LOOP: takb = !beqz;
`BEQR: takb = eq;
`BNER: takb = !eq;
`BLTR: takb = lt;
`BLER: takb = lt|eq;
`BGTR: takb = !(lt|eq);
`BGER: takb = !lt;
`BLTUR: takb = ltu;
`BLEUR: takb = ltu|eq;
`BGTUR: takb = !(ltu|eq);
`BGEUR: takb = !ltu;
default: takb = 1'b0;
endcase
`BEQI: takb = eqi;
`BNEI: takb = !eqi;
`BLTI: takb = lti;
`BLEI: takb = lti|eqi;
`BGTI: takb = !(lti|eqi);
`BGEI: takb = !lti;
`BLTUI: takb = ltui;
`BLEUI: takb = ltui|eqi;
`BGTUI: takb = !(ltui|eqi);
`BGEUI: takb = !ltui;
`BTRI:
case(cond4t)
`BRA: takb = 1'b1;
`BRN: takb = 1'b0;
`BEQ: takb = eqi;
`BNE: takb = !eqi;
`BLT: takb = lti;
`BLE: takb = lti|eqi;
`BGT: takb = !(lti|eqi);
`BGE: takb = !lti;
`BLTU: takb = ltui;
`BLEU: takb = ltui|eqi;
`BGTU: takb = !(ltui|eqi);
`BGEU: takb = !ltui;
default: takb = 1'b0;
endcase
`TRAPcc:
case(func4)
`TEQ: takb = eq;
`TNE: takb = !eq;
`TLT: takb = lt;
`TLE: takb = lt|eq;
`TGT: takb = !(lt|eq);
`TGE: takb = !lt;
`TLTU: takb = ltu;
`TLEU: takb = ltu|eq;
`TGTU: takb = !(ltu|eq);
`TGEU: takb = !ltu;
default: takb = 1'b0;
endcase
`TRAPcci:
case(cond4)
`TEQI: takb = eqi;
`TNEI: takb = !eqi;
`TLTI: takb = lti;
`TLEI: takb = lti|eqi;
`TGTI: takb = !(lti|eqi);
`TGEI: takb = !lti;
`TLTUI: takb = ltui;
`TLEUI: takb = ltui|eqi;
`TGTUI: takb = !(ltui|eqi);
`TGEUI: takb = !ltui;
default: takb = 1'b0;
endcase
default:
takb = 1'b0;
endcase
 
endmodule
 
/raptor64/trunk/doc/Raptor64.ppt Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
/raptor64/trunk/doc/Raptor64 CPU Core.doc Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
/raptor64/trunk/doc/Opcode Chart.docx Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream

powered by: WebSVN 2.1.0

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