Sunteți pe pagina 1din 22

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity barrel is
PORT(datain:in std_logic_vector(7 downto 0);
opcode:in std_logic_vector(2 downto 0);
count:in std_logic_vector(2 downto 0);
dataout:out std_logic_vector(7 downto 0)
);
end barrel;

architecture Behavioral of barrel is


begin
process(opcode,count)
begin
--takin count as case statement
case count is
--this case indicates there is no shift and rotate
when"000"=>
if opcode="000"then
dataout<=datain;
elsif opcode="001"then
dataout<=datain;
elsif opcode="010"then

dataout<=datain;
elsif opcode="100"then
dataout<=datain;
elsif opcode="101"then
dataout<=datain;
elsif opcode="110"then
dataout<=datain;
end if;
--this case indicates input data in shifted by 1 bit
when "001"=>
if opcode="000"then --shift right logical
dataout<="0"&datain( 7 downto 1);
elsif opcode="001"then --shift right arithmetic
dataout<=datain(7)& datain(7 downto 1);
elsif opcode="010"then --rotate right
dataout<=datain(0) & datain(7 downto 1);
elsif opcode="100"then --shift left logical
dataout<=datain(6 downto 0) &"0";
elsif opcode="101"then --shift left arithmetic
dataout<=datain(7)&datain(5 downto 0) &"0";
elsif opcode="110"then--rotate left
dataout<=datain(6 downto 0) & datain(7);
end if;
--this case indicate that input data is shifted by 2 bits
when "010"=>
if opcode="000"then
dataout<="00" & datain(7 downto 2);

elsif opcode="001"then
dataout<=datain(7)&datain(7)&datain(7 downto 2);
elsif opcode="010"then
dataout<=datain(1 downto 0)&datain(7 downto 2);
elsif opcode="100"then
dataout<=datain(5 downto 0) &"00";
elsif opcode="101"then
dataout<=datain(7)&datain(4 downto 0)&"00";
elsif opcode="110"then
dataout<=datain(5 downto 0)&datain( 7 downto 6);
end if;
--this case indicates that data is shifted by 3 bits
when "011"=>
if opcode="000"then
dataout<="000" &datain( 7 downto 3);
elsif opcode="001"then
dataout<=datain(7)&datain(7)&datain(7)&datain(7 downto 3);
elsif opcode="010"then
dataout<=datain(2 downto 0) &datain( 7 downto 3);
elsif opcode="100"then
dataout<=datain(4 downto 0) &"000";
elsif opcode="101"then
dataout<=datain(7)&datain(3 downto 0)&"000";
elsif opcode="110"then
dataout<=datain(4 downto 0 )&datain( 7 downto 5);
end if;
--this case indicates that input data is shifted by 4 bits

when "100"=>
if opcode="000"then
dataout<="0000" & datain(7 downto 4);
elsif opcode="001"then
dataout<=datain(7)&datain(7)&datain(7)&datain(7)&datain(7 downto 4);
elsif opcode="010"then
dataout<=datain(3 downto 0) &datain( 7 downto 4);
elsif opcode="100"then
dataout<=datain(3 downto 0) &"0000";
elsif opcode="101"then
dataout<=datain(7)&datain(2 downto 0) & "0000";
elsif opcode="110"then
dataout<=datain(3 downto 0)&datain( 7 downto 4);
end if;
--this case indicates that input data is shifted by 5 bits
when "101"=>
if opcode="000"then
dataout<="00000" &datain( 7 downto 5);
elsif opcode="001"then
dataout<=datain(7)&datain(7)&datain(7)&datain(7)&datain(7)&datain(7 downto 5);
elsif opcode="010"then
dataout<=datain(4 downto 0) & datain(7 downto 5);
elsif opcode="100"then
dataout<=datain(2 downto 0) &"00000";
elsif opcode="101"then
dataout<=datain(7)&datain(1 downto 0 )& "00000";
elsif opcode="110"then

dataout<=datain(2 downto 0) & datain(7 downto 3);


