shift register
This commit is contained in:
parent
b8644d4fcb
commit
52aa41a887
@ -7,6 +7,7 @@ filesets:
|
|||||||
files:
|
files:
|
||||||
- D_FF.vhd
|
- D_FF.vhd
|
||||||
- D_FF_bank.vhd
|
- D_FF_bank.vhd
|
||||||
|
- shift_register.vhd
|
||||||
file_type: vhdlSource
|
file_type: vhdlSource
|
||||||
|
|
||||||
tb:
|
tb:
|
||||||
|
33
STDLIB_lib/shift_register.vhd
Normal file
33
STDLIB_lib/shift_register.vhd
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
LIBRARY ieee;
|
||||||
|
USE ieee.std_logic_1164.all;
|
||||||
|
USE ieee.std_logic_arith.all;
|
||||||
|
|
||||||
|
ENTITY shift_register IS
|
||||||
|
GENERIC(
|
||||||
|
WIDTH: integer
|
||||||
|
);
|
||||||
|
PORT(
|
||||||
|
H: IN std_logic;
|
||||||
|
H_EN: IN std_logic;
|
||||||
|
nRst : IN std_logic;
|
||||||
|
D: IN std_logic;
|
||||||
|
Q: OUT std_logic_vector
|
||||||
|
);
|
||||||
|
END shift_register;
|
||||||
|
|
||||||
|
ARCHITECTURE arch of shift_register IS
|
||||||
|
SIGNAL data : std_logic_vector(WIDTH-1 downto 0) := (others => '0');
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
Q <= data;
|
||||||
|
|
||||||
|
sr: PROCESS(H, nRst)
|
||||||
|
BEGIN
|
||||||
|
if(nRst = '0') THEN
|
||||||
|
data <= (others => '0');
|
||||||
|
ELSIF(rising_edge(H)) THEN
|
||||||
|
data <= data(WIDTH-2 downto 0) & D;
|
||||||
|
END IF;
|
||||||
|
END PROCESS sr;
|
||||||
|
|
||||||
|
END ARCHITECTURE arch;
|
@ -19,6 +19,10 @@ SIGNAL D_FFb_D : std_logic_vector(7 downto 0);
|
|||||||
SIGNAL D_FFb_Rst : std_logic;
|
SIGNAL D_FFb_Rst : std_logic;
|
||||||
SIGNAL D_FFb_Q : std_logic_vector(7 downto 0);
|
SIGNAL D_FFb_Q : std_logic_vector(7 downto 0);
|
||||||
|
|
||||||
|
SIGNAL SR_D : std_logic;
|
||||||
|
SIGNAL SR_Rst : std_logic;
|
||||||
|
SIGNAL SR_Q : std_logic_vector(7 downto 0);
|
||||||
|
|
||||||
COMPONENT D_FF
|
COMPONENT D_FF
|
||||||
PORT(
|
PORT(
|
||||||
H: IN std_logic;
|
H: IN std_logic;
|
||||||
@ -37,6 +41,19 @@ COMPONENT D_FF_BANK
|
|||||||
);
|
);
|
||||||
END COMPONENT;
|
END COMPONENT;
|
||||||
|
|
||||||
|
COMPONENT shift_register
|
||||||
|
GENERIC(
|
||||||
|
WIDTH: integer
|
||||||
|
);
|
||||||
|
PORT(
|
||||||
|
H: IN std_logic;
|
||||||
|
H_EN: IN std_logic;
|
||||||
|
nRst : IN std_logic;
|
||||||
|
D: IN std_logic;
|
||||||
|
Q: OUT std_logic_vector
|
||||||
|
);
|
||||||
|
END COMPONENT;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
CLK_gen : PROCESS
|
CLK_gen : PROCESS
|
||||||
@ -85,6 +102,24 @@ BEGIN
|
|||||||
assert D_FFb_Q = "00000000" report "D_FF_bank reset error" severity error;
|
assert D_FFb_Q = "00000000" report "D_FF_bank reset error" severity error;
|
||||||
END PROCESS D_FFb_test;
|
END PROCESS D_FFb_test;
|
||||||
|
|
||||||
|
SR_test : PROCESS
|
||||||
|
BEGIN
|
||||||
|
SR_Rst <= '0';
|
||||||
|
SR_D <= '1';
|
||||||
|
|
||||||
|
WAIT UNTIL CLK = '1';
|
||||||
|
SR_Rst <= '1';
|
||||||
|
for i in SR_Q'RANGE loop
|
||||||
|
SR_D <= not SR_D;
|
||||||
|
WAIT UNTIL CLK = '1';
|
||||||
|
end loop;
|
||||||
|
WAIT UNTIL CLK = '1';
|
||||||
|
assert SR_Q = "01010101" report "shift register wrong output" severity error;
|
||||||
|
SR_Rst <= '0';
|
||||||
|
|
||||||
|
WAIT UNTIL CLK = '0';
|
||||||
|
assert SR_Q = "00000000" report "shft register reset error" severity error;
|
||||||
|
END PROCESS SR_test;
|
||||||
|
|
||||||
U0 : D_FF
|
U0 : D_FF
|
||||||
PORT MAP (
|
PORT MAP (
|
||||||
@ -94,11 +129,24 @@ U0 : D_FF
|
|||||||
Q => D_FF_Q
|
Q => D_FF_Q
|
||||||
);
|
);
|
||||||
|
|
||||||
U1 : D_FF_BANK PORT MAP(
|
U1 : D_FF_BANK
|
||||||
H => CLK,
|
PORT MAP(
|
||||||
D => D_FFb_D,
|
H => CLK,
|
||||||
nRst => D_FFb_Rst,
|
D => D_FFb_D,
|
||||||
Q => D_FFb_Q
|
nRst => D_FFb_Rst,
|
||||||
);
|
Q => D_FFb_Q
|
||||||
|
);
|
||||||
|
|
||||||
|
U2 : shift_register
|
||||||
|
GENERIC MAP(
|
||||||
|
WIDTH => SR_Q'LENGTH
|
||||||
|
)
|
||||||
|
PORT MAP(
|
||||||
|
H => CLK,
|
||||||
|
H_EN => '1',
|
||||||
|
nRst => SR_Rst,
|
||||||
|
D => SR_D,
|
||||||
|
Q => SR_Q
|
||||||
|
);
|
||||||
|
|
||||||
END ARCHITECTURE arch;
|
END ARCHITECTURE arch;
|
Loading…
x
Reference in New Issue
Block a user