1/1

|
deserializer + DDR
by dschingis on Jul 28, 2011 |
dschingis
Posts: 3 Joined: Dec 27, 2009 Last seen: Aug 28, 2011 |
||
|
Hello,
I think I have a easy problem (for you not for me :-) ). I have a ADC with 14 bit resolution. The interface is serial: - DDR data - dco - fco My FPGA is a Xilinx Virtex 5 fx30. What is the best way for deserializing the data? |
|||
|
RE: deserializer + DDR
by olof on Jul 29, 2011 |
olof
Posts: 218 Joined: Feb 10, 2010 Last seen: Dec 17, 2018 |
||
|
I'm not sure I understand the interface. Can you give me a link to the data sheet for the ADC, or can you explain a bit more what the three signals do.
|
|||
|
RE: deserializer + DDR
by dschingis on Jul 29, 2011 |
dschingis
Posts: 3 Joined: Dec 27, 2009 Last seen: Aug 28, 2011 |
||
|
Of course
Here is the link to the ADC http://www.analog.com/static/imported-files/data_sheets/AD9252.pdf On the first page in the picture you can see the "DATA RATE MULTIPLIER". CLK+ and CLK- are inputs. FCO+-, DCO+- and D-A...H +- are outputs. On page 8 (PDF reader page 7) is the transfer shown. The transfer from the ADC is: - serial - double data rate - differential DCO is the data clock and fco is the frame clock. What is the best way for parallelizing? I think the first step is a "IBUFDS" :-) |
|||
|
RE: deserializer + DDR
by olof on Jul 29, 2011 |
olof
Posts: 218 Joined: Feb 10, 2010 Last seen: Dec 17, 2018 |
||
|
Yes, the first step is to use an ibufds
To create a single rate signal you can do something like this in VHDL. Guess it's something with always @posedge/negedge in verilog. if rising_edge(dco) then dpos elsif falling_edge(dco) then dneg end if; To do the paralellization, you could then use something like this: process(dco) begin --create a counter that is reset every time you got a rising edge on fco fco_r if fco = '1' and fco_r = '0' then cnt else cnt end if; --Write the two last received bits to a vector. --The bit positions are specified by cnt, and when a frame is received, it is output to paralell_data buf(cnt) buf(cnt+1) if fco = '1' and fco_r = '0'; paralell_data end if; end process; Just a rough sketch. It won't work, but might give you some ideas. |
|||
|
RE: deserializer + DDR
by dschingis on Jul 31, 2011 |
dschingis
Posts: 3 Joined: Dec 27, 2009 Last seen: Aug 28, 2011 |
||
|
Many thanks to you! I will try it tomorrow.
|
|||
1/1