end if;
--this case indicates that input data is shifted by 6 bits
when "110"=>
if opcode="000"then
dataout<="000000"&datain( 7 downto 6);
elsif opcode="001"then
dataout<=datain(7)&datain(7)&datain(7)&datain(7)&datain(7)&datain(7)&datain(7 downto 6);
elsif opcode="010"then
dataout<=datain(5 downto 0) &datain( 7 downto 6);
elsif opcode="100"then
dataout<=datain(1 downto 0) &"000000";
elsif opcode="101"then
dataout<=datain(7)&datain( 0) &"000000";
elsif opcode="110"then
dataout<=datain(1 downto 0) &datain( 7 downto 2);
end if;
--this case indicates that the input data is shifted by 7 bits
when others=>
if opcode="000"then
dataout<="0000000" &datain(7);
elsif opcode="001"then
dataout<=datain(7)&datain(7)&datain(7)&datain(7)&datain(7)&datain(7)&datain(7)&datain(7);
elsif opcode="010"then
dataout<=datain(6 downto 0)&datain(7);
elsif opcode="100"then
dataout<=datain(0) &"0000000";

elsif opcode="101"then
dataout<=datain(7)&"0000000";
elsif opcode="110"then
dataout<=datain(0)&datain( 7 downto 1);
end if;
end case;
end process;
end Behavioral;

32 bit barrel shifter


--32BIT BARREL_SHIFTER
--BY SUMEET SAURAV

--COUNT:AMOUNT OF ROTATE/SHIFT REQUIRED


--I

:32 BIT INPUT DATA

--SHLR :4 BIT CONTROL SIGNAL


--Z

:32 BIT OUTPUT DATA

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY BARREL_SHIFTER IS
PORT(
SHLR

:IN STD_LOGIC_VECTOR(3 downto 0);--SHLR(3) TO DECIDE WHETHER TO SHIFT LEFT OR

RIGHT
I

:IN STD_LOGIC_VECTOR(31 downto 0);

COUNT :IN STD_LOGIC_VECTOR(4 downto 0);


Z

:OUT STD_LOGIC_VECTOR(31 downto 0)

);
END BARREL_SHIFTER;

ARCHITECTURE ARCH OF BARREL_SHIFTER IS


SIGNAL S,H,L:STD_LOGIC;
SIGNAL F

:STD_LOGIC_VECTOR(1 downto 0);

SIGNAL D

:STD_LOGIC_VECTOR(3 downto 0);

SIGNAL B

:STD_LOGIC_VECTOR(7 downto 0);

SIGNAL P

:STD_LOGIC_VECTOR(15 downto 0);

SIGNAL X,A,Y

: STD_LOGIC_VECTOR(31 downto 0);--X IS BIT REVERSED OUTPUT

SIGNAL C,E,G : STD_LOGIC_VECTOR(31 downto 0);

COMPONENT MUX2_1 IS
PORT(
A,B :IN STD_LOGIC;
SEL :IN STD_LOGIC;
OUTPUT :OUT STD_LOGIC);
END COMPONENT;

BEGIN
--TO DECIDE WHETHER TO GET LEFT OR RIGHT OPERATION
-- RIGHT->0,LEFT->1 (A,B,SEL,OUT)
--IF SEL->0 THEN OUT->A SEL->1 THEN OUT->B
--BITREVERSAL OPERATION ON INPUT BITS

--SHLR(3)->0 RIGHT SHLR(3)->1 LEFT


M0:MUX2_1 PORT MAP(I(31),I(0),SHLR(3),X(31));
M1:MUX2_1 PORT MAP(I(30),I(1),SHLR(3),X(30));
M2:MUX2_1 PORT MAP(I(29),I(2),SHLR(3),X(29));
M3:MUX2_1 PORT MAP(I(28),I(3),SHLR(3),X(28));
M4:MUX2_1 PORT MAP(I(27),I(4),SHLR(3),X(27));
M5:MUX2_1 PORT MAP(I(26),I(5),SHLR(3),X(26));

M6:MUX2_1 PORT MAP(I(25),I(6),SHLR(3),X(25));


