Capture digital input via IDDR
This commit is contained in:
parent
33db3d5231
commit
bdefc835b6
|
@ -225,10 +225,9 @@ set_input_delay -clock adc_clk -min 3.0 [get_ports {adc_dat_i[*][*]}]
|
||||||
set_input_delay -clock adc_clk -max 5.6 [get_ports {adc_dat_i[*][*]}]
|
set_input_delay -clock adc_clk -max 5.6 [get_ports {adc_dat_i[*][*]}]
|
||||||
set_multicycle_path 2 -from [get_ports {adc_dat_i[*][*]}]
|
set_multicycle_path 2 -from [get_ports {adc_dat_i[*][*]}]
|
||||||
|
|
||||||
# Digital inputs are asynchronous.
|
# Digital inputs are asynchronous and captured in IOB flipflops.
|
||||||
# Set fairly relaxed constraints to limit delay and skew.
|
# Declare false path to avoid warning for unconstrained path.
|
||||||
set_input_delay -clock adc_clk -min 0.0 [get_ports {exp_p_io[*] exp_n_io[*]}]
|
set_false_path -from [get_ports {exp_p_io[*] exp_n_io[*]}]
|
||||||
set_input_delay -clock adc_clk -max 3.0 [get_ports {exp_p_io[*] exp_n_io[*]}]
|
|
||||||
|
|
||||||
# Delay to LEDs does not matter; just set a long max delay.
|
# Delay to LEDs does not matter; just set a long max delay.
|
||||||
set_max_delay -to [get_ports {led_o[*]}] 20.0
|
set_max_delay -to [get_ports {led_o[*]}] 20.0
|
||||||
|
|
|
@ -215,7 +215,9 @@ set_input_delay -clock adc_clk_23 -max 0.7 [get_ports {adc_dat_i[2][*] adc_dat_
|
||||||
set_min_delay -from [get_clocks adc_clk_23] -to [get_clocks adc_clk_01] 1.6
|
set_min_delay -from [get_clocks adc_clk_23] -to [get_clocks adc_clk_01] 1.6
|
||||||
set_max_delay -from [get_clocks adc_clk_23] -to [get_clocks adc_clk_01] 6.4
|
set_max_delay -from [get_clocks adc_clk_23] -to [get_clocks adc_clk_01] 6.4
|
||||||
|
|
||||||
# TODO -- specify input delay for digital inputs
|
# Digital inputs are asynchronous and captured in IOB flipflops.
|
||||||
|
# Declare false path to avoid warning for unconstrained path.
|
||||||
|
set_false_path -from [get_ports {exp_p_io[*] exp_n_io[*]}]
|
||||||
|
|
||||||
# Delay to LEDs does not matter; just set a long max delay.
|
# Delay to LEDs does not matter; just set a long max delay.
|
||||||
set_max_delay -to [get_ports {led_o[*]}] 20.0
|
set_max_delay -to [get_ports {led_o[*]}] 20.0
|
||||||
|
|
|
@ -96,7 +96,7 @@ package puzzlefw_pkg is
|
||||||
-- Firmware info word.
|
-- Firmware info word.
|
||||||
constant fw_api_version: natural := 1;
|
constant fw_api_version: natural := 1;
|
||||||
constant fw_version_major: natural := 0;
|
constant fw_version_major: natural := 0;
|
||||||
constant fw_version_minor: natural := 12;
|
constant fw_version_minor: natural := 13;
|
||||||
constant fw_info_word: std_logic_vector(31 downto 0) :=
|
constant fw_info_word: std_logic_vector(31 downto 0) :=
|
||||||
x"4a"
|
x"4a"
|
||||||
& std_logic_vector(to_unsigned(fw_api_version, 8))
|
& std_logic_vector(to_unsigned(fw_api_version, 8))
|
||||||
|
|
|
@ -590,12 +590,20 @@ begin
|
||||||
|
|
||||||
inst_dig_capture_gen: for i in 0 to 3 generate
|
inst_dig_capture_gen: for i in 0 to 3 generate
|
||||||
|
|
||||||
-- Use a 2-flipflop synchronizer to avoid metastability.
|
-- Use IDDR to capture digital input.
|
||||||
inst_dig_sync: entity work.syncdff
|
-- The IDDR is used in pipeline mode; this inserts a secondary flip-flop
|
||||||
|
-- in the data path which helps to suppress metastability.
|
||||||
|
inst_dig_iddr: IDDR
|
||||||
|
generic map (
|
||||||
|
DDR_CLK_EDGE => "SAME_EDGE_PIPELINED" )
|
||||||
port map (
|
port map (
|
||||||
clk => clk_adc,
|
Q1 => s_dig_sync(i),
|
||||||
di => s_dig_in(i),
|
Q2 => open,
|
||||||
do => s_dig_sync(i) );
|
C => clk_adc,
|
||||||
|
CE => '1',
|
||||||
|
D => s_dig_in(i),
|
||||||
|
R => '0',
|
||||||
|
S => '0' );
|
||||||
|
|
||||||
-- Deglitch filter.
|
-- Deglitch filter.
|
||||||
inst_dig_deglitch: entity work.deglitch
|
inst_dig_deglitch: entity work.deglitch
|
||||||
|
|
|
@ -628,12 +628,20 @@ begin
|
||||||
|
|
||||||
inst_dig_capture_gen: for i in 0 to 3 generate
|
inst_dig_capture_gen: for i in 0 to 3 generate
|
||||||
|
|
||||||
-- Use a 2-flipflop synchronizer to avoid metastability.
|
-- Use IDDR to capture digital input.
|
||||||
inst_dig_sync: entity work.syncdff
|
-- The IDDR is used in pipeline mode; this inserts a secondary flip-flop
|
||||||
|
-- in the data path which helps to suppress metastability.
|
||||||
|
inst_dig_iddr: IDDR
|
||||||
|
generic map (
|
||||||
|
DDR_CLK_EDGE => "SAME_EDGE_PIPELINED" )
|
||||||
port map (
|
port map (
|
||||||
clk => clk_adc,
|
Q1 => s_dig_sync(i),
|
||||||
di => s_dig_in(i),
|
Q2 => open,
|
||||||
do => s_dig_sync(i) );
|
C => clk_adc,
|
||||||
|
CE => '1',
|
||||||
|
D => s_dig_in(i),
|
||||||
|
R => '0',
|
||||||
|
S => '0' );
|
||||||
|
|
||||||
-- Deglitch filter.
|
-- Deglitch filter.
|
||||||
inst_dig_deglitch: entity work.deglitch
|
inst_dig_deglitch: entity work.deglitch
|
||||||
|
|
|
@ -34,7 +34,6 @@ read_vhdl -vhdl2008 ../rtl/dma_write_channel.vhd
|
||||||
read_vhdl -vhdl2008 ../rtl/registers.vhd
|
read_vhdl -vhdl2008 ../rtl/registers.vhd
|
||||||
read_vhdl -vhdl2008 ../rtl/sample_decimation.vhd
|
read_vhdl -vhdl2008 ../rtl/sample_decimation.vhd
|
||||||
read_vhdl -vhdl2008 ../rtl/shift_engine.vhd
|
read_vhdl -vhdl2008 ../rtl/shift_engine.vhd
|
||||||
read_vhdl -vhdl2008 ../rtl/syncdff.vhd
|
|
||||||
read_vhdl -vhdl2008 ../rtl/simple_fifo.vhd
|
read_vhdl -vhdl2008 ../rtl/simple_fifo.vhd
|
||||||
read_vhdl -vhdl2008 ../rtl/timestamp_gen.vhd
|
read_vhdl -vhdl2008 ../rtl/timestamp_gen.vhd
|
||||||
read_vhdl -vhdl2008 ../rtl/timetagger.vhd
|
read_vhdl -vhdl2008 ../rtl/timetagger.vhd
|
||||||
|
|
Loading…
Reference in New Issue