[LSD] CombShiftUnit_Demo added (pratica06 - part3)
This commit is contained in:
parent
8a731a9fc9
commit
243c46324f
|
@ -0,0 +1,50 @@
|
||||||
|
library IEEE;
|
||||||
|
use IEEE.STD_LOGIC_1164.all;
|
||||||
|
use IEEE.NUMERIC_STD.all;
|
||||||
|
|
||||||
|
entity CombShiftUnit is
|
||||||
|
port
|
||||||
|
(
|
||||||
|
clk : in std_logic;
|
||||||
|
dataIn : in std_logic_vector(7 downto 0);
|
||||||
|
loadEn, rotate, dirLeft, shArith : in std_logic;
|
||||||
|
shAmount : in std_logic_vector(2 downto 0);
|
||||||
|
dataOut : out std_logic_vector(7 downto 0)
|
||||||
|
);
|
||||||
|
end CombShiftUnit;
|
||||||
|
|
||||||
|
architecture Behavioral of CombShiftUnit is
|
||||||
|
signal s_shiftReg : std_logic_vector(7 downto 0);
|
||||||
|
begin
|
||||||
|
process (clk)
|
||||||
|
begin
|
||||||
|
if (falling_edge(clk)) then
|
||||||
|
if (loaden = '1') then
|
||||||
|
s_shiftReg <= datain;
|
||||||
|
|
||||||
|
elsif (rotate = '1') then
|
||||||
|
if (dirleft = '1') then
|
||||||
|
s_shiftReg <= std_logic_vector( rotate_left ( unsigned(s_shiftReg), to_integer(unsigned(shAmount)) ) );
|
||||||
|
else
|
||||||
|
s_shiftReg <= std_logic_vector( rotate_right( unsigned(s_shiftReg), to_integer(unsigned(shAmount)) ) );
|
||||||
|
end if;
|
||||||
|
|
||||||
|
elsif (sharith = '1') then
|
||||||
|
if (dirleft = '1') then
|
||||||
|
s_shiftReg <= std_logic_vector( shift_left ( signed(s_shiftReg), to_integer(unsigned(shAmount)) ) );
|
||||||
|
else
|
||||||
|
s_shiftReg <= std_logic_vector( shift_right( signed(s_shiftReg), to_integer(unsigned(shAmount)) ) );
|
||||||
|
end if;
|
||||||
|
|
||||||
|
else
|
||||||
|
if (dirleft = '1') then
|
||||||
|
s_shiftReg <= std_logic_vector( shift_left ( unsigned(s_shiftReg), to_integer(unsigned(shAmount)) ) );
|
||||||
|
else
|
||||||
|
s_shiftReg <= std_logic_vector( shift_right( unsigned(s_shiftReg), to_integer(unsigned(shAmount)) ) );
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
dataOut <= s_shiftReg;
|
||||||
|
end Behavioral;
|
|
@ -0,0 +1,34 @@
|
||||||
|
library IEEE;
|
||||||
|
use IEEE.STD_LOGIC_1164.all;
|
||||||
|
use IEEE.NUMERIC_STD.all;
|
||||||
|
|
||||||
|
entity CombShiftUnit_Demo is
|
||||||
|
port
|
||||||
|
(
|
||||||
|
CLOCK_50 : in std_logic;
|
||||||
|
SW : in std_logic_vector(17 downto 0);
|
||||||
|
KEY : in std_logic_vector(2 downto 0);
|
||||||
|
LEDR : out std_logic_vector(7 downto 0)
|
||||||
|
);
|
||||||
|
end CombShiftUnit_Demo;
|
||||||
|
|
||||||
|
architecture Shell of CombShiftUnit_Demo is
|
||||||
|
signal clk : std_logic;
|
||||||
|
begin
|
||||||
|
freq : entity work.FreqDivider(Behavioral)
|
||||||
|
generic map (divFactor => 12_500_000)
|
||||||
|
port map (clkIn => CLOCK_50, clkOut => clk);
|
||||||
|
|
||||||
|
core : entity work.CombShiftUnit(Behavioral)
|
||||||
|
port map
|
||||||
|
(
|
||||||
|
clk => clk,
|
||||||
|
dataIn => SW(7 downto 0),
|
||||||
|
loadEn => SW(8),
|
||||||
|
rotate => KEY(0),
|
||||||
|
dirLeft => KEY(1),
|
||||||
|
shArith => KEY(2),
|
||||||
|
shAmount => SW(17 downto 15),
|
||||||
|
dataOut => LEDR
|
||||||
|
);
|
||||||
|
end Shell;
|
|
@ -0,0 +1,33 @@
|
||||||
|
library IEEE;
|
||||||
|
use IEEE.STD_LOGIC_1164.all;
|
||||||
|
use IEEE.NUMERIC_STD.all;
|
||||||
|
|
||||||
|
entity FreqDivider is
|
||||||
|
generic(divFactor : positive := 10);
|
||||||
|
port
|
||||||
|
(
|
||||||
|
clkIn : in std_logic;
|
||||||
|
clkOut : out std_logic
|
||||||
|
);
|
||||||
|
end FreqDivider;
|
||||||
|
|
||||||
|
architecture Behavioral of FreqDivider is
|
||||||
|
subtype TCounter is natural range 0 to divFactor - 1;
|
||||||
|
signal s_divCounter : TCounter := 0;
|
||||||
|
begin
|
||||||
|
assert(divFactor >= 2);
|
||||||
|
process(clkIn)
|
||||||
|
begin
|
||||||
|
if (rising_edge(clkIn)) then
|
||||||
|
if (s_divCounter >= (divFactor - 1)) then
|
||||||
|
clkOut <= '0';
|
||||||
|
s_divCounter <= 0;
|
||||||
|
else
|
||||||
|
if (s_divCounter = (divFactor / 2 - 1)) then
|
||||||
|
clkOut <= '1';
|
||||||
|
end if;
|
||||||
|
s_divCounter <= s_divCounter + 1;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
end Behavioral;
|
Binary file not shown.
Loading…
Reference in New Issue