M7:MUX2_1 PORT MAP(I(24),I(7),SHLR(3),X(24));
M8:MUX2_1 PORT MAP(I(23),I(8),SHLR(3),X(23));
M9:MUX2_1 PORT MAP(I(22),I(9),SHLR(3),X(22));
M10:MUX2_1 PORT MAP(I(21),I(10),SHLR(3),X(21));
M11:MUX2_1 PORT MAP(I(20),I(11),SHLR(3),X(20));
M12:MUX2_1 PORT MAP(I(19),I(12),SHLR(3),X(19));
M13:MUX2_1 PORT MAP(I(18),I(13),SHLR(3),X(18));
M14:MUX2_1 PORT MAP(I(17),I(14),SHLR(3),X(17));
M15:MUX2_1 PORT MAP(I(16),I(15),SHLR(3),X(16));
M16:MUX2_1 PORT MAP(I(15),I(16),SHLR(3),X(15));
M17:MUX2_1 PORT MAP(I(14),I(17),SHLR(3),X(14));
M18:MUX2_1 PORT MAP(I(13),I(18),SHLR(3),X(13));
M19:MUX2_1 PORT MAP(I(12),I(19),SHLR(3),X(12));
M20:MUX2_1 PORT MAP(I(11),I(20),SHLR(3),X(11));
M21:MUX2_1 PORT MAP(I(10),I(21),SHLR(3),X(10));
M22:MUX2_1 PORT MAP(I(9),I(22),SHLR(3),X(9));
M23:MUX2_1 PORT MAP(I(8),I(23),SHLR(3),X(8));
M24:MUX2_1 PORT MAP(I(7),I(24),SHLR(3),X(7));
M25:MUX2_1 PORT MAP(I(6),I(25),SHLR(3),X(6));
M26:MUX2_1 PORT MAP(I(5),I(26),SHLR(3),X(5));
M27:MUX2_1 PORT MAP(I(4),I(27),SHLR(3),X(4));
M28:MUX2_1 PORT MAP(I(3),I(28),SHLR(3),X(3));

M29:MUX2_1 PORT MAP(I(2),I(29),SHLR(3),X(2));


M30:MUX2_1 PORT MAP(I(1),I(30),SHLR(3),X(1));
M31:MUX2_1 PORT MAP(I(0),I(31),SHLR(3),X(0));

--TO DECIDE WHETHER ARITHMETIC OR LOGICAL


---SHLR(2)->0 LOGICAL SHLR(2)->1 ARITHMEATIC
MA:MUX2_1 PORT MAP('0',I(31),SHLR(2),S)

--SHLR(2) TO DECIDE WHETHER TO DO ARITHMETIC

OR LOGICAL

-- TO DECIDE WHETHER TO SHIFT/ROTATE BY 16 BITS


--SHLR(1)->0 SHIFT SHLR->1 ROTATE

Mr0:MUX2_1 PORT MAP(S,X(15),SHLR(1),P(15)); ---SHLR(1) TO DECIDE WHETHER TO SHIFT/ROTATE


Mr1:MUX2_1 PORT MAP(S,X(14),SHLR(1),P(14));
Mr2:MUX2_1 PORT MAP(S,X(13),SHLR(1),P(13));
Mr3:MUX2_1 PORT MAP(S,X(12),SHLR(1),P(12));
Mr4:MUX2_1 PORT MAP(S,X(11),SHLR(1),P(11));
Mr5:MUX2_1 PORT MAP(S,X(10),SHLR(1),P(10));
Mr6:MUX2_1 PORT MAP(S,X(9),SHLR(1),P(9));
Mr7:MUX2_1 PORT MAP(S,X(8),SHLR(1),P(8));
Mr8:MUX2_1 PORT MAP(S,X(7),SHLR(1),P(7));
Mr9:MUX2_1 PORT MAP(S,X(6),SHLR(1),P(6));
Mr10:MUX2_1 PORT MAP(S,X(5),SHLR(1),P(5));

Mr11:MUX2_1 PORT MAP(S,X(4),SHLR(1),P(4));


Mr12:MUX2_1 PORT MAP(S,X(3),SHLR(1),P(3));
Mr13:MUX2_1 PORT MAP(S,X(2),SHLR(1),P(2));
Mr14:MUX2_1 PORT MAP(S,X(1),SHLR(1),P(1));
Mr15:MUX2_1 PORT MAP(S,X(0),SHLR(1),P(0));

