diff options
author | joshua <joshua@fedora.framework> | 2022-05-14 23:30:38 -0500 |
---|---|---|
committer | joshua <joshua@fedora.framework> | 2022-05-14 23:30:38 -0500 |
commit | b8936029065835366e9e057a219c0c5194db8662 (patch) | |
tree | 31e50944ac6e23850f92bb0e0f6d851b74307f60 /verilog/alu/v6/shifter.v | |
parent | d6b7d26cf51b4b3a7b5604f9b81bb43f55cbc33c (diff) | |
download | riscv-processor-inorder-b8936029065835366e9e057a219c0c5194db8662.tar.gz |
Verilog update
Diffstat (limited to 'verilog/alu/v6/shifter.v')
-rw-r--r-- | verilog/alu/v6/shifter.v | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/verilog/alu/v6/shifter.v b/verilog/alu/v6/shifter.v new file mode 100644 index 0000000..7030a1c --- /dev/null +++ b/verilog/alu/v6/shifter.v @@ -0,0 +1,42 @@ +`default_nettype none +`timescale 1us/1ns + +module rightshifter +( + input wire [31:0] shift, + input wire [31:0] number, + output wire [31:0] shifted +); + +always @ (*) +begin + if (number[5] == 1'b1) + begin + shifted = {32{number[31]}}; + end + else + begin + if (number[4] == 1'b1) + begin + shifted = {{16{number[31]}}, number[31:16]} + end + if (number[3] == 1'b1) + begin + shifted = {{8{number[31]}}, number[31:8]} + end + if (number[2] == 1'b1) + begin + shifted = {{4{number[31]}}, number[31:4]} + end + if (number[1] == 1'b1) + begin + shifted = {{2{number[31]}}, number[31:2]} + end + if (number[0] == 1'b1) + begin + shifted = {number[31], number[31:1]} + end + end +end + +endmodule |