UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Contributor
Contributor
1,045 Views
Registered: ‎01-04-2017

Photon detector connection to Zedboard

Jump to solution

Hello Everybody! In my project I have to receive data from photon detector(Hamasutu H10682) to PL. So detector output is max +3.5 to min +0.5 V, is there any need of using level shifter between them? If yes,the level shifter I'am going to use MAX14850 through PMODs. Please correct me if there is something wrong...

Thanks in advance.

0 Kudos
1 Solution

Accepted Solutions
Scholar jmcclusk
Scholar
1,282 Views
Registered: ‎02-24-2014

Re: Photon detector connection to Zedboard

Jump to solution

100 MHz is definitely too slow to catch a 10 ns pulse..   

 

BUT.. there is a simple way to capture this into your 100 MHz system clock domain.

 

Bring the pulse input to the clock input of a toggle flip-flop.   Take the toggle output, run it through a 2 or 3 stage synchronizer, and then edge detect it.    This will produce a clean pulse in your system clock domain.    Code to do this is below:

 

entity pulse_detect is
   port(
       pulse_input : in std_logic;
       system_clk  : in std_logic;
       pulse_output : out std_logic;
     );
end entity;

architecture rtl of pulse_detect is
  signal toggle : std_logic := '0';
  signal shift_reg : std_logic_vector(2 downto 0);
  attribute SYNC_REG : string;
  attribute SYNC_REG of shift_reg:signal is "true";
begin

process(pulse_input) is
begin
if rising_edge(pulse_input) then
   toggle <= not toggle;
end if;
end process;

process(system_clk) is
begin
  if rising_edge(system_clk) then
     shift_reg <= shift_reg(1 downto 0) & toggle;
     pulse_output <= shift_reg(2) xor shift_reg(1);
  end if;
end process;

end rtl;
Don't forget to close a thread when possible by accepting a post as a solution.

View solution in original post

0 Kudos
5 Replies
Scholar jmcclusk
Scholar
1,036 Views
Registered: ‎02-24-2014

Re: Photon detector connection to Zedboard

Jump to solution

The level of the pulse output is fine (2.2 V typical), but you should make an effort to terminate the input with a 50 ohm resistance, since this a sharp and fast pulse.   The output pulse width is 10 ns, so you should be sampling this with at least a 200 MHz clock to avoid missing pulses.  

Don't forget to close a thread when possible by accepting a post as a solution.
0 Kudos
Contributor
Contributor
1,019 Views
Registered: ‎01-04-2017

Re: Photon detector connection to Zedboard

Jump to solution

Thank you for your reply . Actually I plan to put pulse counter with 100 Mhz, so you think is it still slow?

0 Kudos
Explorer
Explorer
998 Views
Registered: ‎05-08-2018

Re: Photon detector connection to Zedboard

Jump to solution

m,

 

Per the sampling theorem, the sample clock must be > 2x the event, so 250 MHz would guarantee you catch every pulse.

0 Kudos
Scholar jmcclusk
Scholar
1,283 Views
Registered: ‎02-24-2014

Re: Photon detector connection to Zedboard

Jump to solution

100 MHz is definitely too slow to catch a 10 ns pulse..   

 

BUT.. there is a simple way to capture this into your 100 MHz system clock domain.

 

Bring the pulse input to the clock input of a toggle flip-flop.   Take the toggle output, run it through a 2 or 3 stage synchronizer, and then edge detect it.    This will produce a clean pulse in your system clock domain.    Code to do this is below:

 

entity pulse_detect is
   port(
       pulse_input : in std_logic;
       system_clk  : in std_logic;
       pulse_output : out std_logic;
     );
end entity;

architecture rtl of pulse_detect is
  signal toggle : std_logic := '0';
  signal shift_reg : std_logic_vector(2 downto 0);
  attribute SYNC_REG : string;
  attribute SYNC_REG of shift_reg:signal is "true";
begin

process(pulse_input) is
begin
if rising_edge(pulse_input) then
   toggle <= not toggle;
end if;
end process;

process(system_clk) is
begin
  if rising_edge(system_clk) then
     shift_reg <= shift_reg(1 downto 0) & toggle;
     pulse_output <= shift_reg(2) xor shift_reg(1);
  end if;
end process;

end rtl;
Don't forget to close a thread when possible by accepting a post as a solution.

View solution in original post

0 Kudos
Contributor
Contributor
950 Views
Registered: ‎01-04-2017

Re: Photon detector connection to Zedboard

Jump to solution

Thank you!!!

0 Kudos