--STAGE 1

Ml0:MUX2_1 PORT MAP(X(31),P(15),COUNT(4),A(31));


Ml1:MUX2_1 PORT MAP(X(30),P(14),COUNT(4),A(30));
Ml2:MUX2_1 PORT MAP(X(29),P(13),COUNT(4),A(29));
Ml3:MUX2_1 PORT MAP(X(28),P(12),COUNT(4),A(28));
Ml4:MUX2_1 PORT MAP(X(27),P(11),COUNT(4),A(27));
Ml5:MUX2_1 PORT MAP(X(26),P(10),COUNT(4),A(26));
Ml6:MUX2_1 PORT MAP(X(25),P(9),COUNT(4),A(25));
Ml7:MUX2_1 PORT MAP(X(24),P(8),COUNT(4),A(24));
Ml8:MUX2_1 PORT MAP(X(23),P(7),COUNT(4),A(23));
Ml9:MUX2_1 PORT MAP(X(22),P(6),COUNT(4),A(22));
Ml10:MUX2_1 PORT MAP(X(21),P(5),COUNT(4),A(21));
Ml11:MUX2_1 PORT MAP(X(20),P(4),COUNT(4),A(20));
Ml12:MUX2_1 PORT MAP(X(19),P(3),COUNT(4),A(19));
Ml13:MUX2_1 PORT MAP(X(18),P(2),COUNT(4),A(18));

Ml14:MUX2_1 PORT MAP(X(17),P(1),COUNT(4),A(17));


Ml15:MUX2_1 PORT MAP(X(16),P(0),COUNT(4),A(16));
Ml16:MUX2_1 PORT MAP(X(15),P(31),COUNT(4),A(15));
Ml17:MUX2_1 PORT MAP(X(14),P(30),COUNT(4),A(14));
Ml18:MUX2_1 PORT MAP(X(13),P(29),COUNT(4),A(13));
Ml19:MUX2_1 PORT MAP(X(12),P(28),COUNT(4),A(12));
Ml20:MUX2_1 PORT MAP(X(11),P(27),COUNT(4),A(11));
Ml21:MUX2_1 PORT MAP(X(10),P(26),COUNT(4),A(10));
Ml22:MUX2_1 PORT MAP(X(9),P(25),COUNT(4),A(9));
Ml23:MUX2_1 PORT MAP(X(8),P(24),COUNT(4),A(8));
Ml24:MUX2_1 PORT MAP(X(7),P(23),COUNT(4),A(7));
Ml25:MUX2_1 PORT MAP(X(6),P(22),COUNT(4),A(6));
Ml26:MUX2_1 PORT MAP(X(5),P(21),COUNT(4),A(5));
Ml27:MUX2_1 PORT MAP(X(4),P(20),COUNT(4),A(4));
Ml28:MUX2_1 PORT MAP(X(3),P(19),COUNT(4),A(3));
Ml29:MUX2_1 PORT MAP(X(2),P(18),COUNT(4),A(2));
Ml30:MUX2_1 PORT MAP(X(1),P(17),COUNT(4),A(1));
Ml31:MUX2_1 PORT MAP(X(0),P(16),COUNT(4),A(0));

-- TO DECIDE WHETHER TO SHIFT/ROTATE BY 8 BITS

Mr00:MUX2_1 PORT MAP(S,A(7),SHLR(1),B(7));


Mr01:MUX2_1 PORT MAP(S,A(6),SHLR(1),B(6));
Mr02:MUX2_1 PORT MAP(S,A(5),SHLR(1),B(5));
Mr03:MUX2_1 PORT MAP(S,A(4),SHLR(1),B(4));
Mr04:MUX2_1 PORT MAP(S,A(3),SHLR(1),B(3));
Mr05:MUX2_1 PORT MAP(S,A(2),SHLR(1),B(2));
Mr06:MUX2_1 PORT MAP(S,A(1),SHLR(1),B(1));
Mr07:MUX2_1 PORT MAP(S,A(0),SHLR(1),B(0));

--STAGE 2

M20:MUX2_1 PORT MAP(A(31),B(7),SHFTAMT(3),C(31));


