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 30 31 32 33 34 35 36 37 38 39 40 41 42
|
library ieee;
use ieee.std_logic_1164.all;
entity delay_ul is
generic (
STAGES : natural := 4;
RESET_ACTIVE_LEVEL : std_ulogic := '1'
);
port (
Clock : in std_ulogic;
Reset : in std_ulogic;
Enable : in std_ulogic;
Sig_in : in std_ulogic;
Sig_out : out std_ulogic
);
end entity;
architecture rtl of delay_ul is
begin
gt: if STAGES > 0 generate
reg: process(Clock, Reset, Enable)
variable pl_regs : std_ulogic_vector(1 to STAGES);
begin
if Reset = RESET_ACTIVE_LEVEL then
pl_regs := (others => '0');
elsif rising_edge(Clock) and Enable = '1' then
if STAGES = 1 then
pl_regs(1) := Sig_in;
else
pl_regs := Sig_in & pl_regs(1 to pl_regs'high-1);
end if;
end if;
Sig_out <= pl_regs(pl_regs'high);
end process;
end generate;
gf: if STAGES = 0 generate
Sig_out <= Sig_in;
end generate;
end architecture;
|