-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRotate100.v
More file actions
29 lines (26 loc) · 1004 Bytes
/
Copy pathRotate100.v
File metadata and controls
29 lines (26 loc) · 1004 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Build a 100-bit left/right rotator, with synchronous load and left/right enable. A rotator shifts-in the shifted-out bit from the other end of the register, unlike a shifter that discards the shifted-out bit and shifts in a zero. If enabled, a rotator rotates the bits around and does not modify/discard them.
// load: Loads shift register with data[99:0] instead of rotating.
// ena[1:0]: Chooses whether and which direction to rotate.
// 2'b01 rotates right by one bit
// 2'b10 rotates left by one bit
// 2'b00 and 2'b11 do not rotate.
// q: The contents of the rotator.
module top_module(
input clk,
input load,
input [1:0] ena,
input [99:0] data,
output reg [99:0] q);
always @(posedge clk) begin
if (load) begin
q <= data;
end
else begin
case (ena)
2'b01: q <= {q[0], q[99:1]};
2'b10: q <= {q[98:0], q[99]};
default: ;
endcase
end
end
endmodule