M21:MUX2_1 PORT MAP(A(30),B(6),SHFTAMT(3),C(30));
M22:MUX2_1 PORT MAP(A(29),B(5),SHFTAMT(3),C(29));
M23:MUX2_1 PORT MAP(A(28),B(4),SHFTAMT(3),C(28));
M24:MUX2_1 PORT MAP(A(27),B(3),SHFTAMT(3),C(27));
M25:MUX2_1 PORT MAP(A(26),B(2),SHFTAMT(3),C(26));
M26:MUX2_1 PORT MAP(A(25),B(1),SHFTAMT(3),C(25));
M27:MUX2_1 PORT MAP(A(24),B(0),SHFTAMT(3),C(24));
M28:MUX2_1 PORT MAP(A(23),A(31),SHFTAMT(3),C(23));
M29:MUX2_1 PORT MAP(A(22),A(30),SHFTAMT(3),C(22));
M210:MUX2_1 PORT MAP(A(21),A(29),SHFTAMT(3),C(21));

M211:MUX2_1 PORT MAP(A(20),A(28),SHFTAMT(3),C(20));


M212:MUX2_1 PORT MAP(A(19),A(27),SHFTAMT(3),C(19));
M213:MUX2_1 PORT MAP(A(18),A(26),SHFTAMT(3),C(18));
M214:MUX2_1 PORT MAP(A(17),A(25),SHFTAMT(3),C(17));
M215:MUX2_1 PORT MAP(A(16),A(24),SHFTAMT(3),C(16));
M216:MUX2_1 PORT MAP(A(15),A(23),SHFTAMT(3),C(15));
M217:MUX2_1 PORT MAP(A(14),A(22),SHFTAMT(3),C(14));
M218:MUX2_1 PORT MAP(A(13),A(21),SHFTAMT(3),C(13));
M219:MUX2_1 PORT MAP(A(12),A(20),SHFTAMT(3),C(12));
M220:MUX2_1 PORT MAP(A(11),A(19),SHFTAMT(3),C(11));
M221:MUX2_1 PORT MAP(A(10),A(18),SHFTAMT(3),C(10));
M222:MUX2_1 PORT MAP(A(9),A(17),SHFTAMT(3),C(9));
M223:MUX2_1 PORT MAP(A(8),A(16),SHFTAMT(3),C(8));
M224:MUX2_1 PORT MAP(A(7),A(15),SHFTAMT(3),C(7));
M225:MUX2_1 PORT MAP(A(6),A(14),SHFTAMT(3),C(6));
M226:MUX2_1 PORT MAP(A(5),A(13),SHFTAMT(3),C(5));
M227:MUX2_1 PORT MAP(A(4),A(12),SHFTAMT(3),C(4));
M228:MUX2_1 PORT MAP(A(3),A(11),SHFTAMT(3),C(3));
M229:MUX2_1 PORT MAP(A(2),A(10),SHFTAMT(3),C(2));
M230:MUX2_1 PORT MAP(A(1),A(9),SHFTAMT(3),C(1));
M231:MUX2_1 PORT MAP(A(0),A(8),SHFTAMT(3),C(0));

-- TO DECIDE WHETHER TO SHIFT/ROTATE BY 4 BITS

Mr20:MUX2_1 PORT MAP(S,C(3),SHLR(1),D(3));


Mr21:MUX2_1 PORT MAP(S,C(2),SHLR(1),D(2));
Mr22:MUX2_1 PORT MAP(S,C(1),SHLR(1),D(1));
Mr23:MUX2_1 PORT MAP(S,C(0),SHLR(1),D(0));

--STAGE 3

M30:MUX2_1 PORT MAP(C(31),D(3),COUNT(2),E(31));


M31:MUX2_1 PORT MAP(C(30),D(2),COUNT(2),E(30));
M32:MUX2_1 PORT MAP(C(29),D(1),COUNT(2),E(29));
M33:MUX2_1 PORT MAP(C(28),D(0),COUNT(2),E(28));
M34:MUX2_1 PORT MAP(C(27),C(31),COUNT(2),E(27));
M35:MUX2_1 PORT MAP(C(26),C(30),COUNT(2),E(26));
M36:MUX2_1 PORT MAP(C(25),C(29),COUNT(2),E(25));
M37:MUX2_1 PORT MAP(C(24),C(28),COUNT(2),E(24));
M38:MUX2_1 PORT MAP(C(23),C(27),COUNT(2),E(23));
M39:MUX2_1 PORT MAP(C(22),C(26),COUNT(2),E(22));
M310:MUX2_1 PORT MAP(C(21),C(25),COUNT(2),E(21));
M311:MUX2_1 PORT MAP(C(20),C(24),COUNT(2),E(20));
M312:MUX2_1 PORT MAP(C(19),C(23),COUNT(2),E(19));

M313:MUX2_1 PORT MAP(C(18),C(22),COUNT(2),E(18));


M314:MUX2_1 PORT MAP(C(17),C(21),COUNT(2),E(17));
M315:MUX2_1 PORT MAP(C(16),C(20),COUNT(2),E(16));
M316:MUX2_1 PORT MAP(C(15),C(19),COUNT(2),E(15));
M317:MUX2_1 PORT MAP(C(14),C(18),COUNT(2),E(14));
M318:MUX2_1 PORT MAP(C(13),C(17),COUNT(2),E(13));
M319:MUX2_1 PORT MAP(C(12),C(16),COUNT(2),E(12));
M320:MUX2_1 PORT MAP(C(11),C(15),COUNT(2),E(11));
MB21:MUX2_1 PORT MAP(C(10),C(14),COUNT(2),E(10));
M322:MUX2_1 PORT MAP(C(9),C(13),COUNT(2),E(9));
M323:MUX2_1 PORT MAP(C(8),C(12),COUNT(2),E(8));
M324:MUX2_1 PORT MAP(C(7),C(11),COUNT(2),E(7));
M325:MUX2_1 PORT MAP(C(6),C(10),COUNT(2),E(6));
M326:MUX2_1 PORT MAP(C(5),C(9),COUNT(2),E(5));
M327:MUX2_1 PORT MAP(C(4),C(8),COUNT(2),E(4));
M328:MUX2_1 PORT MAP(C(3),C(7),COUNT(2),E(3));
M329:MUX2_1 PORT MAP(C(2),C(6),COUNT(2),E(2));
M330:MUX2_1 PORT MAP(C(1),C(5),COUNT(2),E(1));
M331:MUX2_1 PORT MAP(C(0),C(4),COUNT(2),E(0));

-- TO DECIDE WHETHER TO SHIFT/ROTATE BY 2 BITS

Mr30:MUX2_1 PORT MAP(S,E(1),SHLR(1),F(1));


Mr31:MUX2_1 PORT MAP(S,E(0),SHLR(1),F(0));

--LAYER 4

M40:MUX2_1 PORT MAP(E(31),F(1),COUNT(1),G(31));


M41:MUX2_1 PORT MAP(E(30),F(0),COUNT(1),G(30));
M42:MUX2_1 PORT MAP(E(29),E(31),COUNT(1),G(29));
M43:MUX2_1 PORT MAP(E(28),E(30),COUNT(1),G(28));
M44:MUX2_1 PORT MAP(E(27),E(29),COUNT(1),G(27));
M45:MUX2_1 PORT MAP(E(26),E(28),COUNT(1),G(26));
M46:MUX2_1 PORT MAP(E(25),E(27),COUNT(1),G(25));
M47:MUX2_1 PORT MAP(E(24),E(26),COUNT(1),G(24));
M48:MUX2_1 PORT MAP(E(23),E(25),COUNT(1),G(23));
M49:MUX2_1 PORT MAP(E(22),E(24),COUNT(1),G(22));
M410:MUX2_1 PORT MAP(E(21),E(23),COUNT(1),G(21));
M411:MUX2_1 PORT MAP(E(20),E(22),COUNT(1),G(20));
M412:MUX2_1 PORT MAP(E(19),E(21),COUNT(1),G(19));
M413:MUX2_1 PORT MAP(E(18),E(20),COUNT(1),G(18));
M414:MUX2_1 PORT MAP(E(17),E(19),COUNT(1),G(17));
M415:MUX2_1 PORT MAP(E(16),E(18),COUNT(1),G(16));
M416:MUX2_1 PORT MAP(E(15),E(17),COUNT(1),G(15));
M417:MUX2_1 PORT MAP(E(14),E(16),COUNT(1),G(14));

M418:MUX2_1 PORT MAP(E(13),E(15),COUNT(1),G(13));


M419:MUX2_1 PORT MAP(E(12),E(14),COUNT(1),G(12));
M420:MUX2_1 PORT MAP(E(11),E(13),COUNT(1),G(11));
M421:MUX2_1 PORT MAP(E(10),E(12),COUNT(1),G(10));
M422:MUX2_1 PORT MAP(E(9),E(11),COUNT(1),G(9));
M423:MUX2_1 PORT MAP(E(8),E(10),COUNT(1),G(8));
M424:MUX2_1 PORT MAP(E(7),E(9),COUNT(1),G(7));
M425:MUX2_1 PORT MAP(E(6),E(8),COUNT(1),G(6));
M426:MUX2_1 PORT MAP(E(5),E(7),COUNT(1),G(5));
M427:MUX2_1 PORT MAP(E(4),E(6),COUNT(1),G(4));
M428:MUX2_1 PORT MAP(E(3),E(5),COUNT(1),G(3));
M429:MUX2_1 PORT MAP(E(2),E(4),COUNT(1),G(2));
M430:MUX2_1 PORT MAP(E(1),E(3),COUNT(1),G(1));
M431:MUX2_1 PORT MAP(E(0),E(2),COUNT(1),G(0));

-- TO DECIDE WHETHER TO SHIFT/ROTATE BY 1 BITS

ME30:MUX2_1 PORT MAP(S,G(0),SHLR(1),H);

--STAGE 5

M50:MUX2_1 PORT MAP(G(31),H,COUNT(0),Y(31));

M51:MUX2_1 PORT MAP(G(30),G(31),COUNT(0),Y(30));


M52:MUX2_1 PORT MAP(G(29),G(30),COUNT(0),Y(29));
M53:MUX2_1 PORT MAP(G(28),G(29),COUNT(0),Y(28));
M54:MUX2_1 PORT MAP(G(27),G(28),COUNT(0),Y(27));
M55:MUX2_1 PORT MAP(G(26),G(27),COUNT(0),Y(26));
M56:MUX2_1 PORT MAP(G(25),G(26),COUNT(0),Y(25));
M57:MUX2_1 PORT MAP(G(24),G(25),COUNT(0),Y(24));
M58:MUX2_1 PORT MAP(G(23),G(24),COUNT(0),Y(23));
M59:MUX2_1 PORT MAP(G(22),G(23),COUNT(0),Y(22));
M510:MUX2_1 PORT MAP(G(21),G(22),COUNT(0),Y(21));
M511:MUX2_1 PORT MAP(G(20),G(21),COUNT(0),Y(20));
M512:MUX2_1 PORT MAP(G(19),G(20),COUNT(0),Y(19));
M513:MUX2_1 PORT MAP(G(18),G(19),COUNT(0),Y(18));
M514:MUX2_1 PORT MAP(G(17),G(18),COUNT(0),Y(17));
M515:MUX2_1 PORT MAP(G(16),G(17),COUNT(0),Y(16));
M516:MUX2_1 PORT MAP(G(15),G(16),COUNT(0),Y(15));
M517:MUX2_1 PORT MAP(G(14),G(15),COUNT(0),Y(14));
M518:MUX2_1 PORT MAP(G(13),G(14),COUNT(0),Y(13));
M519:MUX2_1 PORT MAP(G(12),G(13),COUNT(0),Y(12));
M520:MUX2_1 PORT MAP(G(11),G(12),COUNT(0),Y(11));
M521:MUX2_1 PORT MAP(G(10),G(11),COUNT(0),Y(10));
M522:MUX2_1 PORT MAP(G(9),G(10),COUNT(0),Y(9));
M523:MUX2_1 PORT MAP(G(8),G(9),COUNT(0),Y(8));

M524:MUX2_1 PORT MAP(G(7),G(8),COUNT(0),Y(7));


