Skip to content

Commit a7e7691

Browse files
committed
Add barrel shifter
1 parent 2a75d7d commit a7e7691

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

barrel_shifter.sv

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
//------------------------------------------------------------------------------
2+
// barrel_shifter.sv
3+
// Konstantin Pavlov, pavlovconst@gmail.com
4+
//------------------------------------------------------------------------------
5+
6+
// INFO -------------------------------------------------------------------------
7+
// Barrel shifter written in System Verilog
8+
//
9+
10+
/* --- INSTANTIATION TEMPLATE BEGIN ---
11+
12+
barrel_shifter #(
13+
.DATA_W( 32 )
14+
) bs_inst (
15+
.clk( clk ),
16+
.nrst( nrst,),
17+
.ena( 1'b1 ),
18+
.l_nr( 1'b1 ),
19+
.dst( ),
20+
21+
.id( id[31:0] ),
22+
.od( od[31:0] )
23+
);
24+
25+
--- INSTANTIATION TEMPLATE END ---*/
26+
27+
28+
module barrel_shifter #( parameter
29+
DATA_W = 32,
30+
DIST_W = $clog2(DATA_W)
31+
)(
32+
input clk, // clock
33+
input nrst, // negative reset
34+
input ena, // enable
35+
input l_nr, // shift left or right
36+
input [DIST_W-1:0] dst, // shift distance in bits
37+
38+
input [DATA_W-1:0] id, // input data vector
39+
output logic [DATA_W-1:0] od = '0 // shifted data vector
40+
);
41+
42+
always_ff @(posedge clk) begin
43+
if( ~nrst ) begin
44+
od[DATA_W-1:0] <= '0;
45+
end else begin
46+
if( ena ) begin
47+
48+
if( l_nr ) begin
49+
od[DATA_W-1:0] <= ({2{id[DATA_W-1:0]}} << dst[DIST_W-1:0]) >> DATA_W;
50+
end else begin
51+
od[DATA_W-1:0] <= {2{id[DATA_W-1:0]}} >> dst[DIST_W-1:0];
52+
end // if l_nr
53+
54+
end // if ena
55+
end // nrst
56+
end
57+
58+
endmodule
59+

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy