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

Subversion Repositories aemb

[/] [aemb/] [trunk/] [rtl/] [verilog/] [aeMB2_bsft.v] - Blame information for rev 131

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

Line No. Rev Author Line
1 131 sybreon
/* $Id: aeMB2_bsft.v,v 1.2 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
 * Two Cycle Barrel Shift Unit
23
 * @file aeMB2_bsft.v
24
 
25
 * This implements a 2 cycle barrel shifter. The design can be further
26
   optimised depending on architecture.
27
 
28
 */
29
 
30
module aeMB2_bsft (/*AUTOARG*/
31
   // Outputs
32
   bsf_mx,
33
   // Inputs
34
   opa_of, opb_of, opc_of, imm_of, gclk, grst, dena, gpha
35
   );
36
   parameter AEMB_BSF = 1; ///< implement barrel shift  
37
 
38
   output [31:0] bsf_mx;
39
 
40
   input [31:0]  opa_of;
41
   input [31:0]  opb_of;
42
   input [5:0]    opc_of;
43
   input [10:9]  imm_of;
44
 
45
   // SYS signals
46
   input         gclk,
47
                 grst,
48
                 dena,
49
                 gpha;
50
 
51
   /*AUTOREG*/
52
 
53
   reg [31:0]     rBSLL, rBSRL, rBSRA;
54
   reg [31:0]     rBSR;
55
   reg [10:9]    imm_ex;
56
 
57
   wire [31:0]    wOPB = opb_of;
58
   wire [31:0]    wOPA = opa_of;
59
 
60
   assign        bsf_mx = (AEMB_BSF[0]) ? rBSR : 32'hX;
61
 
62
   // STAGE-1 SHIFTERS
63
 
64
   // logical
65
   always @(posedge gclk)
66
     if (grst) begin
67
        /*AUTORESET*/
68
        // Beginning of autoreset for uninitialized flops
69
        rBSLL <= 32'h0;
70
        rBSRL <= 32'h0;
71
        // End of automatics
72
     end else if (dena) begin
73
        rBSLL <= #1 wOPA << wOPB[4:0];
74
        rBSRL <= #1 wOPA >> wOPB[4:0];
75
     end
76
 
77
   // arithmetic
78
   always @(posedge gclk)
79
     if (grst) begin
80
        /*AUTORESET*/
81
        // Beginning of autoreset for uninitialized flops
82
        rBSRA <= 32'h0;
83
        // End of automatics
84
     end else if (dena)
85
       case (wOPB[4:0])
86
         5'd00: rBSRA <= wOPA;
87
         5'd01: rBSRA <= {{(1){wOPA[31]}}, wOPA[31:1]};
88
         5'd02: rBSRA <= {{(2){wOPA[31]}}, wOPA[31:2]};
89
         5'd03: rBSRA <= {{(3){wOPA[31]}}, wOPA[31:3]};
90
         5'd04: rBSRA <= {{(4){wOPA[31]}}, wOPA[31:4]};
91
         5'd05: rBSRA <= {{(5){wOPA[31]}}, wOPA[31:5]};
92
         5'd06: rBSRA <= {{(6){wOPA[31]}}, wOPA[31:6]};
93
         5'd07: rBSRA <= {{(7){wOPA[31]}}, wOPA[31:7]};
94
         5'd08: rBSRA <= {{(8){wOPA[31]}}, wOPA[31:8]};
95
         5'd09: rBSRA <= {{(9){wOPA[31]}}, wOPA[31:9]};
96
         5'd10: rBSRA <= {{(10){wOPA[31]}}, wOPA[31:10]};
97
         5'd11: rBSRA <= {{(11){wOPA[31]}}, wOPA[31:11]};
98
         5'd12: rBSRA <= {{(12){wOPA[31]}}, wOPA[31:12]};
99
         5'd13: rBSRA <= {{(13){wOPA[31]}}, wOPA[31:13]};
100
         5'd14: rBSRA <= {{(14){wOPA[31]}}, wOPA[31:14]};
101
         5'd15: rBSRA <= {{(15){wOPA[31]}}, wOPA[31:15]};
102
         5'd16: rBSRA <= {{(16){wOPA[31]}}, wOPA[31:16]};
103
         5'd17: rBSRA <= {{(17){wOPA[31]}}, wOPA[31:17]};
104
         5'd18: rBSRA <= {{(18){wOPA[31]}}, wOPA[31:18]};
105
         5'd19: rBSRA <= {{(19){wOPA[31]}}, wOPA[31:19]};
106
         5'd20: rBSRA <= {{(20){wOPA[31]}}, wOPA[31:20]};
107
         5'd21: rBSRA <= {{(21){wOPA[31]}}, wOPA[31:21]};
108
         5'd22: rBSRA <= {{(22){wOPA[31]}}, wOPA[31:22]};
109
         5'd23: rBSRA <= {{(23){wOPA[31]}}, wOPA[31:23]};
110
         5'd24: rBSRA <= {{(24){wOPA[31]}}, wOPA[31:24]};
111
         5'd25: rBSRA <= {{(25){wOPA[31]}}, wOPA[31:25]};
112
         5'd26: rBSRA <= {{(26){wOPA[31]}}, wOPA[31:26]};
113
         5'd27: rBSRA <= {{(27){wOPA[31]}}, wOPA[31:27]};
114
         5'd28: rBSRA <= {{(28){wOPA[31]}}, wOPA[31:28]};
115
         5'd29: rBSRA <= {{(29){wOPA[31]}}, wOPA[31:29]};
116
         5'd30: rBSRA <= {{(30){wOPA[31]}}, wOPA[31:30]};
117
         5'd31: rBSRA <= {{(31){wOPA[31]}}, wOPA[31]};
118
       endcase // case (wOPB[4:0])
119
 
120
   // STAGE-2 SHIFT
121
   always @(posedge gclk)
122
     if (grst) begin
123
        /*AUTORESET*/
124
        // Beginning of autoreset for uninitialized flops
125
        imm_ex <= 2'h0;
126
        rBSR <= 32'h0;
127
        // End of automatics
128
     end else if (dena) begin
129
        case (imm_ex)
130
          2'o0: rBSR <= #1 rBSRL;
131
          2'o1: rBSR <= #1 rBSRA;
132
          2'o2: rBSR <= #1 rBSLL;
133
          default: rBSR <= #1 32'hX;
134
        endcase // case (imm_ex)
135
        imm_ex <= #1 imm_of[10:9]; // delay 1 cycle     
136
     end
137 131 sybreon
 
138 118 sybreon
endmodule // aeMB2_bsft
139
 
140 131 sybreon
/*
141
 $Log: not supported by cvs2svn $
142
 Revision 1.1  2008/04/18 00:21:52  sybreon
143
 Initial import.
144
*/

powered by: WebSVN 2.1.0

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