diff --git a/libraries/base/common/src/vhdl/common_variable_delay.vhd b/libraries/base/common/src/vhdl/common_variable_delay.vhd index 5db4449ca1c62f49f8e038f757c131ffdf547ba8..e9399733c6e6a0f5c9123f62d76d99f4f06f0ab6 100644 --- a/libraries/base/common/src/vhdl/common_variable_delay.vhd +++ b/libraries/base/common/src/vhdl/common_variable_delay.vhd @@ -24,7 +24,7 @@ -- Description: -- . delay input pulse by nof_cycles_delay -- . output pulse is derived from low-high transition of input pulse. --- . during delay other input pulses are ignored +-- . the actual pulse delay will be delay + 1, due to implementation latency of 1 clk cycle -- -------------------------------------------------------------------------- LIBRARY IEEE, technology_lib; @@ -54,31 +54,27 @@ ARCHITECTURE rtl OF common_variable_delay IS SIGNAL nxt_out_val : STD_LOGIC; SIGNAL delay_cnt : NATURAL; SIGNAL nxt_delay_cnt : NATURAL; - SIGNAL prev_in_val : STD_LOGIC := '0'; + SIGNAL prev_in_val : STD_LOGIC; BEGIN out_val <= i_out_val; - p_delay: PROCESS(enable, in_val, prev_in_val, nxt_delay_cnt, delay_cnt, delay) + p_delay: PROCESS(enable, in_val, prev_in_val, delay, delay_cnt) BEGIN nxt_out_val <= '0'; - nxt_delay_cnt <= delay_cnt + 1; + nxt_delay_cnt <= 0; IF enable = '1' THEN - IF in_val = '1' AND prev_in_val = '0' THEN -- detect risingedge of in_val + IF in_val = '1' AND prev_in_val = '0' THEN -- detect rising edge of in_val IF delay = 0 THEN nxt_out_val <= '1'; - nxt_delay_cnt <= g_max_delay; - ELSE - nxt_delay_cnt <= 1; END IF; - END IF; - - IF delay_cnt = delay THEN - nxt_out_val <= '1'; + ELSE + nxt_delay_cnt <= delay_cnt + 1; + IF (delay_cnt+1) = delay THEN + nxt_out_val <= '1'; + END IF; END IF; - ELSE - nxt_delay_cnt <= g_max_delay; END IF; END PROCESS; @@ -95,5 +91,4 @@ BEGIN END IF; END PROCESS; - END rtl;