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

Subversion Repositories aemb

[/] [aemb/] [trunk/] [rtl/] [verilog/] [aeMB2_brcc.v] - Blame information for rev 199

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 131 sybreon
/* $Id: aeMB2_brcc.v,v 1.3 2008-04-26 01:09:05 sybreon Exp $
2 118 sybreon
**
3
** AEMB2 EDK 6.2 COMPATIBLE CORE
4
** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@aeste.net>
5
**
6
** This file is part of AEMB.
7
**
8
** AEMB is free software: you can redistribute it and/or modify it
9
** under the terms of the GNU Lesser General Public License as
10
** published by the Free Software Foundation, either version 3 of the
11
** License, or (at your option) any later version.
12
**
13
** AEMB is distributed in the hope that it will be useful, but WITHOUT
14
** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
** or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
16
** Public License for more details.
17
**
18
** You should have received a copy of the GNU Lesser General Public
19
** License along with AEMB. If not, see <http:**www.gnu.org/licenses/>.
20
*/
21
/**
22
 * Branch Condition Checker
23
 * @file aeMB2_brcc.v
24
 
25
 * This controls the decision to branch/delay. The actualy branch
26
   target is calculated in the ALU.
27
 
28
 */
29
 
30
module aeMB2_brcc (/*AUTOARG*/
31
   // Outputs
32
   bra_ex,
33
   // Inputs
34 120 sybreon
   opd_of, ra_of, rd_of, opc_of, gclk, grst, dena, iena, gpha
35
   );
36
   parameter AEMB_HTX = 1;
37
 
38 118 sybreon
   input [31:0] opd_of;
39
   input [4:0]   ra_of;
40
   input [4:0]   rd_of;
41
   input [5:0]   opc_of;
42
 
43
   output [1:0] bra_ex;
44
 
45
   // SYS signals
46
   input        gclk,
47
                grst,
48
                dena,
49 120 sybreon
                iena,
50 118 sybreon
                gpha;
51
 
52
   /*AUTOREG*/
53
   // Beginning of automatic regs (for this module's undeclared outputs)
54
   reg [1:0]             bra_ex;
55
   // End of automatics
56
 
57
   // TODO: replace comparators with logic
58
 
59
   /* Branch Control */
60
   wire         wRTD = (opc_of == 6'o55);
61
   wire         wBCC = (opc_of == 6'o47) | (opc_of == 6'o57);
62
   wire         wBRU = (opc_of == 6'o46) | (opc_of == 6'o56);
63
 
64
   wire         wBEQ = (opd_of == 32'd0);
65
   wire         wBLT = opd_of[31];
66
   wire         wBLE = wBLT | wBEQ;
67
   wire         wBNE = ~wBEQ;
68
   wire         wBGE = ~wBLT;
69
   wire         wBGT = ~wBLE;
70
 
71
   reg           xcc;
72
 
73
   always @(/*AUTOSENSE*/rd_of or wBEQ or wBGE or wBGT or wBLE or wBLT
74
            or wBNE) begin
75
      case (rd_of[2:0])
76
        3'o0: xcc <= wBEQ;
77
        3'o1: xcc <= wBNE;
78
        3'o2: xcc <= wBLT;
79
        3'o3: xcc <= wBLE;
80
        3'o4: xcc <= wBGT;
81
        3'o5: xcc <= wBGE;
82
        default: xcc <= 1'bX;
83
      endcase // case (rd_of[2:0])
84
   end // always @ (...
85
 
86
   always @(posedge gclk)
87
     if (grst) begin
88
        /*AUTORESET*/
89
        // Beginning of autoreset for uninitialized flops
90
        bra_ex <= 2'h0;
91
        // End of automatics
92
     end else if (dena) begin
93
        bra_ex[1] <= #1 (wRTD | wBRU | (wBCC & xcc)); // branch
94 120 sybreon
        bra_ex[0] <= #1 (wBRU) ? ra_of[4] : rd_of[4]; // delay   
95 118 sybreon
     end
96
 
97
endmodule // aeMB2_brcc
98
 
99 131 sybreon
/*
100
 $Log: not supported by cvs2svn $
101
 Revision 1.2  2008/04/20 16:34:32  sybreon
102
 Basic version with some features left out.
103
 
104
 Revision 1.1  2008/04/18 00:21:52  sybreon
105
 Initial import.
106
*/

powered by: WebSVN 2.1.0

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