M525:MUX2_1 PORT MAP(G(6),G(7),COUNT(0),Y(6));
M526:MUX2_1 PORT MAP(G(5),G(6),COUNT(0),Y(5));
M527:MUX2_1 PORT MAP(G(4),G(5),COUNT(0),Y(4));
M528:MUX2_1 PORT MAP(G(3),G(4),COUNT(0),Y(3));
M529:MUX2_1 PORT MAP(G(2),G(3),COUNT(0),Y(2));
M530:MUX2_1 PORT MAP(G(1),G(2),COUNT(0),Y(1));
M531:MUX2_1 PORT MAP(G(0),G(1),COUNT(0),Y(0));

--FOR LEFT SHIFT ARITHMEATIC

--SHLR(0)->0 LOGICAL SHLR(1)->ARITHMETIC

MR0:MUX2_1 PORT MAP(Y(0),X(0),SHLR(0),L);

--BITREVERSAL OPERATION ON OUTPUT BITS

MS0:MUX2_1 PORT MAP(Y(31),Y(0),SHLR(2),Z(31));


MS1:MUX2_1 PORT MAP(Y(30),Y(1),SHLR(2),Z(30));
MS2:MUX2_1 PORT MAP(Y(29),Y(2),SHLR(2),Z(29));
MS3:MUX2_1 PORT MAP(Y(28),Y(3),SHLR(2),Z(28));
MS4:MUX2_1 PORT MAP(Y(27),Y(4),SHLR(2),Z(27));
MS5:MUX2_1 PORT MAP(Y(26),Y(5),SHLR(2),Z(26));

MS6:MUX2_1 PORT MAP(Y(25),Y(6),SHLR(2),Z(25));


MS7:MUX2_1 PORT MAP(Y(24),Y(7),SHLR(2),Z(24));
MS8:MUX2_1 PORT MAP(Y(23),Y(8),SHLR(2),Z(23));
MS9:MUX2_1 PORT MAP(Y(22),Y(9),SHLR(2),Z(22));
MS10:MUX2_1 PORT MAP(Y(21),Y(10),SHLR(2),Z(21));
MS11:MUX2_1 PORT MAP(Y(20),Y(11),SHLR(2),Z(20));
MS12:MUX2_1 PORT MAP(Y(19),Y(12),SHLR(2),Z(19));
MS13:MUX2_1 PORT MAP(Y(18),Y(13),SHLR(2),Z(18));
MS14:MUX2_1 PORT MAP(Y(17),Y(14),SHLR(2),Z(17));
MS15:MUX2_1 PORT MAP(Y(16),Y(15),SHLR(2),Z(16));
MS16:MUX2_1 PORT MAP(Y(15),Y(16),SHLR(2),Z(15));
MS17:MUX2_1 PORT MAP(Y(14),Y(17),SHLR(2),Z(14));
MS18:MUX2_1 PORT MAP(Y(13),Y(18),SHLR(2),Z(13));
MS19:MUX2_1 PORT MAP(Y(12),Y(19),SHLR(2),Z(12));
MS20:MUX2_1 PORT MAP(Y(11),Y(20),SHLR(2),Z(11));
MS21:MUX2_1 PORT MAP(Y(10),Y(21),SHLR(2),Z(10));
MS22:MUX2_1 PORT MAP(Y(9),Y(22),SHLR(2),Z(9));
MS23:MUX2_1 PORT MAP(Y(8),Y(23),SHLR(2),Z(8));
MS24:MUX2_1 PORT MAP(Y(7),Y(24),SHLR(2),Z(7));
MS25:MUX2_1 PORT MAP(Y(6),Y(25),SHLR(2),Z(6));
MS26:MUX2_1 PORT MAP(Y(5),Y(26),SHLR(2),Z(5));
MS27:MUX2_1 PORT MAP(Y(4),Y(27),SHLR(2),Z(4));
MS28:MUX2_1 PORT MAP(Y(3),Y(28),SHLR(2),Z(3));

MS29:MUX2_1 PORT MAP(Y(2),Y(29),SHLR(2),Z(2));


MS30:MUX2_1 PORT MAP(Y(1),Y(30),SHLR(2),Z(1));
MS31:MUX2_1 PORT MAP(L,Y(31),SHLR(0),Z(0));

END ARCH;

S-ar putea să vă placă și