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